ProyectoGrupal/dolibarr-bff/DoliMiddlewareApi/Controllers/ContactsController.cs

78 lines
3.3 KiB
C#

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 ContactsController(ContactService contactService) : ControllerBase
{
[HttpGet]
[ProducesResponseType(typeof(List<ContactDto>), StatusCodes.Status200OK)]
[ProducesResponseType(typeof(ProblemDetails), StatusCodes.Status401Unauthorized)]
public async Task<ActionResult<List<ContactDto>>> GetContacts(
[FromQuery] int limit = 50,
[FromQuery][Range(1, int.MaxValue)] int page = 1,
[FromQuery] string? thirdpartyIds = null)
{
var contacts = await contactService.GetContactsAsync(limit, page, thirdpartyIds);
return Ok(contacts);
}
[HttpGet("{id:int}")]
[ProducesResponseType(typeof(ContactDetailDto), StatusCodes.Status200OK)]
[ProducesResponseType(typeof(ProblemDetails), StatusCodes.Status404NotFound)]
[ProducesResponseType(typeof(ProblemDetails), StatusCodes.Status401Unauthorized)]
public async Task<ActionResult<ContactDetailDto>> GetContact([Range(1, int.MaxValue)] int id)
{
var contact = await contactService.GetContactAsync(id);
return Ok(contact);
}
[HttpGet("email/{email}")]
[ProducesResponseType(typeof(ContactDetailDto), StatusCodes.Status200OK)]
[ProducesResponseType(typeof(ProblemDetails), StatusCodes.Status404NotFound)]
[ProducesResponseType(typeof(ProblemDetails), StatusCodes.Status401Unauthorized)]
public async Task<ActionResult<ContactDetailDto>> GetContactByEmail(string email)
{
var contact = await contactService.GetContactByEmailAsync(email);
return Ok(contact);
}
[HttpPost]
[ProducesResponseType(typeof(int), StatusCodes.Status201Created)]
[ProducesResponseType(typeof(ProblemDetails), StatusCodes.Status400BadRequest)]
[ProducesResponseType(typeof(ProblemDetails), StatusCodes.Status401Unauthorized)]
public async Task<ActionResult<int>> CreateContact([FromBody] CreateContactDto dto)
{
var contactId = await contactService.CreateContactAsync(dto);
return CreatedAtAction(nameof(GetContact), new { id = contactId }, contactId);
}
[HttpPut("{id:int}")]
[ProducesResponseType(StatusCodes.Status204NoContent)]
[ProducesResponseType(typeof(ProblemDetails), StatusCodes.Status400BadRequest)]
[ProducesResponseType(typeof(ProblemDetails), StatusCodes.Status404NotFound)]
[ProducesResponseType(typeof(ProblemDetails), StatusCodes.Status401Unauthorized)]
public async Task<IActionResult> UpdateContact([Range(1, int.MaxValue)] int id, [FromBody] UpdateContactDto dto)
{
await contactService.UpdateContactAsync(id, dto);
return NoContent();
}
[HttpDelete("{id:int}")]
[ProducesResponseType(StatusCodes.Status204NoContent)]
[ProducesResponseType(typeof(ProblemDetails), StatusCodes.Status404NotFound)]
[ProducesResponseType(typeof(ProblemDetails), StatusCodes.Status401Unauthorized)]
public async Task<IActionResult> DeleteContact([Range(1, int.MaxValue)] int id)
{
await contactService.DeleteContactAsync(id);
return NoContent();
}
}