import os from typing import Any, Optional from pydantic_settings import BaseSettings, SettingsConfigDict from sqlalchemy import text from sqlalchemy.ext.asyncio import AsyncSession class Settings(BaseSettings): # --- General --- PROJECT_NAME: str = "Traffic Ecosystem SuperApp" VERSION: str = "1.0.0" API_V1_STR: str = "/api/v1" DEBUG: bool = False # --- Security / JWT --- SECRET_KEY: str = "NOT_SET_DANGER" ALGORITHM: str = "HS256" ACCESS_TOKEN_EXPIRE_MINUTES: int = 60 * 24 * 7 # 7 nap # --- Initial Admin (ÚJ SZEKCIÓ) --- # Ezeket a .env-ből fogja venni INITIAL_ADMIN_EMAIL: str = "admin@servicefinder.hu" INITIAL_ADMIN_PASSWORD: str = "Admin123!" # --- Database & Cache --- DATABASE_URL: str REDIS_URL: str = "redis://service_finder_redis:6379/0" # --- Email --- EMAIL_PROVIDER: str = "auto" EMAILS_FROM_EMAIL: str = "info@profibot.hu" EMAILS_FROM_NAME: str = "Profibot" SENDGRID_API_KEY: Optional[str] = None SMTP_HOST: Optional[str] = None SMTP_PORT: int = 587 SMTP_USER: Optional[str] = None SMTP_PASSWORD: Optional[str] = None # --- External URLs --- FRONTEND_BASE_URL: str = "http://localhost:3000" # --- Dinamikus Admin Motor --- async def get_db_setting(self, db: AsyncSession, key_name: str, default: Any = None) -> Any: try: query = text("SELECT value_json FROM data.system_settings WHERE key_name = :key") result = await db.execute(query, {"key": key_name}) row = result.fetchone() if row and row[0] is not None: return row[0] return default except Exception: return default # .env fájl konfigurációja model_config = SettingsConfigDict( env_file=".env", env_file_encoding="utf-8", case_sensitive=True, extra="ignore" ) settings = Settings()