From 15eabfc834fb9e41018816787f6b7a864d838e91 Mon Sep 17 00:00:00 2001 From: Developer 02 Date: Tue, 20 Aug 2024 11:28:25 +0200 Subject: [PATCH] =?UTF-8?q?feat:=20ReadByUsernameAsync-Methode=20erweitert?= =?UTF-8?q?,=20um=20Statusfilter=20hinzuzuf=C3=BCgen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - `ReadByUsernameAsync` aktualisiert, um optionale Parameter `min_status`, `max_status` und `ignore_statuses` zu unterstützen. - Abfrage optimiert, um Umschläge basierend auf Statuswerten zu filtern. - Ermöglicht das Abrufen von Umschlägen mit spezifischen Statusbereichen oder das Ignorieren bestimmter Status. --- .../Contracts/IEnvelopeReceiverRepository.cs | 2 +- .../Repositories/EnvlopeReceiverRepository.cs | 23 +++++++++++++------ 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/EnvelopeGenerator.Infrastructure/Contracts/IEnvelopeReceiverRepository.cs b/EnvelopeGenerator.Infrastructure/Contracts/IEnvelopeReceiverRepository.cs index 451dc3f0..219e64eb 100644 --- a/EnvelopeGenerator.Infrastructure/Contracts/IEnvelopeReceiverRepository.cs +++ b/EnvelopeGenerator.Infrastructure/Contracts/IEnvelopeReceiverRepository.cs @@ -19,6 +19,6 @@ namespace EnvelopeGenerator.Infrastructure.Contracts Task ReadAccessCodeByIdAsync(int envelopeId, int receiverId); - Task> ReadByUsernameAsync(string username); + Task> ReadByUsernameAsync(string username, int? min_status = null, int? max_status = null, params int[] ignore_statuses); } } \ No newline at end of file diff --git a/EnvelopeGenerator.Infrastructure/Repositories/EnvlopeReceiverRepository.cs b/EnvelopeGenerator.Infrastructure/Repositories/EnvlopeReceiverRepository.cs index 265f1963..10b7012b 100644 --- a/EnvelopeGenerator.Infrastructure/Repositories/EnvlopeReceiverRepository.cs +++ b/EnvelopeGenerator.Infrastructure/Repositories/EnvlopeReceiverRepository.cs @@ -49,7 +49,7 @@ namespace EnvelopeGenerator.Infrastructure.Repositories public async Task CountAsync(string uuid, string signature) => await ReadWhere(uuid: uuid, signature: signature).CountAsync(); - public IQueryable ReadById(int envelopeId, int receiverId) => _dbSet + public IQueryable ReadById(int envelopeId, int receiverId) => _dbSet.AsNoTracking() .Where(er => er.EnvelopeId == envelopeId && er.ReceiverId == receiverId); public async Task ReadByIdAsync(int envelopeId, int receiverId) @@ -61,11 +61,20 @@ namespace EnvelopeGenerator.Infrastructure.Repositories .Select(er => er.AccessCode) .FirstOrDefaultAsync(); - public async Task> ReadByUsernameAsync(string username) => await _dbSet - .AsNoTracking() - .Where(er => er.Envelope!.User!.Username == username) - .Include(er => er.Envelope) - .Include(er => er.Receiver) - .ToListAsync(); + public async Task> ReadByUsernameAsync(string username, int? min_status = null, int? max_status = null, params int[] ignore_statuses) + { + var query = _dbSet.AsNoTracking().Where(er => er.Envelope!.User!.Username == username); + + if (min_status is not null) + query = query.Where(er => er.Envelope!.Status >= min_status); + + if (max_status is not null) + query = query.Where(er => er.Envelope!.Status <= max_status); + + foreach (var ignore_status in ignore_statuses) + query = query.Where(er => er.Envelope!.Status != ignore_status); + + return await query.Include(er => er.Envelope).Include(er => er.Receiver).ToListAsync(); + } } } \ No newline at end of file