From e3b0fd1485e9491a45e3a1b47d16d43c302e4ab1 Mon Sep 17 00:00:00 2001 From: kdomo Date: Fri, 20 Oct 2023 00:20:16 +0900 Subject: [PATCH] =?UTF-8?q?[#127]=20feat:=20=EC=8B=A4=ED=8C=A8=20=EB=82=B4?= =?UTF-8?q?=EC=97=AD=EA=B3=BC=20=EC=B9=B4=ED=85=8C=EA=B3=A0=EB=A6=AC?= =?UTF-8?q?=EA=B0=80=20=EC=A1=B4=EC=9E=AC=ED=95=98=EC=A7=80=20=EC=95=8A?= =?UTF-8?q?=EB=8A=94=EC=A7=80=20=ED=99=95=EC=9D=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../failure/adapter/FailureQueryAdapter.java | 6 ++++ .../failure/port/FailureQueryPort.java | 3 ++ .../failure/repository/FailureRepository.java | 3 ++ .../api/web/user/UserController.java | 8 +++++ .../usecase/UserFirstTimeCheckUseCase.java | 32 +++++++++++++++++++ 5 files changed, 52 insertions(+) create mode 100644 TodaysFail-Interface/src/main/java/com/todaysfail/api/web/user/usecase/UserFirstTimeCheckUseCase.java diff --git a/TodaysFail-Domain/src/main/java/com/todaysfail/domains/failure/adapter/FailureQueryAdapter.java b/TodaysFail-Domain/src/main/java/com/todaysfail/domains/failure/adapter/FailureQueryAdapter.java index 9cb9756..da5329d 100644 --- a/TodaysFail-Domain/src/main/java/com/todaysfail/domains/failure/adapter/FailureQueryAdapter.java +++ b/TodaysFail-Domain/src/main/java/com/todaysfail/domains/failure/adapter/FailureQueryAdapter.java @@ -4,6 +4,7 @@ import com.todaysfail.domains.failure.domain.Failure; import com.todaysfail.domains.failure.port.FailureQueryPort; import com.todaysfail.domains.failure.repository.FailureRepository; +import java.util.List; import lombok.RequiredArgsConstructor; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Slice; @@ -19,4 +20,9 @@ public class FailureQueryAdapter implements FailureQueryPort { public Slice queryFeed(Pageable pageable) { return failureRepository.findAllBySecretFalseOrderByFailureDateDesc(pageable); } + + @Override + public List queryFailureByUserId(Long userId) { + return failureRepository.findAllByUserId(userId); + } } diff --git a/TodaysFail-Domain/src/main/java/com/todaysfail/domains/failure/port/FailureQueryPort.java b/TodaysFail-Domain/src/main/java/com/todaysfail/domains/failure/port/FailureQueryPort.java index f4725eb..9944857 100644 --- a/TodaysFail-Domain/src/main/java/com/todaysfail/domains/failure/port/FailureQueryPort.java +++ b/TodaysFail-Domain/src/main/java/com/todaysfail/domains/failure/port/FailureQueryPort.java @@ -1,9 +1,12 @@ package com.todaysfail.domains.failure.port; import com.todaysfail.domains.failure.domain.Failure; +import java.util.List; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Slice; public interface FailureQueryPort { Slice queryFeed(Pageable pageable); + + List queryFailureByUserId(Long userId); } diff --git a/TodaysFail-Domain/src/main/java/com/todaysfail/domains/failure/repository/FailureRepository.java b/TodaysFail-Domain/src/main/java/com/todaysfail/domains/failure/repository/FailureRepository.java index d71b2ae..604e5d1 100644 --- a/TodaysFail-Domain/src/main/java/com/todaysfail/domains/failure/repository/FailureRepository.java +++ b/TodaysFail-Domain/src/main/java/com/todaysfail/domains/failure/repository/FailureRepository.java @@ -1,10 +1,13 @@ package com.todaysfail.domains.failure.repository; import com.todaysfail.domains.failure.domain.Failure; +import java.util.List; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Slice; import org.springframework.data.jpa.repository.JpaRepository; public interface FailureRepository extends JpaRepository { Slice findAllBySecretFalseOrderByFailureDateDesc(Pageable pageable); + + List findAllByUserId(Long userId); } diff --git a/TodaysFail-Interface/src/main/java/com/todaysfail/api/web/user/UserController.java b/TodaysFail-Interface/src/main/java/com/todaysfail/api/web/user/UserController.java index 86f8fed..6cc34bb 100644 --- a/TodaysFail-Interface/src/main/java/com/todaysfail/api/web/user/UserController.java +++ b/TodaysFail-Interface/src/main/java/com/todaysfail/api/web/user/UserController.java @@ -2,6 +2,7 @@ import com.todaysfail.api.web.user.dto.response.RandomNicknameResponse; import com.todaysfail.api.web.user.usecase.RandomNicknameUseCase; +import com.todaysfail.api.web.user.usecase.UserFirstTimeCheckUseCase; import com.todaysfail.api.web.user.usecase.UserQueryUseCase; import com.todaysfail.api.web.user.usecase.UserWithDrawUseCase; import com.todaysfail.common.annotation.DisableSwaggerSecurity; @@ -24,6 +25,7 @@ public class UserController { private final UserQueryUseCase userQueryUseCase; private final RandomNicknameUseCase randomNicknameUseCase; private final UserWithDrawUseCase userWithDrawUseCase; + private final UserFirstTimeCheckUseCase userFirstTimeCheckUseCase; @SecurityRequirement(name = "access-token") @Operation(summary = "내 정보를 조회합니다.") @@ -45,4 +47,10 @@ public void withdrawal() { public RandomNicknameResponse generateRandomNickname() { return randomNicknameUseCase.execute(); } + + @Operation(summary = "생성 된 카테고리와 실패기록이 없는지 확인합니다.") + @GetMapping("/check-first") + public boolean checkIfFirstTimeUser() { + return userFirstTimeCheckUseCase.execute(); + } } diff --git a/TodaysFail-Interface/src/main/java/com/todaysfail/api/web/user/usecase/UserFirstTimeCheckUseCase.java b/TodaysFail-Interface/src/main/java/com/todaysfail/api/web/user/usecase/UserFirstTimeCheckUseCase.java new file mode 100644 index 0000000..90ce0f5 --- /dev/null +++ b/TodaysFail-Interface/src/main/java/com/todaysfail/api/web/user/usecase/UserFirstTimeCheckUseCase.java @@ -0,0 +1,32 @@ +package com.todaysfail.api.web.user.usecase; + +import com.todaysfail.common.annotation.UseCase; +import com.todaysfail.config.security.SecurityUtils; +import com.todaysfail.domains.category.domain.Category; +import com.todaysfail.domains.category.port.CategoryQueryPort; +import com.todaysfail.domains.failure.domain.Failure; +import com.todaysfail.domains.failure.port.FailureQueryPort; +import java.util.List; +import lombok.RequiredArgsConstructor; + +@UseCase +@RequiredArgsConstructor +public class UserFirstTimeCheckUseCase { + private final CategoryQueryPort categoryQueryPort; + private final FailureQueryPort failureQueryPort; + + public boolean execute() { + final Long userId = SecurityUtils.getCurrentUserId(); + List categories = categoryQueryPort.queryCategoryByUserId(userId); + if (!categories.isEmpty()) { + return false; + } + + List failures = failureQueryPort.queryFailureByUserId(userId); + if (!failures.isEmpty()) { + return false; + } + + return true; + } +}