diff options
| author | l3wdfut4pwr <l3wdfut4pwr@gmail.com> | 2026-03-17 14:11:45 +0200 |
|---|---|---|
| committer | l3wdfut4pwr <l3wdfut4pwr@gmail.com> | 2026-03-17 14:11:45 +0200 |
| commit | 47fd81a5910eab3483f79d03eedf9307bc81252f (patch) | |
| tree | 3e1ebd1bddcea649eb968e65161555afd4c2898c /app/utils | |
| parent | f01cb6703710b7df4c7c022047cd35e1d5e9c70e (diff) | |
simple registration prototype
Diffstat (limited to 'app/utils')
| -rw-r--r-- | app/utils/create_tables.py | 8 | ||||
| -rw-r--r-- | app/utils/db.py | 25 | ||||
| -rw-r--r-- | app/utils/hash_cfg.py | 16 | ||||
| -rw-r--r-- | app/utils/logger_cfg.py | 10 |
4 files changed, 59 insertions, 0 deletions
diff --git a/app/utils/create_tables.py b/app/utils/create_tables.py new file mode 100644 index 0000000..bb9baf3 --- /dev/null +++ b/app/utils/create_tables.py @@ -0,0 +1,8 @@ +# app/utils/create_tables.py +from app.models.user import Base +from app.utils.db import engine + + +async def init_db(): + async with engine.begin() as conn: + await conn.run_sync(Base.metadata.create_all) diff --git a/app/utils/db.py b/app/utils/db.py new file mode 100644 index 0000000..603ff68 --- /dev/null +++ b/app/utils/db.py @@ -0,0 +1,25 @@ +# app/utils/db.py +import os + +from dotenv import load_dotenv +from sqlalchemy.ext.asyncio import AsyncSession, create_async_engine +from sqlalchemy.orm import DeclarativeBase, sessionmaker + +load_dotenv() + +DATABASE_URL = os.getenv("DATABASE_URL") +if not DATABASE_URL: + raise ValueError("DATABASE_URL не найден в .env!") + +engine = create_async_engine(DATABASE_URL, echo=True, future=True) + +async_session = sessionmaker(bind=engine, class_=AsyncSession, expire_on_commit=False) + + +async def get_async_session() -> AsyncSession: + async with async_session() as session: + yield session + + +class Base(DeclarativeBase): + pass diff --git a/app/utils/hash_cfg.py b/app/utils/hash_cfg.py new file mode 100644 index 0000000..9937c99 --- /dev/null +++ b/app/utils/hash_cfg.py @@ -0,0 +1,16 @@ +from passlib.hash import argon2 + +argon2_hasher = argon2.using( + type="ID", + time_cost=3, + memory_cost=65536, + parallelism=4, +) + + +def hash_password(password: str) -> str: + return argon2_hasher.hash(password) + + +def verify_password(password: str, hashed: str) -> bool: + return argon2_hasher.verify(password, hashed) diff --git a/app/utils/logger_cfg.py b/app/utils/logger_cfg.py new file mode 100644 index 0000000..fa5064f --- /dev/null +++ b/app/utils/logger_cfg.py @@ -0,0 +1,10 @@ +from loguru import logger + +logger.add( + "logs/app.log", + rotation="50 MB", + retention="10 days", + level="DEBUG", + backtrace=True, + diagnose=True, +) |
