using Marco.Pms.Model.Dtos.ServiceProject; using Marco.Pms.Model.Employees; using Marco.Pms.Model.ServiceProject; using Marco.Pms.Model.Utilities; using Marco.Pms.Services.Service.ServiceInterfaces; using MarcoBMS.Services.Helpers; using MarcoBMS.Services.Service; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; namespace Marco.Pms.Services.Controllers { [ApiController] [Route("api/[controller]")] [Authorize] public class ServiceProjectController : Controller { private readonly IServiceProject _serviceProject; private readonly UserHelper _userHelper; private readonly ILoggingService _logger; private readonly ISignalRService _signalR; private readonly Guid tenantId; public ServiceProjectController(IServiceProject serviceProject,UserHelper userHelper, ILoggingService logger, ISignalRService signalR) { _serviceProject = serviceProject; _userHelper = userHelper; _logger = logger; _signalR = signalR; tenantId = userHelper.GetTenantId(); } [HttpPost] public async Task CreateProject([FromBody] ServiceProjectDto serviceProject) { if (!ModelState.IsValid) { var errors = ModelState.Values.SelectMany(v => v.Errors).Select(e => e.ErrorMessage).ToList(); return BadRequest(ApiResponse.ErrorResponse("Invalid data", errors, 400)); } Employee LoggedInEmploee = await _userHelper.GetCurrentEmployeeAsync(); var response = await _serviceProject.CreateServiceProject(serviceProject, tenantId, LoggedInEmploee); if (response.Success) { var notification = new { LoggedInUserId = LoggedInEmploee.Id, Keyword = "Create_ServiceProject", Response = response.Data }; await _signalR.SendNotificationAsync(notification); } return StatusCode(response.StatusCode, response); } [HttpGet] public async Task GetServiceProjectList() { if (!ModelState.IsValid) { var errors = ModelState.Values.SelectMany(v => v.Errors).Select(e => e.ErrorMessage).ToList(); return BadRequest(ApiResponse.ErrorResponse("Invalid data", errors, 400)); } Employee LoggedInEmploee = await _userHelper.GetCurrentEmployeeAsync(); var response = await _serviceProject.GetServiceProjectList(tenantId, LoggedInEmploee); return StatusCode(response.StatusCode, response); } [HttpPut("updat/serviceProject/{id}")] public async Task UpdateProject(Guid id, [FromBody] ServiceProjectDto serviceProject) { if (!ModelState.IsValid) { var errors = ModelState.Values.SelectMany(v => v.Errors).Select(e => e.ErrorMessage).ToList(); return BadRequest(ApiResponse.ErrorResponse("Invalid data", errors, 400)); } Employee LoggedInEmploee = await _userHelper.GetCurrentEmployeeAsync(); var response = await _serviceProject.UpdateServiceProject(id, serviceProject, tenantId, LoggedInEmploee); if (response.Success) { var notification = new { LoggedInUserId = LoggedInEmploee.Id, Keyword = "Create_ServiceProject", Response = response.Data }; await _signalR.SendNotificationAsync(notification); } return StatusCode(response.StatusCode, response); } } }