From 2d8375f26a0381c9f6c92c83a8dc2a4e10d367b9 Mon Sep 17 00:00:00 2001 From: TekH Date: Thu, 9 Apr 2026 10:28:13 +0200 Subject: [PATCH] Refactor envelope query to throw on not found or multiple Refactored ReadSingleEnvelopeQuery and its handler to return EnvelopeDto directly and throw NotFoundException or BadRequestException when no or multiple envelopes are found, instead of returning null. Updated imports to include custom exceptions. --- .../Queries/ReadSingleEnvelopeQuery.cs | 23 ++++++++++++------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/EnvelopeGenerator.Application/Envelopes/Queries/ReadSingleEnvelopeQuery.cs b/EnvelopeGenerator.Application/Envelopes/Queries/ReadSingleEnvelopeQuery.cs index feae8002..7c7c735f 100644 --- a/EnvelopeGenerator.Application/Envelopes/Queries/ReadSingleEnvelopeQuery.cs +++ b/EnvelopeGenerator.Application/Envelopes/Queries/ReadSingleEnvelopeQuery.cs @@ -5,13 +5,14 @@ using AutoMapper; using DigitalData.Core.Abstraction.Application.Repository; using EnvelopeGenerator.Domain.Entities; using Microsoft.EntityFrameworkCore; +using DigitalData.Core.Exceptions; namespace EnvelopeGenerator.Application.Envelopes.Queries; /// /// Repräsentiert eine Abfrage für einen einzelnen Umschlag. /// -public record ReadSingleEnvelopeQuery : EnvelopeQueryBase, IRequest +public record ReadSingleEnvelopeQuery : EnvelopeQueryBase, IRequest { /// /// Optionaler Benutzerfilter; wenn gesetzt, werden nur Umschläge des Benutzers geladen. @@ -27,7 +28,7 @@ public record ReadSingleEnvelopeQuery : EnvelopeQueryBase, IRequest /// Verarbeitet und liefert ein einzelnes -Ergebnis. /// -public class ReadSingleEnvelopeQueryHandler : IRequestHandler +public class ReadSingleEnvelopeQueryHandler : IRequestHandler { private readonly IRepository _repository; private readonly IMapper _mapper; @@ -49,7 +50,7 @@ public class ReadSingleEnvelopeQueryHandler : IRequestHandler /// /// - public async Task Handle(ReadSingleEnvelopeQuery request, CancellationToken cancel) + public async Task Handle(ReadSingleEnvelopeQuery request, CancellationToken cancel) { var query = _repository.Query; @@ -61,11 +62,17 @@ public class ReadSingleEnvelopeQueryHandler : IRequestHandler e.Uuid == uuid); - - var envelope = await query + + var envelopes = await query .Include(e => e.Documents) - .FirstOrDefaultAsync(cancel); + .Take(2) + .ToListAsync(cancel); - return envelope is null ? null : _mapper.Map(envelope); + if (envelopes.Count > 1) + throw new BadRequestException($"Multiple envelopes found for the given criteria: Id={request.Id}, Uuid={request.Uuid}, UserId={request.UserId}"); + + return envelopes.SingleOrDefault() is Envelope envelope + ? _mapper.Map(envelope) + : throw new NotFoundException($"Envelope with Id={request.Id}, Uuid={request.Uuid} not found"); } -} +} \ No newline at end of file