diff --git a/Marco.Pms.Services/Controllers/RolesController.cs b/Marco.Pms.Services/Controllers/RolesController.cs index d45d611..bcc924e 100644 --- a/Marco.Pms.Services/Controllers/RolesController.cs +++ b/Marco.Pms.Services/Controllers/RolesController.cs @@ -323,7 +323,35 @@ namespace MarcoBMS.Services.Controllers return Ok(ApiResponse.SuccessResponse(vm, "Roles Perimssions fetched successfully.", 200)); } - + [HttpDelete("{id}")] + public async Task DeleteApplicationRole(Guid id) + { + Guid tenantId = GetTenantId(); + var LoggedEmployee = await _userHelper.GetCurrentEmployeeAsync(); + var role = await _context.ApplicationRoles.AsNoTracking().FirstOrDefaultAsync(r => r.Id == id && r.TenantId == tenantId); + if (role != null) + { + if (role.IsSystem) + { + _logger.LogInfo("Employee with ID {LoggedEmployeeId} tries to delete system-defined application role with ID {ApplicationRoleId}", LoggedEmployee.Id, role.Id); + return BadRequest(ApiResponse.ErrorResponse("This role cannot be deleted because it is system-defined.", "This role cannot be deleted because it is system-defined.", 400)); + } + var employeeRoleMapping = await _context.EmployeeRoleMappings.Where(erm => erm.RoleId == role.Id).ToListAsync(); + if (employeeRoleMapping.Count != 0) + { + _logger.LogInfo("Employee with ID {LoggedEmployeeId} tries to delete application role with ID {ApplicationRoleId} with is assigned to an employee", LoggedEmployee.Id, role.Id); + 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); + await _context.SaveChangesAsync(); + _logger.LogInfo("Employee with ID {LoggedEmployeeId} deleted application role with ID {ApplicationRoleId}", LoggedEmployee.Id, role.Id); + } + else + { + _logger.LogWarning("Application role with ID {ApplicationRoleId} not found in database", id); + } + return Ok(ApiResponse.SuccessResponse(new { }, "Application role is deleted successfully", 200)); + } [HttpPost]