From 2fd1cb1fe7551cd0d6dbca620045943060437af5 Mon Sep 17 00:00:00 2001 From: Joseph Doherty Date: Tue, 6 Jan 2026 13:20:42 -0500 Subject: [PATCH] feat(db): add validation stored procedure with THROW errors --- ..._CreateValidateSearchCriteriaProcedure.sql | 51 +++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 NEW/src/JdeScoping.Database/Scripts/048_CreateValidateSearchCriteriaProcedure.sql diff --git a/NEW/src/JdeScoping.Database/Scripts/048_CreateValidateSearchCriteriaProcedure.sql b/NEW/src/JdeScoping.Database/Scripts/048_CreateValidateSearchCriteriaProcedure.sql new file mode 100644 index 0000000..8027252 --- /dev/null +++ b/NEW/src/JdeScoping.Database/Scripts/048_CreateValidateSearchCriteriaProcedure.sql @@ -0,0 +1,51 @@ +-- Migration: 048_CreateValidateSearchCriteriaProcedure +-- Stored procedure for strict validation with THROW errors + +IF OBJECT_ID('dbo.usp_ValidateSearchCriteria', 'P') IS NOT NULL + DROP PROCEDURE dbo.usp_ValidateSearchCriteria; +GO + +CREATE PROCEDURE dbo.usp_ValidateSearchCriteria(@SearchId INT) +AS +BEGIN + SET NOCOUNT ON; + DECLARE @Criteria VARCHAR(MAX); + DECLARE @ErrorMsg NVARCHAR(400); + + -- Get criteria for the search + SELECT @Criteria = Criteria + FROM dbo.Search + WHERE ID = @SearchId; + + -- Validate search exists + IF @@ROWCOUNT = 0 + BEGIN + SET @ErrorMsg = CONCAT('Search ID ', @SearchId, ' not found'); + THROW 50001, @ErrorMsg, 1; + END + + -- Validate criteria not null + IF @Criteria IS NULL + BEGIN + SET @ErrorMsg = CONCAT('Search ID ', @SearchId, ' has no criteria'); + THROW 50002, @ErrorMsg, 1; + END + + -- Validate criteria not empty + IF @Criteria = '' + BEGIN + SET @ErrorMsg = CONCAT('Search ID ', @SearchId, ' has no criteria'); + THROW 50002, @ErrorMsg, 1; + END + + -- Validate JSON format + IF ISJSON(@Criteria) = 0 + BEGIN + SET @ErrorMsg = CONCAT('Search ID ', @SearchId, ' has invalid JSON'); + THROW 50003, @ErrorMsg, 1; + END + + -- If we get here, validation passed + RETURN 0; +END +GO