# sqlalchemy from sqlalchemy.orm import declarative_base from sqlalchemy import ( Column, Integer, String, BIGINT, VARCHAR, Boolean, DateTime, SmallInteger, ARRAY, DOUBLE_PRECISION, Enum, Numeric, Text, ) from sqlalchemy.dialects.postgresql import JSONB # types from database.db_types import * # init baseModel BaseModel = declarative_base() class User(BaseModel): __tablename__ = "users" user_id = Column(BIGINT, primary_key=True) username = Column(VARCHAR(33), nullable=True) fullname = Column(VARCHAR(128), nullable=False) register_date = Column(DateTime(timezone=True), nullable=False) class Admin(BaseModel): __tablename__ = "admins" user_id = Column(BIGINT, primary_key=True) username = Column(VARCHAR(33), nullable=True) fullname = Column(VARCHAR(128), nullable=False) class Blacklist(BaseModel): __tablename__ = "blacklist" user_id = Column(BIGINT, primary_key=True) class Setting(BaseModel): __tablename__ = "settings" name = Column(String, primary_key=True) value = Column(JSONB, nullable=True) class Payment(BaseModel): __tablename__ = "payments" id = Column(Integer, primary_key=True, autoincrement=True) order_id = Column(VARCHAR(64), unique=True, nullable=False, index=True) user_id = Column(BIGINT, nullable=False, index=True) amount = Column(Numeric(12, 2), nullable=False) currency = Column(VARCHAR(3), nullable=False, default="RUB") description = Column(VARCHAR(255), nullable=True) status = Column(VARCHAR(32), nullable=False, default="created") payment_link_id = Column(VARCHAR(36), nullable=True) payment_url = Column(Text, nullable=True) payment_link_status = Column(VARCHAR(32), nullable=True) transaction_id = Column(VARCHAR(36), nullable=True) transaction_status = Column(VARCHAR(32), nullable=True) error_code = Column(VARCHAR(64), nullable=True) error_description = Column(Text, nullable=True) created_at = Column(DateTime(timezone=True), nullable=False) updated_at = Column(DateTime(timezone=True), nullable=False) paid_at = Column(DateTime(timezone=True), nullable=True)