Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 페이징 정렬
- github 복제
- jar빌드
- Servlet
- 저장소 이전
- 값 타입
- 넘파이
- 우분투
- 프로그래머스
- 비밀번호 재설정 API
- 스프링부트 OpenAI API
- JDBC
- 서버 배포
- swap 메모리
- springboot
- git 충돌 해결
- MySQL
- 자바
- HttpServletResponse
- Chat GPT
- api 개발
- 저장소 복제
- JPQL
- Git
- MVC
- 스프링 이메일 전송
- JPA
- 두수의 합 자바
- Json 객체
- 파이썬
Archives
- Today
- Total
현의 개발 블로그
JPQL로 캘린더 API 개발하기 본문
특정 날짜 범위에 startDate 혹은 endDate가 포함될 경우 서평을 반환하는 API를 설계할 것이다.
JPQL 작성
JPARepository를 상속받는 ReviewRepository에 jpql문을 입력한다.
특정 날짜 범위 시작일자, 종료 일자를 파라미터로 세팅한다.
특정 유저의 서평만 반환해야 하므로 User도 파라미터로 필요하다.
파라미터 설정 시, 쿼리 안에는 :key로 넣어주고, 함수 안에 @Param("key")로 매핑한다.
줄바꿈을 할 때는 +로 이어주고, 그 다음 줄에 한 칸 띄어야 한다.
DTO 설정
요청 데이터
public class ReviewReq{
@Getter
public static class Calendar{
@NotNull(message = "캘린더 시작 날짜를 입력해주세요.")
private LocalDate calStartDate;
@NotNull(message = "캘린더 종료 날짜를 입력해주세요.")
private LocalDate calEndDate;
}
}
@Valid를 사용해 필드값들이 Null일 경우 오류 메세지가 뜨도록 했다.
응답 데이터
public class ReviewRes {
@Getter
public static class Calendar{
private Long reviewId;
private LocalDate startDate;
private LocalDate endDate;
public Calendar(Review review) {
this.reviewId = review.getId();
this.startDate = review.getStartDate();
this.endDate = review.getEndDate();
}
}
}
Review를 파라미터로 받으면 해당 값으로 객체를 생성한다.
Controller
생성한 requestDto와 유저 아이디 값을 넣어준다.
Request 객체에 필드가 null일 경우, 원하는 오류를 발생시키기 위해 @Valid를 사용했다.
@ApiOperation(value ="캘린더 조회")
@GetMapping("/calendar/{userId}")
public BaseResponse<List<ReviewRes.Calendar>> getCalendar(@RequestBody @Valid ReviewReq.Calendar request, @PathVariable Long userId){
return reviewService.getCalendar(request, userId);
}
Service
public BaseResponse<List<ReviewRes.Calendar>> getCalendar(ReviewReq.Calendar request, Long userId) {
User user = userRepository.findById(userId).orElse(null);
if (user==null){
return new BaseResponse<>(NOT_EXIST_USER_ID);
}
List<Review> result = reviewRepository.findReviewByDate(user, request.getCalStartDate(), request.getCalEndDate());
List<ReviewRes.Calendar> lst = new ArrayList<>();
for (Review r: result){
ReviewRes.Calendar calendarRes = new ReviewRes.Calendar(r);
lst.add(calendarRes);
}
return new BaseResponse<>(lst);
}
유저 아이디로 유저를 조회하고, null일 경우 특정 응답을 반환한다.
jpql 결과값으로 얻은 Review 객체를 리스트로 받아온다.
각 Review 객체에 대해 startDate, endDate, reviewId를 얻어와 calendarRes 객체에 대입한다.
리스트에 calendarRes 객체를 추가해주고 이를 반환해준다.
Postman으로 요청하기
요청 결과
'대외활동 > 한이음' 카테고리의 다른 글
우분투에서 서버 배포(1) - 프로그램 설치, git clone (0) | 2023.07.16 |
---|---|
스프링부트 profile 설정하기 (0) | 2023.07.14 |
ERD 설계하기 (0) | 2023.05.24 |
초기 프로젝트 깃허브에 올리기 (1) | 2023.05.16 |
RDS와 MySQL, SpringBoot 연결하기 (0) | 2023.05.15 |
Comments