-
Notifications
You must be signed in to change notification settings - Fork 1
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[Test/#250] Article 목록조회(무한스크롤) Mock API 구현 #251
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
리뷰 부탁드려요
@@ -12,10 +12,16 @@ data class ReadArticleUseCaseOut( | |||
val category: String, | |||
val createdAt: LocalDateTime, | |||
val views: Long, | |||
val includedWorkbooks: List<WorkbookDetail> = emptyList(), |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
기존 아티클 단건 조회에서 사용하던 uc out 객체에서 필드 추가했습니다. 아티클 단건 조회 vs 무한 스크롤 API에서 응답 바디가 다를게 이거밖에 없더라구요... 아티클 단건 조회에선 empty로 응답되도록 기본 값을 emptyList()로 설정했습니다.
val response = ReadArticleResponse( | ||
id = useCaseOut.id, | ||
title = useCaseOut.title, | ||
writer = WriterInfo( | ||
useCaseOut.writer.id, | ||
useCaseOut.writer.name, | ||
useCaseOut.writer.url | ||
), | ||
content = useCaseOut.content, | ||
problemIds = useCaseOut.problemIds, | ||
category = useCaseOut.category, | ||
createdAt = useCaseOut.createdAt, | ||
views = useCaseOut.views | ||
) | ||
|
||
return ApiResponseGenerator.success(response, HttpStatus.OK) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
기존 아티클 단건 조회 API에서 response 객체를 보시면 uc out dto를 그대로 변환만 하고 있더라구요.. 그냥 변환만 할거면 각 레이어별 DTO를 구분한 의미가 모호해져서 일단 이렇게 컨버팅하는 코드 추가해뒀습니다.
@GetMapping | ||
fun readArticles( | ||
@RequestParam( | ||
required = false, | ||
defaultValue = "0" | ||
) prevArticleId: Long, | ||
): ApiResponse<ApiResponse.SuccessBody<ReadArticlesResponse>> { | ||
val useCaseOut = readArticlesUseCase.execute(ReadArticlesUseCaseIn(prevArticleId)) | ||
|
||
val articles: List<ReadArticleResponse> = useCaseOut.articles.map { a -> | ||
ReadArticleResponse( | ||
id = a.id, | ||
title = a.title, | ||
writer = WriterInfo( | ||
a.writer.id, | ||
a.writer.name, | ||
a.writer.url | ||
), | ||
content = a.content, | ||
problemIds = a.problemIds, | ||
category = a.category, | ||
createdAt = a.createdAt, | ||
views = a.views, | ||
includedWorkbooks = a.includedWorkbooks.map { w -> | ||
WorkbookInfo( | ||
id = w.id, | ||
title = w.title | ||
) | ||
} | ||
) | ||
}.toList() | ||
|
||
val response = ReadArticlesResponse(articles, articles.size != 10) // TODO refactor 'isLast' | ||
|
||
return ApiResponseGenerator.success(response, HttpStatus.OK) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
아티클 무한 스크롤링 컨트롤러 코드입니다. 쿼리 파람으로 prevArticleId 가 있고 이전 요청(스크롤)에서 마지막 아티클 ID를 의미합니다. 필수값은 아니며 해당 값이 오지 않을 경우 첫 번째 스크롤로 판단하려고 합니다.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
그리고 지금 당장은 해당 API에 대한 뷰가 1개 밖에 없어서 Facade UC를 둘 필요성이 있을까? 라는 생각이 있어서 일단은 추가 안했어요 (나중에 대응할 뷰가 2개 이상 생기면 필요할 듯)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
수고하셨습니다! 해당 결과도 반영해서 스웨거 허브에 업데이트 할께요
🎫 연관 이슈
resolved #250
💁♂️ PR 내용
prevArticleId
: 이전 스크롤(요청)에서 읽어간 마지막 아티클 ID🙏 작업
🙈 PR 참고 사항
📸 스크린샷
🤖 테스트 체크리스트