2026-01-15 20:54:21 +08:00
|
|
|
from typing import Dict, List, Set
|
|
|
|
|
import os
|
2026-04-13 19:21:42 +08:00
|
|
|
|
|
|
|
|
from fastapi import FastAPI
|
|
|
|
|
from fastapi.middleware.cors import CORSMiddleware
|
|
|
|
|
|
|
|
|
|
from app.config import settings
|
|
|
|
|
from app.routers import api_router, root_router
|
|
|
|
|
|
2025-11-23 10:55:04 +08:00
|
|
|
app = FastAPI(title="Wolai Backend", version="0.1.0-stage0")
|
|
|
|
|
|
2026-01-15 20:54:21 +08:00
|
|
|
|
|
|
|
|
def parse_extra_origins(*values: str) -> List[str]:
|
|
|
|
|
out: Set[str] = set()
|
|
|
|
|
for raw in values:
|
|
|
|
|
if not raw:
|
|
|
|
|
continue
|
|
|
|
|
for item in str(raw).split(","):
|
|
|
|
|
origin = item.strip()
|
|
|
|
|
if origin:
|
|
|
|
|
out.add(origin)
|
|
|
|
|
return sorted(out)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
extra_origins = parse_extra_origins(
|
|
|
|
|
settings.frontend_url,
|
|
|
|
|
os.getenv("FRONTEND_URLS", ""),
|
|
|
|
|
os.getenv("CORS_ALLOWED_ORIGINS", ""),
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
allow_origins = [
|
|
|
|
|
*extra_origins,
|
|
|
|
|
"http://localhost:3000",
|
|
|
|
|
"http://localhost:3001",
|
|
|
|
|
"http://127.0.0.1:3000",
|
|
|
|
|
"http://127.0.0.1:3001",
|
|
|
|
|
]
|
2026-04-13 19:21:42 +08:00
|
|
|
|
2025-11-23 10:55:04 +08:00
|
|
|
app.add_middleware(
|
|
|
|
|
CORSMiddleware,
|
2026-01-15 20:54:21 +08:00
|
|
|
allow_origins=allow_origins,
|
2025-11-23 10:55:04 +08:00
|
|
|
allow_credentials=True,
|
|
|
|
|
allow_methods=["*"],
|
|
|
|
|
allow_headers=["*"],
|
|
|
|
|
)
|
2026-04-13 19:21:42 +08:00
|
|
|
|
|
|
|
|
app.include_router(root_router)
|
|
|
|
|
app.include_router(api_router)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@app.get("/")
|
|
|
|
|
async def root() -> Dict[str, str]:
|
|
|
|
|
return {"message": "Wolai backend stage0 up"}
|