Added the API to delete service project
This commit is contained in:
parent
394b8496f9
commit
31cfe2b581
@ -38,11 +38,11 @@ namespace Marco.Pms.Services.Controllers
|
|||||||
var errors = ModelState.Values.SelectMany(v => v.Errors).Select(e => e.ErrorMessage).ToList();
|
var errors = ModelState.Values.SelectMany(v => v.Errors).Select(e => e.ErrorMessage).ToList();
|
||||||
return BadRequest(ApiResponse<object>.ErrorResponse("Invalid data", errors, 400));
|
return BadRequest(ApiResponse<object>.ErrorResponse("Invalid data", errors, 400));
|
||||||
}
|
}
|
||||||
Employee LoggedInEmploee = await _userHelper.GetCurrentEmployeeAsync();
|
Employee loggedInEmploee = await _userHelper.GetCurrentEmployeeAsync();
|
||||||
var response = await _serviceProject.CreateServiceProject(serviceProject, tenantId, LoggedInEmploee);
|
var response = await _serviceProject.CreateServiceProjectAsync(serviceProject, loggedInEmploee, tenantId);
|
||||||
if (response.Success)
|
if (response.Success)
|
||||||
{
|
{
|
||||||
var notification = new { LoggedInUserId = LoggedInEmploee.Id, Keyword = "Create_ServiceProject", Response = response.Data };
|
var notification = new { LoggedInUserId = loggedInEmploee.Id, Keyword = "Service_Project", Response = response.Data };
|
||||||
await _signalR.SendNotificationAsync(notification);
|
await _signalR.SendNotificationAsync(notification);
|
||||||
}
|
}
|
||||||
return StatusCode(response.StatusCode, response);
|
return StatusCode(response.StatusCode, response);
|
||||||
@ -58,31 +58,49 @@ namespace Marco.Pms.Services.Controllers
|
|||||||
var errors = ModelState.Values.SelectMany(v => v.Errors).Select(e => e.ErrorMessage).ToList();
|
var errors = ModelState.Values.SelectMany(v => v.Errors).Select(e => e.ErrorMessage).ToList();
|
||||||
return BadRequest(ApiResponse<object>.ErrorResponse("Invalid data", errors, 400));
|
return BadRequest(ApiResponse<object>.ErrorResponse("Invalid data", errors, 400));
|
||||||
}
|
}
|
||||||
Employee LoggedInEmploee = await _userHelper.GetCurrentEmployeeAsync();
|
Employee loggedInEmploee = await _userHelper.GetCurrentEmployeeAsync();
|
||||||
var response = await _serviceProject.GetServiceProjectList(pageNumber, pageSize, LoggedInEmploee, tenantId);
|
var response = await _serviceProject.GetServiceProjectListAsync(pageNumber, pageSize, loggedInEmploee, tenantId);
|
||||||
return StatusCode(response.StatusCode, response);
|
return StatusCode(response.StatusCode, response);
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
[HttpPut("edit/{id}")]
|
[HttpPut("edit/{id}")]
|
||||||
public async Task<IActionResult> UpdateProject(Guid id, [FromBody] ServiceProjectDto serviceProject)
|
public async Task<IActionResult> UpdateServicecProject(Guid id, [FromBody] ServiceProjectDto serviceProject)
|
||||||
{
|
{
|
||||||
if (!ModelState.IsValid)
|
if (!ModelState.IsValid)
|
||||||
{
|
{
|
||||||
var errors = ModelState.Values.SelectMany(v => v.Errors).Select(e => e.ErrorMessage).ToList();
|
var errors = ModelState.Values.SelectMany(v => v.Errors).Select(e => e.ErrorMessage).ToList();
|
||||||
return BadRequest(ApiResponse<object>.ErrorResponse("Invalid data", errors, 400));
|
return BadRequest(ApiResponse<object>.ErrorResponse("Invalid data", errors, 400));
|
||||||
}
|
}
|
||||||
Employee LoggedInEmploee = await _userHelper.GetCurrentEmployeeAsync();
|
Employee loggedInEmploee = await _userHelper.GetCurrentEmployeeAsync();
|
||||||
var response = await _serviceProject.UpdateServiceProject(id, serviceProject, tenantId, LoggedInEmploee);
|
var response = await _serviceProject.UpdateServiceProjectAsync(id, serviceProject, loggedInEmploee, tenantId);
|
||||||
if (response.Success)
|
if (response.Success)
|
||||||
{
|
{
|
||||||
var notification = new { LoggedInUserId = LoggedInEmploee.Id, Keyword = "Create_ServiceProject", Response = response.Data };
|
var notification = new { LoggedInUserId = loggedInEmploee.Id, Keyword = "Service_Project", Response = response.Data };
|
||||||
await _signalR.SendNotificationAsync(notification);
|
await _signalR.SendNotificationAsync(notification);
|
||||||
}
|
}
|
||||||
return StatusCode(response.StatusCode, response);
|
return StatusCode(response.StatusCode, response);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[HttpDelete("delete/{id}")]
|
||||||
|
public async Task<IActionResult> DeActivateServiceProject(Guid id, bool isActive = false)
|
||||||
|
{
|
||||||
|
if (!ModelState.IsValid)
|
||||||
|
{
|
||||||
|
var errors = ModelState.Values.SelectMany(v => v.Errors).Select(e => e.ErrorMessage).ToList();
|
||||||
|
return BadRequest(ApiResponse<object>.ErrorResponse("Invalid data", errors, 400));
|
||||||
|
}
|
||||||
|
Employee loggedInEmploee = await _userHelper.GetCurrentEmployeeAsync();
|
||||||
|
var response = await _serviceProject.DeActivateServiceProjectAsync(id, isActive, loggedInEmploee, tenantId);
|
||||||
|
if (response.Success)
|
||||||
|
{
|
||||||
|
var notification = new { LoggedInUserId = loggedInEmploee.Id, Keyword = "Service_Project", Response = response.Data };
|
||||||
|
await _signalR.SendNotificationAsync(notification);
|
||||||
|
}
|
||||||
|
return StatusCode(response.StatusCode, response);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -7,10 +7,10 @@ namespace Marco.Pms.Services.Service.ServiceInterfaces
|
|||||||
public interface IServiceProject
|
public interface IServiceProject
|
||||||
{
|
{
|
||||||
|
|
||||||
Task<ApiResponse<object>> CreateServiceProject(ServiceProjectDto serviceProject, Guid TenantId, Employee loggedInEmployee);
|
Task<ApiResponse<object>> CreateServiceProjectAsync(ServiceProjectDto serviceProject, Employee loggedInEmployee, Guid TenantId);
|
||||||
Task<ApiResponse<object>> GetServiceProjectList(int pageNumber, int pageSize, Employee loggedInEmployee, Guid tenantId);
|
Task<ApiResponse<object>> GetServiceProjectListAsync(int pageNumber, int pageSize, Employee loggedInEmployee, Guid tenantId);
|
||||||
Task<ApiResponse<object>> UpdateServiceProject(Guid id, ServiceProjectDto serviceProject, Guid tenantId, Employee loggedInEmployee);
|
Task<ApiResponse<object>> UpdateServiceProjectAsync(Guid id, ServiceProjectDto serviceProject, Employee loggedInEmployee, Guid tenantId);
|
||||||
|
Task<ApiResponse<object>> DeActivateServiceProjectAsync(Guid id, bool isActive, Employee loggedInEmployee, Guid tenantId)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -41,7 +41,7 @@ namespace Marco.Pms.Services.Service
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public async Task<ApiResponse<object>> CreateServiceProject(ServiceProjectDto model, Guid tenantId, Employee loggedInEmployee)
|
public async Task<ApiResponse<object>> CreateServiceProjectAsync(ServiceProjectDto model, Employee loggedInEmployee, Guid tenantId)
|
||||||
{
|
{
|
||||||
var serviceIds = model.Services.Where(s => s.IsActive).Select(s => s.ServiceId).ToList();
|
var serviceIds = model.Services.Where(s => s.IsActive).Select(s => s.ServiceId).ToList();
|
||||||
var clientTask = Task.Run(async () =>
|
var clientTask = Task.Run(async () =>
|
||||||
@ -118,7 +118,7 @@ namespace Marco.Pms.Services.Service
|
|||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
public async Task<ApiResponse<object>> GetServiceProjectList(int pageNumber, int pageSize, Employee loggedInEmployee, Guid tenantId)
|
public async Task<ApiResponse<object>> GetServiceProjectListAsync(int pageNumber, int pageSize, Employee loggedInEmployee, Guid tenantId)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@ -164,7 +164,7 @@ namespace Marco.Pms.Services.Service
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
public async Task<ApiResponse<object>> UpdateServiceProject(Guid id, ServiceProjectDto model, Guid tenantId, Employee loggedInEmployee)
|
public async Task<ApiResponse<object>> UpdateServiceProjectAsync(Guid id, ServiceProjectDto model, Employee loggedInEmployee, Guid tenantId)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@ -200,7 +200,7 @@ namespace Marco.Pms.Services.Service
|
|||||||
return ApiResponse<object>.ErrorResponse("Project Status not found", "Project Status not found", 404);
|
return ApiResponse<object>.ErrorResponse("Project Status not found", "Project Status not found", 404);
|
||||||
}
|
}
|
||||||
|
|
||||||
var serviceProject = await _context.ServiceProjects.Where(sp => sp.Id == id && sp.TenantId == tenantId).FirstOrDefaultAsync();
|
var serviceProject = await _context.ServiceProjects.Where(sp => sp.Id == id && sp.TenantId == tenantId && sp.IsActive).FirstOrDefaultAsync();
|
||||||
|
|
||||||
if (serviceProject == null)
|
if (serviceProject == null)
|
||||||
{
|
{
|
||||||
@ -287,6 +287,35 @@ namespace Marco.Pms.Services.Service
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
public async Task<ApiResponse<object>> DeActivateServiceProjectAsync(Guid id, bool isActive, Employee loggedInEmployee, Guid tenantId)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
|
||||||
|
var serviceProject = await _context.ServiceProjects
|
||||||
|
.Where(sp => sp.Id == id && sp.TenantId == tenantId).FirstOrDefaultAsync();
|
||||||
|
|
||||||
|
if (serviceProject == null)
|
||||||
|
{
|
||||||
|
_logger.LogWarning("Attempt to de-activate non-existent Service project with ID {ProjectId} by user {UserId}.", id, loggedInEmployee.Id);
|
||||||
|
return ApiResponse<object>.ErrorResponse("Project not found.", $"No project found with ID {id}.", 404);
|
||||||
|
}
|
||||||
|
|
||||||
|
serviceProject.IsActive = isActive;
|
||||||
|
|
||||||
|
await _context.SaveChangesAsync();
|
||||||
|
|
||||||
|
_logger.LogInfo("Successfully de-activated service project {ProjectId}", id);
|
||||||
|
return ApiResponse<object>.SuccessResponse(new { }, "Projects de-activated successfully.", 200);
|
||||||
|
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
// --- Step 5: Graceful Error Handling ---
|
||||||
|
_logger.LogError(ex, "An unexpected error occurred in DeActivateServiceProject for tenant {TenantId}.", tenantId);
|
||||||
|
return ApiResponse<object>.ErrorResponse("An internal server error occurred. Please try again later.", null, 500);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user