Skip to content

Commit 778fc53

Browse files
RUT refactoring (adding key & version)
1 parent fb5c095 commit 778fc53

28 files changed

+439
-179
lines changed

packages/models-library/src/models_library/api_schemas_resource_usage_tracker/licensed_items_checkouts.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515
class LicensedItemCheckoutGet(BaseModel):
1616
licensed_item_checkout_id: LicensedItemCheckoutID
1717
licensed_item_id: LicensedItemID
18+
key: str
19+
version: str
1820
wallet_id: WalletID
1921
user_id: UserID
2022
user_email: str
@@ -30,6 +32,8 @@ class LicensedItemCheckoutGet(BaseModel):
3032
{
3133
"licensed_item_checkout_id": "beb16d18-d57d-44aa-a638-9727fa4a72ef",
3234
"licensed_item_id": "303942ef-6d31-4ba8-afbe-dbb1fce2a953",
35+
"key": "Duke",
36+
"version": "1.0.0",
3337
"wallet_id": 1,
3438
"user_id": 1,
3539
"user_email": "[email protected]",

packages/models-library/src/models_library/api_schemas_resource_usage_tracker/licensed_items_purchases.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ class LicensedItemPurchaseGet(BaseModel):
1717
licensed_item_purchase_id: LicensedItemPurchaseID
1818
product_name: ProductName
1919
licensed_item_id: LicensedItemID
20+
key: str
21+
version: str
2022
wallet_id: WalletID
2123
wallet_name: str
2224
pricing_unit_cost_id: PricingUnitCostId

packages/models-library/src/models_library/api_schemas_webserver/licensed_items_checkouts.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@
1717
class LicensedItemCheckoutRpcGet(BaseModel):
1818
licensed_item_checkout_id: LicensedItemCheckoutID
1919
licensed_item_id: LicensedItemID
20+
key: str
21+
version: str
2022
wallet_id: WalletID
2123
user_id: UserID
2224
product_name: ProductName
@@ -29,6 +31,8 @@ class LicensedItemCheckoutRpcGet(BaseModel):
2931
{
3032
"licensed_item_checkout_id": "633ef980-6f3e-4b1a-989a-bd77bf9a5d6b",
3133
"licensed_item_id": "0362b88b-91f8-4b41-867c-35544ad1f7a1",
34+
"key": "Duke",
35+
"version": "1.0.0",
3236
"wallet_id": 6,
3337
"user_id": 27845,
3438
"product_name": "osparc",

packages/models-library/src/models_library/licenses.py

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -69,26 +69,23 @@ class LicensedItemDB(BaseModel):
6969
licensed_item_id: LicensedItemID
7070
display_name: str
7171

72-
licensed_resource_name: str
72+
key: str
73+
version: str
7374
licensed_resource_type: LicensedResourceType
74-
licensed_resource_data: dict[str, Any] | None
7575

76-
pricing_plan_id: PricingPlanId | None
77-
product_name: ProductName | None
76+
pricing_plan_id: PricingPlanId
77+
product_name: ProductName
7878

7979
# states
8080
created: datetime
8181
modified: datetime
82-
trashed: datetime | None
8382

8483
model_config = ConfigDict(from_attributes=True)
8584

8685

87-
class LicensedItemUpdateDB(BaseModel):
86+
class LicensedItemPatchDB(BaseModel):
8887
display_name: str | None = None
89-
licensed_resource_name: str | None = None
9088
pricing_plan_id: PricingPlanId | None = None
91-
trash: bool | None = None
9289

9390

9491
class LicensedResourceDB(BaseModel):

packages/models-library/src/models_library/resource_tracker_licensed_items_purchases.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@
1717
class LicensedItemsPurchasesCreate(BaseModel):
1818
product_name: ProductName
1919
licensed_item_id: LicensedItemID
20+
key: str
21+
version: str
2022
wallet_id: WalletID
2123
wallet_name: str
2224
pricing_plan_id: PricingPlanId

packages/postgres-database/src/simcore_postgres_database/migration/versions/68777fdf9539_add_licensed_resources.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,10 @@
1717

1818

1919
# Reuse the existing Enum type
20-
existing_enum = sa.Enum("VIP_MODEL", name="licensedresourcetype", native_enum=False)
20+
# existing_enum = sa.Enum("VIP_MODEL", name="licensedresourcetype", native_enum=False)
21+
licensed_resource_type = postgresql.ENUM(
22+
"VIP_MODEL", name="licensedresourcetype", create_type=False
23+
)
2124

2225

2326
def upgrade():
@@ -34,7 +37,7 @@ def upgrade():
3437
sa.Column("licensed_resource_name", sa.String(), nullable=False),
3538
sa.Column(
3639
"licensed_resource_type",
37-
existing_enum, # Reuse existing Enum instead of redefining it
40+
licensed_resource_type, # Reuse existing Enum instead of redefining it
3841
nullable=False,
3942
),
4043
sa.Column(
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,138 @@
1+
"""modify licensed items/resources DB
2+
3+
Revision ID: ce4224e8b06e
4+
Revises: 68777fdf9539
5+
Create Date: 2025-02-11 12:24:47.669339+00:00
6+
7+
"""
8+
import sqlalchemy as sa
9+
from alembic import op
10+
from sqlalchemy.dialects import postgresql
11+
12+
# revision identifiers, used by Alembic.
13+
revision = "ce4224e8b06e"
14+
down_revision = "68777fdf9539"
15+
branch_labels = None
16+
depends_on = None
17+
18+
19+
def upgrade():
20+
# ### commands auto generated by Alembic - please adjust! ###
21+
op.create_table(
22+
"licensed_item_to_resource",
23+
sa.Column("licensed_item_id", postgresql.UUID(as_uuid=True), nullable=False),
24+
sa.Column(
25+
"licensed_resource_id", postgresql.UUID(as_uuid=True), nullable=False
26+
),
27+
sa.Column(
28+
"created",
29+
sa.DateTime(timezone=True),
30+
server_default=sa.text("now()"),
31+
nullable=False,
32+
),
33+
sa.Column(
34+
"modified",
35+
sa.DateTime(timezone=True),
36+
server_default=sa.text("now()"),
37+
nullable=False,
38+
),
39+
sa.ForeignKeyConstraint(
40+
["licensed_item_id"],
41+
["licensed_items.licensed_item_id"],
42+
name="fk_licensed_item_to_resource_licensed_item_id",
43+
onupdate="CASCADE",
44+
ondelete="CASCADE",
45+
),
46+
sa.ForeignKeyConstraint(
47+
["licensed_resource_id"],
48+
["licensed_resources.licensed_resource_id"],
49+
name="fk_licensed_item_to_resource_licensed_resource_id",
50+
onupdate="CASCADE",
51+
ondelete="CASCADE",
52+
),
53+
)
54+
op.add_column("licensed_items", sa.Column("key", sa.String(), nullable=False))
55+
op.add_column("licensed_items", sa.Column("version", sa.String(), nullable=False))
56+
op.alter_column(
57+
"licensed_items", "pricing_plan_id", existing_type=sa.BIGINT(), nullable=False
58+
)
59+
op.alter_column(
60+
"licensed_items", "product_name", existing_type=sa.VARCHAR(), nullable=False
61+
)
62+
op.drop_constraint(
63+
"uq_licensed_resource_name_type", "licensed_items", type_="unique"
64+
)
65+
op.create_unique_constraint(
66+
"uq_licensed_items_key_version", "licensed_items", ["key", "version"]
67+
)
68+
op.drop_column("licensed_items", "trashed")
69+
op.drop_column("licensed_items", "licensed_resource_data")
70+
op.drop_column("licensed_items", "licensed_resource_name")
71+
op.add_column(
72+
"resource_tracker_licensed_items_checkouts",
73+
sa.Column("key", sa.String(), nullable=False),
74+
)
75+
op.add_column(
76+
"resource_tracker_licensed_items_checkouts",
77+
sa.Column("version", sa.String(), nullable=False),
78+
)
79+
op.add_column(
80+
"resource_tracker_licensed_items_purchases",
81+
sa.Column("key", sa.String(), nullable=False),
82+
)
83+
op.add_column(
84+
"resource_tracker_licensed_items_purchases",
85+
sa.Column("version", sa.String(), nullable=False),
86+
)
87+
# ### end Alembic commands ###
88+
89+
90+
def downgrade():
91+
# ### commands auto generated by Alembic - please adjust! ###
92+
op.drop_column("resource_tracker_licensed_items_purchases", "version")
93+
op.drop_column("resource_tracker_licensed_items_purchases", "key")
94+
op.drop_column("resource_tracker_licensed_items_checkouts", "version")
95+
op.drop_column("resource_tracker_licensed_items_checkouts", "key")
96+
op.add_column(
97+
"licensed_items",
98+
sa.Column(
99+
"licensed_resource_name", sa.VARCHAR(), autoincrement=False, nullable=False
100+
),
101+
)
102+
op.add_column(
103+
"licensed_items",
104+
sa.Column(
105+
"licensed_resource_data",
106+
postgresql.JSONB(astext_type=sa.Text()),
107+
autoincrement=False,
108+
nullable=True,
109+
),
110+
)
111+
op.add_column(
112+
"licensed_items",
113+
sa.Column(
114+
"trashed",
115+
postgresql.TIMESTAMP(timezone=True),
116+
autoincrement=False,
117+
nullable=True,
118+
comment="The date and time when the licensed_item was marked as trashed. Null if the licensed_item has not been trashed [default].",
119+
),
120+
)
121+
op.drop_constraint(
122+
"uq_licensed_items_key_version", "licensed_items", type_="unique"
123+
)
124+
op.create_unique_constraint(
125+
"uq_licensed_resource_name_type",
126+
"licensed_items",
127+
["licensed_resource_name", "licensed_resource_type"],
128+
)
129+
op.alter_column(
130+
"licensed_items", "product_name", existing_type=sa.VARCHAR(), nullable=True
131+
)
132+
op.alter_column(
133+
"licensed_items", "pricing_plan_id", existing_type=sa.BIGINT(), nullable=True
134+
)
135+
op.drop_column("licensed_items", "version")
136+
op.drop_column("licensed_items", "key")
137+
op.drop_table("licensed_item_to_resource")
138+
# ### end Alembic commands ###
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
import sqlalchemy as sa
2+
from sqlalchemy.dialects import postgresql
3+
4+
from ._common import RefActions, column_created_datetime, column_modified_datetime
5+
from .base import metadata
6+
7+
licensed_item_to_resource = sa.Table(
8+
"licensed_item_to_resource",
9+
metadata,
10+
sa.Column(
11+
"licensed_item_id",
12+
postgresql.UUID(as_uuid=True),
13+
sa.ForeignKey(
14+
"licensed_items.licensed_item_id",
15+
name="fk_licensed_item_to_resource_licensed_item_id",
16+
onupdate=RefActions.CASCADE,
17+
ondelete=RefActions.CASCADE,
18+
),
19+
nullable=False,
20+
),
21+
sa.Column(
22+
"licensed_resource_id",
23+
postgresql.UUID(as_uuid=True),
24+
sa.ForeignKey(
25+
"licensed_resources.licensed_resource_id",
26+
name="fk_licensed_item_to_resource_licensed_resource_id",
27+
onupdate=RefActions.CASCADE,
28+
ondelete=RefActions.CASCADE,
29+
),
30+
nullable=False,
31+
),
32+
column_created_datetime(timezone=True),
33+
column_modified_datetime(timezone=True),
34+
)

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

Lines changed: 14 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,7 @@
66
import sqlalchemy as sa
77
from sqlalchemy.dialects import postgresql
88

9-
from ._common import (
10-
RefActions,
11-
column_created_datetime,
12-
column_modified_datetime,
13-
column_trashed_datetime,
14-
)
9+
from ._common import RefActions, column_created_datetime, column_modified_datetime
1510
from .base import metadata
1611

1712

@@ -30,29 +25,27 @@ class LicensedResourceType(str, enum.Enum):
3025
server_default=sa.text("gen_random_uuid()"),
3126
),
3227
sa.Column(
33-
"display_name",
28+
"key",
29+
sa.String,
30+
nullable=False,
31+
),
32+
sa.Column(
33+
"version",
3434
sa.String,
3535
nullable=False,
36-
doc="Display name for front-end",
3736
),
3837
sa.Column(
39-
"licensed_resource_name",
38+
"display_name",
4039
sa.String,
4140
nullable=False,
42-
doc="Resource name identifier",
41+
doc="Display name for front-end",
4342
),
4443
sa.Column(
4544
"licensed_resource_type",
4645
sa.Enum(LicensedResourceType),
4746
nullable=False,
4847
doc="Resource type, ex. VIP_MODEL",
4948
),
50-
sa.Column(
51-
"licensed_resource_data",
52-
postgresql.JSONB,
53-
nullable=True,
54-
doc="Resource metadata. Used for read-only purposes",
55-
),
5649
sa.Column(
5750
"pricing_plan_id",
5851
sa.BigInteger,
@@ -62,7 +55,7 @@ class LicensedResourceType(str, enum.Enum):
6255
onupdate=RefActions.CASCADE,
6356
ondelete=RefActions.RESTRICT,
6457
),
65-
nullable=True,
58+
nullable=False,
6659
),
6760
sa.Column(
6861
"product_name",
@@ -73,15 +66,14 @@ class LicensedResourceType(str, enum.Enum):
7366
ondelete=RefActions.CASCADE,
7467
name="fk_resource_tracker_license_packages_product_name",
7568
),
76-
nullable=True,
69+
nullable=False,
7770
doc="Product name identifier. If None, then the item is not exposed",
7871
),
7972
column_created_datetime(timezone=True),
8073
column_modified_datetime(timezone=True),
81-
column_trashed_datetime("licensed_item"),
8274
sa.UniqueConstraint(
83-
"licensed_resource_name",
84-
"licensed_resource_type",
85-
name="uq_licensed_resource_name_type",
75+
"key",
76+
"version",
77+
name="uq_licensed_items_key_version",
8678
),
8779
)

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

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,16 @@
2222
UUID(as_uuid=True),
2323
nullable=True,
2424
),
25+
sa.Column(
26+
"key",
27+
sa.String,
28+
nullable=False,
29+
),
30+
sa.Column(
31+
"version",
32+
sa.String,
33+
nullable=False,
34+
),
2535
sa.Column(
2636
"wallet_id",
2737
sa.BigInteger,

0 commit comments

Comments
 (0)