Refactor stored procedure SQL construction and execution

Centralize stored procedure SQL generation in StoredProcedureBuilder,
allowing handlers to specify procedure name and return variable.
Removes manual SQL string building from DeleteObjectProcedure and
UpdateObjectProcedure handlers, reducing boilerplate and improving
maintainability.
This commit is contained in:
2026-03-30 09:30:07 +02:00
parent b66a49f74d
commit 93b5f976d3
3 changed files with 21 additions and 28 deletions

View File

@@ -5,7 +5,6 @@ using Microsoft.Data.SqlClient;
using Microsoft.Extensions.Options;
using ReC.Application.Common.Exceptions;
using ReC.Application.Common.Options;
using System.Text;
namespace ReC.Application.Common.Procedures.DeleteProcedure;
@@ -36,21 +35,15 @@ public class DeleteObjectProcedureHandler(IRepository repo, IOptionsMonitor<SqlE
{
public async Task<int> Handle(DeleteObjectProcedure request, CancellationToken cancel)
{
var sp = new StoredProcedureBuilder("EXEC @RC = [dbo].[PRREC_DELETE_OBJECT]")
var sp = new StoredProcedureBuilder("[dbo].[PRREC_DELETE_OBJECT]", "RC")
.Add("pENTITY", request.Entity)
.Add("pSTART", request.Start.ToString())
.Add("pEND", request.End.ToString())
.Add("pFORCE", request.Force);
var sql = new StringBuilder()
.AppendLine("DECLARE @RC SMALLINT = 0;")
.Append(sp.BuildSql()).AppendLine(";")
.AppendLine("SELECT @RC;")
.ToString();
try
{
var result = await repo.ExecuteQueryRawAsync(sql, sp.BuildParameters(), cancel);
var result = await repo.ExecuteQueryRawAsync(sp.BuildSql(), sp.BuildParameters(), cancel);
if (result > 0)
{