Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
직접 명령은 검토 Prompt를 거치지 않습니다. 실행하기 전에 소스를 확인하세요.
npx skills add https://github.com/tomevault-io/skills-registry --skill fastapi명령은 한 줄로 유지됩니다. 복사하기 전에 가로로 스크롤해 전체 내용을 확인하세요.
로컬 사본을 원하시나요? SkillsMP에서 현재 제공할 수 있는 파일을 다운로드하세요.
| Use when this capability is needed.
> Use when this capability is needed.
Review architecture and API design for the vfs-s3 project. Use when the user mentions @architect, asks to review an issue's design, discuss module boundaries, API shape, or architectural decisions for vfs-s3. Also trigger when the user wants to create an ADR (Architecture Decision Record) or evaluate a technical approach for the project. Intended for dispatch from Codex automation or Claude routines; GitHub trigger phrase: @vfs-s3-bot please prepare design doc Use when this capability is needed.
SOC 직업 분류 기준
SKILL.md 표시 중
| name | fastapi |
| description | | Use when this capability is needed. |
/godmode:fastapi# Detect FastAPI project
grep -l "fastapi" pyproject.toml requirements.txt \
setup.py 2>/dev/null
# Check Python version
python3 --version
# Detect package manager
ls uv.lock poetry.lock Pipfile.lock 2>/dev/null
FASTAPI ASSESSMENT:
FastAPI version: <0.115.x>
Python: <3.12+ recommended>
ORM: SQLAlchemy 2.0 async | Tortoise | SQLModel
Auth: JWT | OAuth2 | API keys
Package manager: uv (preferred) | Poetry | pip
IF Python < 3.12: recommend upgrade for performance
IF using sync psycopg2: must migrate to asyncpg
IF no Alembic: add migration support immediately
PROJECT STRUCTURE:
app/
├── main.py # FastAPI app factory
├── config.py # pydantic-settings
├── dependencies.py # Shared DI (DB, auth)
├── api/v1/
│ ├── router.py # Aggregates all v1 routes
│ ├── orders.py # Order endpoints
│ └── customers.py # Customer endpoints
├── models/ # SQLAlchemy models
├── schemas/ # Pydantic schemas
├── services/ # Business logic
└── tests/
PYDANTIC PATTERNS:
| Pattern | Usage |
|--------------------------|---------------------|
| Separate Create/Update/Resp | Per-operation |
| field_validator | Single-field custom |
| model_validator | Cross-field logic |
| Field(gt=0, max_length) | Declarative limits |
| from_attributes=True | ORM → Pydantic |
| Generic PaginatedResp[T] | Reusable pagination|
THRESHOLDS:
max_length for strings: always set (default 255)
gt=0 for IDs and counts: always set
le=1000 for pagination page_size: prevent abuse
IF no Field() constraints: validation is incomplete
DI PATTERNS:
| Pattern | Usage |
|---------------------|---------------------|
| Annotated[T, Depends]| Type-safe DI |
| yield dependencies | Resource lifecycle |
| Nested dependencies | Service → Repo → DB|
| Class-based deps | Service classes |
| Lifespan events | App-scoped pools |
RULES:
Max DI chain depth: 3 levels
IF deeper: refactor, something is over-abstracted
IF using module globals for DB: refactor to Depends()
# Install async driver
uv add asyncpg sqlalchemy[asyncio] alembic
# Initialize Alembic
alembic init -t async alembic
ASYNC DB RULES:
Driver: asyncpg (never psycopg2 in async context)
expire_on_commit: False (always)
Loading: selectin (async-safe, not lazy)
Query style: SQLAlchemy 2.0 (select(), Mapped[])
Migrations: Alembic (never metadata.create_all())
Pool: min 5, max 20 connections (tune per traffic)
IF N+1 detected: add with() eager loading
IF pool exhaustion: increase max, add connection timeout
TASK STRATEGY:
| Approach | When to Use |
|-----------------|------------------------|
| BackgroundTasks | Simple fire-and-forget |
| Celery | Complex, scheduling |
| ARQ | Async-native, light |
| asyncio.create | In-process async work |
WEBSOCKET RULES:
Authenticate in handshake (JWT in query params)
Handle WebSocketDisconnect gracefully
IF multi-worker: use Redis Pub/Sub (not in-memory)
Connection limit: 1000 per server instance
# Run async tests
uv run pytest tests/ -v --tb=short
# Run with coverage
uv run pytest tests/ --cov=app --cov-report=term
TESTING STRATEGY:
| Layer | Approach |
|-------------|------------------------|
| Endpoints | HTTPX AsyncClient |
| Services | pytest + async fixtures|
| Schemas | Pydantic validation |
| Repos | Test DB session |
| Dependencies| dependency_overrides |
THRESHOLDS:
Coverage target: >= 80% overall
Endpoint coverage: 100% of routes
Schema tests: every validation rule tested
IF test uses real external service: mock it
FASTAPI VALIDATION:
| Check | Status |
|------------------------------|--------|
| Async endpoints throughout | ? |
| Pydantic schemas for all I/O | ? |
| DI via Depends() (no globals)| ? |
| Async DB driver (asyncpg) | ? |
| N+1 prevention (selectin) | ? |
| Auth on protected endpoints | ? |
| Field() constraints on schemas| ? |
| Alembic migrations present | ? |
Commit: "fastapi: <service> — <N> async endpoints, Pydantic schemas, pytest"
Never ask to continue. Loop autonomously until done.
1. FastAPI imports, Python version, package manager
2. ORM: SQLAlchemy/Tortoise/SQLModel, async driver
3. Auth: python-jose/authlib, Pydantic v1 vs v2
4. Tests: pytest/httpx, Alembic migrations
Print: FastAPI: {action}, {endpoints} endpoints, {models} models. Tests: {status}. Verdict: {verdict}.
timestamp project endpoints models migrations tests status
KEEP if: tests pass AND quality improved
AND no regressions
DISCARD if: tests fail OR performance regressed
STOP when ANY of:
- All tasks complete and validated
- User requests stop
- Max iterations reached
alembic merge heads.Source: arbazkhan971/godmode — distributed by TomeVault.