From 9e209dd695444b94d7d839b947c8697062f9a6f7 Mon Sep 17 00:00:00 2001 From: hexdev Date: Mon, 17 Aug 2026 21:57:38 +0700 Subject: [PATCH] feat: addon.is_enabled --- .../versions/cc6625f7dd7f_addon_is_enabled.py | 32 +++++++++++++++++++ db/models/addons.py | 3 +- schemas/plans.py | 1 + services/plans.py | 8 ++++- 4 files changed, 42 insertions(+), 2 deletions(-) create mode 100644 alembic/versions/cc6625f7dd7f_addon_is_enabled.py diff --git a/alembic/versions/cc6625f7dd7f_addon_is_enabled.py b/alembic/versions/cc6625f7dd7f_addon_is_enabled.py new file mode 100644 index 0000000..ff8e759 --- /dev/null +++ b/alembic/versions/cc6625f7dd7f_addon_is_enabled.py @@ -0,0 +1,32 @@ +"""+addon.is_enabled + +Revision ID: cc6625f7dd7f +Revises: f4ece5936e3d +Create Date: 2026-08-17 21:39:00.054081 + +""" +from typing import Sequence, Union + +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision: str = 'cc6625f7dd7f' +down_revision: Union[str, Sequence[str], None] = 'f4ece5936e3d' +branch_labels: Union[str, Sequence[str], None] = None +depends_on: Union[str, Sequence[str], None] = None + + +def upgrade() -> None: + """Upgrade schema.""" + # ### commands auto generated by Alembic - please adjust! ### + op.add_column('addons', sa.Column('is_enabled', sa.BOOLEAN(), nullable=True)) + # ### end Alembic commands ### + + +def downgrade() -> None: + """Downgrade schema.""" + # ### commands auto generated by Alembic - please adjust! ### + op.drop_column('addons', 'is_enabled') + # ### end Alembic commands ### diff --git a/db/models/addons.py b/db/models/addons.py index 7710536..89aa3bf 100644 --- a/db/models/addons.py +++ b/db/models/addons.py @@ -1,4 +1,4 @@ -from sqlalchemy import FLOAT, INTEGER, TEXT +from sqlalchemy import BOOLEAN, FLOAT, INTEGER, TEXT from sqlalchemy.orm import Mapped, mapped_column from db.base import Base @@ -11,3 +11,4 @@ class Addon(Base): name: Mapped[str] = mapped_column(TEXT, nullable=False, unique=False) price: Mapped[float] = mapped_column(FLOAT, nullable=False) free_threshold: Mapped[int] = mapped_column(INTEGER, default=-1) + is_enabled: Mapped[bool] = mapped_column(BOOLEAN, default=False, nullable=True) diff --git a/schemas/plans.py b/schemas/plans.py index d38cb8b..ccae9a9 100644 --- a/schemas/plans.py +++ b/schemas/plans.py @@ -6,6 +6,7 @@ class AddonData(BaseModel): name: str price: float free_threshold: int + is_enabled: bool class PricingPlans(BaseModel): diff --git a/services/plans.py b/services/plans.py index cd97cc2..0159f99 100644 --- a/services/plans.py +++ b/services/plans.py @@ -11,7 +11,13 @@ async def get_pricing_model(addons_repo: AddonsRepository, pricing_repo: Pricing addons = await addons_repo.get_all() addons_data = [ - AddonData(id=a.id, name=a.name, price=a.price, free_threshold=a.free_threshold) + AddonData( + id=a.id, + name=a.name, + price=a.price, + free_threshold=a.free_threshold, + is_enabled=a.is_enabled, + ) for a in addons ]