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); } }