marco.pms.api/Marco.Pms.Services/Controllers/ServiceProjectController.cs

89 lines
3.7 KiB
C#

using Marco.Pms.Model.Dtos.ServiceProject;
using Marco.Pms.Model.Employees;
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("create")]
public async Task<IActionResult> CreateProject([FromBody] ServiceProjectDto serviceProject)
{
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.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("list")]
public async Task<IActionResult> GetServiceProjectList([FromQuery] int pageNumber = 1, [FromQuery] int pageSize = 20)
{
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.GetServiceProjectList(pageNumber, pageSize, LoggedInEmploee, tenantId);
return StatusCode(response.StatusCode, response);
}
[HttpPut("edit/{id}")]
public async Task<IActionResult> 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<object>.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);
}
}
}