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; using EnvelopeGenerator.Application.Common.Extensions; 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 static class ReadEmailTemplateQueryExtensions { /// /// /// /// /// /// /// /// public static async Task ReadEmailTemplateAsync(this ISender sender, int id, string langCode, CancellationToken cancel = default) { var result = await sender.Send(new ReadEmailTemplateQuery { Id = id, LangCode = langCode }, cancel); return result.FirstOrDefault(); } /// /// /// /// /// /// /// /// public static async Task ReadEmailTemplateAsync(this ISender sender, EmailTemplateType type, string langCode, CancellationToken cancel = default) { var result = await sender.Send(new ReadEmailTemplateQuery { Type = type, LangCode = langCode }, cancel); return result.FirstOrDefault(); } } /// /// /// 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); } }