← ClaudeAtlas

implementation-django-ninjalisted

Django Ninja JSON API 어댑터 구현 지식 — Router/Schema/Operation, controller-owned <Bc>ErrorSchema, registrar 합성, 인증·인가, 필터링·정렬·페이지네이션, Idempotency-Key, OpenAPI 계약 확인, mounted Django client HTTP 계약 검증, DRF-to-Ninja 마이그레이션. Router·Schema·API 어댑터 코드를 새로 작성하거나 리팩터링할 때 먼저 로드한다. REST 계약 설계는 architecture-api, 도메인 규칙·구조 패턴은 dddjango-architecture-ddd, Django ORM·서비스·트랜잭션은 implementation-django, 테스트 픽스처·더블 구현은 implementation-test로 위임.
changja88/dddjango · ★ 1 · API & Backend · score 74
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