41 lines
1.1 KiB
Python
41 lines
1.1 KiB
Python
from datetime import datetime
|
|
|
|
from sqlalchemy import (
|
|
BigInteger,
|
|
Boolean,
|
|
Column,
|
|
DateTime,
|
|
ForeignKey,
|
|
Integer,
|
|
String,
|
|
text as sql_text,
|
|
)
|
|
|
|
from ._base import Base, DictLikeMixin
|
|
|
|
|
|
class Coupon(DictLikeMixin, Base):
|
|
__tablename__ = "coupons"
|
|
|
|
id = Column(Integer, primary_key=True)
|
|
code = Column(String, unique=True)
|
|
amount = Column(Integer)
|
|
usage_limit = Column(Integer)
|
|
usage_count = Column(Integer, default=0)
|
|
is_used = Column(Boolean, default=False)
|
|
days = Column(Integer, nullable=True)
|
|
new_users_only = Column(Boolean, nullable=False, server_default=sql_text("false"))
|
|
|
|
percent = Column(Integer, nullable=True)
|
|
max_discount_amount = Column(Integer, nullable=True)
|
|
min_order_amount = Column(Integer, nullable=True)
|
|
|
|
|
|
class CouponUsage(DictLikeMixin, Base):
|
|
__tablename__ = "coupon_usages"
|
|
|
|
coupon_id = Column(Integer, ForeignKey("coupons.id", ondelete="CASCADE"), primary_key=True)
|
|
user_id = Column(BigInteger, primary_key=True)
|
|
tg_id = Column(BigInteger, nullable=True, index=True)
|
|
used_at = Column(DateTime, default=datetime.utcnow)
|