using AutoMapper;
using MediatR;
using EnvelopeGenerator.Application.Common.Dto;
using DigitalData.Core.Abstraction.Application.Repository;
using EnvelopeGenerator.Domain.Entities;
using Microsoft.EntityFrameworkCore;
using EnvelopeGenerator.Domain.Constants;
using DigitalData.Core.Exceptions;
namespace EnvelopeGenerator.Application.EmailTemplates.Queries;
///
/// Stellt eine Abfrage dar, um eine E-Mail-Vorlage zu lesen.
/// Diese Klasse erbt von .
///
public record ReadEmailTemplateQuery : IEmailTemplateQuery, IRequest>
{
///
/// Die eindeutige Kennung der E-Mail-Vorlage (optional).
///
public int? Id { get; set; }
///
/// Der Typ der E-Mail-Vorlage, z. B. (optional). Beispiele:
/// 0 - DocumentReceived: Benachrichtigung über den Empfang eines Dokuments.
/// 1 - DocumentSigned: Benachrichtigung über die Unterzeichnung eines Dokuments.
/// 2 - DocumentDeleted: Benachrichtigung über das Löschen eines Dokuments.
/// 3 - DocumentCompleted: Benachrichtigung über den Abschluss eines Dokuments.
/// 4 - DocumentAccessCodeReceived: Benachrichtigung über den Erhalt eines Zugangscodes.
/// 5 - DocumentShared: Benachrichtigung über das Teilen eines Dokuments.
/// 6 - TotpSecret: Benachrichtigung über ein TOTP-Geheimnis.
/// 7 - DocumentRejected_ADM (für den Absender): Mail an den Absender, wenn das Dokument abgelehnt wird.
/// 8 - DocumentRejected_REC (für den ablehnenden Empfänger): Mail an den ablehnenden Empfänger, wenn das Dokument abgelehnt wird.
/// 9 - DocumentRejected_REC_2 (für sonstige Empfänger): Mail an andere Empfänger (Brief), wenn das Dokument abgelehnt wird.
///
public EmailTemplateType? Type { get; set; }
///
///
///
public string? LangCode { get; set; }
}
///
///
///
public class ReadEmailTemplateQueryHandler : IRequestHandler>
{
private readonly IMapper _mapper;
private readonly IRepository _repo;
///
/// Initialisiert eine neue Instanz der -Klasse.
///
///
///
/// Die AutoMapper-Instanz, die zum Zuordnen von Objekten verwendet wird.
///
public ReadEmailTemplateQueryHandler(IMapper mapper, IRepository repo)
{
_mapper = mapper;
_repo = repo;
}
///
///
///
///
///
///
///
public async Task> Handle(ReadEmailTemplateQuery request, CancellationToken cancel)
{
var query = _repo.Query;
if (request.Id is int id)
query = query.Where(temp => temp.Id == id);
if (request.Type is EmailTemplateType type)
query = query.Where(temp => temp.Name == type.ToString());
if (request.LangCode is string langCode)
query = query.Where(temp => temp.LangCode == langCode);
var entity = await query.ToListAsync(cancel);
return _mapper.Map>(entity);
}
}