import datetime import json import asyncpg from sqlalchemy import func from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column from sqlalchemy.ext.asyncio import AsyncAttrs, create_async_engine, async_sessionmaker from config import Config from loguru import logger class Base(AsyncAttrs, DeclarativeBase): created_at: Mapped[datetime.datetime] = mapped_column(server_default=func.now()) modified_at: Mapped[datetime.datetime] = mapped_column(server_default=func.now(), onupdate=func.now()) class Engine: _engine = None @property def engine(self): return self._engine def __init__(self): if self._engine is None: self._engine = create_async_engine(str(Config.postgres_url), pool_size=20, max_overflow=0) engine = Engine() Session = async_sessionmaker(engine.engine, expire_on_commit=False)