購買発注管理システムのバックエンド機能を Python (FastAPI + SQLAlchemy 2.0 + Pydantic 2.10) で実装する。API エンドポイント、データベースモデル、ビジネスロジック、Pydantic スキーマの作成・更新に使用する。TDD(テスト駆動開発)を強制する。フロントエンド (Flutter)、DevOps、インフラタスクには使用しない。
バックエンド機能の実装時に使用する。すべてのステップを順番に実行し、テストフェーズを省略しない。
spec.md の該当セクションを読み取り、データモデルと API スキーマを把握する。plan.md を読み取り、現在のフェーズと実装ステップを確認する。app/models/ を読み取り、再利用可能な既存の SQLAlchemy モデルを確認する。app/schemas/ を読み取り、既存の Pydantic モデルとの整合性を確認する。tests/unit/ または tests/integration/ に新しいテストファイルを作成する。
test_<対象機能>.pyreferences/testing-guide.md を参照する。pytest <テストファイルパス> を実行し、テストが失敗すること (Red) を確認する。app/schemas/snake_caseField(..., description="説明") を付与するfield_validator を使用するrequirements.md の用語定義に準拠した命名を使用する# テンプレート — assets/schema-template.py を参照
from pydantic import BaseModel, Field, field_validator
class PurchaseOrderCreate(BaseModel):
"""発注の新規作成リクエスト。(F-05)"""
supplier_id: str = Field(..., description="仕入先ID")
lines: list[PurchaseOrderLineCreate] = Field(
..., min_length=1, description="発注明細(1件以上必須)"
)
@field_validator("supplier_id")
@classmethod
def validate_supplier_id(cls, v: str) -> str:
if not v.startswith("V"):
raise ValueError("supplier_id は 'V' で始まること")
return v
app/repositories/)joinedload / selectinload を使用して N+1 問題を防止する。text() + パラメータバインドを必ず使用する。references/db-conventions.md の SQLAlchemy 2.0 規約に従う。app/services/)db.commit() / db.rollback())はサービス層で行う。"""発注承認処理。(F-05)""")。OverDeliveryError, InsufficientApprovalError, CreditLimitExceededError 等app/api/v1/)/api/v1/ で始める。references/fastapi-patterns.md の標準フォーマットに従う。# テンプレート
from typing import Annotated
from fastapi import APIRouter, Depends
from sqlalchemy.orm import Session
router = APIRouter(prefix="/api/v1/purchase-orders", tags=["発注管理"])
DbSession = Annotated[Session, Depends(get_db)]
@router.post("/", status_code=201)
def create_purchase_order(
request: PurchaseOrderCreate,
db: DbSession,
) -> PurchaseOrderResponse:
"""発注を新規作成する。(F-05)"""
return purchase_order_service.create(request, db)
pytest <テストファイルパス> を実行する。ruff check app/ — エラー 0 件ruff format --check app/ — 差分 0 件mypy --strict app/ — エラー 0 件references/fastapi-patterns.md — 標準レスポンス構造と依存性注入パターンreferences/db-conventions.md — SQLAlchemy 2.0 コーディング規約references/testing-guide.md — テスト作成ガイド