feat: add WonderQ admin backend
Add FastAPI admin/public API service, database setup, Docker deployment files, docs, and tests.
This commit is contained in:
29
app/config.py
Normal file
29
app/config.py
Normal file
@@ -0,0 +1,29 @@
|
||||
from functools import lru_cache
|
||||
from urllib.parse import parse_qsl, urlencode, urlsplit, urlunsplit
|
||||
from pydantic import Field
|
||||
from pydantic_settings import BaseSettings, SettingsConfigDict
|
||||
|
||||
|
||||
class Settings(BaseSettings):
|
||||
database_url: str = Field(default="postgresql://miniapp:miniapp_dev_password@localhost:5433/miniapp")
|
||||
jwt_secret: str = Field(default="dev-only-change-me-before-production")
|
||||
jwt_expires_hours: int = Field(default=8)
|
||||
log_level: str = Field(default="info")
|
||||
port: int = Field(default=4000)
|
||||
cors_origins: str = Field(default="*")
|
||||
|
||||
model_config = SettingsConfigDict(env_file=".env", env_file_encoding="utf-8", extra="ignore")
|
||||
|
||||
@property
|
||||
def sqlalchemy_url(self) -> str:
|
||||
parsed = urlsplit(self.database_url)
|
||||
query = urlencode([(key, value) for key, value in parse_qsl(parsed.query, keep_blank_values=True) if key != "schema"])
|
||||
normalized = urlunsplit((parsed.scheme, parsed.netloc, parsed.path, query, parsed.fragment))
|
||||
if normalized.startswith("postgresql://"):
|
||||
return normalized.replace("postgresql://", "postgresql+psycopg://", 1)
|
||||
return normalized
|
||||
|
||||
|
||||
@lru_cache
|
||||
def get_settings() -> Settings:
|
||||
return Settings()
|
||||
Reference in New Issue
Block a user