using DigitalData.Core.Infrastructure; using EnvelopeGenerator.Domain.Entities; using EnvelopeGenerator.Infrastructure.Contracts; using Microsoft.EntityFrameworkCore; namespace EnvelopeGenerator.Infrastructure.Repositories { public class EnvelopeReceiverReadOnlyRepository : CRUDRepository, IEnvelopeReceiverReadOnlyRepository { private readonly IEnvelopeRepository _envRepo; public EnvelopeReceiverReadOnlyRepository(EGDbContext dbContext, IEnvelopeRepository envelopeRepository) : base(dbContext, dbContext.EnvelopeReceiverReadOnlys) { _envRepo = envelopeRepository; } protected override IQueryable ReadOnly() { return base.ReadOnly() //TODO: add again when EnvelopeId data type is standardized //.Include(erro => erro.Envelope) .Include(erro => erro.Receiver); } public async override Task> ReadAllAsync() { var erros = await base.ReadAllAsync(); return await IncludeEnvelope(erros); } //TODO: Use IQueryable.Include instead of this when ID type is clarified. [Obsolete("Use IQueryable.Include instead of this when ID type is clarified.")] private async Task> IncludeEnvelope(params EnvelopeReceiverReadOnly[] erros) { foreach (var erro in erros) erro.Envelope = await _envRepo.ReadByIdAsync((int) erro.EnvelopeId); return erros; } //TODO: Use IQueryable.Include instead of this when ID type is clarified. [Obsolete("Use IQueryable.Include instead of this when ID type is clarified.")] private async Task IncludeEnvelope(T erros) where T : IEnumerable { foreach (var erro in erros) erro.Envelope = await _envRepo.ReadByIdAsync((int)erro.EnvelopeId); return erros; } } }