diff --git a/EnvelopeGenerator.Application/EnvelopeReceivers/Commands/Create/CreateEnvelopeReceiverDtos.cs b/EnvelopeGenerator.Application/EnvelopeReceivers/Commands/Create/CreateEnvelopeReceiverDtos.cs
index 54de38a9..77aa2869 100644
--- a/EnvelopeGenerator.Application/EnvelopeReceivers/Commands/Create/CreateEnvelopeReceiverDtos.cs
+++ b/EnvelopeGenerator.Application/EnvelopeReceivers/Commands/Create/CreateEnvelopeReceiverDtos.cs
@@ -14,7 +14,7 @@ namespace EnvelopeGenerator.Application.EnvelopeReceivers.Commands.Create;
/// X-Position
/// Y-Position
/// Seite, auf der sie sich befindet
-public record Signature([Required] int X, [Required] int Y, [Required] int Page);
+public record Signature([Required] double X, [Required] double Y, [Required] int Page);
///
/// DTO für Empfänger, die erstellt oder abgerufen werden sollen.
diff --git a/EnvelopeGenerator.GeneratorAPI/Controllers/EnvelopeReceiverController.cs b/EnvelopeGenerator.GeneratorAPI/Controllers/EnvelopeReceiverController.cs
index 2c021dcb..ef9b77b6 100644
--- a/EnvelopeGenerator.GeneratorAPI/Controllers/EnvelopeReceiverController.cs
+++ b/EnvelopeGenerator.GeneratorAPI/Controllers/EnvelopeReceiverController.cs
@@ -7,9 +7,13 @@ using EnvelopeGenerator.Application.EnvelopeReceivers.Commands.Create;
using EnvelopeGenerator.Application.EnvelopeReceivers.Queries.Read;
using EnvelopeGenerator.Application.Envelopes.Queries.ReceiverName;
using EnvelopeGenerator.Domain.Entities;
+using EnvelopeGenerator.GeneratorAPI.Models;
using MediatR;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
+using Microsoft.Data.SqlClient;
+using Microsoft.Extensions.Options;
+using System.Data;
using System.Threading.Channels;
namespace EnvelopeGenerator.GeneratorAPI.Controllers;
@@ -39,6 +43,8 @@ public class EnvelopeReceiverController : ControllerBase
private readonly IDocumentExecutor _documentExecutor;
+ private readonly string _cnnStr;
+
///
/// Konstruktor für den EnvelopeReceiverController.
///
@@ -48,7 +54,7 @@ public class EnvelopeReceiverController : ControllerBase
///
///
///
- public EnvelopeReceiverController(ILogger logger, IEnvelopeReceiverService envelopeReceiverService, IMediator mediator, IMapper mapper, IEnvelopeExecutor envelopeExecutor, IEnvelopeReceiverExecutor erExecutor, IDocumentExecutor documentExecutor)
+ public EnvelopeReceiverController(ILogger logger, IEnvelopeReceiverService envelopeReceiverService, IMediator mediator, IMapper mapper, IEnvelopeExecutor envelopeExecutor, IEnvelopeReceiverExecutor erExecutor, IDocumentExecutor documentExecutor, IOptions csOpt)
{
_logger = logger;
_erService = envelopeReceiverService;
@@ -57,6 +63,7 @@ public class EnvelopeReceiverController : ControllerBase
_envelopeExecutor = envelopeExecutor;
_erExecutor = erExecutor;
_documentExecutor = documentExecutor;
+ _cnnStr = csOpt.Value.Value;
}
///
@@ -228,7 +235,45 @@ public class EnvelopeReceiverController : ControllerBase
if(document is null)
return StatusCode(StatusCodes.Status500InternalServerError, "Document creation is failed.");
+ #endregion
+ #region Add document element
+ string sql = @"
+ DECLARE @OUT_SUCCESS bit;
+
+ EXEC [dbo].[PRSIG_API_ADD_DOC_RECEIVER_ELEM]
+ @DOC_ID = @DOC_ID,
+ @RECEIVER_ID = @RECEIVER_ID,
+ @POSITION_X = @POSITION_X,
+ @POSITION_Y = @POSITION_Y,
+ @PAGE = @PAGE,
+ @OUT_SUCCESS = @OUT_SUCCESS OUTPUT;
+
+ SELECT @OUT_SUCCESS as [@OUT_SUCCESS];";
+
+ foreach(var rcv in res.SentRecipients)
+ foreach(var sign in request.Receivers.Where(r => r.EmailAddress == rcv.EmailAddress).FirstOrDefault()?.Signatures ?? Array.Empty())
+ {
+ using (SqlConnection conn = new(_cnnStr))
+ {
+ conn.Open();
+
+ using SqlCommand cmd = new SqlCommand(sql, conn);
+ cmd.CommandType = CommandType.Text;
+
+ cmd.Parameters.AddWithValue("@DOC_ID", document.Id);
+ cmd.Parameters.AddWithValue("@RECEIVER_ID", rcv.Id);
+ cmd.Parameters.AddWithValue("@POSITION_X", sign.X.ToString());
+ cmd.Parameters.AddWithValue("@POSITION_Y", sign.Y.ToString());
+ cmd.Parameters.AddWithValue("@PAGE", sign.Page.ToString());
+
+ using SqlDataReader reader = cmd.ExecuteReader();
+ if (reader.Read())
+ {
+ bool outSuccess = reader.GetBoolean(0);
+ }
+ }
+ }
#endregion
return Ok(res);
diff --git a/EnvelopeGenerator.GeneratorAPI/Models/ConnectionString.cs b/EnvelopeGenerator.GeneratorAPI/Models/ConnectionString.cs
new file mode 100644
index 00000000..0adb8e5b
--- /dev/null
+++ b/EnvelopeGenerator.GeneratorAPI/Models/ConnectionString.cs
@@ -0,0 +1,12 @@
+namespace EnvelopeGenerator.GeneratorAPI.Models;
+
+///
+///
+///
+public class ConnectionString
+{
+ ///
+ ///
+ ///
+ public string Value { get; set; } = string.Empty;
+}
diff --git a/EnvelopeGenerator.GeneratorAPI/Program.cs b/EnvelopeGenerator.GeneratorAPI/Program.cs
index 121d83a4..4c09198f 100644
--- a/EnvelopeGenerator.GeneratorAPI/Program.cs
+++ b/EnvelopeGenerator.GeneratorAPI/Program.cs
@@ -90,6 +90,9 @@ builder.Services.AddSwaggerGen(options =>
builder.Services.AddOpenApi();
// DbContext
var connStr = config.GetConnectionString("Default") ?? throw new InvalidOperationException("There is no default connection string in appsettings.json.");
+
+builder.Services.Configure(cs => cs.Value = connStr);
+
builder.Services.AddDbContext(options => options.UseSqlServer(connStr));
builder.Services.AddAuthHubClient(config.GetSection("AuthClientParams"));