78 lines
3.3 KiB
C#
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();
|
||
|
|
}
|
||
|
|
}
|