Some checks failed
Build Docker Image / build (pull_request) Has been cancelled
Provide targeted context for each app subdirectory so Claude Code understands local patterns without relying on the root CLAUDE.md. Also simplifies root CLAUDE.md dev/prod environment sections. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1.2 KiB
1.2 KiB
Routers (v3)
Domain-based FastAPI routers under /api/v3/ prefix. Each file = one resource.
Patterns
- Every endpoint uses
@handle_db_errorsdecorator (fromdependencies.py) - GET endpoints use
@cache_result(ttl=N, key_prefix="name")for Redis caching - Auth:
token: str = Depends(oauth2_scheme)+valid_token(token)check on mutating endpoints - Pydantic models for POST/PATCH bodies are defined inline in router files (not db_engine)
- POST models:
idfields must beOptional[int] = None(DB auto-generates)
Two Styles Coexist
- Refactored (players, teams): Thin HTTP layer → delegates to
services/layer - Legacy (most others): Business logic directly in router, imports models from
db_engine
Adding a New Router
- Create
app/routers_v3/newrouter.pywithrouter = APIRouter(prefix="/api/v3/name", tags=["name"]) - Import and register in
app/main.py:from .routers_v3 import newrouter+app.include_router(newrouter.router)
IMPORTANT
- PATCH endpoints: build update dict explicitly from parameters. Never use
locals(). stratplay/is a sub-package with its own__init__.pyand sub-routers (batting, pitching, fielding, plays, crud)