init commit
This commit is contained in:
40
server/main-server/src/database/db.py
Normal file
40
server/main-server/src/database/db.py
Normal file
@ -0,0 +1,40 @@
|
||||
from collections.abc import AsyncGenerator
|
||||
from fastapi import Depends
|
||||
from fastapi_users.db import SQLAlchemyUserDatabase
|
||||
from fastapi_users.jwt import SecretType
|
||||
from sqlalchemy.ext.asyncio import AsyncSession, async_sessionmaker, create_async_engine
|
||||
|
||||
from src.auth.user_manager import UserManager
|
||||
from src.database.user import User, Base
|
||||
|
||||
|
||||
class Database:
|
||||
def __init__(
|
||||
self,
|
||||
db_user: str,
|
||||
db_pass: str,
|
||||
db_host: str,
|
||||
db_port: int,
|
||||
db_name: str,
|
||||
secret: SecretType
|
||||
):
|
||||
self.DATABASE_URL = f'postgresql+asyncpg://{db_user}:{db_pass}@{db_host}:{db_port}/{db_name}'
|
||||
self.engine = create_async_engine(self.DATABASE_URL)
|
||||
self.async_session_maker = async_sessionmaker(self.engine, expire_on_commit=False)
|
||||
self.secret = secret
|
||||
|
||||
async def create_db_and_tables(self):
|
||||
async with self.engine.begin() as conn:
|
||||
await conn.run_sync(Base.metadata.create_all)
|
||||
|
||||
|
||||
async def get_async_session(self) -> AsyncGenerator[AsyncSession, None]:
|
||||
async with self.async_session_maker() as session:
|
||||
yield session
|
||||
|
||||
|
||||
async def get_user_db(self, session: AsyncSession = Depends(get_async_session)):
|
||||
yield SQLAlchemyUserDatabase(session, User)
|
||||
|
||||
async def get_user_manager(self, user_db: SQLAlchemyUserDatabase = Depends(get_user_db)):
|
||||
yield UserManager(self.secret, user_db)
|
||||
Reference in New Issue
Block a user