Added the API to get global services

This commit is contained in:
ashutosh.nehete 2025-09-17 11:01:34 +05:30
parent fae6d7bbe9
commit 061f287e8c
3 changed files with 209 additions and 0 deletions

View File

@ -38,6 +38,41 @@ namespace Marco.Pms.Services.Controllers
tenantId = userHelper.GetTenantId(); tenantId = userHelper.GetTenantId();
} }
#region =================================================================== Global Services APIs ===================================================================
[HttpGet("global-service/list")]
public async Task<IActionResult> GetGlobalServices()
{
var loggedInEmployee = await _userHelper.GetCurrentEmployeeAsync();
var response = await _masterService.GetGlobalServicesAsync(loggedInEmployee, tenantId);
return StatusCode(response.StatusCode, response);
}
[HttpPost("global-service/create")]
public async Task<IActionResult> CreateGlobalService([FromBody] ServiceMasterDto serviceMasterDto)
{
var loggedInEmployee = await _userHelper.GetCurrentEmployeeAsync();
var response = await _masterService.CreateServiceAsync(serviceMasterDto, loggedInEmployee, tenantId);
return StatusCode(response.StatusCode, response);
}
[HttpPut("global-service/edit/{id}")]
public async Task<IActionResult> UpdateGlobalService(Guid id, [FromBody] ServiceMasterDto serviceMasterDto)
{
var loggedInEmployee = await _userHelper.GetCurrentEmployeeAsync();
var response = await _masterService.UpdateServiceAsync(id, serviceMasterDto, loggedInEmployee, tenantId);
return StatusCode(response.StatusCode, response);
}
[HttpDelete("global-service/delete/{id}")]
public async Task<IActionResult> DeleteGlobalService(Guid id, [FromQuery] bool active = false)
{
var loggedInEmployee = await _userHelper.GetCurrentEmployeeAsync();
var response = await _masterService.DeleteServiceAsync(id, active, loggedInEmployee, tenantId);
return StatusCode(response.StatusCode, response);
}
#endregion
#region =================================================================== Services APIs =================================================================== #region =================================================================== Services APIs ===================================================================
[HttpGet("service/list")] [HttpGet("service/list")]

View File

@ -51,6 +51,173 @@ namespace Marco.Pms.Services.Service
_cache = cache; _cache = cache;
} }
#region =================================================================== Global Services APIs ===================================================================
public async Task<ApiResponse<object>> GetGlobalServicesAsync(Employee loggedInEmployee, Guid tenantId)
{
_logger.LogInfo("GetServices called");
try
{
// Step 1: Fetch global services
var services = await _context.GlobalServiceMasters.ToListAsync();
_logger.LogInfo("Fetched {Count} global service records for tenantId: {TenantId}", services.Count, tenantId);
return ApiResponse<object>.SuccessResponse(services, $"{services.Count} record(s) of services fetched successfully", 200);
}
catch (Exception ex)
{
_logger.LogError(ex, "Error fetching services");
return ApiResponse<object>.ErrorResponse("An error occurred while fetching services", ex.Message, 500);
}
}
//public async Task<ApiResponse<object>> CreateGlobalServiceAsync(ServiceMasterDto serviceMasterDto, Employee loggedInEmployee, Guid tenantId)
//{
// _logger.LogInfo("CreateService called with Name: {ServiceName}", serviceMasterDto.Name);
// try
// {
// // Step 1: Permission check
// var hasManagePermission = await _permission.HasPermission(PermissionsMaster.ManageMasters, loggedInEmployee.Id);
// if (!hasManagePermission)
// {
// _logger.LogWarning("Access denied for employeeId: {EmployeeId}", loggedInEmployee.Id);
// return ApiResponse<object>.ErrorResponse("You don't have access", "You don't have permission to take this action", 403);
// }
// // Step 2: Check for duplicate name
// bool isExist = await _context.ServiceMasters
// .AnyAsync(s => s.TenantId == tenantId && s.Name == serviceMasterDto.Name);
// if (isExist)
// {
// _logger.LogWarning("Duplicate service name '{ServiceName}' attempted by employeeId: {EmployeeId}", serviceMasterDto.Name, loggedInEmployee.Id);
// return ApiResponse<object>.ErrorResponse(
// $"Service with name '{serviceMasterDto.Name}' already exists",
// $"Service with name '{serviceMasterDto.Name}' already exists", 400);
// }
// // Step 3: Save new service
// ServiceMaster service = _mapper.Map<ServiceMaster>(serviceMasterDto);
// service.TenantId = tenantId;
// service.IsActive = true;
// service.IsSystem = false;
// _context.ServiceMasters.Add(service);
// await _context.SaveChangesAsync();
// var response = _mapper.Map<ServiceMasterVM>(service);
// _logger.LogInfo("New service '{ServiceName}' created successfully by employeeId: {EmployeeId}", service.Name, loggedInEmployee.Id);
// return ApiResponse<object>.SuccessResponse(response, "New service created successfully", 201);
// }
// catch (Exception ex)
// {
// _logger.LogError(ex, "Error creating service");
// return ApiResponse<object>.ErrorResponse("Failed to create service", ex.Message, 500);
// }
//}
//public async Task<ApiResponse<object>> UpdateGlobalServiceAsync(Guid id, ServiceMasterDto serviceMasterDto, Employee loggedInEmployee, Guid tenantId)
//{
// _logger.LogInfo("UpdateService called for Id: {Id}", id);
// try
// {
// // Step 1: Permission check
// var hasPermission = await _permission.HasPermission(PermissionsMaster.ManageMasters, loggedInEmployee.Id);
// if (!hasPermission)
// {
// _logger.LogWarning("Access denied. EmployeeId: {EmployeeId} lacks Manage_Master permission.", loggedInEmployee.Id);
// return ApiResponse<object>.ErrorResponse("Access denied", "You don't have permission to take this action", 403);
// }
// // Step 2: Input validation
// if (serviceMasterDto.Id != id)
// {
// _logger.LogWarning("Invalid input data provided for UpdateService. Id: {Id}", id);
// return ApiResponse<object>.ErrorResponse("Invalid input", "Please provide valid service data", 400);
// }
// // Step 3: Retrieve service
// var service = await _context.ServiceMasters
// .FirstOrDefaultAsync(s => s.Id == id && s.TenantId == tenantId && s.IsActive);
// if (service == null)
// {
// _logger.LogWarning("Service not found for Id: {Id}, Tenant: {TenantId}", id, tenantId);
// return ApiResponse<object>.ErrorResponse("Service not found", "The requested service does not exist", 404);
// }
// // Step 4: Update and save
// service.Name = serviceMasterDto.Name.Trim();
// service.Description = serviceMasterDto.Description.Trim();
// await _context.SaveChangesAsync();
// var response = _mapper.Map<ServiceMasterVM>(service);
// _logger.LogInfo("Service updated successfully. Id: {Id}, TenantId: {TenantId}", service.Id, tenantId);
// return ApiResponse<object>.SuccessResponse(response, "Service updated successfully", 200);
// }
// catch (Exception ex)
// {
// _logger.LogError(ex, "Error while updating service Id: {Id}.", id);
// return ApiResponse<object>.ErrorResponse("An error occurred while updating the service", ex.Message, 500);
// }
//}
//public async Task<ApiResponse<object>> DeleteGlobalServiceAsync(Guid id, bool active, Employee loggedInEmployee, Guid tenantId)
//{
// _logger.LogInfo("DeleteService called with ServiceId: {ServiceId}, IsActive: {IsActive}", id, active);
// try
// {
// // Step 1: Get validate permission
// var hasPermission = await _permission.HasPermission(PermissionsMaster.ManageMasters, loggedInEmployee.Id);
// if (!hasPermission)
// {
// _logger.LogWarning("Access denied. EmployeeId: {EmployeeId} does not have Manage_Master permission.", loggedInEmployee.Id);
// return ApiResponse<object>.ErrorResponse("Access denied", "You don't have permission to delete services", 403);
// }
// // Step 2: Check if the service exists
// var service = await _context.ServiceMasters
// .FirstOrDefaultAsync(s => s.Id == id && s.TenantId == tenantId);
// if (service == null)
// {
// _logger.LogWarning("Service not found. ServiceId: {ServiceId}", id);
// return ApiResponse<object>.ErrorResponse("Service not found", "Service not found or already deleted", 404);
// }
// // Protect system-defined service
// if (service.IsSystem)
// {
// _logger.LogWarning("Attempt to delete system-defined service. ServiceId: {ServiceId}", id);
// return ApiResponse<object>.ErrorResponse("Cannot delete system-defined service", "This service is system-defined and cannot be deleted", 400);
// }
// // Step 3: Soft delete or restore
// service.IsActive = active;
// await _context.SaveChangesAsync();
// var status = active ? "restored" : "deactivated";
// _logger.LogInfo("Service {ServiceId} has been {Status} successfully by EmployeeId: {EmployeeId}", id, status, loggedInEmployee.Id);
// return ApiResponse<object>.SuccessResponse(new { }, $"Service {status} successfully", 200);
// }
// catch (Exception ex)
// {
// _logger.LogError(ex, "Unexpected error occurred while deleting service {ServiceId}", id);
// return ApiResponse<object>.ErrorResponse("Error deleting service", ex.Message, 500);
// }
//}
#endregion
#region =================================================================== Services APIs =================================================================== #region =================================================================== Services APIs ===================================================================
public async Task<ApiResponse<object>> GetServicesAsync(Employee loggedInEmployee, Guid tenantId) public async Task<ApiResponse<object>> GetServicesAsync(Employee loggedInEmployee, Guid tenantId)
{ {

View File

@ -7,6 +7,13 @@ namespace Marco.Pms.Services.Service.ServiceInterfaces
{ {
public interface IMasterService public interface IMasterService
{ {
#region =================================================================== Service Master APIs ===================================================================
Task<ApiResponse<object>> GetGlobalServicesAsync(Employee loggedInEmployee, Guid tenantId);
//Task<ApiResponse<object>> CreateGlobalServiceAsync(ServiceMasterDto serviceMasterDto, Employee loggedInEmployee, Guid tenantId);
//Task<ApiResponse<object>> UpdateGlobalServiceAsync(Guid id, ServiceMasterDto serviceMasterDto, Employee loggedInEmployee, Guid tenantId);
//Task<ApiResponse<object>> DeleteGlobalServiceAsync(Guid id, bool active, Employee loggedInEmployee, Guid tenantId);
#endregion
#region =================================================================== Service Master APIs =================================================================== #region =================================================================== Service Master APIs ===================================================================
Task<ApiResponse<object>> GetServicesAsync(Employee loggedInEmployee, Guid tenantId); Task<ApiResponse<object>> GetServicesAsync(Employee loggedInEmployee, Guid tenantId);
Task<ApiResponse<object>> CreateServiceAsync(ServiceMasterDto serviceMasterDto, Employee loggedInEmployee, Guid tenantId); Task<ApiResponse<object>> CreateServiceAsync(ServiceMasterDto serviceMasterDto, Employee loggedInEmployee, Guid tenantId);