Skip to content

Commit 9f060de

Browse files
add license db tables
1 parent 561c284 commit 9f060de

File tree

4 files changed

+356
-0
lines changed

4 files changed

+356
-0
lines changed
Lines changed: 137 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,137 @@
1+
"""add license db tables
2+
3+
Revision ID: dd0d2a5a993b
4+
Revises: e05bdc5b3c7b
5+
Create Date: 2024-12-03 14:55:22.308786+00:00
6+
7+
"""
8+
import sqlalchemy as sa
9+
from alembic import op
10+
11+
# revision identifiers, used by Alembic.
12+
revision = "dd0d2a5a993b"
13+
down_revision = "e05bdc5b3c7b"
14+
branch_labels = None
15+
depends_on = None
16+
17+
18+
def upgrade():
19+
# ### commands auto generated by Alembic - please adjust! ###
20+
op.create_table(
21+
"resource_tracker_license_purchases",
22+
sa.Column("license_purchase_id", sa.String(), nullable=False),
23+
sa.Column("product_name", sa.String(), nullable=False),
24+
sa.Column("license_package_id", sa.BigInteger(), nullable=False),
25+
sa.Column("wallet_id", sa.BigInteger(), nullable=False),
26+
sa.Column(
27+
"start_at",
28+
sa.DateTime(timezone=True),
29+
server_default=sa.text("now()"),
30+
nullable=False,
31+
),
32+
sa.Column(
33+
"expire_at",
34+
sa.DateTime(timezone=True),
35+
server_default=sa.text("now()"),
36+
nullable=False,
37+
),
38+
sa.Column("purchased_by_user", sa.BigInteger(), nullable=False),
39+
sa.Column(
40+
"purchased_at",
41+
sa.DateTime(timezone=True),
42+
server_default=sa.text("now()"),
43+
nullable=False,
44+
),
45+
sa.Column(
46+
"modified",
47+
sa.DateTime(timezone=True),
48+
server_default=sa.text("now()"),
49+
nullable=False,
50+
),
51+
sa.PrimaryKeyConstraint("license_purchase_id"),
52+
)
53+
op.create_table(
54+
"resource_tracker_license_checkouts",
55+
sa.Column("license_checkout_id", sa.BigInteger(), nullable=False),
56+
sa.Column("license_package_id", sa.BigInteger(), nullable=True),
57+
sa.Column("wallet_id", sa.BigInteger(), nullable=False),
58+
sa.Column("user_id", sa.BigInteger(), nullable=False),
59+
sa.Column("user_email", sa.String(), nullable=True),
60+
sa.Column("product_name", sa.String(), nullable=False),
61+
sa.Column("service_run_id", sa.String(), nullable=True),
62+
sa.Column("started_at", sa.DateTime(timezone=True), nullable=False),
63+
sa.Column("stopped_at", sa.DateTime(timezone=True), nullable=True),
64+
sa.Column("num_of_seats", sa.SmallInteger(), nullable=False),
65+
sa.Column(
66+
"modified",
67+
sa.DateTime(timezone=True),
68+
server_default=sa.text("now()"),
69+
nullable=False,
70+
),
71+
sa.ForeignKeyConstraint(
72+
["service_run_id"],
73+
["resource_tracker_service_runs.service_run_id"],
74+
name="fk_resource_tracker_license_checkouts_service_run_id",
75+
onupdate="CASCADE",
76+
ondelete="RESTRICT",
77+
),
78+
sa.PrimaryKeyConstraint("license_checkout_id"),
79+
)
80+
op.create_index(
81+
op.f("ix_resource_tracker_license_checkouts_wallet_id"),
82+
"resource_tracker_license_checkouts",
83+
["wallet_id"],
84+
unique=False,
85+
)
86+
op.create_table(
87+
"license_packages",
88+
sa.Column("license_package_id", sa.String(), nullable=False),
89+
sa.Column("name", sa.String(), nullable=False),
90+
sa.Column(
91+
"license_resource_type",
92+
sa.Enum("VIP_MODEL", name="licenseresourcetype"),
93+
nullable=False,
94+
),
95+
sa.Column("pricing_plan_id", sa.BigInteger(), nullable=False),
96+
sa.Column("product_name", sa.String(), nullable=False),
97+
sa.Column(
98+
"created",
99+
sa.DateTime(timezone=True),
100+
server_default=sa.text("now()"),
101+
nullable=False,
102+
),
103+
sa.Column(
104+
"modified",
105+
sa.DateTime(timezone=True),
106+
server_default=sa.text("now()"),
107+
nullable=False,
108+
),
109+
sa.ForeignKeyConstraint(
110+
["pricing_plan_id"],
111+
["resource_tracker_pricing_plans.pricing_plan_id"],
112+
name="fk_resource_tracker_license_packages_pricing_plan_id",
113+
onupdate="CASCADE",
114+
ondelete="RESTRICT",
115+
),
116+
sa.ForeignKeyConstraint(
117+
["product_name"],
118+
["products.name"],
119+
name="fk_resource_tracker_license_packages_product_name",
120+
onupdate="CASCADE",
121+
ondelete="CASCADE",
122+
),
123+
sa.PrimaryKeyConstraint("license_package_id"),
124+
)
125+
# ### end Alembic commands ###
126+
127+
128+
def downgrade():
129+
# ### commands auto generated by Alembic - please adjust! ###
130+
op.drop_table("license_packages")
131+
op.drop_index(
132+
op.f("ix_resource_tracker_license_checkouts_wallet_id"),
133+
table_name="resource_tracker_license_checkouts",
134+
)
135+
op.drop_table("resource_tracker_license_checkouts")
136+
op.drop_table("resource_tracker_license_purchases")
137+
# ### end Alembic commands ###
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
""" resource_tracker_service_runs table
2+
"""
3+
4+
import enum
5+
6+
import shortuuid
7+
import sqlalchemy as sa
8+
9+
from ._common import RefActions, column_created_datetime, column_modified_datetime
10+
from .base import metadata
11+
12+
13+
def _custom_id_generator():
14+
return f"lpa_{shortuuid.uuid()}"
15+
16+
17+
class LicenseResourceType(str, enum.Enum):
18+
VIP_MODEL = "VIP_MODEL"
19+
20+
21+
license_packages = sa.Table(
22+
"license_packages",
23+
metadata,
24+
sa.Column(
25+
"license_package_id",
26+
sa.String,
27+
nullable=False,
28+
primary_key=True,
29+
default=_custom_id_generator,
30+
),
31+
sa.Column(
32+
"name",
33+
sa.String,
34+
nullable=False,
35+
),
36+
sa.Column(
37+
"license_resource_type",
38+
sa.Enum(LicenseResourceType),
39+
nullable=False,
40+
doc="Item type, ex. VIP_MODEL",
41+
),
42+
sa.Column(
43+
"pricing_plan_id",
44+
sa.BigInteger,
45+
sa.ForeignKey(
46+
"resource_tracker_pricing_plans.pricing_plan_id",
47+
name="fk_resource_tracker_license_packages_pricing_plan_id",
48+
onupdate=RefActions.CASCADE,
49+
ondelete=RefActions.RESTRICT,
50+
),
51+
nullable=False,
52+
),
53+
sa.Column(
54+
"product_name",
55+
sa.String,
56+
sa.ForeignKey(
57+
"products.name",
58+
onupdate=RefActions.CASCADE,
59+
ondelete=RefActions.CASCADE,
60+
name="fk_resource_tracker_license_packages_product_name",
61+
),
62+
nullable=False,
63+
doc="Product name",
64+
),
65+
column_created_datetime(timezone=True),
66+
column_modified_datetime(timezone=True),
67+
)
Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
""" resource_tracker_service_runs table
2+
"""
3+
4+
import shortuuid
5+
import sqlalchemy as sa
6+
7+
from ._common import RefActions, column_modified_datetime
8+
from .base import metadata
9+
10+
11+
def _custom_id_generator():
12+
return f"rlc_{shortuuid.uuid()}"
13+
14+
15+
resource_tracker_license_checkouts = sa.Table(
16+
"resource_tracker_license_checkouts",
17+
metadata,
18+
sa.Column(
19+
"license_checkout_id",
20+
sa.BigInteger,
21+
nullable=False,
22+
primary_key=True,
23+
default=_custom_id_generator,
24+
),
25+
sa.Column(
26+
"license_package_id",
27+
sa.BigInteger,
28+
nullable=True,
29+
),
30+
sa.Column(
31+
"wallet_id",
32+
sa.BigInteger,
33+
nullable=False,
34+
index=True,
35+
),
36+
sa.Column(
37+
"user_id",
38+
sa.BigInteger,
39+
nullable=False,
40+
),
41+
sa.Column(
42+
"user_email",
43+
sa.String,
44+
nullable=True,
45+
),
46+
sa.Column("product_name", sa.String, nullable=False, doc="Product name"),
47+
sa.Column(
48+
"service_run_id",
49+
sa.String,
50+
sa.ForeignKey(
51+
"resource_tracker_service_runs.service_run_id",
52+
name="fk_resource_tracker_license_checkouts_service_run_id",
53+
onupdate=RefActions.CASCADE,
54+
ondelete=RefActions.RESTRICT,
55+
),
56+
nullable=True,
57+
),
58+
sa.Column(
59+
"started_at",
60+
sa.DateTime(timezone=True),
61+
nullable=False,
62+
doc="Timestamp when the service was started",
63+
),
64+
sa.Column(
65+
"stopped_at",
66+
sa.DateTime(timezone=True),
67+
nullable=True,
68+
doc="Timestamp when the service was stopped",
69+
),
70+
sa.Column(
71+
"num_of_seats",
72+
sa.SmallInteger,
73+
nullable=False,
74+
),
75+
column_modified_datetime(timezone=True),
76+
)
77+
78+
# We define the partial index
79+
# sa.Index(
80+
# "ix_resource_tracker_credit_transactions_status_running",
81+
# resource_tracker_service_runs.c.service_run_status,
82+
# postgresql_where=(
83+
# resource_tracker_service_runs.c.service_run_status
84+
# == ResourceTrackerServiceRunStatus.RUNNING
85+
# ),
86+
# )
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
""" resource_tracker_service_runs table
2+
"""
3+
4+
5+
import shortuuid
6+
import sqlalchemy as sa
7+
8+
from ._common import column_modified_datetime
9+
from .base import metadata
10+
11+
12+
def _custom_id_generator():
13+
return f"rlp_{shortuuid.uuid()}"
14+
15+
16+
resource_tracker_license_purchases = sa.Table(
17+
"resource_tracker_license_purchases",
18+
metadata,
19+
sa.Column(
20+
"license_purchase_id",
21+
sa.String,
22+
nullable=False,
23+
primary_key=True,
24+
default=_custom_id_generator,
25+
),
26+
sa.Column(
27+
"product_name",
28+
sa.String,
29+
nullable=False,
30+
doc="Product name",
31+
),
32+
sa.Column(
33+
"license_package_id",
34+
sa.BigInteger,
35+
nullable=False,
36+
),
37+
sa.Column(
38+
"wallet_id",
39+
sa.BigInteger,
40+
nullable=False,
41+
),
42+
sa.Column(
43+
"start_at",
44+
sa.DateTime(timezone=True),
45+
nullable=False,
46+
server_default=sa.sql.func.now(),
47+
),
48+
sa.Column(
49+
"expire_at",
50+
sa.DateTime(timezone=True),
51+
nullable=False,
52+
server_default=sa.sql.func.now(),
53+
),
54+
sa.Column(
55+
"purchased_by_user",
56+
sa.BigInteger,
57+
nullable=False,
58+
),
59+
sa.Column(
60+
"purchased_at",
61+
sa.DateTime(timezone=True),
62+
nullable=False,
63+
server_default=sa.sql.func.now(),
64+
),
65+
column_modified_datetime(timezone=True),
66+
)

0 commit comments

Comments
 (0)