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>
27 lines
1.2 KiB
Markdown
27 lines
1.2 KiB
Markdown
# Routers (v3)
|
|
|
|
Domain-based FastAPI routers under `/api/v3/` prefix. Each file = one resource.
|
|
|
|
## Patterns
|
|
|
|
- Every endpoint uses `@handle_db_errors` decorator (from `dependencies.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: `id` fields must be `Optional[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
|
|
|
|
1. Create `app/routers_v3/newrouter.py` with `router = APIRouter(prefix="/api/v3/name", tags=["name"])`
|
|
2. 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__.py` and sub-routers (batting, pitching, fielding, plays, crud)
|