major-domo-database/app/routers_v3/CLAUDE.md
Cal Corum bcdde572e8 docs: Add subdirectory CLAUDE.md files for routers, stratplay, and services
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>
2026-02-17 17:32:25 -06:00

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)