From 940865d3c8b8448e72b74daa3feb4600901e904d Mon Sep 17 00:00:00 2001 From: parkje0927 Date: Fri, 7 Jul 2023 14:37:19 +0900 Subject: [PATCH 1/6] =?UTF-8?q?feat:=20=EB=A7=88=EC=8B=A0=20=EC=9D=8C?= =?UTF-8?q?=EB=A3=8C=20=EB=8B=B9=20=EA=B8=B0=EC=9E=85=20=EA=B8=B0=EB=8A=A5?= =?UTF-8?q?=20=EA=B5=AC=ED=98=84=20(#41)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../record/controller/RecordController.java | 42 ++++++++++++++ .../dto/request/DrinkRecordSaveRequest.java | 23 ++++++++ .../dto/response/DrinkRecordSaveResponse.java | 24 ++++++++ .../service/DrinkRecordSaveService.java | 57 +++++++++++++++++++ .../repository/FindRecordsRepository.java | 2 + .../repository/FindRecordsRepositoryImpl.java | 11 ++++ .../repository/SaveRecordRepository.java | 11 ++++ .../repository/SaveRecordRepositoryImpl.java | 22 +++++++ 8 files changed, 192 insertions(+) create mode 100644 oversweet-api/src/main/java/com/depromeet/oversweet/record/controller/RecordController.java create mode 100644 oversweet-api/src/main/java/com/depromeet/oversweet/record/dto/request/DrinkRecordSaveRequest.java create mode 100644 oversweet-api/src/main/java/com/depromeet/oversweet/record/dto/response/DrinkRecordSaveResponse.java create mode 100644 oversweet-api/src/main/java/com/depromeet/oversweet/record/service/DrinkRecordSaveService.java create mode 100644 oversweet-domain/src/main/java/com/depromeet/oversweet/domain/record/repository/SaveRecordRepository.java create mode 100644 oversweet-domain/src/main/java/com/depromeet/oversweet/domain/record/repository/SaveRecordRepositoryImpl.java diff --git a/oversweet-api/src/main/java/com/depromeet/oversweet/record/controller/RecordController.java b/oversweet-api/src/main/java/com/depromeet/oversweet/record/controller/RecordController.java new file mode 100644 index 0000000..8dafd7b --- /dev/null +++ b/oversweet-api/src/main/java/com/depromeet/oversweet/record/controller/RecordController.java @@ -0,0 +1,42 @@ +package com.depromeet.oversweet.record.controller; + +import com.depromeet.oversweet.record.dto.request.DrinkRecordSaveRequest; +import com.depromeet.oversweet.record.dto.response.DrinkRecordSaveResponse; +import com.depromeet.oversweet.record.service.DrinkRecordSaveService; +import com.depromeet.oversweet.response.DataResponse; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.responses.ApiResponses; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.validation.Valid; +import lombok.RequiredArgsConstructor; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@Tag(name = "기록", description = "마신 음료 당 기록 관련 API") +@RestController +@RequestMapping("/api/v1/record") +@RequiredArgsConstructor +public class RecordController { + + private final DrinkRecordSaveService drinkRecordSaveService; + + /** + * 마신 음료 당 기록 + * 추후 로그인 기능 구현 후, 로그인한 유저의 ID를 받아와야 함 (ex. @AuthenticationPrincipal User user) + */ + @Operation(summary = "마신 음료 당 기록", description = "유저가 마신 음료의 당을 기록합니다.") + @ApiResponses(@ApiResponse(responseCode = "200", description = "마신 음료 당 기록 성공")) + @PostMapping("/drink") + public ResponseEntity> saveDrinkRecord( + @RequestBody @Valid final DrinkRecordSaveRequest drinkRecordSaveRequest + ) { + DrinkRecordSaveResponse response = drinkRecordSaveService.saveDrinkRecord(100L, drinkRecordSaveRequest); + return ResponseEntity.ok().body(DataResponse.of(HttpStatus.CREATED, "마신 음료 당 기록 성공", response)); + } + +} diff --git a/oversweet-api/src/main/java/com/depromeet/oversweet/record/dto/request/DrinkRecordSaveRequest.java b/oversweet-api/src/main/java/com/depromeet/oversweet/record/dto/request/DrinkRecordSaveRequest.java new file mode 100644 index 0000000..839beb5 --- /dev/null +++ b/oversweet-api/src/main/java/com/depromeet/oversweet/record/dto/request/DrinkRecordSaveRequest.java @@ -0,0 +1,23 @@ +package com.depromeet.oversweet.record.dto.request; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.Min; +import jakarta.validation.constraints.NotNull; +import lombok.Builder; + +@Builder +public record DrinkRecordSaveRequest( + + @NotNull + @Schema(description = "음료 ID", example = "1") Long id, + + @NotNull + @Min(1) + @Schema(description = "마신 잔의 수", example = "2") Integer count, + + @NotNull + @Min(0) + @Schema(description = "1잔 기준 최종 섭취 당 함량", example = "10") Integer intakeSugar + +) { +} diff --git a/oversweet-api/src/main/java/com/depromeet/oversweet/record/dto/response/DrinkRecordSaveResponse.java b/oversweet-api/src/main/java/com/depromeet/oversweet/record/dto/response/DrinkRecordSaveResponse.java new file mode 100644 index 0000000..6c60c76 --- /dev/null +++ b/oversweet-api/src/main/java/com/depromeet/oversweet/record/dto/response/DrinkRecordSaveResponse.java @@ -0,0 +1,24 @@ +package com.depromeet.oversweet.record.dto.response; + +import com.depromeet.oversweet.drink.dto.response.DrinkDailySugarTotalStatisticsInfo; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Builder; + +@Builder +public record DrinkRecordSaveResponse( + + @Schema(description = "지금 마신 음료 당", example = "10") int intakeSugar, + + @Schema(description = "하루 적정 당 섭취량", example = "24") int dailySugar, + + @Schema(description = "방금 기록한 당 성분까지 포함한, 오늘 먹은 총 당 섭취량", example = "20") int dailyTotalSugar, + + @Schema(description = "적정 당 섭취량을 초과 했는지 안했는지 여부", example = "false") boolean isExcess + +) { + public static DrinkRecordSaveResponse of(int intakeSugar, DrinkDailySugarTotalStatisticsInfo info) { + return new DrinkRecordSaveResponse( + intakeSugar, info.dailySugar(), info.dailyTotalSugar(), info.isExcess() + ); + } +} diff --git a/oversweet-api/src/main/java/com/depromeet/oversweet/record/service/DrinkRecordSaveService.java b/oversweet-api/src/main/java/com/depromeet/oversweet/record/service/DrinkRecordSaveService.java new file mode 100644 index 0000000..7b56471 --- /dev/null +++ b/oversweet-api/src/main/java/com/depromeet/oversweet/record/service/DrinkRecordSaveService.java @@ -0,0 +1,57 @@ +package com.depromeet.oversweet.record.service; + +import com.depromeet.oversweet.domain.drink.entity.DrinkEntity; +import com.depromeet.oversweet.domain.drink.repository.FindDrinkRepository; +import com.depromeet.oversweet.domain.member.entity.MemberEntity; +import com.depromeet.oversweet.domain.member.repository.FindMemberRepository; +import com.depromeet.oversweet.domain.record.entity.RecordEntity; +import com.depromeet.oversweet.domain.record.repository.FindRecordsRepository; +import com.depromeet.oversweet.domain.record.repository.SaveRecordRepository; +import com.depromeet.oversweet.drink.dto.response.DrinkDailySugarTotalStatisticsInfo; +import com.depromeet.oversweet.drink.vo.DrinkStatisticsTotalInfo; +import com.depromeet.oversweet.drink.vo.LocalDateTimeInfo; +import com.depromeet.oversweet.record.dto.request.DrinkRecordSaveRequest; +import com.depromeet.oversweet.record.dto.response.DrinkRecordSaveResponse; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +@RequiredArgsConstructor +public class DrinkRecordSaveService { + + private final FindMemberRepository findMemberRepository; + private final FindDrinkRepository findDrinkRepository; + private final FindRecordsRepository findRecordsRepository; + private final SaveRecordRepository saveRecordRepository; + + public DrinkRecordSaveResponse saveDrinkRecord(Long memberId, DrinkRecordSaveRequest drinkRecordSaveRequest) { + + final MemberEntity findMember = findMemberRepository.findMemberById(memberId); + + final DrinkEntity findDrink = findDrinkRepository.findDrinkById(drinkRecordSaveRequest.id()); + + RecordEntity record = RecordEntity.builder() + .member(findMember) + .drink(findDrink) + .count(drinkRecordSaveRequest.count()) + .intakeSugar(drinkRecordSaveRequest.intakeSugar()) + .build(); + + saveRecordRepository.saveRecord(record); + + // 오늘 (데일리 날짜 확인) 00:00 ~ 23:59 + final LocalDateTimeInfo dateTimeInfo = LocalDateTimeInfo.getDailyDateTime(); + + // 해당 유저의 오늘(데일리) 섭취 음료 조회 Repository + final List dailyRecords = findRecordsRepository.findRecordsByLocalDateTime(findMember.getId(), dateTimeInfo.startDateTime(), dateTimeInfo.endDateTime()); + + DrinkStatisticsTotalInfo drinkStatisticsTotalInfo = new DrinkStatisticsTotalInfo(dailyRecords); + + DrinkDailySugarTotalStatisticsInfo dailyTotalStatisticsInfo = drinkStatisticsTotalInfo.getDailyTotalStatisticsInfo(findMember.getDailySugar()); + + // 기록 관련 response 로 반환 + return DrinkRecordSaveResponse.of(record.getIntakeSugar(), dailyTotalStatisticsInfo); + } +} diff --git a/oversweet-domain/src/main/java/com/depromeet/oversweet/domain/record/repository/FindRecordsRepository.java b/oversweet-domain/src/main/java/com/depromeet/oversweet/domain/record/repository/FindRecordsRepository.java index 70a6da1..5ccb621 100644 --- a/oversweet-domain/src/main/java/com/depromeet/oversweet/domain/record/repository/FindRecordsRepository.java +++ b/oversweet-domain/src/main/java/com/depromeet/oversweet/domain/record/repository/FindRecordsRepository.java @@ -10,4 +10,6 @@ */ public interface FindRecordsRepository { List findRecordsByLocalDateTime(final Long memberId, final LocalDateTime startDate, LocalDateTime endDate); + + RecordEntity findRecordById(Long id); } diff --git a/oversweet-domain/src/main/java/com/depromeet/oversweet/domain/record/repository/FindRecordsRepositoryImpl.java b/oversweet-domain/src/main/java/com/depromeet/oversweet/domain/record/repository/FindRecordsRepositoryImpl.java index d2354a3..45c87e8 100644 --- a/oversweet-domain/src/main/java/com/depromeet/oversweet/domain/record/repository/FindRecordsRepositoryImpl.java +++ b/oversweet-domain/src/main/java/com/depromeet/oversweet/domain/record/repository/FindRecordsRepositoryImpl.java @@ -39,4 +39,15 @@ public List findRecordsByLocalDateTime(final Long memberId, final .fetch(); } + + @Override + @Transactional(readOnly = true) + public RecordEntity findRecordById(Long id) { + return queryFactory.selectFrom(recordEntity) + .join(recordEntity.drink, drinkEntity).fetchJoin() + .join(recordEntity.drink.franchise, franchiseEntity).fetchJoin() + .where(recordEntity.member.id.eq(id)) + .fetchOne(); + } } + diff --git a/oversweet-domain/src/main/java/com/depromeet/oversweet/domain/record/repository/SaveRecordRepository.java b/oversweet-domain/src/main/java/com/depromeet/oversweet/domain/record/repository/SaveRecordRepository.java new file mode 100644 index 0000000..9774d29 --- /dev/null +++ b/oversweet-domain/src/main/java/com/depromeet/oversweet/domain/record/repository/SaveRecordRepository.java @@ -0,0 +1,11 @@ +package com.depromeet.oversweet.domain.record.repository; + +import com.depromeet.oversweet.domain.record.entity.RecordEntity; + +/** + * 유저가 마신 음료 당 기록 Interface + */ +public interface SaveRecordRepository { + + void saveRecord(RecordEntity record); +} diff --git a/oversweet-domain/src/main/java/com/depromeet/oversweet/domain/record/repository/SaveRecordRepositoryImpl.java b/oversweet-domain/src/main/java/com/depromeet/oversweet/domain/record/repository/SaveRecordRepositoryImpl.java new file mode 100644 index 0000000..3822bde --- /dev/null +++ b/oversweet-domain/src/main/java/com/depromeet/oversweet/domain/record/repository/SaveRecordRepositoryImpl.java @@ -0,0 +1,22 @@ +package com.depromeet.oversweet.domain.record.repository; + +import com.depromeet.oversweet.domain.record.entity.RecordEntity; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Repository; +import org.springframework.transaction.annotation.Transactional; + +/** + * 유저가 마신 음료 당 기록 구현체 + */ +@Repository +@RequiredArgsConstructor +public class SaveRecordRepositoryImpl implements SaveRecordRepository { + + private final RecordJpaRepository recordJpaRepository; + + @Override + @Transactional + public void saveRecord(RecordEntity record) { + recordJpaRepository.save(record); + } +} From da9f57500025aa20ffc8f1d1ffe00ef0f720b1af Mon Sep 17 00:00:00 2001 From: parkje0927 Date: Fri, 7 Jul 2023 14:38:02 +0900 Subject: [PATCH 2/6] =?UTF-8?q?test:=20=EB=A7=88=EC=8B=A0=20=EC=9D=8C?= =?UTF-8?q?=EB=A3=8C=20=EB=8B=B9=20=EA=B8=B0=EC=9E=85=20=EA=B4=80=EB=A0=A8?= =?UTF-8?q?=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20(#41)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../depromeet/oversweet/common/TestSetup.java | 2 - .../service/DrinkRecordSaveServiceTest.java | 74 +++++++++++++++++++ 2 files changed, 74 insertions(+), 2 deletions(-) create mode 100644 oversweet-api/src/test/java/com/depromeet/oversweet/record/service/DrinkRecordSaveServiceTest.java diff --git a/oversweet-api/src/test/java/com/depromeet/oversweet/common/TestSetup.java b/oversweet-api/src/test/java/com/depromeet/oversweet/common/TestSetup.java index fb29118..e06bb74 100644 --- a/oversweet-api/src/test/java/com/depromeet/oversweet/common/TestSetup.java +++ b/oversweet-api/src/test/java/com/depromeet/oversweet/common/TestSetup.java @@ -107,6 +107,4 @@ public RecordEntity getSecondRecord() { return secondRecordEntity; } - - } diff --git a/oversweet-api/src/test/java/com/depromeet/oversweet/record/service/DrinkRecordSaveServiceTest.java b/oversweet-api/src/test/java/com/depromeet/oversweet/record/service/DrinkRecordSaveServiceTest.java new file mode 100644 index 0000000..f6ecf48 --- /dev/null +++ b/oversweet-api/src/test/java/com/depromeet/oversweet/record/service/DrinkRecordSaveServiceTest.java @@ -0,0 +1,74 @@ +package com.depromeet.oversweet.record.service; + +import com.depromeet.oversweet.common.TestSetup; +import com.depromeet.oversweet.domain.drink.entity.DrinkEntity; +import com.depromeet.oversweet.domain.drink.repository.FindDrinkRepository; +import com.depromeet.oversweet.domain.member.entity.MemberEntity; +import com.depromeet.oversweet.domain.member.repository.FindMemberRepository; +import com.depromeet.oversweet.domain.record.entity.RecordEntity; +import com.depromeet.oversweet.domain.record.repository.FindRecordsRepository; +import com.depromeet.oversweet.domain.record.repository.SaveRecordRepository; +import com.depromeet.oversweet.record.dto.request.DrinkRecordSaveRequest; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoSettings; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.mockito.Mockito.when; + +@DisplayName("마신 음료 당 기록 테스트") +@MockitoSettings +class DrinkRecordSaveServiceTest { + + @Mock + private FindMemberRepository findMemberRepository; + @Mock + private FindDrinkRepository findDrinkRepository; + @Mock + private FindRecordsRepository findRecordsRepository; + @Mock + private SaveRecordRepository saveRecordRepository; + + @InjectMocks + DrinkRecordSaveService drinkRecordSaveService; + + private MemberEntity memberEntity; + private DrinkEntity drinkEntity; + private RecordEntity recordEntity; + + @BeforeEach + void setUp() { + TestSetup testSetup = new TestSetup(); + testSetup.setUp(); + memberEntity = testSetup.getMember(); + drinkEntity = testSetup.getFirstDrink(); + recordEntity = testSetup.getFirstRecord(); + } + + @Test + @DisplayName("마신 음료 당 기록을 한다.") + void saveDrinkRecordTest() { + //given + + //when + when(findMemberRepository.findMemberById(memberEntity.getId())).thenReturn(memberEntity); + when(findDrinkRepository.findDrinkById(drinkEntity.getId())).thenReturn(drinkEntity); + when(findRecordsRepository.findRecordById(recordEntity.getId())).thenReturn(recordEntity); + + DrinkRecordSaveRequest saveRequest = DrinkRecordSaveRequest.builder() + .id(drinkEntity.getId()) + .count(recordEntity.getCount()) + .intakeSugar(recordEntity.getIntakeSugar()) + .build(); + + drinkRecordSaveService.saveDrinkRecord(memberEntity.getId(), saveRequest); + + RecordEntity findRecord = findRecordsRepository.findRecordById(recordEntity.getId()); + + assertEquals(recordEntity.getId(), findRecord.getId()); + } + +} \ No newline at end of file From c7e5e63bcd5b0e76da141613ab51d849be5580cb Mon Sep 17 00:00:00 2001 From: parkje0927 Date: Fri, 7 Jul 2023 14:38:21 +0900 Subject: [PATCH 3/6] =?UTF-8?q?chore:=20=EA=B3=B5=EB=B0=B1=20=EC=A0=9C?= =?UTF-8?q?=EA=B1=B0=20(#41)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../depromeet/oversweet/domain/record/entity/RecordEntity.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/oversweet-domain/src/main/java/com/depromeet/oversweet/domain/record/entity/RecordEntity.java b/oversweet-domain/src/main/java/com/depromeet/oversweet/domain/record/entity/RecordEntity.java index a559a6a..cc04679 100644 --- a/oversweet-domain/src/main/java/com/depromeet/oversweet/domain/record/entity/RecordEntity.java +++ b/oversweet-domain/src/main/java/com/depromeet/oversweet/domain/record/entity/RecordEntity.java @@ -52,8 +52,6 @@ public RecordEntity(final Long id, final MemberEntity member, final DrinkEntity this.intakeSugar = intakeSugar; } - - public int totalSugar() { return this.count * this.intakeSugar; } From 60e2be431b8141a5b229e4c627813064f4692021 Mon Sep 17 00:00:00 2001 From: parkje0927 Date: Fri, 7 Jul 2023 14:48:30 +0900 Subject: [PATCH 4/6] =?UTF-8?q?chore:=20=EC=9D=91=EB=8B=B5=20status=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD=20(#41)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../depromeet/oversweet/record/controller/RecordController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/oversweet-api/src/main/java/com/depromeet/oversweet/record/controller/RecordController.java b/oversweet-api/src/main/java/com/depromeet/oversweet/record/controller/RecordController.java index 8dafd7b..8df7bcc 100644 --- a/oversweet-api/src/main/java/com/depromeet/oversweet/record/controller/RecordController.java +++ b/oversweet-api/src/main/java/com/depromeet/oversweet/record/controller/RecordController.java @@ -30,7 +30,7 @@ public class RecordController { * 추후 로그인 기능 구현 후, 로그인한 유저의 ID를 받아와야 함 (ex. @AuthenticationPrincipal User user) */ @Operation(summary = "마신 음료 당 기록", description = "유저가 마신 음료의 당을 기록합니다.") - @ApiResponses(@ApiResponse(responseCode = "200", description = "마신 음료 당 기록 성공")) + @ApiResponses(@ApiResponse(responseCode = "201", description = "마신 음료 당 기록 성공")) @PostMapping("/drink") public ResponseEntity> saveDrinkRecord( @RequestBody @Valid final DrinkRecordSaveRequest drinkRecordSaveRequest From ed577b72a3e61d2f0f6286edd067058377dd0c98 Mon Sep 17 00:00:00 2001 From: parkje0927 Date: Fri, 7 Jul 2023 17:28:55 +0900 Subject: [PATCH 5/6] =?UTF-8?q?chore:=20=EB=85=B8=EC=85=98=20API=20?= =?UTF-8?q?=EB=AA=85=EC=84=B8=EC=84=9C=EC=97=90=20=EC=9E=91=EC=84=B1?= =?UTF-8?q?=EB=90=9C=20=EB=82=B4=EC=9A=A9=EC=97=90=20=EB=A7=9E=EC=B6=94?= =?UTF-8?q?=EC=96=B4=20dto=20=ED=95=84=EB=93=9C=EB=AA=85=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD=20(#41)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../oversweet/record/dto/request/DrinkRecordSaveRequest.java | 2 +- .../oversweet/record/service/DrinkRecordSaveService.java | 2 +- .../oversweet/record/service/DrinkRecordSaveServiceTest.java | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/oversweet-api/src/main/java/com/depromeet/oversweet/record/dto/request/DrinkRecordSaveRequest.java b/oversweet-api/src/main/java/com/depromeet/oversweet/record/dto/request/DrinkRecordSaveRequest.java index 839beb5..a85aad0 100644 --- a/oversweet-api/src/main/java/com/depromeet/oversweet/record/dto/request/DrinkRecordSaveRequest.java +++ b/oversweet-api/src/main/java/com/depromeet/oversweet/record/dto/request/DrinkRecordSaveRequest.java @@ -9,7 +9,7 @@ public record DrinkRecordSaveRequest( @NotNull - @Schema(description = "음료 ID", example = "1") Long id, + @Schema(description = "음료 ID", example = "1") Long drinkId, @NotNull @Min(1) diff --git a/oversweet-api/src/main/java/com/depromeet/oversweet/record/service/DrinkRecordSaveService.java b/oversweet-api/src/main/java/com/depromeet/oversweet/record/service/DrinkRecordSaveService.java index 7b56471..0e5a547 100644 --- a/oversweet-api/src/main/java/com/depromeet/oversweet/record/service/DrinkRecordSaveService.java +++ b/oversweet-api/src/main/java/com/depromeet/oversweet/record/service/DrinkRecordSaveService.java @@ -30,7 +30,7 @@ public DrinkRecordSaveResponse saveDrinkRecord(Long memberId, DrinkRecordSaveReq final MemberEntity findMember = findMemberRepository.findMemberById(memberId); - final DrinkEntity findDrink = findDrinkRepository.findDrinkById(drinkRecordSaveRequest.id()); + final DrinkEntity findDrink = findDrinkRepository.findDrinkById(drinkRecordSaveRequest.drinkId()); RecordEntity record = RecordEntity.builder() .member(findMember) diff --git a/oversweet-api/src/test/java/com/depromeet/oversweet/record/service/DrinkRecordSaveServiceTest.java b/oversweet-api/src/test/java/com/depromeet/oversweet/record/service/DrinkRecordSaveServiceTest.java index f6ecf48..e8d2807 100644 --- a/oversweet-api/src/test/java/com/depromeet/oversweet/record/service/DrinkRecordSaveServiceTest.java +++ b/oversweet-api/src/test/java/com/depromeet/oversweet/record/service/DrinkRecordSaveServiceTest.java @@ -59,7 +59,7 @@ void saveDrinkRecordTest() { when(findRecordsRepository.findRecordById(recordEntity.getId())).thenReturn(recordEntity); DrinkRecordSaveRequest saveRequest = DrinkRecordSaveRequest.builder() - .id(drinkEntity.getId()) + .drinkId(drinkEntity.getId()) .count(recordEntity.getCount()) .intakeSugar(recordEntity.getIntakeSugar()) .build(); From 9fc72172d95dff39528981ce0d14c3fff9ee5413 Mon Sep 17 00:00:00 2001 From: parkje0927 Date: Fri, 7 Jul 2023 22:39:35 +0900 Subject: [PATCH 6/6] =?UTF-8?q?refactor:=20=EA=B8=B0=EB=A1=9D=20=EB=8B=A8?= =?UTF-8?q?=EA=B1=B4=20=EC=A1=B0=ED=9A=8C=20=EC=8B=9C=20Optional=20?= =?UTF-8?q?=EB=A1=9C=20=EA=B0=90=EC=8B=B8=EC=84=9C=20=EB=B0=98=ED=99=98?= =?UTF-8?q?=EB=90=98=EB=8F=84=EB=A1=9D=20=EC=88=98=EC=A0=95=20-=20PR=20?= =?UTF-8?q?=EB=A6=AC=EB=B7=B0=20(#41)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../record/service/DrinkRecordSaveServiceTest.java | 10 +++++++--- .../record/repository/FindRecordsRepository.java | 3 ++- .../record/repository/FindRecordsRepositoryImpl.java | 7 ++++--- 3 files changed, 13 insertions(+), 7 deletions(-) diff --git a/oversweet-api/src/test/java/com/depromeet/oversweet/record/service/DrinkRecordSaveServiceTest.java b/oversweet-api/src/test/java/com/depromeet/oversweet/record/service/DrinkRecordSaveServiceTest.java index e8d2807..f89923e 100644 --- a/oversweet-api/src/test/java/com/depromeet/oversweet/record/service/DrinkRecordSaveServiceTest.java +++ b/oversweet-api/src/test/java/com/depromeet/oversweet/record/service/DrinkRecordSaveServiceTest.java @@ -16,6 +16,9 @@ import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoSettings; +import java.util.Optional; + +import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.mockito.Mockito.when; @@ -56,7 +59,7 @@ void saveDrinkRecordTest() { //when when(findMemberRepository.findMemberById(memberEntity.getId())).thenReturn(memberEntity); when(findDrinkRepository.findDrinkById(drinkEntity.getId())).thenReturn(drinkEntity); - when(findRecordsRepository.findRecordById(recordEntity.getId())).thenReturn(recordEntity); + when(findRecordsRepository.findRecordById(recordEntity.getId())).thenReturn(Optional.ofNullable(recordEntity)); DrinkRecordSaveRequest saveRequest = DrinkRecordSaveRequest.builder() .drinkId(drinkEntity.getId()) @@ -66,9 +69,10 @@ void saveDrinkRecordTest() { drinkRecordSaveService.saveDrinkRecord(memberEntity.getId(), saveRequest); - RecordEntity findRecord = findRecordsRepository.findRecordById(recordEntity.getId()); + Optional findRecordOpt = findRecordsRepository.findRecordById(recordEntity.getId()); - assertEquals(recordEntity.getId(), findRecord.getId()); + assertThat(findRecordOpt.isPresent()); + assertEquals(recordEntity.getId(), findRecordOpt.get().getId()); } } \ No newline at end of file diff --git a/oversweet-domain/src/main/java/com/depromeet/oversweet/domain/record/repository/FindRecordsRepository.java b/oversweet-domain/src/main/java/com/depromeet/oversweet/domain/record/repository/FindRecordsRepository.java index 5ccb621..81432aa 100644 --- a/oversweet-domain/src/main/java/com/depromeet/oversweet/domain/record/repository/FindRecordsRepository.java +++ b/oversweet-domain/src/main/java/com/depromeet/oversweet/domain/record/repository/FindRecordsRepository.java @@ -4,6 +4,7 @@ import java.time.LocalDateTime; import java.util.List; +import java.util.Optional; /** * 유저의 해당 기간 음료 당 조회 Interface @@ -11,5 +12,5 @@ public interface FindRecordsRepository { List findRecordsByLocalDateTime(final Long memberId, final LocalDateTime startDate, LocalDateTime endDate); - RecordEntity findRecordById(Long id); + Optional findRecordById(Long id); } diff --git a/oversweet-domain/src/main/java/com/depromeet/oversweet/domain/record/repository/FindRecordsRepositoryImpl.java b/oversweet-domain/src/main/java/com/depromeet/oversweet/domain/record/repository/FindRecordsRepositoryImpl.java index 45c87e8..50f5338 100644 --- a/oversweet-domain/src/main/java/com/depromeet/oversweet/domain/record/repository/FindRecordsRepositoryImpl.java +++ b/oversweet-domain/src/main/java/com/depromeet/oversweet/domain/record/repository/FindRecordsRepositoryImpl.java @@ -8,6 +8,7 @@ import java.time.LocalDateTime; import java.util.List; +import java.util.Optional; import static com.depromeet.oversweet.domain.drink.entity.QDrinkEntity.drinkEntity; import static com.depromeet.oversweet.domain.franchise.entity.QFranchiseEntity.franchiseEntity; @@ -42,12 +43,12 @@ public List findRecordsByLocalDateTime(final Long memberId, final @Override @Transactional(readOnly = true) - public RecordEntity findRecordById(Long id) { - return queryFactory.selectFrom(recordEntity) + public Optional findRecordById(Long id) { + return Optional.ofNullable(queryFactory.selectFrom(recordEntity) .join(recordEntity.drink, drinkEntity).fetchJoin() .join(recordEntity.drink.franchise, franchiseEntity).fetchJoin() .where(recordEntity.member.id.eq(id)) - .fetchOne(); + .fetchOne()); } }