Added the API to get global services
This commit is contained in:
parent
fae6d7bbe9
commit
061f287e8c
@ -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")]
|
||||||
|
@ -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)
|
||||||
{
|
{
|
||||||
|
@ -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);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user