- Backend: users table + admin seed (004), /api/auth endpoints, JWT auth dep gating benchmarks + research routes - Frontend: AuthContext, LoginPage, ProtectedRoute, subpath-aware via VITE_BASE / import.meta.env.BASE_URL so same build works at /opt/ - deploy/: Dockerfile.prod, docker-compose.prod.yml, Apache vhost fragment template, and idempotent deploy.sh (port scan, rsync, env generation, Apache Include + reload) Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
30 lines
746 B
Python
30 lines
746 B
Python
from pydantic_settings import BaseSettings
|
|
|
|
|
|
class Settings(BaseSettings):
|
|
db_user: str = "salary_user"
|
|
db_password: str = "salary_pass"
|
|
db_host: str = "db"
|
|
db_port: int = 5432
|
|
db_name: str = "salary_benchmark"
|
|
|
|
serper_api_key: str = ""
|
|
firecrawl_api_key: str = ""
|
|
cohere_api_key: str = ""
|
|
anthropic_api_key: str = ""
|
|
|
|
jwt_secret: str = "dev-secret-change-in-prod"
|
|
jwt_algorithm: str = "HS256"
|
|
jwt_expires_minutes: int = 480
|
|
|
|
@property
|
|
def database_url(self) -> str:
|
|
return (
|
|
f"postgresql+asyncpg://{self.db_user}:{self.db_password}"
|
|
f"@{self.db_host}:{self.db_port}/{self.db_name}"
|
|
)
|
|
|
|
model_config = {"env_file": ".env"}
|
|
|
|
|
|
settings = Settings()
|