/
Amino
/
LeakBot
Обзор
Документация
Войти
/
Amino
/
LeakBot
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
db.py
60 строк
2 KB
Amino
upload files
20 дек 2025, 13:38
20 дек 2025, 13:38
c41443e
Код
Авторство
О чём код?
from typing import AsyncGenerator from sqlalchemy.ext.asyncio import AsyncSession, async_sessionmaker, create_async_engine from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column from sqlalchemy import Integer, String, Boolean, ForeignKey, DateTime, func from config import settings engine = create_async_engine(settings.db_url, echo=False, future=True) async_session = async_sessionmaker(engine, expire_on_commit=False, class_=AsyncSession) class Base(DeclarativeBase): pass class User(Base): __tablename__ = "users" id: Mapped[int] = mapped_column(Integer, primary_key=True, index=True) telegram_id: Mapped[int] = mapped_column(Integer, unique=True, index=True) username: Mapped[str | None] = mapped_column(String(255), nullable=True) checks_count: Mapped[int] = mapped_column(Integer, default=0) class PasswordCheck(Base): __tablename__ = "password_checks" id: Mapped[int] = mapped_column(Integer, primary_key=True) user_id: Mapped[int] = mapped_column(ForeignKey("users.id", ondelete="CASCADE")) hash_prefix: Mapped[str] = mapped_column(String(40)) compromised: Mapped[bool] = mapped_column(Boolean, default=False) created_at: Mapped["DateTime"] = mapped_column( DateTime(timezone=True), server_default=func.now() ) class LoginLeak(Base): __tablename__ = "login_leaks" id: Mapped[int] = mapped_column(Integer, primary_key=True) user_id: Mapped[int] = mapped_column(ForeignKey("users.id", ondelete="CASCADE")) login: Mapped[str] = mapped_column(String(255)) source: Mapped[str] = mapped_column(String(255)) compromised: Mapped[bool] = mapped_column(Boolean, default=False) details: Mapped[str | None] = mapped_column(String, nullable=True) created_at: Mapped["DateTime"] = mapped_column( DateTime(timezone=True), server_default=func.now() ) async def get_session() -> AsyncGenerator[AsyncSession, None]: async with async_session() as session: yield session async def init_db() -> None: async with engine.begin() as conn: await conn.run_sync(Base.metadata.create_all)