text: from typing import AsyncGenerator
  
  from fastapi import Depends
  from fastapi_users.db import SQLAlchemyBaseUserTable, SQLAlchemyUserDatabase
  from sqlalchemy.ext.asyncio import AsyncSession, create_async_engine
  from sqlalchemy.ext.declarative import DeclarativeMeta, declarative_base
  from sqlalchemy.orm import sessionmaker
  from sqlalchemy import Column, String
  from database.utils.conn import get_db_uri
  from views.user.models import UserDB
  from Config import globalConfig
  
  DATABASE_URL = get_db_uri(db_name=globalConfig.POSTGRES_DB, is_async=True)
  Base: DeclarativeMeta = declarative_base()
  
  
  class UserTable(Base, SQLAlchemyBaseUserTable):
      nick_name = Column(String(length=30), unique=True, index=True, nullable=False)
  
  
  
  engine = create_async_engine(DATABASE_URL)
  async_session_maker = sessionmaker(engine, class_=AsyncSession, expire_on_commit=False)
  
  
  async def create_db_and_tables():
      async with engine.begin() as conn:
          await conn.run_sync(Base.metadata.create_all)
  
  
  async def get_async_session() -> AsyncGenerator[AsyncSession, None]:
      async with async_session_maker() as session:
          yield session
  
  
  async def get_user_db(session: AsyncSession = Depends(get_async_session)):
      yield SQLAlchemyUserDatabase(UserDB, session, UserTable)
  