DurnyklyYol/DurnyklyYol.Blazor.Server/Controllers/RequestController.cs

96 lines
3.3 KiB
C#

using DevExpress.ExpressApp.Security;
using DevExpress.ExpressApp.WebApi.Services;
using DurnyklyYol.Blazor.Server.DTO;
using DurnyklyYol.Module.BusinessObjects;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Swashbuckle.AspNetCore.Annotations;
namespace DurnyklyYol.Blazor.Server.Controllers
{
[Route("api/[controller]")]
[ApiController]
[Authorize]
public class RequestController : ControllerBase
{
private readonly IDataService dataService;
private readonly ISecurityProvider securityProvider;
public RequestController(IDataService dataService, ISecurityProvider securityProvider)
{
this.dataService = dataService;
this.securityProvider = securityProvider;
}
[Authorize]
[HttpGet]
public IActionResult Get([FromQuery] int pageNumber = 1, [FromQuery] int pageSize = 10)
{
var objectSpace = dataService.GetObjectSpace<CargoRequest>();
var userID = (Guid)securityProvider.GetSecurity().UserId;
var requestQuery = objectSpace.GetObjectsQuery<CargoRequest>()
.Where(cl => cl.Client.Oid == userID);
var totalRecords = requestQuery.Count();
var requests = requestQuery
.Skip((pageNumber - 1) * pageSize)
.Take(pageSize)
.ToList();
var response = new
{
TotalRecords = totalRecords,
PageNumber = pageNumber,
PageSize = pageSize,
Data = requests
};
return Ok(response);
}
[HttpPost]
[SwaggerOperation("Register client cargo request")]
[ProducesResponseType(StatusCodes.Status201Created)] // Success response
[ProducesResponseType(StatusCodes.Status400BadRequest, Type = typeof(string))]
[ProducesResponseType(StatusCodes.Status500InternalServerError, Type = typeof(string))]
public async Task<IActionResult> Create([FromForm] RequestDto requstDto)
{
// Validate input
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
// Check if securityProvider is null
if (securityProvider == null || dataService == null)
{
return StatusCode(500, "Data service or Security provider is not available");
}
var strategy = (SecurityStrategy)securityProvider.GetSecurity();
var user = (Client)strategy.User;
if (user == null || !strategy.CanWrite(typeof(Client)))
return BadRequest("You do not have permissions to update a client!");
var objectSpace = dataService.GetObjectSpace(typeof(Client));
var client = objectSpace.GetObject(user);
var cargoRequest = objectSpace.CreateObject<CargoRequest>();
cargoRequest.Client = client;
cargoRequest.CreatedAt = DateTime.Now;
cargoRequest.Description = requstDto.Description;
cargoRequest.From = requstDto.From;
cargoRequest.To = requstDto.To;
cargoRequest.GoodsType = requstDto.GoodsType;
//cargoRequest.Save();
objectSpace.CommitChanges();
return Created();
}
}
}