using Dapper; using EnvelopeGenerator.Application.Contracts.SQLExecutor; using EnvelopeGenerator.Application.SQL; using EnvelopeGenerator.Domain.Entities; using Microsoft.Data.SqlClient; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Options; namespace EnvelopeGenerator.Infrastructure.Executor; public class DocumentExecutor : SQLExecutor, IDocumentExecutor { public DocumentExecutor(IServiceProvider provider, IOptions sqlExecutorParamsOptions) : base(provider, sqlExecutorParamsOptions) { } public async Task CreateDocumentAsync(string base64, string envelope_uuid, CancellationToken cancellation = default) { using var connection = new SqlConnection(Params.ConnectionString); var sql = Provider.GetRequiredService(); var formattedSql = string.Format(sql.Raw, base64, envelope_uuid); await connection.OpenAsync(cancellation); var documents = await connection.QueryAsync(formattedSql); return documents.FirstOrDefault() ?? throw new InvalidOperationException($"Document creation failed. Parameters:" + $"base64={base64}, envelope_uuid='{envelope_uuid}'."); } }