feat: 응답 계약 정의와 페이지네이션·추적 ID 추가
세 클라이언트가 공유하는 계약 중 정의가 빠져 있던 부분을 채운다.
- 목록 응답 형태를 {items, pageInfo} 로 고정하고 커서/오프셋 쿼리 DTO 제공
- @SkipTransform() 으로 스트림·204 등 래핑하면 안 되는 응답을 제외
- ApiStandardResponse/ApiErrorResponse 로 Swagger 문서를 실응답과 일치시킴
(컨트롤러는 raw 를 반환하지만 실제 응답은 래핑되어 문서가 어긋나 있었다)
- RequestIdMiddleware 로 모든 요청에 x-request-id 부여
- API 설계 규약(api-design.md) 신설 — REST 경로·쿼리·날짜/ID 표현·버전 관리
또한 .gitignore 의 data/ 패턴이 모든 depth 에 매칭되어
flutter/lib/features/user/data/ 의 소스가 커밋되지 않던 문제를 함께 고친다.
(user_provider.dart 가 import 하는 파일이 저장소에 없어 flutter analyze 가 깨져 있었다)
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,25 @@
|
||||
// 목록 응답 공유 계약 — 백엔드 PaginatedResult 와 동일 구조
|
||||
// (백엔드: backend/src/common/dto/pagination.dto.ts)
|
||||
|
||||
export interface PageInfo {
|
||||
/** 다음 페이지 존재 여부 */
|
||||
hasNext: boolean
|
||||
/** 다음 요청에 넘길 커서. 마지막 페이지면 null */
|
||||
nextCursor: string | null
|
||||
/** 전체 개수. 계산 비용이 큰 경우 null 일 수 있다. */
|
||||
total: number | null
|
||||
}
|
||||
|
||||
export interface PaginatedResult<T> {
|
||||
items: T[]
|
||||
pageInfo: PageInfo
|
||||
}
|
||||
|
||||
/** 커서 기반 목록 조회 쿼리 파라미터 */
|
||||
export interface CursorPaginationQuery {
|
||||
cursor?: string
|
||||
limit?: number
|
||||
}
|
||||
|
||||
/** 목록 API 기본 조회 개수 — 백엔드 PAGINATION_DEFAULT_LIMIT 와 동일 */
|
||||
export const DEFAULT_PAGE_SIZE = 20
|
||||
Reference in New Issue
Block a user