33 lines
1007 B
Python
33 lines
1007 B
Python
"""Plan 套餐 Repository。"""
|
|
|
|
from sqlalchemy import select
|
|
from sqlalchemy.orm import Session
|
|
|
|
from app.models.plan import Plan
|
|
|
|
|
|
class PlanRepository:
|
|
def __init__(self, session: Session) -> None:
|
|
self._session = session
|
|
|
|
def get_by_id(self, plan_id: str) -> Plan | None:
|
|
return self._session.get(Plan, plan_id)
|
|
|
|
def get_by_code(self, code: str) -> Plan | None:
|
|
stmt = select(Plan).where(Plan.code == code)
|
|
return self._session.scalars(stmt).first()
|
|
|
|
def get_or_create_free(self) -> Plan:
|
|
"""获取 free plan,不存在则创建(seed 逻辑)。"""
|
|
plan = self.get_by_code("free")
|
|
if plan is None:
|
|
plan = Plan(
|
|
code="free",
|
|
name="免费版",
|
|
storage_quota=104_857_600, # 100 MB
|
|
max_file_size=20_971_520, # 20 MB
|
|
is_active=True,
|
|
)
|
|
self._session.add(plan)
|
|
self._session.flush()
|
|
return plan |