using DigitalData.Core.API; using DigitalData.Core.DTO; using EnvelopeGenerator.Application.Contracts.Services; using EnvelopeGenerator.Application.DTOs.Receiver; using EnvelopeGenerator.Application.Receivers.Queries.Read; using EnvelopeGenerator.Domain.Entities; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; namespace EnvelopeGenerator.GeneratorAPI.Controllers; /// /// Controller für die Verwaltung von Empfängern. /// /// /// Dieser Controller bietet Endpunkte für CRUD-Operationen (Erstellen, Lesen, Aktualisieren, Löschen) /// sowie zusätzliche Funktionen wie das Abrufen von Empfängern basierend auf E-Mail-Adresse oder Signatur. /// [Route("api/[controller]")] [ApiController] [Authorize] public class ReceiverController : CRUDControllerBaseWithErrorHandling { /// /// Initialisiert eine neue Instanz des -Controllers. /// /// Der Logger für die Protokollierung. /// Der Dienst für Empfängeroperationen. public ReceiverController(ILogger logger, IReceiverService service) : base(logger, service) { } /// /// Ruft eine Liste von Empfängern ab, basierend auf den angegebenen Abfrageparametern. /// /// Die Abfrageparameter, einschließlich E-Mail-Adresse und Signatur. /// Eine Liste von Empfängern oder ein Fehlerstatus. [HttpGet] public async Task Get([FromQuery] ReadReceiverQuery receiver) { if (receiver.EmailAddress is null && receiver.Signature is null) return await base.GetAll(); try { return await _service.ReadByAsync(emailAddress: receiver.EmailAddress, signature: receiver.Signature).ThenAsync( Success: Ok, Fail: IActionResult (msg, ntc) => { _logger.LogNotice(ntc); return StatusCode(StatusCodes.Status500InternalServerError); }); } catch (Exception ex) { _logger.LogError(ex, "{Message}", ex.Message); return StatusCode(StatusCodes.Status500InternalServerError); } } #region REMOVED ENDPOINTS /// /// Diese Methode ist deaktiviert und wird nicht verwendet. /// [NonAction] public override Task GetAll() => base.GetAll(); /// /// Diese Methode ist deaktiviert und wird nicht verwendet. /// [NonAction] public override Task Delete([FromRoute] int id) => base.Delete(id); /// /// Diese Methode ist deaktiviert und wird nicht verwendet. /// [NonAction] public override Task Update(ReceiverUpdateDto updateDto) => base.Update(updateDto); /// /// Diese Methode ist deaktiviert und wird nicht verwendet. /// [NonAction] public override Task Create(ReceiverCreateDto createDto) { return base.Create(createDto); } /// /// Diese Methode ist deaktiviert und wird nicht verwendet. /// [NonAction] public override Task GetById([FromRoute] int id) { return base.GetById(id); } #endregion }