Refactor SQL execution and enhance envelope creation

- Updated `ISQLExecutor<TEntity>` to inherit from new `ISQLExecutor` interface for improved SQL execution flexibility.
- Added package references for `Dapper` and `DigitalData.Core` in project files.
- Modified `CreateEnvelopeCommand` to include `[BindNever]` on `UserId` for better model binding control.
- Refactored `CreateEnvelopeCommandHandler` to use `DynamicParameters` for SQL parameter handling.
- Updated `CreateEnvelopeSQL` to select only the top record for performance.
- Introduced `GetIdOrDefault` method in `ControllerExtensions` for user ID retrieval with fallback.
- Added `CreateAsync` method in `EnvelopeController` for envelope creation using `IMediator`.
- Ensured infrastructure project has necessary package references.
- Refactored `SQLExecutor` to implement new interface and simplified constructor.
- Introduced `SQLExecutorBaseEntity` for entity-specific SQL command execution.
This commit is contained in:
Developer 02
2025-05-05 10:15:36 +02:00
parent 5166f41941
commit a757749767
11 changed files with 131 additions and 29 deletions

View File

@@ -1,4 +1,5 @@
using MediatR;
using Microsoft.AspNetCore.Mvc.ModelBinding;
using System.ComponentModel.DataAnnotations;
using System.Text.Json.Serialization;
@@ -20,5 +21,6 @@ public record CreateEnvelopeCommand(
/// Id of receiver
/// </summary>
[JsonIgnore]
[BindNever]
public int? UserId { get; set; }
};

View File

@@ -1,4 +1,5 @@
using AutoMapper;
using Dapper;
using EnvelopeGenerator.Application.Contracts.SQLExecutor;
using EnvelopeGenerator.Domain.Entities;
using MediatR;
@@ -34,16 +35,14 @@ public class CreateEnvelopeCommandHandler : IRequestHandler<CreateEnvelopeComman
/// <returns></returns>
public async Task<CreateEnvelopeResponse?> Handle(CreateEnvelopeCommand request, CancellationToken cancellationToken)
{
object[] parameters = new object[]
{
new SqlParameter("@UserId", request.UserId),
new SqlParameter("@Title", request.Title),
new SqlParameter("@TfaEnabled", request.TFAEnabled ? 1 : 0),
new SqlParameter("@Message", request.Message)
};
var parameters = new DynamicParameters();
parameters.Add("@UserId", request.UserId);
parameters.Add("@Title", request.Title);
parameters.Add("@TfaEnabled", request.TFAEnabled ? 1 : 0);
parameters.Add("@Message", request.Message);
var envelope = await _sqlExecutor.Execute<CreateEnvelopeSQL>(cancellationToken, parameters).FirstOrDefaultAsync();
var envelopes = await _sqlExecutor.Execute<Envelope, CreateEnvelopeSQL>(parameters, cancellationToken);
return _mapper.Map<CreateEnvelopeResponse>(envelope);
return _mapper.Map<CreateEnvelopeResponse>(envelopes.FirstOrDefault());
}
}

View File

@@ -22,7 +22,7 @@ public class CreateEnvelopeSQL : ISQL<Envelope>
@MESSAGE = @Message,
@OUT_UID = @OUT_UID OUTPUT;
SELECT *
SELECT TOP(1) *
FROM [dbo].[TBSIG_ENVELOPE]
WHERE [ENVELOPE_UUID] = @OUT_UID;
";