Skip to content

Commit 79a00e3

Browse files
improve foreign key dependencies
1 parent 28c8ee5 commit 79a00e3

File tree

6 files changed

+159
-6
lines changed

6 files changed

+159
-6
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,108 @@
1+
"""improve foreign key dependencies
2+
3+
Revision ID: 3a3eef5d1886
4+
Revises: 9f381dcb9b95
5+
Create Date: 2024-09-24 07:04:20.424705+00:00
6+
7+
"""
8+
from alembic import op
9+
10+
# revision identifiers, used by Alembic.
11+
revision = "3a3eef5d1886"
12+
down_revision = "9f381dcb9b95"
13+
branch_labels = None
14+
depends_on = None
15+
16+
17+
def upgrade():
18+
# ### commands auto generated by Alembic - please adjust! ###
19+
op.create_foreign_key(
20+
None,
21+
"resource_tracker_pricing_plan_to_service",
22+
"services_meta_data",
23+
["service_key", "service_version"],
24+
["key", "version"],
25+
onupdate="CASCADE",
26+
ondelete="CASCADE",
27+
)
28+
op.drop_index(
29+
"ix_resource_tracker_pricing_plans_product_name",
30+
table_name="resource_tracker_pricing_plans",
31+
)
32+
op.create_foreign_key(
33+
"fk_rut_pricing_plans_product_name",
34+
"resource_tracker_pricing_plans",
35+
"products",
36+
["product_name"],
37+
["name"],
38+
onupdate="CASCADE",
39+
ondelete="CASCADE",
40+
)
41+
op.create_foreign_key(
42+
"fk_resource_tracker_pricing_units_costs_pricing_plan_id",
43+
"resource_tracker_pricing_unit_costs",
44+
"resource_tracker_pricing_plans",
45+
["pricing_plan_id"],
46+
["pricing_plan_id"],
47+
onupdate="CASCADE",
48+
ondelete="CASCADE",
49+
)
50+
op.create_foreign_key(
51+
"fk_resource_tracker_pricing_units_costs_pricing_unit_id",
52+
"resource_tracker_pricing_unit_costs",
53+
"resource_tracker_pricing_units",
54+
["pricing_unit_id"],
55+
["pricing_unit_id"],
56+
onupdate="CASCADE",
57+
ondelete="CASCADE",
58+
)
59+
op.create_foreign_key(
60+
"fk_wallets_product_name",
61+
"wallets",
62+
"products",
63+
["product_name"],
64+
["name"],
65+
onupdate="CASCADE",
66+
ondelete="CASCADE",
67+
)
68+
op.create_foreign_key(
69+
"fk_workspaces_product_name",
70+
"workspaces",
71+
"products",
72+
["product_name"],
73+
["name"],
74+
onupdate="CASCADE",
75+
ondelete="CASCADE",
76+
)
77+
# ### end Alembic commands ###
78+
79+
80+
def downgrade():
81+
# ### commands auto generated by Alembic - please adjust! ###
82+
op.drop_constraint("fk_workspaces_product_name", "workspaces", type_="foreignkey")
83+
op.drop_constraint("fk_wallets_product_name", "wallets", type_="foreignkey")
84+
op.drop_constraint(
85+
"fk_resource_tracker_pricing_units_costs_pricing_unit_id",
86+
"resource_tracker_pricing_unit_costs",
87+
type_="foreignkey",
88+
)
89+
op.drop_constraint(
90+
"fk_resource_tracker_pricing_units_costs_pricing_plan_id",
91+
"resource_tracker_pricing_unit_costs",
92+
type_="foreignkey",
93+
)
94+
op.drop_constraint(
95+
"fk_rut_pricing_plans_product_name",
96+
"resource_tracker_pricing_plans",
97+
type_="foreignkey",
98+
)
99+
op.create_index(
100+
"ix_resource_tracker_pricing_plans_product_name",
101+
"resource_tracker_pricing_plans",
102+
["product_name"],
103+
unique=False,
104+
)
105+
op.drop_constraint(
106+
None, "resource_tracker_pricing_plan_to_service", type_="foreignkey"
107+
)
108+
# ### end Alembic commands ###

packages/postgres-database/src/simcore_postgres_database/models/resource_tracker_pricing_plan_to_service.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,4 +45,10 @@
4545
doc="Option to mark default pricing plan for the service (ex. when there are more pricing plans for the same service)",
4646
),
4747
# ---------------------------
48+
sa.ForeignKeyConstraint(
49+
["service_key", "service_version"],
50+
["services_meta_data.key", "services_meta_data.version"],
51+
onupdate="CASCADE",
52+
ondelete="CASCADE",
53+
),
4854
)

packages/postgres-database/src/simcore_postgres_database/models/resource_tracker_pricing_plans.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,9 +33,14 @@ class PricingPlanClassification(str, enum.Enum):
3333
sa.Column(
3434
"product_name",
3535
sa.String,
36+
sa.ForeignKey(
37+
"products.name",
38+
onupdate="CASCADE",
39+
ondelete="CASCADE",
40+
name="fk_rut_pricing_plans_product_name",
41+
),
3642
nullable=False,
37-
doc="Product name",
38-
index=True,
43+
doc="Products unique name",
3944
),
4045
sa.Column(
4146
"display_name",

packages/postgres-database/src/simcore_postgres_database/models/resource_tracker_pricing_unit_costs.py

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,14 @@
2222
sa.Column(
2323
"pricing_plan_id",
2424
sa.BigInteger,
25+
sa.ForeignKey(
26+
"resource_tracker_pricing_plans.pricing_plan_id",
27+
name="fk_resource_tracker_pricing_units_costs_pricing_plan_id",
28+
onupdate="CASCADE",
29+
ondelete="CASCADE",
30+
),
2531
nullable=False,
26-
doc="Parent pricing plan",
32+
doc="Foreign key to pricing plan",
2733
index=True,
2834
),
2935
sa.Column(
@@ -35,8 +41,14 @@
3541
sa.Column(
3642
"pricing_unit_id",
3743
sa.BigInteger,
44+
sa.ForeignKey(
45+
"resource_tracker_pricing_units.pricing_unit_id",
46+
name="fk_resource_tracker_pricing_units_costs_pricing_unit_id",
47+
onupdate="CASCADE",
48+
ondelete="CASCADE",
49+
),
3850
nullable=False,
39-
doc="Parent pricing unit",
51+
doc="Foreign key to pricing unit",
4052
index=True,
4153
),
4254
sa.Column(

packages/postgres-database/src/simcore_postgres_database/models/wallets.py

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,18 @@ class WalletStatus(str, enum.Enum):
5050
),
5151
column_created_datetime(timezone=True),
5252
column_modified_datetime(timezone=True),
53-
sa.Column("product_name", sa.String, nullable=False, doc="Product name"),
53+
sa.Column(
54+
"product_name",
55+
sa.String,
56+
sa.ForeignKey(
57+
"products.name",
58+
onupdate="CASCADE",
59+
ondelete="CASCADE",
60+
name="fk_wallets_product_name",
61+
),
62+
nullable=False,
63+
doc="Products unique name",
64+
),
5465
)
5566

5667
# ------------------------ TRIGGERS

packages/postgres-database/src/simcore_postgres_database/models/workspaces.py

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,18 @@
3434
nullable=False,
3535
doc="Identifier of the group that owns this workspace (Should be just PRIMARY GROUP)",
3636
),
37-
sa.Column("product_name", sa.String, nullable=False, doc="Product name"),
37+
sa.Column(
38+
"product_name",
39+
sa.String,
40+
sa.ForeignKey(
41+
"products.name",
42+
onupdate="CASCADE",
43+
ondelete="CASCADE",
44+
name="fk_workspaces_product_name",
45+
),
46+
nullable=False,
47+
doc="Products unique name",
48+
),
3849
column_created_datetime(timezone=True),
3950
column_modified_datetime(timezone=True),
4051
)

0 commit comments

Comments
 (0)