from pydantic_settings import BaseSettings from typing import Optional class Settings(BaseSettings): # App PROJECT_NAME: str = "Новая Планета API" VERSION: str = "1.0.0" API_V1_STR: str = "/api/v1" DEBUG: bool = False # Security SECRET_KEY: str ALGORITHM: str = "HS256" ACCESS_TOKEN_EXPIRE_MINUTES: int = 30 REFRESH_TOKEN_EXPIRE_DAYS: int = 7 # Database POSTGRES_USER: str POSTGRES_PASSWORD: str POSTGRES_DB: str POSTGRES_HOST: str = "localhost" POSTGRES_PORT: int = 5432 DATABASE_URL: Optional[str] = None @property def database_url(self) -> str: if self.DATABASE_URL: return self.DATABASE_URL return f"postgresql+asyncpg://{self.POSTGRES_USER}:{self.POSTGRES_PASSWORD}@{self.POSTGRES_HOST}:{self.POSTGRES_PORT}/{self.POSTGRES_DB}" # Redis REDIS_HOST: str = "localhost" REDIS_PORT: int = 6379 REDIS_DB: int = 0 REDIS_URL: Optional[str] = None @property def redis_url(self) -> str: if self.REDIS_URL: return self.REDIS_URL return f"redis://{self.REDIS_HOST}:{self.REDIS_PORT}/{self.REDIS_DB}" # Storage (MinIO/S3) STORAGE_ENDPOINT: str = "localhost:9000" STORAGE_ACCESS_KEY: str STORAGE_SECRET_KEY: str STORAGE_BUCKET: str = "new-planet-images" STORAGE_USE_SSL: bool = False STORAGE_REGION: str = "us-east-1" # GigaChat GIGACHAT_CLIENT_ID: str GIGACHAT_CLIENT_SECRET: str GIGACHAT_AUTH_URL: str = "https://ngw.devices.sberbank.ru:9443/api/v2/oauth" GIGACHAT_BASE_URL: str = "https://gigachat.devices.sberbank.ru/api/v1" GIGACHAT_MODEL_CHAT: str = "GigaChat-2-Lite" GIGACHAT_MODEL_SCHEDULE: str = "GigaChat-2-Pro" # CORS CORS_ORIGINS: list[str] = ["*"] # Rate Limiting RATE_LIMIT_ENABLED: bool = True RATE_LIMIT_PER_MINUTE: int = 60 class Config: env_file = ".env" case_sensitive = True settings = Settings()