Пиздец очередной
This commit is contained in:
137
app/model1.py
137
app/model1.py
@@ -1,137 +0,0 @@
|
||||
import os
|
||||
from flask import Flask, g
|
||||
from sqlalchemy.ext.asyncio import create_async_engine, AsyncSession
|
||||
from sqlalchemy.orm import sessionmaker
|
||||
from motor.motor_asyncio import AsyncIOMotorClient
|
||||
from sqlalchemy import Column, String, Numeric, DateTime, Boolean, ForeignKey, Integer
|
||||
from sqlalchemy.orm import declarative_base, relationship
|
||||
from datetime import datetime
|
||||
import uuid
|
||||
import asyncio
|
||||
|
||||
# Инициализация Flask
|
||||
app = Flask(__name__)
|
||||
|
||||
# Настройки PostgreSQL из переменных окружения
|
||||
POSTGRES_DSN = os.getenv("POSTGRES_URL")
|
||||
|
||||
# Создание движка для PostgreSQL
|
||||
postgres_engine = create_async_engine(POSTGRES_DSN, echo=False)
|
||||
AsyncSessionLocal = sessionmaker(bind=postgres_engine, class_=AsyncSession, expire_on_commit=False)
|
||||
|
||||
# Настройки MongoDB из переменных окружения
|
||||
MONGO_URI = os.getenv("MONGO_URL")
|
||||
DATABASE_NAME = os.getenv("DB_NAME")
|
||||
|
||||
# Создание клиента MongoDB
|
||||
mongo_client = AsyncIOMotorClient(MONGO_URI)
|
||||
mongo_db = mongo_client[DATABASE_NAME]
|
||||
|
||||
# SQLAlchemy Base
|
||||
Base = declarative_base()
|
||||
|
||||
def generate_uuid():
|
||||
return str(uuid.uuid4())
|
||||
|
||||
"""Пользователи"""
|
||||
class User(Base):
|
||||
__tablename__ = 'users'
|
||||
|
||||
id = Column(String, primary_key=True, default=generate_uuid)
|
||||
telegram_id = Column(Integer, unique=True, nullable=False)
|
||||
username = Column(String)
|
||||
balance = Column(Numeric(10, 2), default=0.0)
|
||||
created_at = Column(DateTime, default=datetime.utcnow)
|
||||
updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow)
|
||||
|
||||
subscriptions = relationship("Subscription", back_populates="user")
|
||||
transactions = relationship("Transaction", back_populates="user")
|
||||
admins = relationship("Administrators", back_populates="user")
|
||||
|
||||
"""Подписки"""
|
||||
class Subscription(Base):
|
||||
__tablename__ = 'subscriptions'
|
||||
|
||||
id = Column(String, primary_key=True, default=generate_uuid)
|
||||
user_id = Column(String, ForeignKey('users.id'))
|
||||
vpn_server_id = Column(String)
|
||||
plan = Column(String)
|
||||
expiry_date = Column(DateTime)
|
||||
created_at = Column(DateTime, default=datetime.utcnow)
|
||||
updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow)
|
||||
|
||||
user = relationship("User", back_populates="subscriptions")
|
||||
|
||||
"""Транзакции"""
|
||||
class Transaction(Base):
|
||||
__tablename__ = 'transactions'
|
||||
|
||||
id = Column(String, primary_key=True, default=generate_uuid)
|
||||
user_id = Column(String, ForeignKey('users.id'))
|
||||
amount = Column(Numeric(10, 2))
|
||||
transaction_type = Column(String)
|
||||
created_at = Column(DateTime, default=datetime.utcnow)
|
||||
|
||||
user = relationship("User", back_populates="transactions")
|
||||
|
||||
"""Администраторы"""
|
||||
class Administrators(Base):
|
||||
__tablename__ = 'admins'
|
||||
|
||||
id = Column(String, primary_key=True, default=generate_uuid)
|
||||
user_id = Column(String, ForeignKey('users.id'))
|
||||
|
||||
user = relationship("User", back_populates="admins")
|
||||
|
||||
@app.before_first_request
|
||||
async def init_databases():
|
||||
"""
|
||||
Инициализация подключений к PostgreSQL и MongoDB перед первым запросом.
|
||||
"""
|
||||
try:
|
||||
# Инициализация PostgreSQL
|
||||
async with postgres_engine.begin() as conn:
|
||||
await conn.run_sync(Base.metadata.create_all)
|
||||
print("PostgreSQL connected.")
|
||||
|
||||
# Проверка подключения к MongoDB
|
||||
await mongo_client.admin.command("ping")
|
||||
print("MongoDB connected.")
|
||||
except Exception as e:
|
||||
print(f"Database initialization failed: {e}")
|
||||
|
||||
@app.teardown_appcontext
|
||||
def close_connections(exception=None):
|
||||
"""
|
||||
Закрытие соединений с базами данных после окончания работы приложения.
|
||||
"""
|
||||
asyncio.run(postgres_engine.dispose())
|
||||
mongo_client.close()
|
||||
print("Database connections closed.")
|
||||
|
||||
@app.route("/postgres_session")
|
||||
async def get_postgres_session():
|
||||
"""
|
||||
Пример использования сессии PostgreSQL в маршруте Flask.
|
||||
"""
|
||||
try:
|
||||
async with AsyncSessionLocal() as session:
|
||||
# Здесь можно выполнить запросы к базе данных PostgreSQL
|
||||
result = await session.execute("SELECT 1")
|
||||
return {"postgres_result": result.scalar()}
|
||||
except Exception as e:
|
||||
return {"error": str(e)}, 500
|
||||
|
||||
@app.route("/mongo_status")
|
||||
async def get_mongo_status():
|
||||
"""
|
||||
Пример проверки MongoDB в маршруте Flask.
|
||||
"""
|
||||
try:
|
||||
await mongo_client.admin.command("ping")
|
||||
return {"mongo_status": "connected"}
|
||||
except Exception as e:
|
||||
return {"error": str(e)}, 500
|
||||
|
||||
if __name__ == "__main__":
|
||||
app.run(debug=True)
|
||||
Reference in New Issue
Block a user