This commit is contained in:
2026-02-27 15:59:37 +03:00
commit a57a5278d6
29 changed files with 1084 additions and 0 deletions
@@ -0,0 +1,9 @@
from sqlalchemy.ext.asyncio import AsyncEngine, async_sessionmaker, create_async_engine
def create_engine(database_url: str) -> AsyncEngine:
return create_async_engine(database_url, echo=False)
def create_session_maker(engine: AsyncEngine) -> async_sessionmaker:
return async_sessionmaker(engine, expire_on_commit=False)
@@ -0,0 +1,21 @@
from sqlalchemy import select
from sqlalchemy.ext.asyncio import AsyncSession
from src.dutylog.infrastructure.database.models.user import User
class UsersDAO:
def __init__(self, session: AsyncSession):
self.session = session
async def get_user(self, user_id: int) -> User | None:
result = await self.session.execute(
select(User).where(User.id == user_id)
)
return result.scalar_one_or_none()
async def create_user(self, user_id: int, username: str | None) -> User:
user = User(id=user_id, username=username)
self.session.add(user)
await self.session.commit()
return user
@@ -0,0 +1,5 @@
from sqlalchemy.orm import DeclarativeBase
class Base(DeclarativeBase):
pass
@@ -0,0 +1,11 @@
from sqlalchemy import BigInteger, String
from sqlalchemy.orm import Mapped, mapped_column
from src.dutylog.infrastructure.database.models.base import Base
class User(Base):
__tablename__ = "users"
id: Mapped[int] = mapped_column(BigInteger, primary_key=True)
username: Mapped[str | None] = mapped_column(String(255), nullable=True)
@@ -0,0 +1,15 @@
from dataclasses import dataclass
from os import getenv
@dataclass
class Config:
bot_token: str
database_url: str
def load_config() -> Config:
return Config(
bot_token=getenv("BOT_TOKEN", ""),
database_url=getenv("DATABASE_URL", "sqlite+aiosqlite:///./db.sqlite3"),
)