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 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 = request.Id is int id ? _repo.Query.Where(temp => temp.Id == id) : _repo.Query.Where(temp => temp.Name == request.Type!.ToString()); var entity = await query.FirstOrDefaultAsync(cancel) ?? throw new NotFoundException(); return _mapper.Map(entity); } }