diff --git a/lkeep/core/core_dependency/__init__.py b/lkeep/core/core_dependency/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/lkeep/core/core_dependency/db_dependency.py b/lkeep/core/core_dependency/db_dependency.py new file mode 100644 index 0000000..0a1ec29 --- /dev/null +++ b/lkeep/core/core_dependency/db_dependency.py @@ -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 diff --git a/lkeep/core/settings.py b/lkeep/core/settings.py index 6124d1f..fc5f241 100644 --- a/lkeep/core/settings.py +++ b/lkeep/core/settings.py @@ -3,6 +3,23 @@ from pydantic_settings import BaseSettings, SettingsConfigDict 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_user: str db_password: SecretStr @@ -14,10 +31,23 @@ class DBSettings(BaseSettings): @property 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}" class Settings(BaseSettings): + """ + Класс Settings используется для хранения настроек приложения. + + :ivar db_settings: Экземпляр класса DBSettings, содержащий настройки базы данных. + :type db_settings: DBSettings + """ + db_settings: DBSettings = DBSettings()