diff --git a/EnvelopeGenerator.Infrastructure/Executor/EnvelopeExecutor.cs b/EnvelopeGenerator.Infrastructure/Executor/EnvelopeExecutor.cs index dca802ba..9b16ec1e 100644 --- a/EnvelopeGenerator.Infrastructure/Executor/EnvelopeExecutor.cs +++ b/EnvelopeGenerator.Infrastructure/Executor/EnvelopeExecutor.cs @@ -1,6 +1,5 @@ using Dapper; using DigitalData.UserManager.Application.Contracts.Repositories; -using DigitalData.UserManager.Infrastructure.Repositories; using EnvelopeGenerator.Application.Contracts.SQLExecutor; using EnvelopeGenerator.Application.SQL; using EnvelopeGenerator.Domain.Entities; @@ -15,7 +14,7 @@ public class EnvelopeExecutor : SQLExecutor, IEnvelopeExecutor { private readonly IUserRepository _userRepository; - public EnvelopeExecutor(ILogger logger, IServiceProvider provider, IOptions sqlExecutorParamsOptions, IUserRepository userRepository) : base(provider, sqlExecutorParamsOptions) + public EnvelopeExecutor(IServiceProvider provider, IOptions sqlExecutorParamsOptions, IUserRepository userRepository) : base(provider, sqlExecutorParamsOptions) { _userRepository = userRepository; } diff --git a/EnvelopeGenerator.Infrastructure/Executor/EnvelopeReceiverExecutor.cs b/EnvelopeGenerator.Infrastructure/Executor/EnvelopeReceiverExecutor.cs index 080d5ab3..7120aaa4 100644 --- a/EnvelopeGenerator.Infrastructure/Executor/EnvelopeReceiverExecutor.cs +++ b/EnvelopeGenerator.Infrastructure/Executor/EnvelopeReceiverExecutor.cs @@ -1,7 +1,35 @@ -using EnvelopeGenerator.Application.Contracts.SQLExecutor; +using Dapper; +using EnvelopeGenerator.Application.Contracts.Repositories; +using EnvelopeGenerator.Application.Contracts.SQLExecutor; +using EnvelopeGenerator.Application.SQL; +using EnvelopeGenerator.Domain.Entities; +using Microsoft.Data.SqlClient; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Options; namespace EnvelopeGenerator.Infrastructure.Executor; -public class EnvelopeReceiverExecutor: IEnvelopeReceiverExecutor +public class EnvelopeReceiverExecutor: SQLExecutor, IEnvelopeReceiverExecutor { + private readonly IEnvelopeReceiverRepository _erRepository; + + public EnvelopeReceiverExecutor(ILogger logger, IServiceProvider provider, IOptions sqlExecutorParamsOptions, IEnvelopeReceiverRepository erRepository) : base(provider, sqlExecutorParamsOptions) + { + _erRepository = erRepository; + } + + public async Task AddEnvelopeReceiverAsync(DynamicParameters parameters, bool addEnvelope = true, CancellationToken cancellation = default) + { + using var connection = new SqlConnection(Params.ConnectionString); + var sql = Provider.GetRequiredService(); + await connection.OpenAsync(cancellation); + var envelopeReceivers = await connection.QueryAsync(sql.Raw, parameters); + var er = envelopeReceivers.FirstOrDefault(); + + if (er is null) + return null; + + return await _erRepository.ReadByIdAsync(envelopeId: er.EnvelopeId, receiverId: er.ReceiverId); + } } diff --git a/EnvelopeGenerator.Infrastructure/Repositories/EnvlopeReceiverRepository.cs b/EnvelopeGenerator.Infrastructure/Repositories/EnvlopeReceiverRepository.cs index 8d5f471b..279d7f77 100644 --- a/EnvelopeGenerator.Infrastructure/Repositories/EnvlopeReceiverRepository.cs +++ b/EnvelopeGenerator.Infrastructure/Repositories/EnvlopeReceiverRepository.cs @@ -48,9 +48,19 @@ public class EnvelopeReceiverRepository : CRUDRepository CountAsync(string uuid, string signature) => await ReadWhere(uuid: uuid, signature: signature).CountAsync(); - private IQueryable ReadById(int envelopeId, int receiverId, bool readOnly = true) + private IQueryable ReadById(int envelopeId, int receiverId, bool withEnvelope = true, bool withReceiver = true, bool readOnly = true) { var query = readOnly ? _dbSet.AsNoTracking() : _dbSet; + + if (withEnvelope) + query = query + .Include(er => er.Envelope).ThenInclude(e => e!.Documents!).ThenInclude(d => d.Elements!.Where(e => e.Receiver!.Id == receiverId)) + .Include(er => er.Envelope).ThenInclude(e => e!.History) + .Include(er => er.Envelope).ThenInclude(e => e!.User); + + if (withReceiver) + query = query.Include(er => er.Receiver); + return query.Where(er => er.EnvelopeId == envelopeId && er.ReceiverId == receiverId); }