coyojo10의 개발블로그!
[개인 프로젝트] 앨범 목록 불러오기 API 만들기 본문
💡 입출력 정보 확인
- API 문서에서 다음과 같은 입력 정보와 출력 정보를 확인하기
입력
출력
💡 Controller 구조 잡기
...
@RestController
@RequestMapping("/albums")
public class AlbumController {
...
@RequestMapping(value="", method = RequestMethod.GET)
public ResponseEntity<List<AlbumDto>>
getAlbumList(@RequestParam(value="keyword", required=false, defaultValue="") final String keyword,
@RequestParam(value="sort", required=false, defaultValue = "byDate") final String sort) {
}
}
요소 | 값 | 이유 |
URL | value = " " | 호출 URL이 단순 /albums 이고 이미 AlbumController에서 정의해줬으니, 추가 경로가 없을 경우 해당 메서드로 들어온다. 앞서 만든 앨범 생성하기 API랑 URL은 같지만 HTTP 메서드가 다르기때문에 가능하다. |
HTTP | RequestMethod.GET | API 문서에서 GET으로 정의 |
입력 타입 | @RequestParam(value="keyword", required=false, defaultValue="") final String keyword, @RequestParam(value="sort", required=false, defaultValue = "byDate") final String sort |
Query String으로 입력값을 keyword,sort를 받게 된다. required = false 는 필수 값이 아니라는 의미 이고 defaultValue는 Client에서 입력값이 없을 떄 설정되는 기본 값이다. |
출력 타입 | ResponseEntity<List<AlbumDto>> | 위의 출력 JSON을 보면 Array 안에 앨범 정보가 들어있는데 대표 썸네일 이미지 4개를 제외하고는 기존 AlbumDto 필드값이랑 동일하다. 이런 경우 AlbumDto에 thumbUrl 필드를 추가할 수 있다. 그래서 새로운 Dto를 정의해주는 대신 기존 코드를 활용하는 방법으로 진행한다. |
💡 Service 로직 관련
날짜와 앨범명 기준으로 정렬할 수 있는데, 입력된 정렬 기준에 맞게 DB에 쿼리를 보내서 정렬된 값을 가져온다.
- 날짜 기준 정렬, 앨범명 기준 정렬로 나눠서 별도로 repository 호출해서 앨범 도메인 리스트를 반환받는다.
- AlbumRepository에 사용자 정의 메서드 추가
- 앨범 도메인 리스트를 DTO 리스트로 매핑한다
- 각 앨범마다 가장 최신 업로드된 이미지 4장 썸네일 url DTO에 필드값 입력
- 앨범 DTO 리스트 반환
💡 Album 검색/ 정렬 Repository 메서드 추가
어떤 Repository 메서드가 필요한지 분석
- 검색 키워드를 받는다
-> 앨범명에 검색 키워드가 포함되어 있으면 반환한다.
- 정렬 기준을 받는다.
-> ByName은 전체 DB를 조회하여 앨범명을 오름차순으로 받는다
-> ByDate는 전체 DB를 조회해 날짜 최신순으로 받는다.
@Repository
public interface AlbumRepository extends JpaRepository<Album, Long> {
List<Album> findByAlbumNameContainingOrderByCreatedAtDesc(String keyword);
List<Album> findByAlbumNameContainingOrderByAlbumNameAsc(String keyword);
}
'백엔드' 카테고리의 다른 글
[자바 백엔드 멀티캠퍼스] 수업 리뷰 - Servlet 정리 (0) | 2023.04.21 |
---|---|
Junit을 통한 단위 테스트 정리 (0) | 2023.04.20 |
[개인 프로젝트] Domain Entity 생성 정리 - 양뱡향 연관관계 (0) | 2023.04.10 |
[개인 프로젝트] - 필요한 지식 정리 (0) | 2023.04.06 |
[개인프로젝트] - 데이터베이스 설계 (ERD 다이어그램 만들기) (0) | 2023.04.02 |