feat: добавлены настройки подключения к базе данных и зависимость для взаимодействия с базой данных
All checks were successful
Lint project / lint (push) Successful in 53s

- Создан класс `DBSettings` в модуле `settings.py` для хранения параметров подключения к базе данных.
- Добавлен класс `DBDependency` в модуль `db_dependency.py`, который управляет взаимодействием с асинхронной базой данных с использованием SQLAlchemy.
- Обновлен модуль `__init__.py` для инициализации новых компонентов.
This commit is contained in:
proDream 2025-01-10 15:37:29 +04:00
parent 4e55c09b31
commit 083b588289
3 changed files with 59 additions and 0 deletions

View File

View File

@ -0,0 +1,29 @@
from sqlalchemy.ext.asyncio import AsyncSession, async_sessionmaker, create_async_engine
class DBDependency:
"""
Класс для управления зависимостями базы данных, используя SQLAlchemy.
"""
def __init__(self, db_url: str, db_echo: bool) -> None:
"""
Инициализирует экземпляр класса, отвечающего за взаимодействие с асинхронной базой данных.
:param db_url: URL для подключения к базе данных.
:type db_url: str
:param db_echo: Флаг, определяющий вывод подробных логов при взаимодействии с базой данных.
:type db_echo: bool
"""
self._engine = create_async_engine(url=db_url, echo=db_echo)
self._session_factory = async_sessionmaker(bind=self._engine, expire_on_commit=False, autocommit=False)
@property
def db_session(self) -> async_sessionmaker[AsyncSession]:
"""
Декоратор для создания асинхронной сессии базы данных.
:returns: Возвращает фабрику асинхронных сессий.
:rtype: async_sessionmaker[AsyncSession]
"""
return self._session_factory

View File

@ -3,6 +3,23 @@ from pydantic_settings import BaseSettings, SettingsConfigDict
class DBSettings(BaseSettings): class DBSettings(BaseSettings):
"""
Класс для настройки параметров подключения к базе данных.
:ivar db_name: Имя базы данных.
:type db_name: str
:ivar db_user: Логин пользователя для доступа к базе данных.
:type db_user: str
:ivar db_password: Пароль пользователя для доступа к базе данных. Значение хранится в зашифрованном виде.
:type db_password: SecretStr
:ivar db_host: Адрес хоста, на котором размещена база данных.
:type db_host: str
:ivar db_port: Порт, по которому осуществляется подключение к базе данных.
:type db_port: int
:ivar db_echo: Флаг для вывода отладочной информации о запросах к базе данных.
:type db_echo: bool
"""
db_name: str db_name: str
db_user: str db_user: str
db_password: SecretStr db_password: SecretStr
@ -14,10 +31,23 @@ class DBSettings(BaseSettings):
@property @property
def db_url(self): def db_url(self):
"""
Свойство, возвращающее строку подключения к базе данных PostgreSQL.
:returns: Строка подключения к базе данных.
:rtype: str
"""
return f"postgresql+asyncpg://{self.db_user}:{self.db_password.get_secret_value()}@{self.db_host}:{self.db_port}/{self.db_name}" return f"postgresql+asyncpg://{self.db_user}:{self.db_password.get_secret_value()}@{self.db_host}:{self.db_port}/{self.db_name}"
class Settings(BaseSettings): class Settings(BaseSettings):
"""
Класс Settings используется для хранения настроек приложения.
:ivar db_settings: Экземпляр класса DBSettings, содержащий настройки базы данных.
:type db_settings: DBSettings
"""
db_settings: DBSettings = DBSettings() db_settings: DBSettings = DBSettings()