Refactor SQL construction with StringBuilder for clarity

Refactored DeleteObjectProcedureHandler, InsertObjectProcedureHandler, and UpdateObjectProcedureHandler to use StringBuilder for building SQL command strings. This improves readability and maintainability without changing the logic or parameters. Added System.Text using directives as needed.
This commit is contained in:
2026-03-27 14:54:27 +01:00
parent b2544b64e3
commit 210ed9be8d
3 changed files with 128 additions and 32 deletions

View File

@@ -5,6 +5,7 @@ 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;
@@ -45,13 +46,17 @@ public class DeleteObjectProcedureHandler(IRepository repo, IOptionsMonitor<SqlE
try
{
var result = await repo.ExecuteQueryRawAsync(
"DECLARE @RC SMALLINT = 0; " +
"EXEC @RC = [dbo].[PRREC_DELETE_OBJECT] " +
"@pENTITY = @pENTITY, @pSTART = @pSTART, @pEND = @pEND, @pFORCE = @pFORCE; " +
"SELECT @RC;",
parameters,
cancel);
var sql = new StringBuilder()
.AppendLine("DECLARE @RC SMALLINT = 0;")
.AppendLine("EXEC @RC = [dbo].[PRREC_DELETE_OBJECT]")
.AppendLine(" @pENTITY = @pENTITY,")
.AppendLine(" @pSTART = @pSTART,")
.AppendLine(" @pEND = @pEND,")
.AppendLine(" @pFORCE = @pFORCE;")
.AppendLine("SELECT @RC;")
.ToString();
var result = await repo.ExecuteQueryRawAsync(sql, parameters, cancel);
// The stored procedure returns 0 on success, error codes > 0 on failure
if (result > 0)

View File

@@ -11,6 +11,7 @@ using ReC.Application.Endpoints.Commands;
using ReC.Application.Profile.Commands;
using ReC.Application.RecActions.Commands;
using ReC.Application.Results.Commands;
using System.Text;
namespace ReC.Application.Common.Procedures.InsertProcedure;
@@ -104,20 +105,64 @@ public class InsertObjectProcedureHandler(IRepository repo, IOptionsMonitor<SqlE
}
};
var sql = new StringBuilder()
.AppendLine("EXEC [dbo].[PRREC_INSERT_OBJECT]")
.AppendLine(" @pENTITY = @pENTITY,")
.AppendLine(" @pADDED_WHO = @pADDED_WHO,")
.AppendLine(" @pADDED_WHEN = @pADDED_WHEN,")
.AppendLine(" @pACTION_PROFILE_ID = @pACTION_PROFILE_ID,")
.AppendLine(" @pACTION_ACTIVE = @pACTION_ACTIVE,")
.AppendLine(" @pACTION_SEQUENCE = @pACTION_SEQUENCE,")
.AppendLine(" @pACTION_ENDPOINT_ID = @pACTION_ENDPOINT_ID,")
.AppendLine(" @pACTION_ENDPOINT_AUTH_ID = @pACTION_ENDPOINT_AUTH_ID,")
.AppendLine(" @pACTION_ENDPOINT_PARAMS_ID = @pACTION_ENDPOINT_PARAMS_ID,")
.AppendLine(" @pACTION_SQL_CONNECTION_ID = @pACTION_SQL_CONNECTION_ID,")
.AppendLine(" @pACTION_TYPE_ID = @pACTION_TYPE_ID,")
.AppendLine(" @pACTION_PRE_SQL = @pACTION_PRE_SQL,")
.AppendLine(" @pACTION_HEADER_SQL = @pACTION_HEADER_SQL,")
.AppendLine(" @pACTION_BODY_SQL = @pACTION_BODY_SQL,")
.AppendLine(" @pACTION_POST_SQL = @pACTION_POST_SQL,")
.AppendLine(" @pACTION_ERROR_ACTION_ID = @pACTION_ERROR_ACTION_ID,")
.AppendLine(" @pENDPOINT_ACTIVE = @pENDPOINT_ACTIVE,")
.AppendLine(" @pENDPOINT_DESCRIPTION = @pENDPOINT_DESCRIPTION,")
.AppendLine(" @pENDPOINT_URI = @pENDPOINT_URI,")
.AppendLine(" @pENDPOINT_AUTH_ACTIVE = @pENDPOINT_AUTH_ACTIVE,")
.AppendLine(" @pENDPOINT_AUTH_DESCRIPTION = @pENDPOINT_AUTH_DESCRIPTION,")
.AppendLine(" @pENDPOINT_AUTH_TYPE_ID = @pENDPOINT_AUTH_TYPE_ID,")
.AppendLine(" @pENDPOINT_AUTH_API_KEY = @pENDPOINT_AUTH_API_KEY,")
.AppendLine(" @pENDPOINT_AUTH_API_VALUE = @pENDPOINT_AUTH_API_VALUE,")
.AppendLine(" @pENDPOINT_AUTH_API_KEY_ADD_TO_ID = @pENDPOINT_AUTH_API_KEY_ADD_TO_ID,")
.AppendLine(" @pENDPOINT_AUTH_TOKEN = @pENDPOINT_AUTH_TOKEN,")
.AppendLine(" @pENDPOINT_AUTH_USERNAME = @pENDPOINT_AUTH_USERNAME,")
.AppendLine(" @pENDPOINT_AUTH_PASSWORD = @pENDPOINT_AUTH_PASSWORD,")
.AppendLine(" @pENDPOINT_AUTH_DOMAIN = @pENDPOINT_AUTH_DOMAIN,")
.AppendLine(" @pENDPOINT_AUTH_WORKSTATION = @pENDPOINT_AUTH_WORKSTATION,")
.AppendLine(" @pPROFILE_ACTIVE = @pPROFILE_ACTIVE,")
.AppendLine(" @pPROFILE_TYPE_ID = @pPROFILE_TYPE_ID,")
.AppendLine(" @pPROFILE_MANDANTOR = @pPROFILE_MANDANTOR,")
.AppendLine(" @pPROFILE_NAME = @pPROFILE_NAME,")
.AppendLine(" @pPROFILE_DESCRIPTION = @pPROFILE_DESCRIPTION,")
.AppendLine(" @pPROFILE_LOG_LEVEL_ID = @pPROFILE_LOG_LEVEL_ID,")
.AppendLine(" @pPROFILE_LANGUAGE_ID = @pPROFILE_LANGUAGE_ID,")
.AppendLine(" @pRESULT_ACTION_ID = @pRESULT_ACTION_ID,")
.AppendLine(" @pRESULT_STATUS_ID = @pRESULT_STATUS_ID,")
.AppendLine(" @pRESULT_HEADER = @pRESULT_HEADER,")
.AppendLine(" @pRESULT_BODY = @pRESULT_BODY,")
.AppendLine(" @pRESULT_INFO = @pRESULT_INFO,")
.AppendLine(" @pRESULT_ERROR = @pRESULT_ERROR,")
.AppendLine(" @pRESULT_TYPE_ID = @pRESULT_TYPE_ID,")
.AppendLine(" @pENDPOINT_PARAMS_ACTIVE = @pENDPOINT_PARAMS_ACTIVE,")
.AppendLine(" @pENDPOINT_PARAMS_DESCRIPTION = @pENDPOINT_PARAMS_DESCRIPTION,")
.AppendLine(" @pENDPOINT_PARAMS_GROUP_ID = @pENDPOINT_PARAMS_GROUP_ID,")
.AppendLine(" @pENDPOINT_PARAMS_SEQUENCE = @pENDPOINT_PARAMS_SEQUENCE,")
.AppendLine(" @pENDPOINT_PARAMS_KEY = @pENDPOINT_PARAMS_KEY,")
.AppendLine(" @pENDPOINT_PARAMS_VALUE = @pENDPOINT_PARAMS_VALUE,")
.AppendLine(" @oGUID = @oGUID OUTPUT")
.ToString();
try
{
await repo.ExecuteQueryRawAsync(
"EXEC [dbo].[PRREC_INSERT_OBJECT] " +
"@pENTITY = @pENTITY, @pADDED_WHO = @pADDED_WHO, @pADDED_WHEN = @pADDED_WHEN, " +
"@pACTION_PROFILE_ID = @pACTION_PROFILE_ID, @pACTION_ACTIVE = @pACTION_ACTIVE, @pACTION_SEQUENCE = @pACTION_SEQUENCE, @pACTION_ENDPOINT_ID = @pACTION_ENDPOINT_ID, @pACTION_ENDPOINT_AUTH_ID = @pACTION_ENDPOINT_AUTH_ID, @pACTION_ENDPOINT_PARAMS_ID = @pACTION_ENDPOINT_PARAMS_ID, @pACTION_SQL_CONNECTION_ID = @pACTION_SQL_CONNECTION_ID, @pACTION_TYPE_ID = @pACTION_TYPE_ID, @pACTION_PRE_SQL = @pACTION_PRE_SQL, @pACTION_HEADER_SQL = @pACTION_HEADER_SQL, @pACTION_BODY_SQL = @pACTION_BODY_SQL, @pACTION_POST_SQL = @pACTION_POST_SQL, @pACTION_ERROR_ACTION_ID = @pACTION_ERROR_ACTION_ID, " +
"@pENDPOINT_ACTIVE = @pENDPOINT_ACTIVE, @pENDPOINT_DESCRIPTION = @pENDPOINT_DESCRIPTION, @pENDPOINT_URI = @pENDPOINT_URI, " +
"@pENDPOINT_AUTH_ACTIVE = @pENDPOINT_AUTH_ACTIVE, @pENDPOINT_AUTH_DESCRIPTION = @pENDPOINT_AUTH_DESCRIPTION, @pENDPOINT_AUTH_TYPE_ID = @pENDPOINT_AUTH_TYPE_ID, @pENDPOINT_AUTH_API_KEY = @pENDPOINT_AUTH_API_KEY, @pENDPOINT_AUTH_API_VALUE = @pENDPOINT_AUTH_API_VALUE, @pENDPOINT_AUTH_API_KEY_ADD_TO_ID = @pENDPOINT_AUTH_API_KEY_ADD_TO_ID, @pENDPOINT_AUTH_TOKEN = @pENDPOINT_AUTH_TOKEN, @pENDPOINT_AUTH_USERNAME = @pENDPOINT_AUTH_USERNAME, @pENDPOINT_AUTH_PASSWORD = @pENDPOINT_AUTH_PASSWORD, @pENDPOINT_AUTH_DOMAIN = @pENDPOINT_AUTH_DOMAIN, @pENDPOINT_AUTH_WORKSTATION = @pENDPOINT_AUTH_WORKSTATION, " +
"@pPROFILE_ACTIVE = @pPROFILE_ACTIVE, @pPROFILE_TYPE_ID = @pPROFILE_TYPE_ID, @pPROFILE_MANDANTOR = @pPROFILE_MANDANTOR, @pPROFILE_NAME = @pPROFILE_NAME, @pPROFILE_DESCRIPTION = @pPROFILE_DESCRIPTION, @pPROFILE_LOG_LEVEL_ID = @pPROFILE_LOG_LEVEL_ID, @pPROFILE_LANGUAGE_ID = @pPROFILE_LANGUAGE_ID, " +
"@pRESULT_ACTION_ID = @pRESULT_ACTION_ID, @pRESULT_STATUS_ID = @pRESULT_STATUS_ID, @pRESULT_HEADER = @pRESULT_HEADER, @pRESULT_BODY = @pRESULT_BODY, @pRESULT_INFO = @pRESULT_INFO, @pRESULT_ERROR = @pRESULT_ERROR, @pRESULT_TYPE_ID = @pRESULT_TYPE_ID, " +
"@pENDPOINT_PARAMS_ACTIVE = @pENDPOINT_PARAMS_ACTIVE, @pENDPOINT_PARAMS_DESCRIPTION = @pENDPOINT_PARAMS_DESCRIPTION, @pENDPOINT_PARAMS_GROUP_ID = @pENDPOINT_PARAMS_GROUP_ID, @pENDPOINT_PARAMS_SEQUENCE = @pENDPOINT_PARAMS_SEQUENCE, @pENDPOINT_PARAMS_KEY = @pENDPOINT_PARAMS_KEY, @pENDPOINT_PARAMS_VALUE = @pENDPOINT_PARAMS_VALUE, " +
"@oGUID = @oGUID OUTPUT",
parameters,
cancel);
await repo.ExecuteQueryRawAsync(sql, parameters, cancel);
}
catch (SqlException ex)
{

View File

@@ -6,6 +6,7 @@ using Microsoft.Extensions.Options;
using ReC.Application.Common.Exceptions;
using ReC.Application.Common.Options;
using ReC.Application.Common.Procedures.UpdateProcedure.Dto;
using System.Text;
namespace ReC.Application.Common.Procedures.UpdateProcedure;
@@ -100,19 +101,64 @@ public class UpdateObjectProcedureHandler(IRepository repo, IOptionsMonitor<SqlE
try
{
var result = await repo.ExecuteQueryRawAsync(
"DECLARE @RC SMALLINT = 0; " +
"EXEC @RC = [dbo].[PRREC_UPDATE_OBJECT] " +
"@pENTITY = @pENTITY, @pGUID = @pGUID, @pCHANGED_WHO = @pCHANGED_WHO, @pCHANGED_WHEN = @pCHANGED_WHEN, " +
"@pACTION_PROFILE_ID = @pACTION_PROFILE_ID, @pACTION_ACTIVE = @pACTION_ACTIVE, @pACTION_SEQUENCE = @pACTION_SEQUENCE, @pACTION_ENDPOINT_ID = @pACTION_ENDPOINT_ID, @pACTION_ENDPOINT_AUTH_ID = @pACTION_ENDPOINT_AUTH_ID, @pACTION_ENDPOINT_PARAMS_ID = @pACTION_ENDPOINT_PARAMS_ID, @pACTION_SQL_CONNECTION_ID = @pACTION_SQL_CONNECTION_ID, @pACTION_TYPE_ID = @pACTION_TYPE_ID, @pACTION_PRE_SQL = @pACTION_PRE_SQL, @pACTION_HEADER_SQL = @pACTION_HEADER_SQL, @pACTION_BODY_SQL = @pACTION_BODY_SQL, @pACTION_POST_SQL = @pACTION_POST_SQL, @pACTION_ERROR_ACTION_ID = @pACTION_ERROR_ACTION_ID, " +
"@pENDPOINT_ACTIVE = @pENDPOINT_ACTIVE, @pENDPOINT_DESCRIPTION = @pENDPOINT_DESCRIPTION, @pENDPOINT_URI = @pENDPOINT_URI, " +
"@pENDPOINT_AUTH_ACTIVE = @pENDPOINT_AUTH_ACTIVE, @pENDPOINT_AUTH_DESCRIPTION = @pENDPOINT_AUTH_DESCRIPTION, @pENDPOINT_AUTH_TYPE_ID = @pENDPOINT_AUTH_TYPE_ID, @pENDPOINT_AUTH_API_KEY = @pENDPOINT_AUTH_API_KEY, @pENDPOINT_AUTH_API_VALUE = @pENDPOINT_AUTH_API_VALUE, @pENDPOINT_AUTH_API_KEY_ADD_TO_ID = @pENDPOINT_AUTH_API_KEY_ADD_TO_ID, @pENDPOINT_AUTH_TOKEN = @pENDPOINT_AUTH_TOKEN, @pENDPOINT_AUTH_USERNAME = @pENDPOINT_AUTH_USERNAME, @pENDPOINT_AUTH_PASSWORD = @pENDPOINT_AUTH_PASSWORD, @pENDPOINT_AUTH_DOMAIN = @pENDPOINT_AUTH_DOMAIN, @pENDPOINT_AUTH_WORKSTATION = @pENDPOINT_AUTH_WORKSTATION, " +
"@pENDPOINT_PARAMS_ACTIVE = @pENDPOINT_PARAMS_ACTIVE, @pENDPOINT_PARAMS_DESCRIPTION = @pENDPOINT_PARAMS_DESCRIPTION, @pENDPOINT_PARAMS_GROUP_ID = @pENDPOINT_PARAMS_GROUP_ID, @pENDPOINT_PARAMS_SEQUENCE = @pENDPOINT_PARAMS_SEQUENCE, @pENDPOINT_PARAMS_KEY = @pENDPOINT_PARAMS_KEY, @pENDPOINT_PARAMS_VALUE = @pENDPOINT_PARAMS_VALUE, " +
"@pPROFILE_ACTIVE = @pPROFILE_ACTIVE, @pPROFILE_TYPE_ID = @pPROFILE_TYPE_ID, @pPROFILE_MANDANTOR = @pPROFILE_MANDANTOR, @pPROFILE_NAME = @pPROFILE_NAME, @pPROFILE_DESCRIPTION = @pPROFILE_DESCRIPTION, @pPROFILE_LOG_LEVEL_ID = @pPROFILE_LOG_LEVEL_ID, @pPROFILE_LANGUAGE_ID = @pPROFILE_LANGUAGE_ID, @pPROFILE_FIRST_RUN = @pPROFILE_FIRST_RUN, @pPROFILE_LAST_RUN = @pPROFILE_LAST_RUN, @pPROFILE_LAST_RESULT = @pPROFILE_LAST_RESULT, " +
"@pRESULT_ACTION_ID = @pRESULT_ACTION_ID, @pRESULT_STATUS_ID = @pRESULT_STATUS_ID, @pRESULT_HEADER = @pRESULT_HEADER, @pRESULT_BODY = @pRESULT_BODY; " +
"SELECT @RC;",
parameters,
cancel);
var sql = new StringBuilder()
.AppendLine("DECLARE @RC SMALLINT = 0;")
.AppendLine("EXEC @RC = [dbo].[PRREC_UPDATE_OBJECT]")
.AppendLine(" @pENTITY = @pENTITY,")
.AppendLine(" @pGUID = @pGUID,")
.AppendLine(" @pCHANGED_WHO = @pCHANGED_WHO,")
.AppendLine(" @pCHANGED_WHEN = @pCHANGED_WHEN,")
.AppendLine(" @pACTION_PROFILE_ID = @pACTION_PROFILE_ID,")
.AppendLine(" @pACTION_ACTIVE = @pACTION_ACTIVE,")
.AppendLine(" @pACTION_SEQUENCE = @pACTION_SEQUENCE,")
.AppendLine(" @pACTION_ENDPOINT_ID = @pACTION_ENDPOINT_ID,")
.AppendLine(" @pACTION_ENDPOINT_AUTH_ID = @pACTION_ENDPOINT_AUTH_ID,")
.AppendLine(" @pACTION_ENDPOINT_PARAMS_ID = @pACTION_ENDPOINT_PARAMS_ID,")
.AppendLine(" @pACTION_SQL_CONNECTION_ID = @pACTION_SQL_CONNECTION_ID,")
.AppendLine(" @pACTION_TYPE_ID = @pACTION_TYPE_ID,")
.AppendLine(" @pACTION_PRE_SQL = @pACTION_PRE_SQL,")
.AppendLine(" @pACTION_HEADER_SQL = @pACTION_HEADER_SQL,")
.AppendLine(" @pACTION_BODY_SQL = @pACTION_BODY_SQL,")
.AppendLine(" @pACTION_POST_SQL = @pACTION_POST_SQL,")
.AppendLine(" @pACTION_ERROR_ACTION_ID = @pACTION_ERROR_ACTION_ID,")
.AppendLine(" @pENDPOINT_ACTIVE = @pENDPOINT_ACTIVE,")
.AppendLine(" @pENDPOINT_DESCRIPTION = @pENDPOINT_DESCRIPTION,")
.AppendLine(" @pENDPOINT_URI = @pENDPOINT_URI,")
.AppendLine(" @pENDPOINT_AUTH_ACTIVE = @pENDPOINT_AUTH_ACTIVE,")
.AppendLine(" @pENDPOINT_AUTH_DESCRIPTION = @pENDPOINT_AUTH_DESCRIPTION,")
.AppendLine(" @pENDPOINT_AUTH_TYPE_ID = @pENDPOINT_AUTH_TYPE_ID,")
.AppendLine(" @pENDPOINT_AUTH_API_KEY = @pENDPOINT_AUTH_API_KEY,")
.AppendLine(" @pENDPOINT_AUTH_API_VALUE = @pENDPOINT_AUTH_API_VALUE,")
.AppendLine(" @pENDPOINT_AUTH_API_KEY_ADD_TO_ID = @pENDPOINT_AUTH_API_KEY_ADD_TO_ID,")
.AppendLine(" @pENDPOINT_AUTH_TOKEN = @pENDPOINT_AUTH_TOKEN,")
.AppendLine(" @pENDPOINT_AUTH_USERNAME = @pENDPOINT_AUTH_USERNAME,")
.AppendLine(" @pENDPOINT_AUTH_PASSWORD = @pENDPOINT_AUTH_PASSWORD,")
.AppendLine(" @pENDPOINT_AUTH_DOMAIN = @pENDPOINT_AUTH_DOMAIN,")
.AppendLine(" @pENDPOINT_AUTH_WORKSTATION = @pENDPOINT_AUTH_WORKSTATION,")
.AppendLine(" @pENDPOINT_PARAMS_ACTIVE = @pENDPOINT_PARAMS_ACTIVE,")
.AppendLine(" @pENDPOINT_PARAMS_DESCRIPTION = @pENDPOINT_PARAMS_DESCRIPTION,")
.AppendLine(" @pENDPOINT_PARAMS_GROUP_ID = @pENDPOINT_PARAMS_GROUP_ID,")
.AppendLine(" @pENDPOINT_PARAMS_SEQUENCE = @pENDPOINT_PARAMS_SEQUENCE,")
.AppendLine(" @pENDPOINT_PARAMS_KEY = @pENDPOINT_PARAMS_KEY,")
.AppendLine(" @pENDPOINT_PARAMS_VALUE = @pENDPOINT_PARAMS_VALUE,")
.AppendLine(" @pPROFILE_ACTIVE = @pPROFILE_ACTIVE,")
.AppendLine(" @pPROFILE_TYPE_ID = @pPROFILE_TYPE_ID,")
.AppendLine(" @pPROFILE_MANDANTOR = @pPROFILE_MANDANTOR,")
.AppendLine(" @pPROFILE_NAME = @pPROFILE_NAME,")
.AppendLine(" @pPROFILE_DESCRIPTION = @pPROFILE_DESCRIPTION,")
.AppendLine(" @pPROFILE_LOG_LEVEL_ID = @pPROFILE_LOG_LEVEL_ID,")
.AppendLine(" @pPROFILE_LANGUAGE_ID = @pPROFILE_LANGUAGE_ID,")
.AppendLine(" @pPROFILE_FIRST_RUN = @pPROFILE_FIRST_RUN,")
.AppendLine(" @pPROFILE_LAST_RUN = @pPROFILE_LAST_RUN,")
.AppendLine(" @pPROFILE_LAST_RESULT = @pPROFILE_LAST_RESULT,")
.AppendLine(" @pRESULT_ACTION_ID = @pRESULT_ACTION_ID,")
.AppendLine(" @pRESULT_STATUS_ID = @pRESULT_STATUS_ID,")
.AppendLine(" @pRESULT_HEADER = @pRESULT_HEADER,")
.AppendLine(" @pRESULT_BODY = @pRESULT_BODY;")
.AppendLine("SELECT @RC;")
.ToString();
var result = await repo.ExecuteQueryRawAsync(sql, parameters, cancel);
// The stored procedure returns 0 on success, error codes > 0 on failure
if (result > 0)