fix: bind HWID top-ups to subscription periods

This commit is contained in:
3252a8
2026-05-25 19:33:50 +03:00
parent 59fa301344
commit c68cb97964
49 changed files with 2027 additions and 119 deletions
+17
View File
@@ -203,6 +203,11 @@ class Payment(Base):
tariff_key = Column(String, nullable=True, index=True)
purchased_gb = Column(Float, nullable=True)
purchased_hwid_devices = Column(Integer, nullable=True)
hwid_valid_from = Column(DateTime(timezone=True), nullable=True)
hwid_valid_until = Column(DateTime(timezone=True), nullable=True)
hwid_pricing_period_months = Column(Integer, nullable=True)
hwid_proration_ratio = Column(Float, nullable=True)
hwid_full_price = Column(Float, nullable=True)
promo_code_id = Column(Integer, ForeignKey("promo_codes.promo_code_id"), nullable=True)
created_at = Column(DateTime(timezone=True), server_default=func.now())
updated_at = Column(DateTime(timezone=True), onupdate=func.now(), nullable=True)
@@ -229,6 +234,14 @@ class TrafficTopup(Base):
class HwidDevicePurchase(Base):
__tablename__ = "hwid_device_purchases"
__table_args__ = (
Index(
"ix_hwid_device_purchases_subscription_window",
"subscription_id",
"valid_from",
"valid_until",
),
)
purchase_id = Column(Integer, primary_key=True, autoincrement=True)
subscription_id = Column(
@@ -236,6 +249,8 @@ class HwidDevicePurchase(Base):
)
payment_id = Column(Integer, ForeignKey("payments.payment_id"), nullable=True, index=True)
purchased_devices = Column(Integer, nullable=False)
valid_from = Column(DateTime(timezone=True), nullable=True)
valid_until = Column(DateTime(timezone=True), nullable=True)
created_at = Column(DateTime(timezone=True), server_default=func.now())
subscription = relationship("Subscription")
@@ -276,6 +291,8 @@ class TariffChange(Base):
days_before = Column(Integer, nullable=True)
days_after = Column(Integer, nullable=True)
converted_bytes = Column(BigInteger, nullable=True)
converted_hwid_value_rub = Column(Numeric, nullable=True)
converted_hwid_days = Column(Integer, nullable=True)
eff_price_before = Column(Numeric, nullable=True)
eff_price_after = Column(Numeric, nullable=True)
created_at = Column(DateTime(timezone=True), server_default=func.now())