using DigitalData.Core.Abstraction.Application.DTO;
using DigitalData.Core.API;
using EnvelopeGenerator.Application.Receivers.Queries;
using EnvelopeGenerator.Domain.Entities;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using EnvelopeGenerator.Application.Receivers.Commands;
using EnvelopeGenerator.Application.Common.Dto.Receiver;
using EnvelopeGenerator.Application.Common.Interfaces.Services;
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]
[Obsolete("Use MediatR")]
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.Id is null && receiver.EmailAddress is null && receiver.Signature is null)
return await base.GetAll();
if (receiver.Id is int id)
return await _service.ReadByIdAsync(id).ThenAsync(
Success: Ok,
Fail: IActionResult (msg, ntc) =>
{
return NotFound();
});
return await _service.ReadByAsync(emailAddress: receiver.EmailAddress, signature: receiver.Signature).ThenAsync(
Success: Ok,
Fail: IActionResult (msg, ntc) =>
{
return NotFound();
});
}
#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(UpdateReceiverCommand updateDto) => base.Update(updateDto);
///
/// Diese Methode ist deaktiviert und wird nicht verwendet.
///
[NonAction]
public override Task Create(CreateReceiverCommand 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
}