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