๐ Today I Learned
์ง์์ผ ์ ์ฒด ์กฐํ API - jwt token ์ ์ฉ
์ง์์ผ ์ ์ฒด ์กฐํ API๋ฅผ ๊ฐ๋ฐํ ๋, ๋ ์ง๋ฅผ ๋ฐ์์์ ํด๋น ๋ ์ง์ ํด๋นํ๋ ์ง์์ผ์ ๋ฆฌํดํ๋๋ก ํ์๋ค. ๋ก๊ทธ์ธ ๊ธฐ๋ฅ์ด ๊ตฌํ๋๊ณ , jwt๊ฐ ์ถ๊ฐ๋๋ฉด์ ํ ํฐ์ ํตํด memberId๋ฅผ ๋ฐ์์์ ๋ ์ง + memberId๊น์ง ์กฐ์ธํด์ ๊ฐ์ ธ์์ผ ํ๋ค.
jwt๋ ๋์ค์ ์์ ํ๋๋ผ๋ memberId๊น์ง ๋ฐ์์ ๊ฐ์ ธ์ค๋๋ก ์ค๊ณํ์ด์ผ ํ๋๋ฐ, ์ง๊ธ๊น์ง ๋ ์ง๋ง ๋ฐ์ ๋ชจ๋ ์ ์ ์ ์ง์์ผ์ ๊ฐ์ ธ์ค๋๋ก ๊ตฌํํ๊ณ ์์๋ค๋๊ฒ ์ถฉ๊ฒฉ์ด์๋ค. ์ด์ ๋๋ก ๊ธฐ๋ณธ์ ์ธ ๋ถ๋ถ๋ ๋์น๊ณ ์์๋ค๋..๐
HouseWorkController ์์ ์
@GetMapping(value = "")
public ResponseEntity<HouseWorkDateResponseDto> getHouseWork(@RequestParam("scheduledDate") String scheduledDate){
LocalDate scheduledDateParse = LocalDate.parse(scheduledDate, DateTimeFormatter.ISO_DATE);
return ResponseEntity.ok(houseWorkService.getHouseWork(scheduledDateParse));
}
HouseWorkService ์์ ์
@Transactional
public HouseWorkDateResponseDto getHouseWork(LocalDate scheduledDate){
List<HouseWork> houseWorkList = houseWorkRepository.findAllByScheduledDate(scheduledDate);
List<HouseWorkResponseDto> houseWorkResponseDtoList = houseWorkList.stream().map(houseWork -> {
List<MemberDto> memberDtoList = memberRepository.getMemberDtoListByHouseWorkId(houseWork.getHouseWorkId()).stream().map(MemberDto::from).collect(Collectors.toList());
return HouseWorkResponseDto.from(houseWork, memberDtoList);
}).collect(Collectors.toList());
long countDone = houseWorkResponseDtoList.stream().filter(HouseWorkResponseDto::getSuccess).count();
long countLeft = houseWorkResponseDtoList.stream().filter(houseWorkResponseDto -> !houseWorkResponseDto.getSuccess()).count();
return HouseWorkDateResponseDto.from(scheduledDate, countDone, countLeft, houseWorkResponseDtoList);
}
HouseWorkController ์์ ํ
@GetMapping(value = "")
public ResponseEntity<HouseWorkDateResponseDto> getHouseWork(@RequestParam("scheduledDate") String scheduledDate,
@RequestMemberId Long memberId){
LocalDate scheduledDateParse = LocalDate.parse(scheduledDate, DateTimeFormatter.ISO_DATE);
return ResponseEntity.ok(houseWorkService.getHouseWork(scheduledDateParse, memberId));
}
HouseWorkServie ์์ ํ
@Transactional
public HouseWorkDateResponseDto getHouseWork(LocalDate scheduledDate, Long memberId){
Member member = memberRepository.findById(memberId).orElseThrow(() -> new MemberTokenNotFoundException("์กด์ฌํ์ง ์๋ id"));
List<Assignment> assignmentList = assignmentRepository.findAllByMember(member);
List<HouseWork> houseWorkList = assignmentList.stream().map(assignment -> assignment.getHouseWork())
.filter(houseWork -> houseWork.getScheduledDate().isEqual(scheduledDate)).collect(Collectors.toList());
List<HouseWorkResponseDto> houseWorkResponseDtoList = houseWorkList.stream().map(houseWork -> {
List<MemberDto> memberDtoList = memberRepository.getMemberDtoListByHouseWorkId(houseWork.getHouseWorkId()).stream().map(MemberDto::from).collect(Collectors.toList());
return HouseWorkResponseDto.from(houseWork, memberDtoList);
}).collect(Collectors.toList());
long countDone = houseWorkResponseDtoList.stream().filter(HouseWorkResponseDto::getSuccess).count();
long countLeft = houseWorkResponseDtoList.stream().filter(houseWorkResponseDto -> !houseWorkResponseDto.getSuccess()).count();
return HouseWorkDateResponseDto.from(scheduledDate, countDone, countLeft, houseWorkResponseDtoList);
}
Member-HouseWork ๊ด๊ณ๊ฐ N:N → ์ค๊ฐ์ Assignment ํ ์ด๋ธ์ ๋ ์ํฉ์์ JPA๋ก ์ด๋ค์ ์กฐ์ธ๊ด๊ณ๋ฅผ ๋ถ๋ฌ์ค๊ธฐ๊ฐ ์ด๋ ค์ ๋ค.
- HouseWork ๋๋ฉ์ธ์ AssignmentId๊ฐ ์๋ค
- findAll ํ๋ผ๋ฏธํฐ๋ก List<Assignment>๋ฅผ ์ค๋ ์ ๊ฐ์ ธ์ฌ๊น
์ฒ์ ์์ฑํ๋ Service ์ฝ๋ - ์๋ฌ
Member member = memberRepository.findAllById(memberId);
List<Assignment> assignmentList = assignmentRepository.findAllByMember(member);
List<HouseWork> houseWorkList = houseWorkRepository.findAllByScheduledDateAndAssignmentsEq(scheduledDate, assignmentList);
์์ ํ Service
Member member = memberRepository.findById(memberId).orElseThrow(() -> new MemberTokenNotFoundException("์กด์ฌํ์ง ์๋ id"));
List<Assignment> assignmentList = assignmentRepository.findAllByMember(member);
List<HouseWork> houseWorkList = assignmentList.stream().map(assignment -> assignment.getHouseWork())
.filter(houseWork -> houseWork.getScheduledDate().isEqual(scheduledDate)).collect(Collectors.toList());
- ๊ด๊ณ๊ฐ ๋ณต์กํด์ ๊ทธ๋ฅ querydsl๋ก ์์ฑํด์ผ ํ๋ ์ถ์์ง๋ง, scheduledDate๋ฅผ findAll์ ํ๋ผ๋ฏธํฐ๋ก ์ฃผ์ง ์๊ณ stream().filter()๋ก ์ฒ๋ฆฌํ๋ ์กฐํ์ ์ฑ๊ณตํ๋ค!
- Member ๊ฐ์ฒด๋ฅผ ๋ฐ์์ฌ ๋, findAllById๋ก ๋ฐ์ง ๋ง๊ณ findById + ์์ธ์ฒ๋ฆฌ ํด์ฃผ๊ธฐ
๐ Comment
์์ง JPA๋ณด๋ค ์ฟผ๋ฆฌ๊ฐ ํธํ๋ค..
'TIL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[TIL/adone] 2022-08-23~24 API ์ค๊ณ, @Builder.Default, Swagger ์ค์ (0) | 2022.08.24 |
---|---|
[TIL] 2022-01-12 (3) | 2022.01.13 |
[TIL] 2021-11-09 (0) | 2021.11.17 |