using Dapper; using DigitalData.UserManager.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 EnvelopeExecutor : SQLExecutor, IEnvelopeExecutor { private readonly IUserRepository _userRepository; public EnvelopeExecutor(IServiceProvider provider, IOptions sqlExecutorParamsOptions, IUserRepository userRepository) : base(provider, sqlExecutorParamsOptions) { _userRepository = userRepository; } public async Task CreateEnvelopeAsync(DynamicParameters parameters, bool addUser = true, CancellationToken cancellation = default) { using var connection = new SqlConnection(Params.ConnectionString); var sql = Provider.GetRequiredService(); await connection.OpenAsync(cancellation); var envelopes = await connection.QueryAsync(sql.Raw, parameters); var envelope = envelopes.FirstOrDefault(); if (envelope is null) return null; // Add User if (addUser) { var user = await _userRepository.ReadByIdAsync(envelope.UserId); envelope.User = user; } return envelope; } }