from pathlib import Path from pydantic import BaseModel from pydantic_settings import BaseSettings, SettingsConfigDict BASE_DIR = Path(__file__).parent.parent DB_PATH = BASE_DIR / "db/taskncoffee.db" class ApiV1Prefix(BaseModel): prefix: str = "/v1" auth: str = "/auth" users: str = "/users" @property def login_url(self) -> str: return f"{self.prefix}{self.auth}" class ApiPrefix(BaseModel): prefix: str = "/api" v1: ApiV1Prefix = ApiV1Prefix() @property def v1_login_url(self) -> str: return f"{self.prefix}{self.v1.login_url}" class DbSettings(BaseModel): url: str = f"sqlite+aiosqlite:///{DB_PATH}" class AccessToken(BaseSettings): model_config = SettingsConfigDict( env_file=".env", env_file_encoding="utf-8", env_prefix="ACCESS_TOKEN_" ) expire_minutes: int = 15 secret_key: str algorithm: str = "HS256" token_type: str = "bearer" # noqa: S105 class Settings(BaseSettings): api: ApiPrefix = ApiPrefix() db: DbSettings = DbSettings() access_token: AccessToken = AccessToken() settings = Settings()