Files
WeechatPayBot/bot/database/db_models.py

83 lines
2.2 KiB
Python

# 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)