using AB.Contracts;
using AB.Services.Abstractions;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
namespace AB.API.Controllers.BusinessPartner;
[ApiController]
[Route("api/customers")]
[Produces("application/json")]
public class CustomerController : ControllerBase
{
private readonly ICustomerService _customerService;
public CustomerController(ICustomerService customerService)
{
_customerService = customerService;
}
///
/// Abrufen aller Kunden
///
///
/// Eine Liste aller Kunden
[HttpGet]
public async Task>> GetCustomers(CancellationToken cancellationToken)
{
var customers = await _customerService.GetAllAsync(cancellationToken);
return Ok(customers);
}
///
/// Abrufen eines Kunden anhand seiner Id
///
///
///
/// Den Kunden mit der angegeben Id
[HttpGet("{customerId:guid}")]
public async Task> GetCustomerById(Guid customerId, CancellationToken cancellationToken)
{
var customer = await _customerService.GetByIdAsync(customerId, cancellationToken);
return Ok(customer);
}
///
/// Anlegen eines neuen Kunden
///
///
/// Einen neu erstellten Kunden
/// Kunde wurde erstellt
[HttpPost]
[ProducesResponseType(StatusCodes.Status201Created)]
public async Task CreateCustomer([FromBody] CustomerForCreationDto customerForCreation)
{
var customerDto = await _customerService.CreateAsync(customerForCreation);
return CreatedAtAction(nameof(CreateCustomer), new { customerId = customerDto.Id }, customerDto);
}
///
/// Löschen eines vorhandenen Kunden
///
///
///
///
/// Kunde wurde gelöscht
/// Kunde wurde nicht gefunden
[HttpDelete("{customerId:guid}")]
[ProducesResponseType(StatusCodes.Status204NoContent)]
[ProducesResponseType(StatusCodes.Status404NotFound)]
public async Task DeleteCustomer(Guid customerId, CancellationToken cancellationToken)
{
await _customerService.DeleteAsync(customerId, cancellationToken);
return NoContent();
}
///
/// Bearbeiten eines vorhanden Kunden
///
///
///
///
/// Den veränderten Kunden
///
/// Kunde wurde bearbeitet
/// Kunde wurde nicht gefunden
[HttpPut("{customerId:guid}")]
[ProducesResponseType(StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status404NotFound)]
public async Task> UpdateCustomer(Guid customerId, CustomerForUpdateDto customerForUpdate, CancellationToken cancellationToken)
{
var customerDto = await _customerService.UpdateAsync(customerId, customerForUpdate, cancellationToken);
return Ok(customerDto);
}
}