diff --git a/src/ReC.Application/Common/Procedures/UpdateProcedure/UpdateObjectProcedure.cs b/src/ReC.Application/Common/Procedures/UpdateProcedure/UpdateObjectProcedure.cs index 4a3e003..99fe9ce 100644 --- a/src/ReC.Application/Common/Procedures/UpdateProcedure/UpdateObjectProcedure.cs +++ b/src/ReC.Application/Common/Procedures/UpdateProcedure/UpdateObjectProcedure.cs @@ -1,13 +1,15 @@ using DigitalData.Core.Abstraction.Application.Repository; +using DigitalData.Core.Exceptions; using MediatR; using Microsoft.Data.SqlClient; using ReC.Application.Common.Exceptions; +using ReC.Application.Common.Options; using ReC.Application.EndpointAuth.Commands; using ReC.Application.EndpointParams.Commands; using ReC.Application.Endpoints.Commands; -using ReC.Application.Results.Commands; using ReC.Application.Profile.Commands; using ReC.Application.RecActions.Commands; +using ReC.Application.Results.Commands; namespace ReC.Application.Common.Procedures.UpdateProcedure; @@ -47,7 +49,7 @@ public static class UpdateObjectProcedureExtensions } } -public class UpdateObjectProcedureHandler(IRepository repo) : IRequestHandler +public class UpdateObjectProcedureHandler(IRepository repo, SqlExceptionOptions sqlExceptionOptions) : IRequestHandler { public async Task Handle(UpdateObjectProcedure request, CancellationToken cancel) { @@ -113,26 +115,36 @@ public class UpdateObjectProcedureHandler(IRepository repo) : IRequestHandler 0 on failure - if (result > 0) + try { - throw new UpdateObjectFailedException(request, $"UpdateObject stored procedure failed with error code: {result}"); - } + var result = await repo.ExecuteQueryRawAsync( + "DECLARE @RC SMALLINT = 0; " + + "EXEC @RC = [dbo].[PRREC_UPDATE_OBJECT] " + + "@pENTITY, @pGUID, @pCHANGED_WHO, @pCHANGED_WHEN, " + + "@pACTION_PROFILE_ID, @pACTION_ACTIVE, @pACTION_SEQUENCE, @pACTION_ENDPOINT_ID, @pACTION_ENDPOINT_AUTH_ID, @pACTION_ENDPOINT_PARAMS_ID, @pACTION_SQL_CONNECTION_ID, @pACTION_TYPE_ID, @pACTION_PRE_SQL, @pACTION_HEADER_SQL, @pACTION_BODY_SQL, @pACTION_POST_SQL, @pACTION_ERROR_ACTION_ID, " + + "@pENDPOINT_ACTIVE, @pENDPOINT_DESCRIPTION, @pENDPOINT_URI, " + + "@pENDPOINT_AUTH_ACTIVE, @pENDPOINT_AUTH_DESCRIPTION, @pENDPOINT_AUTH_TYPE_ID, @pENDPOINT_AUTH_API_KEY, @pENDPOINT_AUTH_API_VALUE, @pENDPOINT_AUTH_API_KEY_ADD_TO_ID, @pENDPOINT_AUTH_TOKEN, @pENDPOINT_AUTH_USERNAME, @pENDPOINT_AUTH_PASSWORD, @pENDPOINT_AUTH_DOMAIN, @pENDPOINT_AUTH_WORKSTATION, " + + "@pENDPOINT_PARAMS_ACTIVE, @pENDPOINT_PARAMS_DESCRIPTION, @pENDPOINT_PARAMS_GROUP_ID, @pENDPOINT_PARAMS_SEQUENCE, @pENDPOINT_PARAMS_KEY, @pENDPOINT_PARAMS_VALUE, " + + "@pPROFILE_ACTIVE, @pPROFILE_TYPE_ID, @pPROFILE_MANDANTOR, @pPROFILE_NAME, @pPROFILE_DESCRIPTION, @pPROFILE_LOG_LEVEL_ID, @pPROFILE_LANGUAGE_ID, @pPROFILE_FIRST_RUN, @pPROFILE_LAST_RUN, @pPROFILE_LAST_RESULT, " + + "@pRESULT_ACTION_ID, @pRESULT_STATUS_ID, @pRESULT_HEADER, @pRESULT_BODY; " + + "SELECT @RC;", + parameters, + cancel); - return result; + // The stored procedure returns 0 on success, error codes > 0 on failure + if (result > 0) + { + throw new UpdateObjectFailedException(request, $"UpdateObject stored procedure failed with error code: {result}"); + } + + return result; + } + catch (SqlException ex) + { + if (sqlExceptionOptions.SqlExceptionNumber.Contains(ex.Number)) + throw new BadRequestException(ex.Message, ex); + else + throw; + } } }