From 8ca0519dbcee3e65761f7ebcaae9b49fc170e1d5 Mon Sep 17 00:00:00 2001 From: TekH Date: Tue, 2 Sep 2025 23:11:41 +0200 Subject: [PATCH] =?UTF-8?q?feat(history):=20CreateHistoryCommand=20wurde?= =?UTF-8?q?=20verbessert,=20um=20DTO=20zur=C3=BCckzugeben=20und=20den=20Em?= =?UTF-8?q?pf=C3=A4nger=20zu=20validieren.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Der Rückgabetyp des Handlers wurde von „long?“ zu „EnvelopeHistoryDto?“ geändert. - AutoMapper-Integration für die Zuordnung von EnvelopeHistory zu DTO hinzugefügt. - IRepository zur Validierung der Benutzerreferenz eingeführt. - Validierung implementiert, um sicherzustellen, dass genau ein Empfänger gefunden wird. - BadRequestException-Behandlung für fehlende oder mehrere Empfänger hinzugefügt. --- .../Commands/CreateHistoryCommand.cs | 61 ++++++++++++------- 1 file changed, 39 insertions(+), 22 deletions(-) diff --git a/EnvelopeGenerator.Application/Histories/Commands/CreateHistoryCommand.cs b/EnvelopeGenerator.Application/Histories/Commands/CreateHistoryCommand.cs index 6b0169a7..c0013bda 100644 --- a/EnvelopeGenerator.Application/Histories/Commands/CreateHistoryCommand.cs +++ b/EnvelopeGenerator.Application/Histories/Commands/CreateHistoryCommand.cs @@ -1,17 +1,20 @@ -using DigitalData.Core.Abstraction.Application.Repository; +using AutoMapper; +using DigitalData.Core.Abstraction.Application.Repository; +using DigitalData.Core.Exceptions; +using EnvelopeGenerator.Application.Dto.EnvelopeHistory; +using EnvelopeGenerator.Application.Extensions; using EnvelopeGenerator.Application.Model; +using EnvelopeGenerator.Domain.Constants; using EnvelopeGenerator.Domain.Entities; using MediatR; using Microsoft.EntityFrameworkCore; -using EnvelopeGenerator.Application.Extensions; -using EnvelopeGenerator.Domain.Constants; namespace EnvelopeGenerator.Application.Histories.Commands; /// /// /// -public record CreateHistoryCommand : EnvelopeReceiverQueryBase, IRequest +public record CreateHistoryCommand : EnvelopeReceiverQueryBase, IRequest { /// /// @@ -47,17 +50,25 @@ public record CreateHistoryCommand : EnvelopeReceiverQueryBase, IRequest /// /// /// -public class CreateHistoryCommandHandler : IRequestHandler +public class CreateHistoryCommandHandler : IRequestHandler { private readonly IRepository _repo; + private readonly IRepository _erRepo; + + private readonly IMapper _mapper; + /// /// /// /// - public CreateHistoryCommandHandler(IRepository repo) + /// + /// + public CreateHistoryCommandHandler(IRepository repo, IRepository erRepo, IMapper mapper) { _repo = repo; + _erRepo = erRepo; + _mapper = mapper; } /// @@ -66,26 +77,32 @@ public class CreateHistoryCommandHandler : IRequestHandler /// /// - public async Task Handle(CreateHistoryCommand request, CancellationToken cancel) + public async Task Handle(CreateHistoryCommand request, CancellationToken cancel) { - // create entitiy - await _repo.CreateAsync(request, cancel); + if(request.UserReference is null) + { + var receivers = await _erRepo + .ReadOnly() + .Where(request) + .Include(er => er.Receiver) + .ToListAsync(cancel); - // check if created - var query = _repo.ReadOnly(); + if (receivers.Count != 1) + throw new BadRequestException( + receivers.Count > 1 + ? "Multiple receivers found for the given envelope and receiver criteria." + : "No receiver found for the given envelope and receiver criteria." + ); - query = request.EnvelopeId is null - ? query.Where(request.Envelope) - : query.Where(h => h.EnvelopeId == request.EnvelopeId); + var receiver = receivers.Single().Receiver + ?? throw new BadRequestException("No receiver found for the given envelope and receiver criteria."); - query = request.UserReference is null - ? query.Where(request.Receiver) - : query.Where(h => h.UserReference == request.UserReference); + request.UserReference = receiver.EmailAddress; + } - var record = await query - .Where(h => h.ActionDate == request.ActionDate) - .SingleOrDefaultAsync(cancel); - - return record?.Id; + // create entitiy + var hist = await _repo.CreateAsync(request, cancel); + + return _mapper.Map(hist); } } \ No newline at end of file