From 8fefe6e64fed4647a3935fa2de9134d5675ca3d9 Mon Sep 17 00:00:00 2001 From: Chan531 Date: Wed, 26 Jun 2024 16:55:01 +0900 Subject: [PATCH 1/7] =?UTF-8?q?[ADD]=20=ED=9A=8C=EC=9B=90=20=EB=8F=84?= =?UTF-8?q?=EC=A0=84=20Controller=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../MemberChallengeRoutineControllerV2.java | 37 +++++++++++++++++ ...emberChallengeRoutineControllerV2Docs.java | 40 +++++++++++++++++++ 2 files changed, 77 insertions(+) create mode 100644 src/main/java/com/soptie/server/memberroutine/controller/v2/MemberChallengeRoutineControllerV2.java create mode 100644 src/main/java/com/soptie/server/memberroutine/controller/v2/docs/MemberChallengeRoutineControllerV2Docs.java diff --git a/src/main/java/com/soptie/server/memberroutine/controller/v2/MemberChallengeRoutineControllerV2.java b/src/main/java/com/soptie/server/memberroutine/controller/v2/MemberChallengeRoutineControllerV2.java new file mode 100644 index 00000000..5c2f9199 --- /dev/null +++ b/src/main/java/com/soptie/server/memberroutine/controller/v2/MemberChallengeRoutineControllerV2.java @@ -0,0 +1,37 @@ +package com.soptie.server.memberroutine.controller.v2; + +import static com.soptie.server.memberroutine.message.MemberRoutineSuccessMassage.*; + +import java.security.Principal; + +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import com.soptie.server.common.dto.SuccessResponse; +import com.soptie.server.memberroutine.controller.v2.docs.MemberChallengeRoutineControllerV2Docs; +import com.soptie.server.memberroutine.controller.v2.dto.response.MemberChallengeRoutineAcquireResponseV2; +import com.soptie.server.memberroutine.service.MemberRoutineReadService; +import com.soptie.server.memberroutine.service.dto.request.MemberChallengeAcquireServiceRequest; + +import lombok.RequiredArgsConstructor; +import lombok.val; + +@RestController +@RequiredArgsConstructor +@RequestMapping("/api/v2/routines/challenge/member") +public class MemberChallengeRoutineControllerV2 implements MemberChallengeRoutineControllerV2Docs { + + private final MemberRoutineReadService memberRoutineReadService; + + @GetMapping + public ResponseEntity acquire(Principal principal) { + val memberId = Long.parseLong(principal.getName()); + return memberRoutineReadService.acquire(MemberChallengeAcquireServiceRequest.of(memberId)) + .map(response -> ResponseEntity.ok(SuccessResponse.success( + SUCCESS_GET_ROUTINE.getMessage(), + MemberChallengeRoutineAcquireResponseV2.of(response)))) + .orElseGet(() -> ResponseEntity.noContent().build()); + } +} diff --git a/src/main/java/com/soptie/server/memberroutine/controller/v2/docs/MemberChallengeRoutineControllerV2Docs.java b/src/main/java/com/soptie/server/memberroutine/controller/v2/docs/MemberChallengeRoutineControllerV2Docs.java new file mode 100644 index 00000000..06697b3b --- /dev/null +++ b/src/main/java/com/soptie/server/memberroutine/controller/v2/docs/MemberChallengeRoutineControllerV2Docs.java @@ -0,0 +1,40 @@ +package com.soptie.server.memberroutine.controller.v2.docs; + +import java.security.Principal; + +import org.springframework.http.ResponseEntity; + +import com.soptie.server.common.dto.ErrorResponse; + +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.tags.Tag; + +@Tag(name = "member challenge routines V2", description = "회원의 도전 루틴 API Version2") +public interface MemberChallengeRoutineControllerV2Docs { + + @Operation( + summary = "회원의 도전 루틴 목록 조회", + description = "회원의 도전 루틴을 테마와 함께 조회한다.", + responses = { + @ApiResponse(responseCode = "200", description = "성공"), + @ApiResponse( + responseCode = "401", + description = "유효하지 않은 토큰", + content = @Content(schema = @Schema(implementation = ErrorResponse.class))), + @ApiResponse( + responseCode = "4xx", + description = "클라이언트(요청) 오류", + content = @Content(schema = @Schema(implementation = ErrorResponse.class))), + @ApiResponse( + responseCode = "500", + description = "서버 내부 오류", + content = @Content(schema = @Schema(implementation = ErrorResponse.class)))} + ) + ResponseEntity acquire( + @Parameter(hidden = true) Principal principal + ); +} From 74b6134a0a2d2c6039d5dd5a593ee837fa5daf6d Mon Sep 17 00:00:00 2001 From: Chan531 Date: Wed, 26 Jun 2024 16:55:24 +0900 Subject: [PATCH 2/7] =?UTF-8?q?[ADD]=20=ED=9A=8C=EC=9B=90=20=EB=8F=84?= =?UTF-8?q?=EC=A0=84=20=EB=A3=A8=ED=8B=B4=20=EC=A1=B0=ED=9A=8C=20dto=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...mberChallengeRoutineAcquireResponseV2.java | 34 ++++++++++++++ .../MemberChallengeAcquireServiceRequest.java | 17 +++++++ ...hallengeRoutineAcquireServiceResponse.java | 46 +++++++++++++++++++ 3 files changed, 97 insertions(+) create mode 100644 src/main/java/com/soptie/server/memberroutine/controller/v2/dto/response/MemberChallengeRoutineAcquireResponseV2.java create mode 100644 src/main/java/com/soptie/server/memberroutine/service/dto/request/MemberChallengeAcquireServiceRequest.java create mode 100644 src/main/java/com/soptie/server/memberroutine/service/dto/response/MemberChallengeRoutineAcquireServiceResponse.java diff --git a/src/main/java/com/soptie/server/memberroutine/controller/v2/dto/response/MemberChallengeRoutineAcquireResponseV2.java b/src/main/java/com/soptie/server/memberroutine/controller/v2/dto/response/MemberChallengeRoutineAcquireResponseV2.java new file mode 100644 index 00000000..d83c0888 --- /dev/null +++ b/src/main/java/com/soptie/server/memberroutine/controller/v2/dto/response/MemberChallengeRoutineAcquireResponseV2.java @@ -0,0 +1,34 @@ +package com.soptie.server.memberroutine.controller.v2.dto.response; + +import static lombok.AccessLevel.*; + +import com.soptie.server.memberroutine.service.dto.response.MemberChallengeRoutineAcquireServiceResponse; + +import lombok.Builder; +import lombok.NonNull; + +@Builder(access = PRIVATE) +public record MemberChallengeRoutineAcquireResponseV2( + long routineId, + long themeId, + @NonNull String themeName, + @NonNull String title, + @NonNull String content, + @NonNull String detailContent, + @NonNull String place, + @NonNull String timeTaken +) { + + public static MemberChallengeRoutineAcquireResponseV2 of(MemberChallengeRoutineAcquireServiceResponse response) { + return MemberChallengeRoutineAcquireResponseV2.builder() + .routineId(response.routineId()) + .themeId(response.theme().themeId()) + .themeName(response.theme().name()) + .title(response.routineContent()) + .content(response.content()) + .detailContent(response.description()) + .place(response.place()) + .timeTaken(response.requiredTime()) + .build(); + } +} diff --git a/src/main/java/com/soptie/server/memberroutine/service/dto/request/MemberChallengeAcquireServiceRequest.java b/src/main/java/com/soptie/server/memberroutine/service/dto/request/MemberChallengeAcquireServiceRequest.java new file mode 100644 index 00000000..534a4709 --- /dev/null +++ b/src/main/java/com/soptie/server/memberroutine/service/dto/request/MemberChallengeAcquireServiceRequest.java @@ -0,0 +1,17 @@ +package com.soptie.server.memberroutine.service.dto.request; + +import static lombok.AccessLevel.*; + +import lombok.Builder; + +@Builder(access = PRIVATE) +public record MemberChallengeAcquireServiceRequest( + long memberId +) { + + public static MemberChallengeAcquireServiceRequest of(long memberId) { + return MemberChallengeAcquireServiceRequest.builder() + .memberId(memberId) + .build(); + } +} diff --git a/src/main/java/com/soptie/server/memberroutine/service/dto/response/MemberChallengeRoutineAcquireServiceResponse.java b/src/main/java/com/soptie/server/memberroutine/service/dto/response/MemberChallengeRoutineAcquireServiceResponse.java new file mode 100644 index 00000000..9725f8b0 --- /dev/null +++ b/src/main/java/com/soptie/server/memberroutine/service/dto/response/MemberChallengeRoutineAcquireServiceResponse.java @@ -0,0 +1,46 @@ +package com.soptie.server.memberroutine.service.dto.response; + +import static lombok.AccessLevel.*; + +import com.soptie.server.memberroutine.repository.dto.MemberChallengeResponse; +import com.soptie.server.theme.entity.Theme; + +import lombok.Builder; + +@Builder(access = PRIVATE) +public record MemberChallengeRoutineAcquireServiceResponse( + long routineId, + ThemeServiceResponse theme, + String routineContent, + String content, + String description, + String place, + String requiredTime +) { + + public static MemberChallengeRoutineAcquireServiceResponse of(MemberChallengeResponse routine) { + return MemberChallengeRoutineAcquireServiceResponse.builder() + .routineId(routine.id()) + .theme(ThemeServiceResponse.of(routine.theme())) + .routineContent(routine.routineContent()) + .content(routine.content()) + .description(routine.description()) + .place(routine.place()) + .requiredTime(routine.requiredTime()) + .build(); + } + + @Builder(access = PRIVATE) + public record ThemeServiceResponse( + long themeId, + String name + ) { + + private static ThemeServiceResponse of(Theme theme) { + return ThemeServiceResponse.builder() + .themeId(theme.getId()) + .name(theme.getName()) + .build(); + } + } +} From 7be57cc21862c3b4f6c1624aa10ec390e996e206 Mon Sep 17 00:00:00 2001 From: Chan531 Date: Wed, 26 Jun 2024 16:56:10 +0900 Subject: [PATCH 3/7] =?UTF-8?q?[FEAT]=20=ED=9A=8C=EC=9B=90=20=EB=8F=84?= =?UTF-8?q?=EC=A0=84=20=EC=A1=B0=ED=9A=8C=20Service?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/MemberRoutineReadService.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/main/java/com/soptie/server/memberroutine/service/MemberRoutineReadService.java b/src/main/java/com/soptie/server/memberroutine/service/MemberRoutineReadService.java index 1adc53fb..bc9faa42 100644 --- a/src/main/java/com/soptie/server/memberroutine/service/MemberRoutineReadService.java +++ b/src/main/java/com/soptie/server/memberroutine/service/MemberRoutineReadService.java @@ -10,8 +10,10 @@ import com.soptie.server.member.adapter.MemberFinder; import com.soptie.server.memberroutine.adapter.MemberRoutineFinder; import com.soptie.server.memberroutine.repository.dto.MemberRoutineResponse; +import com.soptie.server.memberroutine.service.dto.request.MemberChallengeAcquireServiceRequest; import com.soptie.server.memberroutine.service.dto.request.MemberDailyRoutineListAcquireServiceRequest; import com.soptie.server.memberroutine.service.dto.request.MemberHappinessRoutineGetServiceRequest; +import com.soptie.server.memberroutine.service.dto.response.MemberChallengeRoutineAcquireServiceResponse; import com.soptie.server.memberroutine.service.dto.response.MemberDailyRoutineListAcquireServiceResponse; import com.soptie.server.memberroutine.service.dto.response.MemberDailyRoutinesAcquireServiceResponse; import com.soptie.server.memberroutine.service.dto.response.MemberHappinessRoutineGetServiceResponse; @@ -50,6 +52,14 @@ public MemberDailyRoutineListAcquireServiceResponse acquireAll( return MemberDailyRoutineListAcquireServiceResponse.of(routinesWithTheme); } + public Optional acquire( + MemberChallengeAcquireServiceRequest request + ) { + val member = memberFinder.findById(request.memberId()); + val memberRoutine = memberRoutineFinder.findChallengeByMember(member); + return memberRoutine.map(MemberChallengeRoutineAcquireServiceResponse::of); + } + private List collectByTheme(List routines) { val routinesByTheme = routines.stream().collect(Collectors.groupingBy(MemberRoutineResponse::themeId)); return routinesByTheme.values().stream() From 2f6969052108435a34005a2a0941c43018738eaf Mon Sep 17 00:00:00 2001 From: Chan531 Date: Wed, 26 Jun 2024 17:04:23 +0900 Subject: [PATCH 4/7] =?UTF-8?q?[CHORE]=20=EC=9E=98=EB=AA=BB=EB=90=9C=20?= =?UTF-8?q?=ED=8C=A8=ED=82=A4=EC=A7=80=EB=AA=85=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/MemberRoutineServiceTest.java | 3 +-- .../integration/MemberRoutineServiceIntegrationTest.java | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) rename src/test/java/com/soptie/server/{membeerroutine => memberroutine}/service/MemberRoutineServiceTest.java (97%) rename src/test/java/com/soptie/server/{membeerroutine => memberroutine}/service/integration/MemberRoutineServiceIntegrationTest.java (99%) diff --git a/src/test/java/com/soptie/server/membeerroutine/service/MemberRoutineServiceTest.java b/src/test/java/com/soptie/server/memberroutine/service/MemberRoutineServiceTest.java similarity index 97% rename from src/test/java/com/soptie/server/membeerroutine/service/MemberRoutineServiceTest.java rename to src/test/java/com/soptie/server/memberroutine/service/MemberRoutineServiceTest.java index 5eea98f4..339bbacb 100644 --- a/src/test/java/com/soptie/server/membeerroutine/service/MemberRoutineServiceTest.java +++ b/src/test/java/com/soptie/server/memberroutine/service/MemberRoutineServiceTest.java @@ -1,4 +1,4 @@ -package com.soptie.server.membeerroutine.service; +package com.soptie.server.memberroutine.service; import static com.soptie.server.routine.entity.RoutineType.*; import static org.assertj.core.api.Assertions.*; @@ -20,7 +20,6 @@ import com.soptie.server.memberroutine.adapter.MemberRoutineDeleter; import com.soptie.server.memberroutine.adapter.MemberRoutineFinder; import com.soptie.server.memberroutine.entity.MemberRoutine; -import com.soptie.server.memberroutine.service.MemberRoutineUpdateService; import com.soptie.server.memberroutine.service.dto.request.MemberRoutineAchieveServiceRequest; import com.soptie.server.support.fixture.MemberFixture; import com.soptie.server.support.fixture.MemberRoutineFixture; diff --git a/src/test/java/com/soptie/server/membeerroutine/service/integration/MemberRoutineServiceIntegrationTest.java b/src/test/java/com/soptie/server/memberroutine/service/integration/MemberRoutineServiceIntegrationTest.java similarity index 99% rename from src/test/java/com/soptie/server/membeerroutine/service/integration/MemberRoutineServiceIntegrationTest.java rename to src/test/java/com/soptie/server/memberroutine/service/integration/MemberRoutineServiceIntegrationTest.java index cc5b9351..c5b18910 100644 --- a/src/test/java/com/soptie/server/membeerroutine/service/integration/MemberRoutineServiceIntegrationTest.java +++ b/src/test/java/com/soptie/server/memberroutine/service/integration/MemberRoutineServiceIntegrationTest.java @@ -1,4 +1,4 @@ -package com.soptie.server.membeerroutine.service.integration; +package com.soptie.server.memberroutine.service.integration; import static com.soptie.server.routine.entity.RoutineType.*; import static com.soptie.server.routine.message.RoutineErrorCode.*; From 04e5478b1e4449a0882859f0b7cadefc4c068f2b Mon Sep 17 00:00:00 2001 From: Chan531 Date: Wed, 26 Jun 2024 17:13:01 +0900 Subject: [PATCH 5/7] =?UTF-8?q?[CHORE]=20dto=EB=AA=85=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/v2/MemberChallengeRoutineControllerV2.java | 4 ++-- .../memberroutine/service/MemberRoutineReadService.java | 4 ++-- ...ava => MemberChallengeRoutineAcquireServiceRequest.java} | 6 +++--- 3 files changed, 7 insertions(+), 7 deletions(-) rename src/main/java/com/soptie/server/memberroutine/service/dto/request/{MemberChallengeAcquireServiceRequest.java => MemberChallengeRoutineAcquireServiceRequest.java} (51%) diff --git a/src/main/java/com/soptie/server/memberroutine/controller/v2/MemberChallengeRoutineControllerV2.java b/src/main/java/com/soptie/server/memberroutine/controller/v2/MemberChallengeRoutineControllerV2.java index 5c2f9199..50e24467 100644 --- a/src/main/java/com/soptie/server/memberroutine/controller/v2/MemberChallengeRoutineControllerV2.java +++ b/src/main/java/com/soptie/server/memberroutine/controller/v2/MemberChallengeRoutineControllerV2.java @@ -13,7 +13,7 @@ import com.soptie.server.memberroutine.controller.v2.docs.MemberChallengeRoutineControllerV2Docs; import com.soptie.server.memberroutine.controller.v2.dto.response.MemberChallengeRoutineAcquireResponseV2; import com.soptie.server.memberroutine.service.MemberRoutineReadService; -import com.soptie.server.memberroutine.service.dto.request.MemberChallengeAcquireServiceRequest; +import com.soptie.server.memberroutine.service.dto.request.MemberChallengeRoutineAcquireServiceRequest; import lombok.RequiredArgsConstructor; import lombok.val; @@ -28,7 +28,7 @@ public class MemberChallengeRoutineControllerV2 implements MemberChallengeRoutin @GetMapping public ResponseEntity acquire(Principal principal) { val memberId = Long.parseLong(principal.getName()); - return memberRoutineReadService.acquire(MemberChallengeAcquireServiceRequest.of(memberId)) + return memberRoutineReadService.acquire(MemberChallengeRoutineAcquireServiceRequest.of(memberId)) .map(response -> ResponseEntity.ok(SuccessResponse.success( SUCCESS_GET_ROUTINE.getMessage(), MemberChallengeRoutineAcquireResponseV2.of(response)))) diff --git a/src/main/java/com/soptie/server/memberroutine/service/MemberRoutineReadService.java b/src/main/java/com/soptie/server/memberroutine/service/MemberRoutineReadService.java index bc9faa42..abb2a545 100644 --- a/src/main/java/com/soptie/server/memberroutine/service/MemberRoutineReadService.java +++ b/src/main/java/com/soptie/server/memberroutine/service/MemberRoutineReadService.java @@ -10,7 +10,7 @@ import com.soptie.server.member.adapter.MemberFinder; import com.soptie.server.memberroutine.adapter.MemberRoutineFinder; import com.soptie.server.memberroutine.repository.dto.MemberRoutineResponse; -import com.soptie.server.memberroutine.service.dto.request.MemberChallengeAcquireServiceRequest; +import com.soptie.server.memberroutine.service.dto.request.MemberChallengeRoutineAcquireServiceRequest; import com.soptie.server.memberroutine.service.dto.request.MemberDailyRoutineListAcquireServiceRequest; import com.soptie.server.memberroutine.service.dto.request.MemberHappinessRoutineGetServiceRequest; import com.soptie.server.memberroutine.service.dto.response.MemberChallengeRoutineAcquireServiceResponse; @@ -53,7 +53,7 @@ public MemberDailyRoutineListAcquireServiceResponse acquireAll( } public Optional acquire( - MemberChallengeAcquireServiceRequest request + MemberChallengeRoutineAcquireServiceRequest request ) { val member = memberFinder.findById(request.memberId()); val memberRoutine = memberRoutineFinder.findChallengeByMember(member); diff --git a/src/main/java/com/soptie/server/memberroutine/service/dto/request/MemberChallengeAcquireServiceRequest.java b/src/main/java/com/soptie/server/memberroutine/service/dto/request/MemberChallengeRoutineAcquireServiceRequest.java similarity index 51% rename from src/main/java/com/soptie/server/memberroutine/service/dto/request/MemberChallengeAcquireServiceRequest.java rename to src/main/java/com/soptie/server/memberroutine/service/dto/request/MemberChallengeRoutineAcquireServiceRequest.java index 534a4709..f3089672 100644 --- a/src/main/java/com/soptie/server/memberroutine/service/dto/request/MemberChallengeAcquireServiceRequest.java +++ b/src/main/java/com/soptie/server/memberroutine/service/dto/request/MemberChallengeRoutineAcquireServiceRequest.java @@ -5,12 +5,12 @@ import lombok.Builder; @Builder(access = PRIVATE) -public record MemberChallengeAcquireServiceRequest( +public record MemberChallengeRoutineAcquireServiceRequest( long memberId ) { - public static MemberChallengeAcquireServiceRequest of(long memberId) { - return MemberChallengeAcquireServiceRequest.builder() + public static MemberChallengeRoutineAcquireServiceRequest of(long memberId) { + return MemberChallengeRoutineAcquireServiceRequest.builder() .memberId(memberId) .build(); } From 8fe0e85dee315b95fb6c7a08f308ba94c2569eb8 Mon Sep 17 00:00:00 2001 From: Chan531 Date: Wed, 26 Jun 2024 17:35:32 +0900 Subject: [PATCH 6/7] =?UTF-8?q?[TEST]=20=ED=9A=8C=EC=9B=90=20=EB=A3=A8?= =?UTF-8?q?=ED=8B=B4=20=EC=A1=B0=ED=9A=8C=20v2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../MemberRoutineServiceIntegrationTest.java | 102 ++++++++++++++++++ 1 file changed, 102 insertions(+) diff --git a/src/test/java/com/soptie/server/memberroutine/service/integration/MemberRoutineServiceIntegrationTest.java b/src/test/java/com/soptie/server/memberroutine/service/integration/MemberRoutineServiceIntegrationTest.java index c5b18910..05908361 100644 --- a/src/test/java/com/soptie/server/memberroutine/service/integration/MemberRoutineServiceIntegrationTest.java +++ b/src/test/java/com/soptie/server/memberroutine/service/integration/MemberRoutineServiceIntegrationTest.java @@ -25,11 +25,14 @@ import com.soptie.server.memberroutine.service.MemberRoutineCreateService; import com.soptie.server.memberroutine.service.MemberRoutineDeleteService; import com.soptie.server.memberroutine.service.MemberRoutineReadService; +import com.soptie.server.memberroutine.service.dto.request.MemberChallengeRoutineAcquireServiceRequest; import com.soptie.server.memberroutine.service.dto.request.MemberDailyRoutineCreateServiceRequest; import com.soptie.server.memberroutine.service.dto.request.MemberDailyRoutineListAcquireServiceRequest; import com.soptie.server.memberroutine.service.dto.request.MemberHappinessRoutineCreateServiceRequest; import com.soptie.server.memberroutine.service.dto.request.MemberHappinessRoutineGetServiceRequest; import com.soptie.server.memberroutine.service.dto.request.MemberRoutinesDeleteServiceRequest; +import com.soptie.server.memberroutine.service.dto.response.MemberChallengeRoutineAcquireServiceResponse; +import com.soptie.server.memberroutine.service.dto.response.MemberDailyRoutineListAcquireServiceResponse; import com.soptie.server.memberroutine.service.dto.response.MemberDailyRoutinesAcquireServiceResponse; import com.soptie.server.memberroutine.service.dto.response.MemberDailyRoutinesAcquireServiceResponse.MemberDailyRoutineServiceResponse; import com.soptie.server.memberroutine.service.dto.response.MemberHappinessRoutineGetServiceResponse; @@ -378,4 +381,103 @@ void getEmptyWhenMemberHasNotHappinessRoutine() { } } + @Nested + class AcquireV2 { + + Member member; + Theme theme1; + Theme theme2; + Routine routine1; + Routine routine2; + Routine routine3; + Routine challengeRoutine; + + @BeforeEach + void setUp() { + member = memberRepository.save(MemberFixture.member().build()); + + theme1 = themeRepository.save(ThemeFixture.theme().name("테마 1").build()); + theme2 = themeRepository.save(ThemeFixture.theme().name("테마 2").build()); + + routine1 = routineRepository.save( + RoutineFixture.routine().theme(theme1).type(DAILY).content("새로운 나").build()); + routine2 = routineRepository.save( + RoutineFixture.routine().theme(theme1).type(DAILY).content("깨끗한 나").build()); + routine3 = routineRepository.save( + RoutineFixture.routine().theme(theme2).type(DAILY).content("똑똑한 나").build()); + challengeRoutine = routineRepository.save( + RoutineFixture.routine().theme(theme1).type(CHALLENGE).content("도전 루틴").build()); + } + + @Test + @DisplayName("[성공] 회원이 가진 모든 데일리 루틴을 테마별로 조회한다. 이 때, 루틴은 가나다순으로 정렬된다.") + void getMemberDailyRoutinesByMember() { + // given + memberRoutineRepository.save(MemberRoutineFixture.memberRoutine() + .member(member).routineId(routine1.getId()).type(routine1.getType()).build()); + memberRoutineRepository.save(MemberRoutineFixture.memberRoutine() + .member(member).routineId(routine2.getId()).type(routine2.getType()).build()); + memberRoutineRepository.save(MemberRoutineFixture.memberRoutine() + .member(member).routineId(routine3.getId()).type(routine3.getType()).build()); + + MemberDailyRoutineListAcquireServiceRequest request = MemberDailyRoutineListAcquireServiceRequest.of( + member.getId()); + + // when + final MemberDailyRoutineListAcquireServiceResponse actual = memberRoutineReadService.acquireAll(request); + + // then + int themeCount = actual.routines().size(); + assertThat(themeCount).isEqualTo(2); + List contents = actual.routines().get(0).routines().stream().map( + MemberDailyRoutinesAcquireServiceResponse.MemberDailyRoutineServiceResponse::content).toList(); + assertThat(contents).hasSize(2); + assertThat(contents).containsExactly(routine2.getContent(), routine1.getContent()); + } + + @Test + @DisplayName("[성공] 회원의 도전 루틴이 존재한다면 해당 도전 루틴을 테마와 함께 조회한다.") + void getMemberChallengeRoutinesByMember() { + // given + Challenge challenge = challengeRepository.save( + ChallengeFixture.challenge() + .content("무한~ 도전~") + .description("무한으로 즐겨요") + .routine(challengeRoutine) + .build()); + memberRoutineRepository.save(MemberRoutineFixture.memberRoutine() + .member(member).routineId(challenge.getId()).type(challengeRoutine.getType()).build()); + + MemberChallengeRoutineAcquireServiceRequest request = + MemberChallengeRoutineAcquireServiceRequest.of(member.getId()); + + // when + final Optional actual = + memberRoutineReadService.acquire(request); + + // then + assertThat(actual).isPresent(); + + final MemberChallengeRoutineAcquireServiceResponse response = actual.get(); + assertThat(response.theme().themeId()).isEqualTo(challenge.getRoutine().getTheme().getId()); + assertThat(response.theme().name()).isEqualTo(challenge.getRoutine().getTheme().getName()); + assertThat(response.content()).isEqualTo(challenge.getContent()); + } + + @Test + @DisplayName("[성공] 회원이 가진 도전 루틴이 없으면 빈 값으로 조회된다.") + void getEmptyWhenMemberHasNotHappinessRoutine() { + // given + MemberChallengeRoutineAcquireServiceRequest request = + MemberChallengeRoutineAcquireServiceRequest.of(member.getId()); + + // when + final Optional actual = + memberRoutineReadService.acquire(request); + + // then + assertThat(actual).isEmpty(); + } + } + } From 2b770b17b9987447a490fc1d3a4525d187c1ecd0 Mon Sep 17 00:00:00 2001 From: Chan531 Date: Thu, 27 Jun 2024 04:53:24 +0900 Subject: [PATCH 7/7] =?UTF-8?q?[CHORE]=20v2=20=ED=85=8C=EC=8A=A4=ED=8A=B8?= =?UTF-8?q?=20=EC=BD=94=EB=93=9C=20=EC=9D=B4=EB=8F=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../MemberRoutineServiceIntegrationTest.java | 64 ++++++------------- 1 file changed, 18 insertions(+), 46 deletions(-) diff --git a/src/test/java/com/soptie/server/memberroutine/service/integration/MemberRoutineServiceIntegrationTest.java b/src/test/java/com/soptie/server/memberroutine/service/integration/MemberRoutineServiceIntegrationTest.java index 05908361..58df72a1 100644 --- a/src/test/java/com/soptie/server/memberroutine/service/integration/MemberRoutineServiceIntegrationTest.java +++ b/src/test/java/com/soptie/server/memberroutine/service/integration/MemberRoutineServiceIntegrationTest.java @@ -267,7 +267,8 @@ class Acquire { Member member1; Member member2; - Theme theme; + Theme theme1; + Theme theme2; Routine routine1; Routine routine2; Routine routine3; @@ -278,16 +279,17 @@ void setUp() { member1 = memberRepository.save(MemberFixture.member().build()); member2 = memberRepository.save(MemberFixture.member().build()); - theme = themeRepository.save(ThemeFixture.theme().build()); + theme1 = themeRepository.save(ThemeFixture.theme().name("테마 1").build()); + theme2 = themeRepository.save(ThemeFixture.theme().name("테마 2").build()); routine1 = routineRepository.save( - RoutineFixture.routine().theme(theme).type(DAILY).content("새로운 나").build()); + RoutineFixture.routine().theme(theme1).type(DAILY).content("새로운 나").build()); routine2 = routineRepository.save( - RoutineFixture.routine().theme(theme).type(DAILY).content("깨끗한 나").build()); + RoutineFixture.routine().theme(theme1).type(DAILY).content("깨끗한 나").build()); routine3 = routineRepository.save( - RoutineFixture.routine().theme(theme).type(DAILY).content("똑똑한 나").build()); + RoutineFixture.routine().theme(theme2).type(DAILY).content("똑똑한 나").build()); challengeRoutine = routineRepository.save( - RoutineFixture.routine().theme(theme).type(CHALLENGE).content("도전 루틴").build()); + RoutineFixture.routine().theme(theme1).type(CHALLENGE).content("도전 루틴").build()); } @Test @@ -379,49 +381,20 @@ void getEmptyWhenMemberHasNotHappinessRoutine() { // then assertThat(actual).isEmpty(); } - } - - @Nested - class AcquireV2 { - - Member member; - Theme theme1; - Theme theme2; - Routine routine1; - Routine routine2; - Routine routine3; - Routine challengeRoutine; - - @BeforeEach - void setUp() { - member = memberRepository.save(MemberFixture.member().build()); - - theme1 = themeRepository.save(ThemeFixture.theme().name("테마 1").build()); - theme2 = themeRepository.save(ThemeFixture.theme().name("테마 2").build()); - - routine1 = routineRepository.save( - RoutineFixture.routine().theme(theme1).type(DAILY).content("새로운 나").build()); - routine2 = routineRepository.save( - RoutineFixture.routine().theme(theme1).type(DAILY).content("깨끗한 나").build()); - routine3 = routineRepository.save( - RoutineFixture.routine().theme(theme2).type(DAILY).content("똑똑한 나").build()); - challengeRoutine = routineRepository.save( - RoutineFixture.routine().theme(theme1).type(CHALLENGE).content("도전 루틴").build()); - } @Test @DisplayName("[성공] 회원이 가진 모든 데일리 루틴을 테마별로 조회한다. 이 때, 루틴은 가나다순으로 정렬된다.") - void getMemberDailyRoutinesByMember() { + void acquireAllByMember() { // given memberRoutineRepository.save(MemberRoutineFixture.memberRoutine() - .member(member).routineId(routine1.getId()).type(routine1.getType()).build()); + .member(member1).routineId(routine1.getId()).type(routine1.getType()).build()); memberRoutineRepository.save(MemberRoutineFixture.memberRoutine() - .member(member).routineId(routine2.getId()).type(routine2.getType()).build()); + .member(member1).routineId(routine2.getId()).type(routine2.getType()).build()); memberRoutineRepository.save(MemberRoutineFixture.memberRoutine() - .member(member).routineId(routine3.getId()).type(routine3.getType()).build()); + .member(member1).routineId(routine3.getId()).type(routine3.getType()).build()); MemberDailyRoutineListAcquireServiceRequest request = MemberDailyRoutineListAcquireServiceRequest.of( - member.getId()); + member1.getId()); // when final MemberDailyRoutineListAcquireServiceResponse actual = memberRoutineReadService.acquireAll(request); @@ -437,7 +410,7 @@ void getMemberDailyRoutinesByMember() { @Test @DisplayName("[성공] 회원의 도전 루틴이 존재한다면 해당 도전 루틴을 테마와 함께 조회한다.") - void getMemberChallengeRoutinesByMember() { + void acquireByMember() { // given Challenge challenge = challengeRepository.save( ChallengeFixture.challenge() @@ -446,10 +419,10 @@ void getMemberChallengeRoutinesByMember() { .routine(challengeRoutine) .build()); memberRoutineRepository.save(MemberRoutineFixture.memberRoutine() - .member(member).routineId(challenge.getId()).type(challengeRoutine.getType()).build()); + .member(member1).routineId(challenge.getId()).type(challengeRoutine.getType()).build()); MemberChallengeRoutineAcquireServiceRequest request = - MemberChallengeRoutineAcquireServiceRequest.of(member.getId()); + MemberChallengeRoutineAcquireServiceRequest.of(member1.getId()); // when final Optional actual = @@ -466,10 +439,10 @@ void getMemberChallengeRoutinesByMember() { @Test @DisplayName("[성공] 회원이 가진 도전 루틴이 없으면 빈 값으로 조회된다.") - void getEmptyWhenMemberHasNotHappinessRoutine() { + void acquireEmptyWhenMemberHasNotChallengeRoutine() { // given MemberChallengeRoutineAcquireServiceRequest request = - MemberChallengeRoutineAcquireServiceRequest.of(member.getId()); + MemberChallengeRoutineAcquireServiceRequest.of(member1.getId()); // when final Optional actual = @@ -479,5 +452,4 @@ void getEmptyWhenMemberHasNotHappinessRoutine() { assertThat(actual).isEmpty(); } } - }