초기 커밋
This commit is contained in:
93
app/core/config.py
Normal file
93
app/core/config.py
Normal file
@@ -0,0 +1,93 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from pydantic import field_validator
|
||||
from pydantic_settings import BaseSettings, SettingsConfigDict
|
||||
|
||||
|
||||
class Settings(BaseSettings):
|
||||
model_config = SettingsConfigDict(
|
||||
env_file=".env",
|
||||
env_file_encoding="utf-8",
|
||||
case_sensitive=False,
|
||||
)
|
||||
|
||||
# ── Application ──────────────────────────────────
|
||||
APP_NAME: str = "core-api"
|
||||
APP_ENV: str = "development"
|
||||
DEBUG: bool = True
|
||||
SECRET_KEY: str = "change-me-to-a-random-secret-key"
|
||||
API_V1_PREFIX: str = "/api/v1"
|
||||
|
||||
# ── MariaDB ──────────────────────────────────────
|
||||
MARIADB_HOST: str = "127.0.0.1"
|
||||
MARIADB_PORT: int = 3306
|
||||
MARIADB_USER: str = "root"
|
||||
MARIADB_PASSWORD: str = "changeme"
|
||||
MARIADB_DATABASE: str = "core_api"
|
||||
|
||||
@property
|
||||
def MARIADB_DSN(self) -> str:
|
||||
return (
|
||||
f"mysql+aiomysql://{self.MARIADB_USER}:{self.MARIADB_PASSWORD}"
|
||||
f"@{self.MARIADB_HOST}:{self.MARIADB_PORT}/{self.MARIADB_DATABASE}"
|
||||
)
|
||||
|
||||
@property
|
||||
def MARIADB_DSN_SYNC(self) -> str:
|
||||
return (
|
||||
f"mysql+pymysql://{self.MARIADB_USER}:{self.MARIADB_PASSWORD}"
|
||||
f"@{self.MARIADB_HOST}:{self.MARIADB_PORT}/{self.MARIADB_DATABASE}"
|
||||
)
|
||||
|
||||
# ── MongoDB ──────────────────────────────────────
|
||||
MONGODB_URL: str = "mongodb://127.0.0.1:27017"
|
||||
MONGODB_DATABASE: str = "core_api"
|
||||
|
||||
# ── Redis ────────────────────────────────────────
|
||||
REDIS_URL: str = "redis://127.0.0.1:6379/0"
|
||||
|
||||
# ── JWT ──────────────────────────────────────────
|
||||
JWT_SECRET_KEY: str = "change-me-jwt-secret"
|
||||
JWT_ALGORITHM: str = "HS256"
|
||||
JWT_ACCESS_TOKEN_EXPIRE_MINUTES: int = 30
|
||||
JWT_REFRESH_TOKEN_EXPIRE_DAYS: int = 7
|
||||
|
||||
# ── MQTT ─────────────────────────────────────────
|
||||
MQTT_HOST: str = "127.0.0.1"
|
||||
MQTT_PORT: int = 1883
|
||||
MQTT_USERNAME: str = ""
|
||||
MQTT_PASSWORD: str = ""
|
||||
|
||||
# ── Celery ───────────────────────────────────────
|
||||
CELERY_BROKER_URL: str = "redis://127.0.0.1:6379/1"
|
||||
CELERY_RESULT_BACKEND: str = "redis://127.0.0.1:6379/2"
|
||||
|
||||
# ── CORS ─────────────────────────────────────────
|
||||
CORS_ORIGINS: list[str] = ["http://localhost:3000", "http://localhost:8080"]
|
||||
|
||||
@field_validator("CORS_ORIGINS", mode="before")
|
||||
@classmethod
|
||||
def assemble_cors_origins(cls, v: str | list[str]) -> list[str]:
|
||||
if isinstance(v, str):
|
||||
return [i.strip() for i in v.strip("[]").split(",") if i.strip()]
|
||||
return v
|
||||
|
||||
# ── OAuth ────────────────────────────────────────
|
||||
GOOGLE_CLIENT_ID: str = ""
|
||||
GOOGLE_CLIENT_SECRET: str = ""
|
||||
KAKAO_CLIENT_ID: str = ""
|
||||
KAKAO_CLIENT_SECRET: str = ""
|
||||
NAVER_CLIENT_ID: str = ""
|
||||
NAVER_CLIENT_SECRET: str = ""
|
||||
|
||||
# ── SMTP ─────────────────────────────────────────
|
||||
SMTP_HOST: str = "smtp.gmail.com"
|
||||
SMTP_PORT: int = 587
|
||||
SMTP_USERNAME: str = ""
|
||||
SMTP_PASSWORD: str = ""
|
||||
|
||||
# ── Logging ──────────────────────────────────────
|
||||
LOG_LEVEL: str = "DEBUG"
|
||||
|
||||
|
||||
settings = Settings()
|
||||
Reference in New Issue
Block a user