diff --git a/EnvelopeGenerator.Application/Envelopes/Queries/ReadEnvelopeQuery.cs b/EnvelopeGenerator.Application/Envelopes/Queries/ReadEnvelopeQuery.cs
index 04cd767e..7045f59d 100644
--- a/EnvelopeGenerator.Application/Envelopes/Queries/ReadEnvelopeQuery.cs
+++ b/EnvelopeGenerator.Application/Envelopes/Queries/ReadEnvelopeQuery.cs
@@ -2,6 +2,11 @@
using EnvelopeGenerator.Domain.Constants;
using EnvelopeGenerator.Application.Common.Query;
using EnvelopeGenerator.Application.Common.Dto;
+using AutoMapper;
+using DigitalData.Core.Abstraction.Application.Repository;
+using EnvelopeGenerator.Application.Common.Extensions;
+using EnvelopeGenerator.Domain.Entities;
+using Microsoft.EntityFrameworkCore;
namespace EnvelopeGenerator.Application.Envelopes.Queries;
@@ -71,4 +76,65 @@ public record EnvelopeStatusQuery
/// Eine Liste von Statuswerten, die ignoriert werden werden.
///
public EnvelopeStatus[]? Ignore { get; init; }
+}
+
+///
+///
+///
+public class ReadEnvelopeQueryHandler : IRequestHandler>
+{
+ private readonly IMapper _mapper;
+
+ private readonly IRepository _repo;
+
+ ///
+ ///
+ ///
+ ///
+ ///
+ public ReadEnvelopeQueryHandler(IMapper mapper, IRepository repo)
+ {
+ _mapper = mapper;
+ _repo = repo;
+ }
+
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public async Task> Handle(ReadEnvelopeQuery request, CancellationToken cancel)
+ {
+ var q = _repo.Query.Where(request, notnull: false);
+
+ if (request.Status is EnvelopeStatusQuery statusQ)
+ {
+ // including status
+ if (statusQ.Include is EnvelopeStatus[] incStatus)
+ q = q.Where(e => incStatus.Contains(e.Status));
+
+ // ignoring status
+ if (statusQ.Ignore is EnvelopeStatus[] ignoreStatus)
+ q = q.Where(e => !ignoreStatus.Contains(e.Status));
+
+ // max status
+ if (statusQ.Max is EnvelopeStatus maxStatus)
+ q = q.Where(e => e.Status < maxStatus);
+
+ // min status
+ if (statusQ.Min is EnvelopeStatus minStatus)
+ q = q.Where(e => e.Status > minStatus);
+ }
+
+ if (request.HasDocResult is bool hasDocResult)
+ q = hasDocResult
+ ? q.Where(e => e.DocResult != null)
+ : q.Where(e => e.DocResult == null);
+
+ var envelopes = await q.ToListAsync(cancel);
+
+ return _mapper.Map>(envelopes);
+ }
}
\ No newline at end of file