feat(backend): move product pricing to async persisted jobs
This commit is contained in:
parent
c869f88db2
commit
0e439b4ca7
18 changed files with 468 additions and 67 deletions
|
|
@ -0,0 +1,85 @@
|
|||
"""add_async_pricing_jobs_and_snapshot_fields
|
||||
|
||||
Revision ID: f1a2b3c4d5e6
|
||||
Revises: 7c91e4b2af38
|
||||
Create Date: 2026-03-04 00:00:00.000000
|
||||
|
||||
"""
|
||||
|
||||
from typing import Sequence, Union
|
||||
|
||||
import sqlalchemy as sa
|
||||
import sqlmodel.sql.sqltypes
|
||||
|
||||
from alembic import op
|
||||
|
||||
revision: str = "f1a2b3c4d5e6"
|
||||
down_revision: Union[str, None] = "7c91e4b2af38"
|
||||
branch_labels: Union[str, Sequence[str], None] = None
|
||||
depends_on: Union[str, Sequence[str], None] = None
|
||||
|
||||
|
||||
def upgrade() -> None:
|
||||
op.add_column(
|
||||
"products",
|
||||
sa.Column(
|
||||
"price_tier",
|
||||
sa.Enum("BUDGET", "MID", "PREMIUM", "LUXURY", name="pricetier"),
|
||||
nullable=True,
|
||||
),
|
||||
)
|
||||
op.add_column("products", sa.Column("price_per_use_pln", sa.Float(), nullable=True))
|
||||
op.add_column(
|
||||
"products", sa.Column("price_tier_source", sa.String(length=32), nullable=True)
|
||||
)
|
||||
op.add_column(
|
||||
"products", sa.Column("pricing_computed_at", sa.DateTime(), nullable=True)
|
||||
)
|
||||
op.create_index(
|
||||
op.f("ix_products_price_tier"), "products", ["price_tier"], unique=False
|
||||
)
|
||||
|
||||
op.create_table(
|
||||
"pricing_recalc_jobs",
|
||||
sa.Column("id", sa.Uuid(), nullable=False),
|
||||
sa.Column("scope", sqlmodel.sql.sqltypes.AutoString(length=32), nullable=False),
|
||||
sa.Column(
|
||||
"status", sqlmodel.sql.sqltypes.AutoString(length=16), nullable=False
|
||||
),
|
||||
sa.Column("attempts", sa.Integer(), nullable=False),
|
||||
sa.Column("error", sqlmodel.sql.sqltypes.AutoString(length=512), nullable=True),
|
||||
sa.Column("created_at", sa.DateTime(), nullable=False),
|
||||
sa.Column("started_at", sa.DateTime(), nullable=True),
|
||||
sa.Column("finished_at", sa.DateTime(), nullable=True),
|
||||
sa.Column("updated_at", sa.DateTime(timezone=True), nullable=False),
|
||||
sa.PrimaryKeyConstraint("id"),
|
||||
)
|
||||
op.create_index(
|
||||
op.f("ix_pricing_recalc_jobs_scope"),
|
||||
"pricing_recalc_jobs",
|
||||
["scope"],
|
||||
unique=False,
|
||||
)
|
||||
op.create_index(
|
||||
op.f("ix_pricing_recalc_jobs_status"),
|
||||
"pricing_recalc_jobs",
|
||||
["status"],
|
||||
unique=False,
|
||||
)
|
||||
|
||||
|
||||
def downgrade() -> None:
|
||||
op.drop_index(
|
||||
op.f("ix_pricing_recalc_jobs_status"), table_name="pricing_recalc_jobs"
|
||||
)
|
||||
op.drop_index(
|
||||
op.f("ix_pricing_recalc_jobs_scope"), table_name="pricing_recalc_jobs"
|
||||
)
|
||||
op.drop_table("pricing_recalc_jobs")
|
||||
|
||||
op.drop_index(op.f("ix_products_price_tier"), table_name="products")
|
||||
op.drop_column("products", "pricing_computed_at")
|
||||
op.drop_column("products", "price_tier_source")
|
||||
op.drop_column("products", "price_per_use_pln")
|
||||
op.drop_column("products", "price_tier")
|
||||
op.execute("DROP TYPE IF EXISTS pricetier")
|
||||
Loading…
Add table
Add a link
Reference in a new issue