using DigitalData.Core.Infrastructure; using EnvelopeGenerator.Domain.Entities; using EnvelopeGenerator.Application.Contracts.Repositories; using Microsoft.EntityFrameworkCore; namespace EnvelopeGenerator.Infrastructure.Repositories; public class ReceiverRepository : CRUDRepository, IReceiverRepository { public ReceiverRepository(EGDbContext dbContext) : base(dbContext, dbContext.Receivers) { } protected IQueryable ReadBy(string? emailAddress = null, string? signature = null, bool withLastUsedName = true) { IQueryable query = _dbSet.AsNoTracking(); if(emailAddress is not null) query = query.Where(r => r.EmailAddress == emailAddress); if(signature is not null) query = query.Where(r => r.Signature == signature); // envelope receivers are ignored (with '[JsonIgnore]' attribute). The reson to add them is to get the las used receiver name if (withLastUsedName) { query = query.Include(r => r.EnvelopeReceivers!.OrderByDescending(er => er.EnvelopeId).Take(1)); } return query; } public async Task ReadByAsync(string? emailAddress = null, string? signature = null) => await ReadBy(emailAddress, signature).FirstOrDefaultAsync(); public async override Task> ReadAllAsync() => await ReadBy().ToListAsync(); }