Skip to content

Commit

Permalink
fix: Updated credit account sequence to avoid duplication (#1526)
Browse files Browse the repository at this point in the history
john-fletcher-aot authored Aug 8, 2024
1 parent 9bdecd4 commit b4f7db9
Showing 16 changed files with 220 additions and 141 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
SET NOCOUNT ON
GO
DECLARE @TimestampCurrent int;
DECLARE @s nvarchar(1000);

SELECT @TimestampCurrent = DATEDIFF(SECOND, '19700101', sysutcdatetime());

SET @s = N'
ALTER SEQUENCE [permit].[ORBC_CREDIT_ACCOUNT_NUMBER_SEQ]
RESTART WITH ' + CAST(@TimestampCurrent AS nvarchar(10))

EXEC(@s)
46 changes: 0 additions & 46 deletions database/mssql/scripts/utility/legacy/revert-db-complete.sh

This file was deleted.

36 changes: 0 additions & 36 deletions database/mssql/scripts/utility/legacy/revert-db-single.sh

This file was deleted.

17 changes: 0 additions & 17 deletions database/mssql/scripts/utility/legacy/revert-moti-db.sh

This file was deleted.

3 changes: 3 additions & 0 deletions database/mssql/scripts/utility/refresh-sample-data.sh
Original file line number Diff line number Diff line change
@@ -26,4 +26,7 @@ sqlcmd -C -U ${ORBC_USER} -P "${ORBC_PASS}" -S ${ORBC_SERVER} -d ${ORBC_DATABASE
sqlcmd -C -U ${ORBC_USER} -P "${ORBC_PASS}" -S ${ORBC_SERVER} -d ${ORBC_DATABASE} -i ${SCRIPT_DIR}/sampledata/dbo.ORBC_TRAILER.Table.sql
sqlcmd -C -U ${ORBC_USER} -P "${ORBC_PASS}" -S ${ORBC_SERVER} -d ${ORBC_DATABASE} -i ${SCRIPT_DIR}/sampledata/dbo.ORBC_FEATURE_FLAG.Table.sql

echo "Setting credit account sequence restart to current timestamp (used only for lower environments)"
sqlcmd -C -U ${ORBC_USER} -P "${ORBC_PASS}" -S ${ORBC_SERVER} -d ${ORBC_DATABASE} -i ${SCRIPT_DIR}/sampledata/permit.ORBC_CREDIT_ACCOUNT_NUMBER_SEQ.sql

echo "Finished loading sample data"
38 changes: 26 additions & 12 deletions database/mssql/scripts/versions/revert/sample-ddl-revert.sql
Original file line number Diff line number Diff line change
@@ -9,22 +9,36 @@ SET NOCOUNT ON
GO

SET XACT_ABORT ON
GO
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
GO
BEGIN TRANSACTION
GO
IF @@ERROR <> 0 SET NOEXEC ON
GO

-- Sample of rolling back a Table creation wrapped in a TRANSACTION
--BEGIN TRY
-- BEGIN TRANSACTION
-- DROP TABLE [dbo].[ORBC_NEW_TABLE]
-- COMMIT
--END TRY
-- Revert code goes here

--BEGIN CATCH
-- IF @@TRANCOUNT > 0
-- ROLLBACK;
-- THROW
--END CATCH
IF @@ERROR <> 0 SET NOEXEC ON
GO

-- Also remember to rollback the version number from your migration!
DECLARE @VersionDescription VARCHAR(255)
SET @VersionDescription = '*** Enter description of DB change here ***'

INSERT [dbo].[ORBC_SYS_VERSION] ([VERSION_ID], [DESCRIPTION], [RELEASE_DATE]) VALUES (/*<<REPLACE VERSION NUMBER HERE>>*/, @VersionDescription, getutcdate())
IF @@ERROR <> 0 SET NOEXEC ON
GO

COMMIT TRANSACTION
GO
IF @@ERROR <> 0 SET NOEXEC ON
GO
DECLARE @Success AS BIT
SET @Success = 1
SET NOEXEC OFF
IF (@Success = 1) PRINT 'The database update succeeded'
ELSE BEGIN
IF @@TRANCOUNT > 0 ROLLBACK TRANSACTION
PRINT 'The database update failed'
END
GO
57 changes: 32 additions & 25 deletions database/mssql/scripts/versions/revert/v_30_ddl_revert.sql
Original file line number Diff line number Diff line change
@@ -1,18 +1,14 @@
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

SET NOCOUNT ON
GO

SET XACT_ABORT ON
GO

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
GO

BEGIN TRANSACTION
GO

@@ -132,32 +128,27 @@ BEGIN CATCH

EXEC orbc_error_handling
END CATCH;
GO
IF @@ERROR <> 0 SET NOEXEC ON
GO

BEGIN TRY
DELETE
FROM [dbo].[ORBC_DIRECTORY_TYPE]
WHERE DIRECTORY_TYPE = 'SERVICE_ACCOUNT'

ALTER TABLE [permit].[ORBC_TRANSACTION]

DROP COLUMN [PAYER_NAME]

ALTER TABLE [permit].[ORBC_TRANSACTION_HIST]

DROP COLUMN [PAYER_NAME]

COMMIT
END TRY
DELETE
FROM [dbo].[ORBC_DIRECTORY_TYPE]
WHERE DIRECTORY_TYPE = 'SERVICE_ACCOUNT'
IF @@ERROR <> 0 SET NOEXEC ON
GO

BEGIN CATCH
IF @@TRANCOUNT > 0
ROLLBACK;
ALTER TABLE [permit].[ORBC_TRANSACTION]
DROP COLUMN [PAYER_NAME]
IF @@ERROR <> 0 SET NOEXEC ON
GO

THROW
END CATCH
ALTER TABLE [permit].[ORBC_TRANSACTION_HIST]
DROP COLUMN [PAYER_NAME]
IF @@ERROR <> 0 SET NOEXEC ON
GO

DECLARE @VersionDescription VARCHAR(255)

SET @VersionDescription = 'Reverting initial creation ofservice account in directory table.'

INSERT [dbo].[ORBC_SYS_VERSION] (
@@ -170,3 +161,19 @@ VALUES (
@VersionDescription,
getutcdate()
)
IF @@ERROR <> 0 SET NOEXEC ON
GO

COMMIT TRANSACTION
GO
IF @@ERROR <> 0 SET NOEXEC ON
GO
DECLARE @Success AS BIT
SET @Success = 1
SET NOEXEC OFF
IF (@Success = 1) PRINT 'The database update succeeded'
ELSE BEGIN
IF @@TRANCOUNT > 0 ROLLBACK TRANSACTION
PRINT 'The database update failed'
END
GO
62 changes: 62 additions & 0 deletions database/mssql/scripts/versions/revert/v_38_ddl_revert.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET NOCOUNT ON
GO

SET XACT_ABORT ON
GO
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
GO
BEGIN TRANSACTION
GO
IF @@ERROR <> 0 SET NOEXEC ON
GO

-- Note that we are intentionally not going to reset the max value of the
-- credit account sequence back to 9999 - if it ever does come into play
-- it will be better to not have the 9999 limit there to avoid duplicates
-- in the database.
-- We will also maintain the column length at 15 characters in the event
-- that credit accounts were created that exceed that, and we would not
-- want to delete or modify those records once in place.
-- So, this should be considered a non-revertable change - if necessary it
-- must be reverted manually and very carefully.
-- Including commented-out SQL for the revert below for reference, if we
-- were to choose to do it.

--ALTER SEQUENCE [permit].[ORBC_CREDIT_ACCOUNT_NUMBER_SEQ]
-- MAXVALUE 9999
--IF @@ERROR <> 0 SET NOEXEC ON
--GO

--ALTER TABLE [permit].[ORBC_CREDIT_ACCOUNT]
-- ALTER COLUMN CREDIT_ACCOUNT_NUMBER nvarchar(6) NOT NULL
--IF @@ERROR <> 0 SET NOEXEC ON
--GO
--ALTER TABLE [permit].[ORBC_CREDIT_ACCOUNT_HIST]
-- ALTER COLUMN CREDIT_ACCOUNT_NUMBER nvarchar(6)
--IF @@ERROR <> 0 SET NOEXEC ON
--GO

DECLARE @VersionDescription VARCHAR(255)
SET @VersionDescription = 'Reverting credit account sequence updates'

INSERT [dbo].[ORBC_SYS_VERSION] ([VERSION_ID], [DESCRIPTION], [RELEASE_DATE]) VALUES (37, @VersionDescription, getutcdate())
IF @@ERROR <> 0 SET NOEXEC ON
GO

COMMIT TRANSACTION
GO
IF @@ERROR <> 0 SET NOEXEC ON
GO
DECLARE @Success AS BIT
SET @Success = 1
SET NOEXEC OFF
IF (@Success = 1) PRINT 'The database update succeeded'
ELSE BEGIN
IF @@TRANCOUNT > 0 ROLLBACK TRANSACTION
PRINT 'The database update failed'
END
GO
56 changes: 56 additions & 0 deletions database/mssql/scripts/versions/v_38_ddl.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET NOCOUNT ON
GO

SET XACT_ABORT ON
GO
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
GO
BEGIN TRANSACTION
GO
IF @@ERROR <> 0 SET NOEXEC ON
GO

-- Increase size of credit account number column because it will be using
-- a 10-digit suffix instead of 4 when we are in dev/test to avoid duplicates
-- in CFS when we refresh the dev/test databases
ALTER TABLE [permit].[ORBC_CREDIT_ACCOUNT]
ALTER COLUMN CREDIT_ACCOUNT_NUMBER nvarchar(12) NOT NULL
IF @@ERROR <> 0 SET NOEXEC ON
GO

ALTER TABLE [permit].[ORBC_CREDIT_ACCOUNT_HIST]
ALTER COLUMN CREDIT_ACCOUNT_NUMBER nvarchar(12)
IF @@ERROR <> 0 SET NOEXEC ON
GO

-- Set the sequence to have no max value (big int) so longer credit
-- account numbers may be created in dev/test
ALTER SEQUENCE [permit].[ORBC_CREDIT_ACCOUNT_NUMBER_SEQ]
NO MAXVALUE
IF @@ERROR <> 0 SET NOEXEC ON
GO

DECLARE @VersionDescription VARCHAR(255)
SET @VersionDescription = 'Update credit account sequence to avoid duplicates in dev and test'

INSERT [dbo].[ORBC_SYS_VERSION] ([VERSION_ID], [DESCRIPTION], [UPDATE_SCRIPT], [REVERT_SCRIPT], [RELEASE_DATE]) VALUES (38, @VersionDescription, '$(UPDATE_SCRIPT)', '$(REVERT_SCRIPT)', getutcdate())
IF @@ERROR <> 0 SET NOEXEC ON
GO

COMMIT TRANSACTION
GO
IF @@ERROR <> 0 SET NOEXEC ON
GO
DECLARE @Success AS BIT
SET @Success = 1
SET NOEXEC OFF
IF (@Success = 1) PRINT 'The database update succeeded'
ELSE BEGIN
IF @@TRANCOUNT > 0 ROLLBACK TRANSACTION
PRINT 'The database update failed'
END
GO
3 changes: 2 additions & 1 deletion database/mssql/test/versions/v_22_test.sh
Original file line number Diff line number Diff line change
@@ -19,5 +19,6 @@ TEST_22_2_RESULT=$(/opt/mssql-tools/bin/sqlcmd -U ${USER} -P "${PASS}" -S ${SERV
if [[ $TEST_22_2_RESULT -eq 22 ]]; then
echo "Test 22.2 passed: Correct number of role mappings inserted"
else
echo "******** Test 22.2 failed: Incorrect number of role mappings inserted"
echo "******** Test 22.2 failed: Incorrect number of role mappings inserted: "
echo $TEST_22_2_RESULT
fi
2 changes: 1 addition & 1 deletion database/mssql/test/versions/v_28_5_test.sql
Original file line number Diff line number Diff line change
@@ -2,4 +2,4 @@
SET NOCOUNT ON

SELECT COUNT(*) FROM $(DB_NAME).[permit].[ORBC_CREDIT_ACCOUNT_STATUS_TYPE]
WHERE CREDIT_ACCOUNT_STATUS_TYPE IN ('ONHOLD','ACTIVE','SETUP','CLOSED')
WHERE CREDIT_ACCOUNT_STATUS_TYPE IN ('ONHOLD','ACTIVE','SETUP_FAIL','CLOSED')
3 changes: 2 additions & 1 deletion database/mssql/test/versions/v_32_test.sh
Original file line number Diff line number Diff line change
@@ -9,7 +9,8 @@ parse_options "${USAGE}" ${@}
# TESTS_DIR variable set by the calling test-runner script.

TEST_32_1_RESULT=$(/opt/mssql-tools/bin/sqlcmd -U ${USER} -P "${PASS}" -S ${SERVER} -v DB_NAME=${DATABASE} -h -1 -i ${TESTS_DIR}/v_32_1_test.sql | xargs)
if [[ $TEST_32_1_RESULT -eq 30 ]]; then
# Returns 60 for an nvarchar(30) data type due to larger nvarchar storage
if [[ $TEST_32_1_RESULT -eq 60 ]]; then
echo "Test 32.1 passed: APP_LAST_UPDATE_USERID column created in ORBC_POLICY_CONFIGURATION"
else
echo "******** Test 32.1 failed: APP_LAST_UPDATE_USERID column missing in ORBC_POLICY_CONFIGURATION"
2 changes: 1 addition & 1 deletion database/mssql/test/versions/v_33_1_test.sql
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
-- Test that the role types have been inserted correctly
SET NOCOUNT ON

SELECT COUNT(*) FROM $(DB_NAME).[access].[ORBC_ROLE_TYPE]
SELECT COUNT(*) FROM $(DB_NAME).[access].[ORBC_GROUP_ROLE]
WHERE ROLE_TYPE ='ORBC-READ-CREDIT-ACCOUNT' AND USER_AUTH_GROUP_TYPE IN ('PPCCLERK', 'CTPO', 'HQADMIN')
4 changes: 4 additions & 0 deletions database/mssql/test/versions/v_38_1_test.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
-- Test that the APP_LAST_UPDATE_USERID column has been added correctly
SET NOCOUNT ON

select COL_LENGTH('$(DB_NAME).[permit].[ORBC_CREDIT_ACCOUNT]', 'CREDIT_ACCOUNT_NUMBER')
18 changes: 18 additions & 0 deletions database/mssql/test/versions/v_38_test.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
#!/bin/bash

# Retrieve arguments
source ${SCRIPT_DIR}/utility/getopt.sh
USAGE="-u USER -p PASS -s SERVER -d DATABASE"
parse_options "${USAGE}" ${@}

# All database tests for database version 32 are run from this shell script.
# TESTS_DIR variable set by the calling test-runner script.

TEST_38_1_RESULT=$(/opt/mssql-tools/bin/sqlcmd -U ${USER} -P "${PASS}" -S ${SERVER} -v DB_NAME=${DATABASE} -h -1 -i ${TESTS_DIR}/v_38_1_test.sql | xargs)
# Returns 30 for an nvarchar(15) data type due to larger nvarchar storage
if [[ $TEST_38_1_RESULT -eq 30 ]]; then
echo "Test 38.1 passed: CREDIT_ACCOUNT_NUMBER column length updated correctly"
else
echo "******** Test 38.1 failed: CREDIT_ACCOUNT_NUMBER column length not updated correctly: "
echo $TEST_38_1_RESULT
fi
Original file line number Diff line number Diff line change
@@ -76,7 +76,7 @@ export class CreditAccount extends Base {
* The unique number associated with the credit account. Its the ORBC_CREDIT_ACCOUNT_NUMBER_SEQ prefixed with WS.
*/
@AutoMap()
@Column({ length: 6, name: 'CREDIT_ACCOUNT_NUMBER', nullable: false })
@Column({ length: 12, name: 'CREDIT_ACCOUNT_NUMBER', nullable: false })
creditAccountNumber: string;

/**

0 comments on commit b4f7db9

Please sign in to comment.