89 lines
2.6 KiB
Python
89 lines
2.6 KiB
Python
from datetime import datetime
|
|
|
|
from sqlalchemy import (
|
|
JSON,
|
|
BigInteger,
|
|
Boolean,
|
|
Column,
|
|
DateTime,
|
|
Float,
|
|
ForeignKey,
|
|
Identity as SAIdentity,
|
|
Integer,
|
|
String,
|
|
Text,
|
|
)
|
|
|
|
from ._base import Base, DictLikeMixin
|
|
|
|
|
|
class User(DictLikeMixin, Base):
|
|
__tablename__ = "users"
|
|
|
|
id = Column(BigInteger, SAIdentity(always=False), primary_key=True)
|
|
tg_id = Column(BigInteger, nullable=True, unique=True, index=True)
|
|
identity_id = Column(
|
|
String(36),
|
|
ForeignKey("identities.id", ondelete="SET NULL", onupdate="CASCADE"),
|
|
nullable=True,
|
|
index=True,
|
|
)
|
|
username = Column(String)
|
|
first_name = Column(String)
|
|
last_name = Column(String)
|
|
language_code = Column(String)
|
|
is_bot = Column(Boolean, default=False)
|
|
balance = Column(Float, default=0.0)
|
|
trial = Column(Integer, default=0)
|
|
preferred_currency = Column(String(10), nullable=False, server_default="RUB", index=True)
|
|
source_code = Column(
|
|
String,
|
|
ForeignKey(
|
|
"tracking_sources.code",
|
|
ondelete="SET NULL",
|
|
onupdate="CASCADE",
|
|
),
|
|
nullable=True,
|
|
)
|
|
created_at = Column(DateTime, default=datetime.utcnow)
|
|
updated_at = Column(DateTime, default=datetime.utcnow)
|
|
|
|
|
|
class ManualBan(DictLikeMixin, Base):
|
|
__tablename__ = "manual_bans"
|
|
|
|
user_id = Column(BigInteger, ForeignKey("users.id", ondelete="CASCADE"), nullable=False, primary_key=True)
|
|
tg_id = Column(BigInteger, nullable=True, index=True)
|
|
banned_at = Column(DateTime(timezone=True), default=datetime.utcnow)
|
|
reason = Column(Text)
|
|
banned_by = Column(BigInteger)
|
|
until = Column(DateTime(timezone=True), nullable=True)
|
|
|
|
|
|
class TemporaryData(DictLikeMixin, Base):
|
|
__tablename__ = "temporary_data"
|
|
|
|
user_id = Column(BigInteger, ForeignKey("users.id", ondelete="CASCADE"), nullable=False, primary_key=True)
|
|
tg_id = Column(BigInteger, nullable=True, index=True)
|
|
state = Column(String)
|
|
data = Column(JSON)
|
|
updated_at = Column(DateTime, default=datetime.utcnow)
|
|
|
|
|
|
class BlockedUser(DictLikeMixin, Base):
|
|
__tablename__ = "blocked_users"
|
|
|
|
user_id = Column(BigInteger, ForeignKey("users.id", ondelete="CASCADE"), nullable=False, primary_key=True)
|
|
tg_id = Column(BigInteger, nullable=True, index=True)
|
|
|
|
|
|
class TrackingSource(DictLikeMixin, Base):
|
|
__tablename__ = "tracking_sources"
|
|
|
|
id = Column(Integer, primary_key=True)
|
|
name = Column(String)
|
|
code = Column(String, unique=True)
|
|
type = Column(String)
|
|
created_by = Column(BigInteger)
|
|
created_at = Column(DateTime, default=datetime.utcnow)
|