diff --git a/Marco.Pms.Services/Controllers/RolesController.cs b/Marco.Pms.Services/Controllers/RolesController.cs index bcc924e..8f84416 100644 --- a/Marco.Pms.Services/Controllers/RolesController.cs +++ b/Marco.Pms.Services/Controllers/RolesController.cs @@ -101,7 +101,30 @@ namespace MarcoBMS.Services.Controllers return BadRequest(ApiResponse.ErrorResponse(ex.Message, ex, 400)); } } - + [HttpDelete("jobrole/{id}")] + public async Task DeleteJobRole(Guid id) + { + Guid tenantId = GetTenantId(); + var LoggedEmployee = await _userHelper.GetCurrentEmployeeAsync(); + var jobRole = await _context.JobRoles.FirstOrDefaultAsync(r => r.Id == id && r.TenantId == tenantId); + if (jobRole != null) + { + var employee = await _context.Employees.Where(e => e.JobRoleId == jobRole.Id).ToListAsync(); + if (employee.Any()) + { + _logger.LogWarning("Employee with ID {LoggedEmployeeId} tries to delete the job role with ID {JobRoleId} which is assigned to one or more employees", LoggedEmployee.Id, jobRole.Id); + return BadRequest(ApiResponse.ErrorResponse("Cannot delete the job role because it is assigned to one or more employees.", "Cannot delete the job role because it is assigned to one or more employees.", 400)); + } + _context.JobRoles.Remove(jobRole); + await _context.SaveChangesAsync(); + _logger.LogInfo("Employee with ID {LoggedEmployeeId} deleted the job role with ID {JobRoleId}", LoggedEmployee.Id, jobRole.Id); + } + else + { + _logger.LogWarning("Job role with ID {JobRoleId} not found in database", id); + } + return Ok(ApiResponse.SuccessResponse(new { }, "Job role deleted successfully", 200)); + } [HttpGet] public async Task GetAllRoles() @@ -343,6 +366,12 @@ namespace MarcoBMS.Services.Controllers return BadRequest(ApiResponse.ErrorResponse("This role cannot be deleted because it is currently assigned to employees.", "This role cannot be deleted because it is currently assigned to employees.", 400)); } _context.ApplicationRoles.Remove(role); + var rolePermissionMapping = await _context.RolePermissionMappings.Where(r => r.ApplicationRoleId == role.Id).ToListAsync(); + if (rolePermissionMapping.Count != 0) + { + _context.RolePermissionMappings.RemoveRange(rolePermissionMapping); + _logger.LogInfo("All permissions assigned to the application role with ID {ApplicationRoleId} have been removed.", role.Id); + } await _context.SaveChangesAsync(); _logger.LogInfo("Employee with ID {LoggedEmployeeId} deleted application role with ID {ApplicationRoleId}", LoggedEmployee.Id, role.Id); }