- Rename skincare route prefix /skin-snapshots → /skincare to match API client - Add redirect_slashes=False to FastAPI app; change collection routes from "/" to "" to eliminate 307 redirects on POST/GET without trailing slash - Fix redirect() inside try/catch in products/new and routines/new server actions (SvelteKit redirect() throws and was being caught as a 500 error) - Eagerly load inventory and steps relationships via explicit SELECT + model_dump(mode="json"), working around SQLModel 0.0.37 not serializing Relationship fields in response_model - Add field_validator for product_effect_profile to coerce DB-returned dict → ProductEffectProfile, eliminating Pydantic serializer warning - Update all tests to use routes without trailing slash Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
38 lines
1 KiB
Python
38 lines
1 KiB
Python
from contextlib import asynccontextmanager
|
|
|
|
from dotenv import load_dotenv
|
|
|
|
load_dotenv() # load .env before db.py reads DATABASE_URL
|
|
|
|
from fastapi import FastAPI
|
|
from fastapi.middleware.cors import CORSMiddleware
|
|
|
|
from db import create_db_and_tables
|
|
from innercontext.api import health, inventory, products, routines, skincare
|
|
|
|
|
|
@asynccontextmanager
|
|
async def lifespan(app: FastAPI):
|
|
create_db_and_tables()
|
|
yield
|
|
|
|
|
|
app = FastAPI(title="innercontext API", lifespan=lifespan, redirect_slashes=False)
|
|
|
|
app.add_middleware(
|
|
CORSMiddleware,
|
|
allow_origins=["*"],
|
|
allow_methods=["*"],
|
|
allow_headers=["*"],
|
|
)
|
|
|
|
app.include_router(products.router, prefix="/products", tags=["products"])
|
|
app.include_router(inventory.router, prefix="/inventory", tags=["inventory"])
|
|
app.include_router(health.router, prefix="/health", tags=["health"])
|
|
app.include_router(routines.router, prefix="/routines", tags=["routines"])
|
|
app.include_router(skincare.router, prefix="/skincare", tags=["skincare"])
|
|
|
|
|
|
@app.get("/health-check")
|
|
def health_check():
|
|
return {"status": "ok"}
|