using System.ComponentModel.DataAnnotations; using DoliMiddlewareApi.Dtos.command; using DoliMiddlewareApi.Dtos.query; using DoliMiddlewareApi.Services; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; namespace DoliMiddlewareApi.Controllers; [ApiController] [Route("api/[controller]")] [Authorize] public class ClientsController(ClientService clientService) : ControllerBase { [HttpGet] [ProducesResponseType(typeof(List), StatusCodes.Status200OK)] [ProducesResponseType(typeof(ProblemDetails), StatusCodes.Status400BadRequest)] [ProducesResponseType(typeof(ProblemDetails), StatusCodes.Status401Unauthorized)] public async Task>> GetClients( [FromQuery] int limit = 50, [FromQuery][Range(1, int.MaxValue)] int page = 1, [FromQuery] bool supplier = false) { var clients = await clientService.GetClientsAsync(limit, page, supplier); return Ok(clients); } [HttpGet("{id:int}")] [ProducesResponseType(typeof(ClientDetailDto), StatusCodes.Status200OK)] [ProducesResponseType(typeof(ProblemDetails), StatusCodes.Status404NotFound)] [ProducesResponseType(typeof(ProblemDetails), StatusCodes.Status401Unauthorized)] public async Task> GetClient([Range(1, int.MaxValue)] int id) { var client = await clientService.GetClientAsync(id); return Ok(client); } [HttpPost] [ProducesResponseType(typeof(int), StatusCodes.Status201Created)] [ProducesResponseType(typeof(ProblemDetails), StatusCodes.Status400BadRequest)] [ProducesResponseType(typeof(ProblemDetails), StatusCodes.Status401Unauthorized)] public async Task> CreateClient([FromBody] CreateClientDto dto) { var clientId = await clientService.CreateClientAsync(dto); return CreatedAtAction(nameof(GetClient), new { id = clientId }, clientId); } [HttpPut("{id:int}")] [ProducesResponseType(StatusCodes.Status204NoContent)] [ProducesResponseType(typeof(ProblemDetails), StatusCodes.Status400BadRequest)] [ProducesResponseType(typeof(ProblemDetails), StatusCodes.Status404NotFound)] [ProducesResponseType(typeof(ProblemDetails), StatusCodes.Status401Unauthorized)] public async Task UpdateClient([Range(1, int.MaxValue)] int id, [FromBody] UpdateClientDto dto) { await clientService.UpdateClientAsync(id, dto); return NoContent(); } [HttpDelete("{id:int}")] [ProducesResponseType(StatusCodes.Status204NoContent)] [ProducesResponseType(typeof(ProblemDetails), StatusCodes.Status404NotFound)] [ProducesResponseType(typeof(ProblemDetails), StatusCodes.Status401Unauthorized)] public async Task DeleteClient([Range(1, int.MaxValue)] int id) { await clientService.DeleteClientAsync(id); return NoContent(); } }