· 오늘 공부한 것
모집글 단건조회
모집글 전체조회
모집글 상태변경
· 공부한 내용, 궁금한 내용, 부족한 내용
조회를 구현하면서 @Mapper에서 @Mapping을 사용해보았다. 기존까지는 소스객체에 있는게 타겟객체에 있을 경우 맵핑이 된다고만 이해하고 있었다. 그래서 소스에는 있지만 타겟에는 없을 경우 맵핑하지 못하기 때문에 사용에 한계가 있다고 생각했다. 하지만 @Mapping을 사용함으로써 소스객체의 무슨 값이 타겟 객체에 맵핑되는지 설정할 수 있었다.
@Mapping(source = "deadline", target = "deadline")
default String toStringTimestamp(Timestamp deadline) {
if (deadline == null) {
return null;
}
LocalDateTime localDateTime =
deadline.toInstant().atZone(ZoneId.of("Asia/Seoul")).toLocalDateTime();
return localDateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
}
@Mapping(source = "deadline", target = "deadline")
PostReadRes toPostReadRes(Post post);
간단한 사용으로 소스객체에서는 deadline의 타입이 Timestamp인데 타겟객체에서는 String이다. 그래서 위와 같은 @Mapping을 사용해서 형변환해주고 있다. 그러면 밑에서 소스와 객체를 지정해주면 위에서 작업한 결과로 맵핑이 된다. 이 방법을 알게되서 객체간의 변환이 필요할 때 @Mapper를 자주 사용할 거 같다.
그리고 전체조회를 할 때 약간의 문제가 생겼다. 처음 전체조회를 할 때 해당 필터마다 api를 따로 두었는데 이것을 통합하자는 의견이 나와서 통합하기로 하였다. 하지만 이것을 type으로 Enum처리해서 필터조건을 받아오는데 skill이나 job별로 전체조회를 할 경우 경우의 수가 많아서 기존의 Enum으로 관리하고 있는데 이것을 다시 type에서 관리하려고 하니 까다로워서 따로 빼는 방식으로 접근했다.
그래서 api를 다음과 같이 설정했었다.
- /v1/posts?type={type}
- /v1/posts?skill={skill}
- /v1/posts?job={job}
이렇게 두고 코드를 구현했는데 오류가 발생했다. 다시 생각해보면 당연한 결과이다. PathVariable로 진행할 시 위와 같이 나눠서 진행해도 되지만 이것은 RequestParam으로 받는 식이여서 다 같은 경로로 인식하는 것이다. 만약 param을 여러개 받고 싶다면 '&'로 연결해서 진행해야 한다. 그래서 api를 다 합쳐서 다음과 같이 수정하였다.
- /v1/posts?type={type}&skill={skill}&job={job}
type의 종류는 ALL, WRITE, APPLY, LIKE, MEMBER, SKILL, JOB 로 설정하고 SKILL이나 JOB이 올 시에는 skill과 job param에도 해당하는 값이 같이 들어온다. 그래서 controller에서 설정을 해주었다.
@GetMapping
public RestResponse<PostReadResList> readPostList(
@RequestParam(name = "type", defaultValue = "ALL") Type type,
@RequestParam(name = "skill", required = false) Skill skill,
@RequestParam(name = "job", required = false) Job job,
@AuthenticationPrincipal UserDetailsImpl userDetails) {
return RestResponse.success(postService.readPostList(type, skill, job, userDetails.getUser()));
}
여기서 skill과 job의 경우는 값이 안들어 올 수 있으니 required = false 설정을 해주었다. 일단 controller에서 전체조회를 통합하는 것은 통과했는데 이 뒤에 service에서 로직을 구현하는 곳에서 어려움을 겪고 있다. 여기서 페이징처리도 해야하고 해당 필터조건에 따라 모집글을 전체조회해야하기 때문에 생각할 부분이 많았다. 그래서 querydsl도 적용해봐야 하는데 학습이 필요해서 바로 구현하지 못하고 있다.
단건조회에서는 redis를 이용해서 visit을 늘리는 작업도 해야한다.
· 오늘 서칭 한 자료
https://yooseong12.tistory.com/47
· 느낀 점
- api구현은 다했지만 아직 미구현한 부분이 많기 때문에 해야할 작업을 리스트해서 완료해야할 거 같다.
- 아직 중간점검도 기간이 남았고 최종프로젝트이기에 여유롭게 진행하고 있었는데 빠르게 진행해야 할 거 같다.
- 여유롭게 하기보다는 빨리 다 완성해서 추가구현을 생각해야 한다!!!!
'Today I Learned' 카테고리의 다른 글
2024-01-17 TIL 최종프로젝트(8) (0) | 2024.01.17 |
---|---|
2024-01-12 TIL 기술면접, 최종프로젝트(6) (0) | 2024.01.12 |
2024-01-11 TIL 기술면접, 최종프로젝트(5) (0) | 2024.01.11 |
2024-01-10 TIL 기술면접, 최종프로젝트(4) (0) | 2024.01.10 |
2024-01-09 TIL 최종프로젝트(3) (0) | 2024.01.10 |