Skip to content

Commit 9327a94

Browse files
authored
Update pricing tier and feature object types to support inherited member relations through tenant (#84)
1 parent c9abeb1 commit 9327a94

11 files changed

+787
-10
lines changed

cmd/warrant/main.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,11 @@ import (
2525
)
2626

2727
const (
28-
MySQLDatastoreMigrationVersion = 000002
28+
MySQLDatastoreMigrationVersion = 000003
2929
MySQLEventstoreMigrationVersion = 000001
30-
PostgresDatastoreMigrationVersion = 000002
30+
PostgresDatastoreMigrationVersion = 000003
3131
PostgresEventstoreMigrationVersion = 000001
32-
SQLiteDatastoreMigrationVersion = 000002
32+
SQLiteDatastoreMigrationVersion = 000003
3333
SQLiteEventstoreMigrationVersion = 000001
3434
)
3535

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
BEGIN;
2+
3+
SET @currentDefaultPricingTierDefinition := '{"type": "pricing-tier", "relations": {"member": {"inheritIf": "anyOf", "rules": [{"inheritIf": "member", "ofType": "pricing-tier", "withRelation": "member"}, {"inheritIf": "member", "ofType": "tenant", "withRelation": "member"}]}}}';
4+
SET @oldDefaultPricingTierDefinition := '{"type": "pricing-tier", "relations": {"member": {"ofType": "pricing-tier", "inheritIf": "member", "withRelation": "member"}}}';
5+
6+
SET @currentDefaultFeatureDefinition := '{"type": "feature", "relations": {"member": {"inheritIf": "anyOf", "rules": [{"inheritIf": "member", "ofType": "feature", "withRelation": "member"}, {"ofType": "pricing-tier", "inheritIf": "member", "withRelation": "member"},{"inheritIf": "member", "ofType": "tenant", "withRelation": "member"}]}}}';
7+
SET @oldDefaultFeatureDefinition := '{"type": "feature", "relations": {"member": {"inheritIf": "anyOf", "rules": [{"inheritIf": "member", "ofType": "feature", "withRelation": "member"}, {"ofType": "pricing-tier", "inheritIf": "member", "withRelation": "member"}]}}}';
8+
9+
# Update default pricing tier object type to old format
10+
UPDATE objectType
11+
SET definition = @oldDefaultPricingTierDefinition
12+
WHERE
13+
typeId = "pricing-tier" AND
14+
JSON_CONTAINS(definition, @currentDefaultPricingTierDefinition) AND
15+
JSON_CONTAINS(@currentDefaultPricingTierDefinition, definition);
16+
17+
# Update default feature object type to old format
18+
UPDATE objectType
19+
SET definition = @oldDefaultFeatureDefinition
20+
WHERE
21+
typeId = "feature" AND
22+
JSON_CONTAINS(definition, @currentDefaultFeatureDefinition) AND
23+
JSON_CONTAINS(@currentDefaultFeatureDefinition, definition);
24+
25+
COMMIT;
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
BEGIN;
2+
3+
SET @currentDefaultPricingTierDefinition := '{"type": "pricing-tier", "relations": {"member": {"ofType": "pricing-tier", "inheritIf": "member", "withRelation": "member"}}}';
4+
SET @newDefaultPricingTierDefinition := '{"type": "pricing-tier", "relations": {"member": {"inheritIf": "anyOf", "rules": [{"inheritIf": "member", "ofType": "pricing-tier", "withRelation": "member"}, {"inheritIf": "member", "ofType": "tenant", "withRelation": "member"}]}}}';
5+
6+
SET @currentDefaultFeatureDefinition := '{"type": "feature", "relations": {"member": {"inheritIf": "anyOf", "rules": [{"inheritIf": "member", "ofType": "feature", "withRelation": "member"}, {"ofType": "pricing-tier", "inheritIf": "member", "withRelation": "member"}]}}}';
7+
SET @newDefaultFeatureDefinition := '{"type": "feature", "relations": {"member": {"inheritIf": "anyOf", "rules": [{"inheritIf": "member", "ofType": "feature", "withRelation": "member"}, {"ofType": "pricing-tier", "inheritIf": "member", "withRelation": "member"},{"inheritIf": "member", "ofType": "tenant", "withRelation": "member"}]}}}';
8+
9+
# Update the default pricing-tier object type to new format
10+
UPDATE objectType
11+
SET definition = @newDefaultPricingTierDefinition
12+
WHERE
13+
typeId = "pricing-tier" AND
14+
JSON_CONTAINS(definition, @currentDefaultPricingTierDefinition) AND
15+
JSON_CONTAINS(@currentDefaultPricingTierDefinition, definition);
16+
17+
# Update the default feature object type to new format
18+
UPDATE objectType
19+
SET definition = @newDefaultFeatureDefinition
20+
WHERE
21+
typeId = "feature" AND
22+
JSON_CONTAINS(definition, @currentDefaultFeatureDefinition) AND
23+
JSON_CONTAINS(@currentDefaultFeatureDefinition, definition);
24+
25+
COMMIT;

migrations/datastore/mysql/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ touch warrant.yaml
7676
# warrant.yaml
7777
port: 8000
7878
logLevel: 0
79-
enableAccessLog: "true"
79+
enableAccessLog: true
8080
apiKey: replace_with_api_key
8181
datastore:
8282
mysql:
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
BEGIN;
2+
3+
-- Update default pricing tier object type to old format
4+
UPDATE object_type
5+
SET definition = '{"type": "pricing-tier", "relations": {"member": {"ofType": "pricing-tier", "inheritIf": "member", "withRelation": "member"}}}'
6+
WHERE
7+
type_id = 'pricing-tier' AND
8+
definition @> '{"type": "pricing-tier", "relations": {"member": {"inheritIf": "anyOf", "rules": [{"inheritIf": "member", "ofType": "pricing-tier", "withRelation": "member"}, {"inheritIf": "member", "ofType": "tenant", "withRelation": "member"}]}}}'::jsonb AND
9+
'{"type": "pricing-tier", "relations": {"member": {"inheritIf": "anyOf", "rules": [{"inheritIf": "member", "ofType": "pricing-tier", "withRelation": "member"}, {"inheritIf": "member", "ofType": "tenant", "withRelation": "member"}]}}}'::jsonb @> definition;
10+
11+
-- Update default feature object type to old format
12+
UPDATE object_type
13+
SET definition = '{"type": "feature", "relations": {"member": {"inheritIf": "anyOf", "rules": [{"inheritIf": "member", "ofType": "feature", "withRelation": "member"}, {"ofType": "pricing-tier", "inheritIf": "member", "withRelation": "member"}]}}}'
14+
WHERE
15+
type_id = 'feature' AND
16+
definition @> '{"type": "feature", "relations": {"member": {"inheritIf": "anyOf", "rules": [{"inheritIf": "member", "ofType": "feature", "withRelation": "member"}, {"ofType": "pricing-tier", "inheritIf": "member", "withRelation": "member"},{"inheritIf": "member", "ofType": "tenant", "withRelation": "member"}]}}}'::jsonb AND
17+
'{"type": "feature", "relations": {"member": {"inheritIf": "anyOf", "rules": [{"inheritIf": "member", "ofType": "feature", "withRelation": "member"}, {"ofType": "pricing-tier", "inheritIf": "member", "withRelation": "member"},{"inheritIf": "member", "ofType": "tenant", "withRelation": "member"}]}}}'::jsonb @> definition;
18+
19+
COMMIT;
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
BEGIN;
2+
3+
-- Update the default pricing-tier object type to new format
4+
UPDATE object_type
5+
SET definition = '{"type": "pricing-tier", "relations": {"member": {"inheritIf": "anyOf", "rules": [{"inheritIf": "member", "ofType": "pricing-tier", "withRelation": "member"}, {"inheritIf": "member", "ofType": "tenant", "withRelation": "member"}]}}}'
6+
WHERE
7+
type_id = 'pricing-tier' AND
8+
definition @> '{"type": "pricing-tier", "relations": {"member": {"ofType": "pricing-tier", "inheritIf": "member", "withRelation": "member"}}}'::jsonb AND
9+
'{"type": "pricing-tier", "relations": {"member": {"ofType": "pricing-tier", "inheritIf": "member", "withRelation": "member"}}}'::jsonb @> definition;
10+
11+
-- Update the default feature object type to new format
12+
UPDATE object_type
13+
SET definition = '{"type": "feature", "relations": {"member": {"inheritIf": "anyOf", "rules": [{"inheritIf": "member", "ofType": "feature", "withRelation": "member"}, {"ofType": "pricing-tier", "inheritIf": "member", "withRelation": "member"},{"inheritIf": "member", "ofType": "tenant", "withRelation": "member"}]}}}'
14+
WHERE
15+
type_id = 'feature' AND
16+
definition @> '{"type": "feature", "relations": {"member": {"inheritIf": "anyOf", "rules": [{"inheritIf": "member", "ofType": "feature", "withRelation": "member"}, {"ofType": "pricing-tier", "inheritIf": "member", "withRelation": "member"}]}}}'::jsonb AND
17+
'{"type": "feature", "relations": {"member": {"inheritIf": "anyOf", "rules": [{"inheritIf": "member", "ofType": "feature", "withRelation": "member"}, {"ofType": "pricing-tier", "inheritIf": "member", "withRelation": "member"}]}}}'::jsonb @> definition;
18+
19+
COMMIT;

migrations/datastore/postgres/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ touch warrant.yaml
7777
# warrant.yaml
7878
port: 8000
7979
logLevel: 0
80-
enableAccessLog: "true"
80+
enableAccessLog: true
8181
apiKey: replace_with_api_key
8282
datastore:
8383
postgres:
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
-- Update default pricing tier object type to old format
2+
WITH
3+
currentDefaultPricingTierDefinition AS (SELECT '{"type": "pricing-tier", "relations": {"member": {"inheritIf": "anyOf", "rules": [{"inheritIf": "member", "ofType": "pricing-tier", "withRelation": "member"}, {"inheritIf": "member", "ofType": "tenant", "withRelation": "member"}]}}}' AS value),
4+
oldDefaultPricingTierDefinition AS (SELECT '{"type": "pricing-tier", "relations": {"member": {"ofType": "pricing-tier", "inheritIf": "member", "withRelation": "member"}}}' AS value)
5+
UPDATE objectType
6+
SET definition = (SELECT value FROM oldDefaultPricingTierDefinition)
7+
WHERE
8+
typeId = 'pricing-tier' AND
9+
definition = (SELECT value FROM currentDefaultPricingTierDefinition);
10+
11+
-- Update default feature object type to old format
12+
WITH
13+
currentDefaultFeatureDefinition AS (SELECT '{"type": "feature", "relations": {"member": {"inheritIf": "anyOf", "rules": [{"inheritIf": "member", "ofType": "feature", "withRelation": "member"}, {"ofType": "pricing-tier", "inheritIf": "member", "withRelation": "member"},{"inheritIf": "member", "ofType": "tenant", "withRelation": "member"}]}}}' AS value),
14+
oldDefaultFeatureDefinition AS (SELECT '{"type": "feature", "relations": {"member": {"inheritIf": "anyOf", "rules": [{"inheritIf": "member", "ofType": "feature", "withRelation": "member"}, {"ofType": "pricing-tier", "inheritIf": "member", "withRelation": "member"}]}}}' AS value)
15+
UPDATE objectType
16+
SET definition = (SELECT value FROM oldDefaultFeatureDefinition)
17+
WHERE
18+
typeId = 'feature' AND
19+
definition = (SELECT value FROM currentDefaultFeatureDefinition);
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
-- Update the default pricing-tier object type
2+
WITH
3+
currentDefaultPricingTierDefinition AS (SELECT '{"type": "pricing-tier", "relations": {"member": {"ofType": "pricing-tier", "inheritIf": "member", "withRelation": "member"}}}' AS value),
4+
newDefaultPricingTierDefinition AS (SELECT '{"type": "pricing-tier", "relations": {"member": {"inheritIf": "anyOf", "rules": [{"inheritIf": "member", "ofType": "pricing-tier", "withRelation": "member"}, {"inheritIf": "member", "ofType": "tenant", "withRelation": "member"}]}}}' AS value)
5+
UPDATE objectType
6+
SET definition = (SELECT value FROM newDefaultPricingTierDefinition)
7+
WHERE
8+
typeId = 'pricing-tier' AND
9+
definition = (SELECT value FROM currentDefaultPricingTierDefinition);
10+
11+
-- Update the default feature object type
12+
WITH
13+
currentDefaultFeatureDefinition AS (SELECT '{"type": "feature", "relations": {"member": {"inheritIf": "anyOf", "rules": [{"inheritIf": "member", "ofType": "feature", "withRelation": "member"}, {"ofType": "pricing-tier", "inheritIf": "member", "withRelation": "member"}]}}}' AS value),
14+
newDefaultFeatureDefinition AS (SELECT '{"type": "feature", "relations": {"member": {"inheritIf": "anyOf", "rules": [{"inheritIf": "member", "ofType": "feature", "withRelation": "member"}, {"ofType": "pricing-tier", "inheritIf": "member", "withRelation": "member"},{"inheritIf": "member", "ofType": "tenant", "withRelation": "member"}]}}}' AS value)
15+
UPDATE objectType
16+
SET definition = (SELECT value FROM newDefaultFeatureDefinition)
17+
WHERE
18+
typeId = 'feature' AND
19+
definition = (SELECT value FROM currentDefaultFeatureDefinition);

0 commit comments

Comments
 (0)