mit einem Klick
api-integration
API 명세를 기반으로 Domain Layer(Model, UseCase, Repository Interface)와 Data Layer(RepositoryImpl, Retrofit API, Hilt 바인딩, Remote Model, Mapper)를 일관된 프로젝트 패턴에 맞춰 생성합니다.
Menü
API 명세를 기반으로 Domain Layer(Model, UseCase, Repository Interface)와 Data Layer(RepositoryImpl, Retrofit API, Hilt 바인딩, Remote Model, Mapper)를 일관된 프로젝트 패턴에 맞춰 생성합니다.
This skill should be used when the user asks to "Preview 만들어줘", "Preview 추가해줘", "composable preview 생성", "@Preview 함수 만들어줘", "compose preview 붙여줘", or wants to generate @Preview functions for a Composable file or function. Takes a file path or composable function name as $ARGUMENTS.
현재 브랜치와 develop의 차이를 분석하여 코드 리뷰를 수행한 뒤, 프로젝트 PR 템플릿에 맞는 설명을 작성하고 Pull Request를 생성합니다. "PR 만들어줘", "pull request 생성", "PR 올려줘", "PR 작성" 등의 요청에 응답합니다.
staged git 변경사항을 분석하여 프로젝트 커밋 컨벤션에 맞는 커밋 메시지 2-3개를 추천합니다. "커밋 메시지 추천", "commit 메시지", "어떻게 커밋할까", "커밋 어떻게 써", "git commit 도움" 등의 요청에 응답합니다. 커밋을 직접 실행하지 않습니다.
프로젝트에서 Compose 디자인 시스템 컴포넌트를 설계하고 구현합니다. 기존 컴포넌트 패턴(네이밍, 파라미터 설계, 모델 분리)을 준수하며, 디자인 시스템은 Layout과 Action에 대해서만 알아야 하고 Presentation 고유의 비즈니스 로직 사용은 지양합니다.
| name | api-integration |
| description | API 명세를 기반으로 Domain Layer(Model, UseCase, Repository Interface)와 Data Layer(RepositoryImpl, Retrofit API, Hilt 바인딩, Remote Model, Mapper)를 일관된 프로젝트 패턴에 맞춰 생성합니다. |
API 명세(endpoint, request, response)를 전달받으면, 아래 규칙에 따라 Domain → Data 순서로 코드를 생성합니다. 각 레이어의 상세 패턴과 예시는 세부 파일을 참조합니다.
domain-layer.md 참조)| 항목 | 위치 | 네이밍 | 핵심 규칙 |
|---|---|---|---|
| Model | domain/model/<feature>/ | 접두사 없음 (Ledger) | @JvmInline value class로 ID/금액 감싸기, enum은 @SerialName 없이 순수 유지 |
| Repository | domain/repository/ | <Domain>Repository | Domain 타입만 사용, 기존 도메인이면 함수 추가 |
| UseCase | domain/usecase/<feature>/ | <동사><대상>UseCase | operator fun invoke, 반환값 명시 필수 |
data-layer.md 참조)| 항목 | 위치 | 네이밍 | 핵심 규칙 |
|---|---|---|---|
| Remote Model | data/source/remote/model/<feature>/ | Remote 접두사 (RemoteLedger) | @Serializable (kotlinx.serialization) |
| Request | 동일 | <Feature><동사>Request | @Serializable |
| Response | 동일 | <ModelName>Response / <ModelName>sResponse | 기존 Remote Model 사용 가능하면 그대로 |
| Remote Enum | 동일 | <Feature>Enums.kt에 모음 | @Serializable + @SerialName("UPPER_SNAKE_CASE") |
| Retrofit API | data/source/remote/api/ | <Domain>Api | 모든 함수 suspend, 응답은 Remote Model 타입 |
| Mapper | data/mapper/ | <DomainModel>Mapper.kt | 확장 함수, when() 지향, value object 변환 포함 |
| RepositoryImpl | data/repository/ | <Domain>RepositoryImpl | @Inject constructor, Result 미사용, 직접 API 호출 |
hilt-di.md 참조)| 항목 | 위치 | 핵심 규칙 |
|---|---|---|
| API Provide | data/di/NetworkModule.kt | provide<ServiceName>Api, 최하단에 추가 |
| Repository Bind | data/di/RepositoryModule.kt | @Binds + @Singleton 기본 |
| Layer | 처리 방식 |
|---|---|
| Data Layer | Result 미사용. 예외를 그대로 throw |
| Domain UseCase | suspend → runSuspendCatching으로 Result<T> 반환. Flow → 그대로 반환 |
| Presentation | Result의 onSuccess/onFailure로 UI 에러 처리 |
runSuspendCatching은 com.smtm.pickle.domain.common.utils.runSuspendCatching을 importCancellationException을 rethrow하므로 코루틴 취소에 안전