implementation-django-ninjalisted
Install: claude install-skill changja88/dddjango
# Django Ninja JSON API 구현
## 언제 쓰나
Django Ninja Router/Schema/Operation·controller-owned <Bc>ErrorSchema·API registrar·인증·필터링·페이지네이션·OpenAPI·mounted Django client 코드를 설계·작성할 때 로드한다. 경계:
- REST 리소스·URL·HTTP 메서드·상태 코드·헤더·콘텐츠 협상·버전·레이트리밋·idempotency 계약(키 정책) → `architecture-api` (idempotency 저장소·retention은 `architecture-db`)
- 애그리거트·상태 전이·불변식·유스케이스 경계·구조 패턴(repository/UoW/핵사고날/CQRS/outbox/ACL) → `dddjango-architecture-ddd`
- ORM 쿼리·셀렉터·서비스·트랜잭션·마이그레이션·캐시·보안 구현 → `implementation-django`
- pytest 픽스처·팩토리·mock·테스트더블·동시성 테스트 구현 → `dddjango-implementation-test`
## 핵심 운영 원칙
- Router는 HTTP 어댑터로 얇게: 요청 바인딩·auth hook·서비스 호출·응답 매핑만 (§1.3)
- Request/Response schema는 명시적으로 분리, ModelSchema는 내부 구현 보호가 확실할 때만 (§3.1–§3.2)
- 발행 이벤트 봉투의 discriminator는 1종째부터 domain StrEnum + `Literal[EventType.X]` 파생(birth-enum), 버전 태그는 리터럴 동결. union-enum 동기는 중앙 test admission 후보이며 승인된 공�� wire와 독자 failure가 `add/update`일 때만 검증한다 (§3.1)
- Schema·framework 오류·OpenAPI·HTTP 검증은 중앙 test admission 후보다. `add/update` 뒤에만 mechanics recipe를 적용하고, 공개 HTTP는 실제 URLconf에 mount된 Django client로, 공개 OpenAPI는 그 mounted API가 생성한 문서로 검증한다. 별도 승인된 공개 Python consumer가 없으면 validator 위치·`ValidationError.loc`·Pydantic/Ninja 기본 직렬화·private/helper 직접 호출은 test 자격이 아니며 오류 helper/handler 내부 unit test는 만들지 않는다 (§3·§6.3·§8·§9)
- dddjango는 공통 `FrameworkErrorSchema` property를 정하지 않는다. `reuse`는 관찰된 exact shape를 보존한다. `create`와 `approved-change`는 신규 G1 slot 6에서 field/type/required/default/nullability/모든 `Field` metadata/model config·legacy `Co