nonneng.ee
Daeun-rithm
nonneng.ee
์ „์ฒด ๋ฐฉ๋ฌธ์ž
์˜ค๋Š˜
์–ด์ œ
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (51)
    • Back-end (17)
      • Server (3)
      • Database (3)
      • Spring (9)
      • Node.js (1)
    • Book (1)
      • ์ดํŽ™ํ‹ฐ๋ธŒ ์ž๋ฐ” (0)
      • ๋Œ€๊ทœ๋ชจ ์‹œ์Šคํ…œ ์„ค๊ณ„ (1)
    • Algorithm (1)
      • Greedy, Implementation (6)
      • Dynamic Programming (5)
      • Data Structure (3)
      • Sorting (2)
      • Concept (1)
    • TIL (11)
    • Software (3)
      • Design Pattern (3)
    • Computer Science (1)

๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

  • ํ™ˆ
  • ํƒœ๊ทธ
  • ๋ฐฉ๋ช…๋ก

๊ณต์ง€์‚ฌํ•ญ

์ธ๊ธฐ ๊ธ€

ํƒœ๊ทธ

  • ์ดํŽ™ํ‹ฐ๋ธŒ ์ž๋ฐ”
  • ์ˆ˜๋™์„ค์น˜
  • ์†Œ์Šค์„ค์น˜
  • APM
  • ๋ธŒ๋ฃจํŠธํฌ์Šค
  • ์•„์ดํ…œ8
  • Restful API
  • Spring
  • ๊ตฌ๋™์›๋ฆฌ
  • ์ปดํŒŒ์ผ์„ค์น˜
  • ๊ตฌํ˜„
  • ํŒŒ์ด์ฌ
  • ๋ฐฑ์ค€
  • ์šฐ๋ถ„ํˆฌ
  • ๊ฐ€์ƒ๋จธ์‹ 
  • ์•„์ดํ…œ6
  • MySQL
  • Java
  • Postman
  • ์ž๋ฐ”
  • ์•„์ดํ…œ 25
  • DP
  • ์•„์ดํ…œ 23
  • JPA
  • ์„œ๋ฒ„
  • ์—๋Ÿฌ
  • ์•„์ดํ…œ9
  • jwt
  • API
  • node js

์ตœ๊ทผ ๋Œ“๊ธ€

์ตœ๊ทผ ๊ธ€

ํ‹ฐ์Šคํ† ๋ฆฌ

hELLO ยท Designed By ์ •์ƒ์šฐ.
nonneng.ee

Daeun-rithm

TIL

[TIL/fairer] 2022-05-14 jpa๋กœ์ง ๊ตฌํ˜„

2022. 5. 16. 15:38

๐Ÿ˜Š 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
    'TIL' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
    • [TIL/adone] 2022-08-25~26 dto ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ ๋ณ€๊ฒฝ, @Embeddable
    • [TIL/adone] 2022-08-23~24 API ์„ค๊ณ„, @Builder.Default, Swagger ์„ค์ •
    • [TIL] 2022-01-12
    • [TIL] 2021-11-09
    nonneng.ee
    nonneng.ee

    ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”