Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion api/sql/schema/350-rule.condition.sql
Original file line number Diff line number Diff line change
Expand Up @@ -17,5 +17,5 @@ CREATE TABLE [rule].[condition] (
updatedOn DATETIME2 (0) NULL, -- date of the rule updated
[status] VARCHAR(20) NULL DEFAULT('pending'),
CONSTRAINT [pkRuleCondition] PRIMARY KEY CLUSTERED ([conditionId] ASC),
CONSTRAINT [ukRuleConditionName] UNIQUE ([name])
CONSTRAINT [ukRuleConditionName] UNIQUE ([name], [isDeleted])
)
49 changes: 43 additions & 6 deletions api/sql/schema/380-rule.alterTable.sql
Original file line number Diff line number Diff line change
Expand Up @@ -160,12 +160,49 @@ BEGIN
END
END

IF NOT EXISTS( SELECT 1 FROM sys.objects WHERE Name = N'ukRuleConditionName' )
BEGIN
DECLARE @updateName NVARCHAR(MAX) = 'UPDATE [rule].[condition] SET [name] = ''Rule '' + CAST(conditionId AS VARCHAR(20)) WHERE [name] IS NULL'
EXEC(@updateName)
ALTER TABLE [rule].[condition] ALTER COLUMN [name] NVARCHAR(100) NOT NULL
ALTER TABLE [rule].[condition] ADD CONSTRAINT [ukRuleConditionName] UNIQUE ([name])
-- Check if isDeleted already part of the index/constraint
IF NOT EXISTS (
SELECT 1
FROM sys.indexes i
JOIN sys.index_columns ic
ON i.object_id = ic.object_id
AND i.index_id = ic.index_id
JOIN sys.columns c
ON ic.object_id = c.object_id
AND ic.column_id = c.column_id
WHERE i.name = 'ukRuleConditionName'
AND OBJECT_NAME(i.object_id) = 'condition'
AND c.name = 'isDeleted'
)
BEGIN

-- Drop UNIQUE constraint if exists
IF EXISTS (
SELECT 1
FROM sys.key_constraints
WHERE name = 'ukRuleConditionName'
AND parent_object_id = OBJECT_ID('rule.condition')
)
BEGIN
ALTER TABLE [rule].[condition]
DROP CONSTRAINT ukRuleConditionName;
END

-- Drop index if exists (only if it was manually created)
IF EXISTS (
SELECT 1
FROM sys.indexes
WHERE name = 'ukRuleConditionName'
AND object_id = OBJECT_ID('rule.condition')
)
BEGIN
DROP INDEX ukRuleConditionName ON [rule].[condition];
END

-- Recreate unique index including isDeleted
CREATE UNIQUE INDEX ukRuleConditionName
ON [rule].[condition] ([name], isDeleted);

END

IF NOT EXISTS( SELECT 1 FROM sys.columns WHERE Name = N'description' AND OBJECT_ID = OBJECT_ID(N'rule.condition') )
Expand Down
18 changes: 15 additions & 3 deletions api/sql/schema/750-rule.rule.add.sql
Original file line number Diff line number Diff line change
Expand Up @@ -32,10 +32,22 @@ BEGIN TRY
SELECT [name]
FROM [rule].condition
WHERE [name] = (SELECT [name] FROM @condition)
AND isDeleted = 0
)
BEGIN
RAISERROR ('rule.duplicatedName', 16, 1)
END
BEGIN
RAISERROR ('rule.duplicatedName', 16, 1)
END

IF EXISTS
(
SELECT [name]
FROM [rule].condition
WHERE [priority] = (SELECT [priority] FROM @condition)
AND isDeleted = 0
)
BEGIN
RAISERROR ('rule.duplicatedPriority', 16, 1)
END

BEGIN TRANSACTION
DECLARE @DisableRuleMC TINYINT = (SELECT [value] FROM core.configuration WHERE [key] = 'DisableRuleM/C')
Expand Down
36 changes: 19 additions & 17 deletions api/sql/schema/750-rule.rule.addUnapproved.sql
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ BEGIN TRY
SELECT [name]
FROM [rule].condition
WHERE [name] = (SELECT [name] FROM @condition)
AND isDeleted = 0
)
OR
EXISTS
Expand All @@ -30,23 +31,24 @@ BEGIN TRY
RAISERROR ('rule.duplicatedName', 16, 1)
END

-- IF EXISTS
-- (
-- SELECT [priority]
-- FROM [rule].condition
-- WHERE [priority] = (SELECT [priority] FROM @condition)
-- AND isDeleted = 0
-- )
-- OR
-- EXISTS
-- (
-- SELECT [priority]
-- FROM [rule].conditionUnapproved
-- WHERE [priority] = (SELECT [priority] FROM @condition)
-- )
-- BEGIN
-- RAISERROR ('rule.duplicatedPriority', 16, 1)
-- END
IF EXISTS
(
SELECT [priority]
FROM [rule].condition
WHERE [priority] = (SELECT [priority] FROM @condition)
AND isDeleted = 0
)
OR
EXISTS
(
SELECT [priority]
FROM [rule].conditionUnapproved
WHERE [priority] = (SELECT [priority] FROM @condition)
AND isDeleted = 0
)
BEGIN
RAISERROR ('rule.duplicatedPriority', 16, 1)
END

BEGIN TRANSACTION

Expand Down
6 changes: 3 additions & 3 deletions api/sql/schema/750-rule.rule.approve.sql
Original file line number Diff line number Diff line change
Expand Up @@ -34,19 +34,19 @@ BEGIN TRY
WHEN EXISTS (
SELECT 1
FROM [rule].[conditionUnapproved]
WHERE conditionId = @conditionId AND isEnabled = 1
WHERE conditionId = @conditionId AND isEnabled = 1 AND isDeleted = 0
)
AND EXISTS (
SELECT 1
FROM [rule].[condition]
WHERE conditionId = @conditionId AND isEnabled = 0
WHERE conditionId = @conditionId AND isEnabled = 0 AND isDeleted = 0
) THEN 1 -- Both conditions are true
ELSE 0 -- At least one condition is false
END;

BEGIN TRANSACTION

IF EXISTS(SELECT 1 FROM [rule].[conditionUnapproved] WHERE conditionId = @conditionId AND isEnabled = 0)
IF EXISTS(SELECT 1 FROM [rule].[conditionUnapproved] WHERE conditionId = @conditionId AND isEnabled = 0 AND isDeleted = 0)
BEGIN
UPDATE c
SET isEnabled = 0,
Expand Down
3 changes: 2 additions & 1 deletion api/sql/schema/750-rule.rule.edit.sql
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,8 @@ BEGIN TRY
SELECT [name]
FROM [rule].condition
WHERE [name] = (SELECT [name] FROM @condition)
AND conditionId != @conditionId
AND isDeleted = 0
AND conditionId != @conditionId
)
BEGIN
RAISERROR ('rule.duplicatedName', 16, 1)
Expand Down
100 changes: 50 additions & 50 deletions test/jobs/test.rule.js
Original file line number Diff line number Diff line change
Expand Up @@ -133,56 +133,56 @@ module.exports = function test() {
name: 'get Rule 1',
params: ({rule1: {condition: [{conditionId}]}}) => ({conditionId})
}),
// same priority different name
ruleRuleAdd({
name: 'rule 2',
params: {
condition: {
name: ruleName,
operationEndDate: '2020-01-01T00:00:00.000Z',
priority: 122300
}
}
}),
ruleConditionGet({
name: 'get Rule 2',
params: ({'rule 2': {condition: [{conditionId}]}}) => ({conditionId})
}),
ruleConditionFetch({
name: 'fetch rule 2',
params: {
name: ruleName
}
}),
{
name: 'rule 2 to be duplicated - expected error',
method: 'rule.rule.add',
params: {
condition: {
name: ruleName,
priority: 145600
}
},
error: function(error, assert) {
assert.equal(error.type, 'rule.duplicatedName', 'Rule with this name already exists');
}
},
{
name: 'rule 2 to be duplicated but created in another BU - expected error',
method: 'rule.rule.add',
params: ({businessUnitId}) => ({
condition: {
name: ruleName,
priority: 145600
},
conditionActor: [{
actorId: businessUnitId
}]
}),
error: function(error, assert) {
assert.equal(error.type, 'rule.duplicatedName', 'Rule with this name already exists');
}
},
// // same priority different name
// ruleRuleAdd({
// name: 'rule 2',
// params: {
// condition: {
// name: ruleName,
// operationEndDate: '2020-01-01T00:00:00.000Z',
// priority: 122300
// }
// }
// }),
// ruleConditionGet({
// name: 'get Rule 2',
// params: ({'rule 2': {condition: [{conditionId}]}}) => ({conditionId})
// }),
// ruleConditionFetch({
// name: 'fetch rule 2',
// params: {
// name: ruleName
// }
// }),
// {
// name: 'rule 2 to be duplicated - expected error',
// method: 'rule.rule.add',
// params: {
// condition: {
// name: ruleName,
// priority: 145600
// }
// },
// error: function(error, assert) {
// assert.equal(error.type, 'rule.duplicatedName', 'Rule with this name already exists');
// }
// },
// {
// name: 'rule 2 to be duplicated but created in another BU - expected error',
// method: 'rule.rule.add',
// params: ({businessUnitId}) => ({
// condition: {
// name: ruleName,
// priority: 145600
// },
// conditionActor: [{
// actorId: businessUnitId
// }]
// }),
// error: function(error, assert) {
// assert.equal(error.type, 'rule.duplicatedName', 'Rule with this name already exists');
// }
// },
ruleRuleAdd({
name: 'rule 3 success general fields',
params: ({
Expand Down
2 changes: 1 addition & 1 deletion ui/react/pages/RuleProfile/Tabs/style.css
Original file line number Diff line number Diff line change
Expand Up @@ -112,7 +112,7 @@
color: #595959;
}
.labelWrap {
width: 30%;
width: 30% !important;
}
.outerWrap .labelWrap {
width: 25%;
Expand Down