From 4d921d8bfc62f62d0e4464c741dd7a3a7aeec052 Mon Sep 17 00:00:00 2001 From: leesky Date: Mon, 27 Mar 2023 01:39:07 +0900 Subject: [PATCH 001/141] =?UTF-8?q?fix=20:=20firebaseApp=20=EC=B4=88?= =?UTF-8?q?=EA=B8=B0=ED=99=94=20=ED=95=9C=EB=B2=88=EB=A7=8C=20=EC=8B=A4?= =?UTF-8?q?=ED=96=89=ED=95=98=EB=8F=84=EB=A1=9D=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../artie/global/config/firebase/FirebaseInitializer.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/yapp/artie/global/config/firebase/FirebaseInitializer.java b/src/main/java/com/yapp/artie/global/config/firebase/FirebaseInitializer.java index 3cce2ea6..ffe17287 100644 --- a/src/main/java/com/yapp/artie/global/config/firebase/FirebaseInitializer.java +++ b/src/main/java/com/yapp/artie/global/config/firebase/FirebaseInitializer.java @@ -24,7 +24,12 @@ public FirebaseApp firebaseApp() throws IOException { .setCredentials(GoogleCredentials.fromStream(serviceAccount)) .build(); - FirebaseApp app = FirebaseApp.initializeApp(options); + FirebaseApp app = FirebaseApp.getApps() + .stream() + .filter(app1 -> app1.getName().equals(FirebaseApp.DEFAULT_APP_NAME)) + .findFirst() + .orElseGet(() -> FirebaseApp.initializeApp(options)); + log.info("FirebaseApp initialized" + app.getName()); return app; } From 77effdc41ed3ceb292e64f4f226db086e9301996 Mon Sep 17 00:00:00 2001 From: leesky Date: Mon, 27 Mar 2023 01:46:09 +0900 Subject: [PATCH 002/141] =?UTF-8?q?feat=20:=20=ED=95=84=EC=9A=94=ED=95=9C?= =?UTF-8?q?=20=EC=BB=B4=ED=8F=AC=EB=84=8C=ED=8A=B8=20=EC=95=A0=EB=85=B8?= =?UTF-8?q?=ED=85=8C=EC=9D=B4=EC=85=98=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../artie/global/annotation/InboundAdapter.java | 17 +++++++++++++++++ .../global/annotation/PersistenceAdapter.java | 17 +++++++++++++++++ .../yapp/artie/global/annotation/UseCase.java | 17 +++++++++++++++++ 3 files changed, 51 insertions(+) create mode 100644 src/main/java/com/yapp/artie/global/annotation/InboundAdapter.java create mode 100644 src/main/java/com/yapp/artie/global/annotation/PersistenceAdapter.java create mode 100644 src/main/java/com/yapp/artie/global/annotation/UseCase.java diff --git a/src/main/java/com/yapp/artie/global/annotation/InboundAdapter.java b/src/main/java/com/yapp/artie/global/annotation/InboundAdapter.java new file mode 100644 index 00000000..b4c5dc19 --- /dev/null +++ b/src/main/java/com/yapp/artie/global/annotation/InboundAdapter.java @@ -0,0 +1,17 @@ +package com.yapp.artie.global.annotation; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; +import org.springframework.core.annotation.AliasFor; +import org.springframework.stereotype.Component; + +@Target({ElementType.TYPE}) +@Retention(RetentionPolicy.RUNTIME) +@Component +public @interface InboundAdapter { + + @AliasFor(annotation = Component.class) + String value() default ""; +} diff --git a/src/main/java/com/yapp/artie/global/annotation/PersistenceAdapter.java b/src/main/java/com/yapp/artie/global/annotation/PersistenceAdapter.java new file mode 100644 index 00000000..eb272aaf --- /dev/null +++ b/src/main/java/com/yapp/artie/global/annotation/PersistenceAdapter.java @@ -0,0 +1,17 @@ +package com.yapp.artie.global.annotation; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; +import org.springframework.core.annotation.AliasFor; +import org.springframework.stereotype.Component; + +@Target({ElementType.TYPE}) +@Retention(RetentionPolicy.RUNTIME) +@Component +public @interface PersistenceAdapter { + + @AliasFor(annotation = Component.class) + String value() default ""; +} diff --git a/src/main/java/com/yapp/artie/global/annotation/UseCase.java b/src/main/java/com/yapp/artie/global/annotation/UseCase.java new file mode 100644 index 00000000..21683550 --- /dev/null +++ b/src/main/java/com/yapp/artie/global/annotation/UseCase.java @@ -0,0 +1,17 @@ +package com.yapp.artie.global.annotation; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; +import org.springframework.core.annotation.AliasFor; +import org.springframework.stereotype.Component; + +@Target({ElementType.TYPE}) +@Retention(RetentionPolicy.RUNTIME) +@Component +public @interface UseCase { + + @AliasFor(annotation = Component.class) + String value() default ""; +} \ No newline at end of file From 375c1ee489245e387b8babdb6b2ef8d1ba709d23 Mon Sep 17 00:00:00 2001 From: leesky Date: Tue, 28 Mar 2023 04:13:41 +0900 Subject: [PATCH 003/141] =?UTF-8?q?refactor=20:=20userService=20=EC=9D=B8?= =?UTF-8?q?=ED=84=B0=ED=8E=98=EC=9D=B4=EC=8A=A4=20=EC=B6=94=EC=B6=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../archive/service/ArtworkService.java | 4 ++-- .../archive/service/CategoryService.java | 4 ++-- .../archive/service/ExhibitService.java | 4 ++-- .../domain/s3/controller/S3Controller.java | 4 ++-- .../user/controller/UserController.java | 4 ++-- ...{UserService.java => UserServiceImpl.java} | 7 +++++- .../user/service/UserThumbnailService.java | 2 +- .../domain/user/service/UserUseCase.java | 22 +++++++++++++++++++ .../domain/user/service/UserServiceTest.java | 2 +- 9 files changed, 40 insertions(+), 13 deletions(-) rename src/main/java/com/yapp/artie/domain/user/service/{UserService.java => UserServiceImpl.java} (94%) create mode 100644 src/main/java/com/yapp/artie/domain/user/service/UserUseCase.java diff --git a/src/main/java/com/yapp/artie/domain/archive/service/ArtworkService.java b/src/main/java/com/yapp/artie/domain/archive/service/ArtworkService.java index 15c272ba..d1f1a2b5 100644 --- a/src/main/java/com/yapp/artie/domain/archive/service/ArtworkService.java +++ b/src/main/java/com/yapp/artie/domain/archive/service/ArtworkService.java @@ -11,7 +11,7 @@ import com.yapp.artie.domain.archive.repository.ArtworkRepository; import com.yapp.artie.domain.s3.service.S3Service; import com.yapp.artie.domain.user.domain.User; -import com.yapp.artie.domain.user.service.UserService; +import com.yapp.artie.domain.user.service.UserUseCase; import com.yapp.artie.global.util.S3Utils; import java.util.List; import java.util.stream.Collectors; @@ -31,7 +31,7 @@ @RequiredArgsConstructor public class ArtworkService { - private final UserService userService; + private final UserUseCase userService; private final TagService tagService; private final ExhibitService exhibitService; private final S3Service s3Service; diff --git a/src/main/java/com/yapp/artie/domain/archive/service/CategoryService.java b/src/main/java/com/yapp/artie/domain/archive/service/CategoryService.java index a046c5c4..00a4ccc9 100644 --- a/src/main/java/com/yapp/artie/domain/archive/service/CategoryService.java +++ b/src/main/java/com/yapp/artie/domain/archive/service/CategoryService.java @@ -12,7 +12,7 @@ import com.yapp.artie.domain.archive.repository.CategoryRepository; import com.yapp.artie.domain.archive.repository.ExhibitRepository; import com.yapp.artie.domain.user.domain.User; -import com.yapp.artie.domain.user.service.UserService; +import com.yapp.artie.domain.user.service.UserUseCase; import java.util.List; import java.util.Optional; import java.util.stream.Collectors; @@ -27,7 +27,7 @@ public class CategoryService { private final CategoryRepository categoryRepository; private final ExhibitRepository exhibitRepository; - private final UserService userService; + private final UserUseCase userService; private final int CATEGORY_LIMIT_COUNT = 5; public Category findCategoryWithUser(Long id, Long userId) { diff --git a/src/main/java/com/yapp/artie/domain/archive/service/ExhibitService.java b/src/main/java/com/yapp/artie/domain/archive/service/ExhibitService.java index f6a917e3..e2f9d494 100644 --- a/src/main/java/com/yapp/artie/domain/archive/service/ExhibitService.java +++ b/src/main/java/com/yapp/artie/domain/archive/service/ExhibitService.java @@ -17,7 +17,7 @@ import com.yapp.artie.domain.archive.repository.ArtworkRepository; import com.yapp.artie.domain.archive.repository.ExhibitRepository; import com.yapp.artie.domain.user.domain.User; -import com.yapp.artie.domain.user.service.UserService; +import com.yapp.artie.domain.user.service.UserUseCase; import com.yapp.artie.global.util.DateUtils; import com.yapp.artie.global.util.S3Utils; import java.time.LocalDate; @@ -43,7 +43,7 @@ public class ExhibitService { private final ExhibitRepository exhibitRepository; private final ArtworkRepository artworkRepository; - private final UserService userService; + private final UserUseCase userService; private final CategoryService categoryService; private final S3Utils s3Utils; diff --git a/src/main/java/com/yapp/artie/domain/s3/controller/S3Controller.java b/src/main/java/com/yapp/artie/domain/s3/controller/S3Controller.java index a1c6696a..64d2688e 100644 --- a/src/main/java/com/yapp/artie/domain/s3/controller/S3Controller.java +++ b/src/main/java/com/yapp/artie/domain/s3/controller/S3Controller.java @@ -4,7 +4,7 @@ import com.yapp.artie.domain.s3.dto.response.GetPresignedUrlResponseDto; import com.yapp.artie.domain.s3.dto.response.presignedUrlDataDto; import com.yapp.artie.domain.s3.service.S3Service; -import com.yapp.artie.domain.user.service.UserService; +import com.yapp.artie.domain.user.service.UserUseCase; import com.yapp.artie.global.exception.response.ErrorResponse; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; @@ -33,7 +33,7 @@ @RequiredArgsConstructor public class S3Controller { - private final UserService userService; + private final UserUseCase userService; private final S3Service s3Service; @Operation(summary = "이미지 업로드 URL 요청", description = "S3로 이미지를 업로드할 Presigned URL 발급 요청으로, 정상적으로 발급된 이미지에 대해서만 반환함. 각 Presigned URL은 약 3분간 유효함.") diff --git a/src/main/java/com/yapp/artie/domain/user/controller/UserController.java b/src/main/java/com/yapp/artie/domain/user/controller/UserController.java index b0705a9c..f5d24cd7 100644 --- a/src/main/java/com/yapp/artie/domain/user/controller/UserController.java +++ b/src/main/java/com/yapp/artie/domain/user/controller/UserController.java @@ -4,7 +4,7 @@ import com.yapp.artie.domain.user.domain.User; import com.yapp.artie.domain.user.dto.response.CreateUserResponseDto; import com.yapp.artie.domain.user.dto.response.UserThumbnailResponseDto; -import com.yapp.artie.domain.user.service.UserService; +import com.yapp.artie.domain.user.service.UserUseCase; import com.yapp.artie.domain.user.service.UserThumbnailService; import com.yapp.artie.global.authentication.JwtService; import com.yapp.artie.global.exception.common.InvalidValueException; @@ -38,7 +38,7 @@ @RequiredArgsConstructor public class UserController { - private final UserService userService; + private final UserUseCase userService; private final UserThumbnailService userThumbnailService; private final JwtService jwtService; diff --git a/src/main/java/com/yapp/artie/domain/user/service/UserService.java b/src/main/java/com/yapp/artie/domain/user/service/UserServiceImpl.java similarity index 94% rename from src/main/java/com/yapp/artie/domain/user/service/UserService.java rename to src/main/java/com/yapp/artie/domain/user/service/UserServiceImpl.java index 9979ea19..e0674b3b 100644 --- a/src/main/java/com/yapp/artie/domain/user/service/UserService.java +++ b/src/main/java/com/yapp/artie/domain/user/service/UserServiceImpl.java @@ -18,20 +18,23 @@ @Service @Transactional(readOnly = true) @RequiredArgsConstructor -public class UserService implements UserDetailsService { +public class UserServiceImpl implements UserDetailsService, UserUseCase { private final UserRepository userRepository; private final CategoryRepository categoryRepository; private final JwtService jwtService; + @Override public Optional findByUid(String uid) { return userRepository.findByUid(uid); } + @Override public User findById(Long id) { return userRepository.findById(id).orElseThrow(UserNotFoundException::new); } + @Override @Transactional public CreateUserResponseDto register(String uid, String username, String picture) { User user = findByUid(uid) @@ -44,6 +47,7 @@ public CreateUserResponseDto register(String uid, String username, String pictur return new CreateUserResponseDto(user.getId()); } + @Override @Transactional public void delete(Long id) { User user = findById(id); @@ -65,6 +69,7 @@ public UserDetails loadUserByUsername(String username) { .build(); } + @Override @Transactional public void updateUserName(Long userId, String name) { User user = findById(userId); diff --git a/src/main/java/com/yapp/artie/domain/user/service/UserThumbnailService.java b/src/main/java/com/yapp/artie/domain/user/service/UserThumbnailService.java index 41dd0d81..b9b72eb3 100644 --- a/src/main/java/com/yapp/artie/domain/user/service/UserThumbnailService.java +++ b/src/main/java/com/yapp/artie/domain/user/service/UserThumbnailService.java @@ -13,7 +13,7 @@ @RequiredArgsConstructor public class UserThumbnailService { - private final UserService userService; + private final UserUseCase userService; private final ExhibitService exhibitService; public UserThumbnailResponseDto getUserThumbnail(Long id) { diff --git a/src/main/java/com/yapp/artie/domain/user/service/UserUseCase.java b/src/main/java/com/yapp/artie/domain/user/service/UserUseCase.java new file mode 100644 index 00000000..82717e60 --- /dev/null +++ b/src/main/java/com/yapp/artie/domain/user/service/UserUseCase.java @@ -0,0 +1,22 @@ +package com.yapp.artie.domain.user.service; + +import com.yapp.artie.domain.user.domain.User; +import com.yapp.artie.domain.user.dto.response.CreateUserResponseDto; +import java.util.Optional; +import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.transaction.annotation.Transactional; + +public interface UserUseCase { + + Optional findByUid(String uid); + + User findById(Long id); + + CreateUserResponseDto register(String uid, String username, String picture); + + void delete(Long id); + + UserDetails loadUserByUsername(String username); + + void updateUserName(Long userId, String name); +} diff --git a/src/test/java/com/yapp/artie/domain/user/service/UserServiceTest.java b/src/test/java/com/yapp/artie/domain/user/service/UserServiceTest.java index 604c4ef2..ff067d1f 100644 --- a/src/test/java/com/yapp/artie/domain/user/service/UserServiceTest.java +++ b/src/test/java/com/yapp/artie/domain/user/service/UserServiceTest.java @@ -22,7 +22,7 @@ class UserServiceTest { @InjectMocks - private UserService userService; + private UserServiceImpl userService; @Mock private UserRepository userRepository; From 6c169fc6c433ce953675e4bbc2aa8b195a19aef1 Mon Sep 17 00:00:00 2001 From: leesky Date: Tue, 28 Mar 2023 04:41:25 +0900 Subject: [PATCH 004/141] =?UTF-8?q?refactor=20:=20UserServiceImpl=EC=97=90?= =?UTF-8?q?=EC=84=9C=20=EC=9C=84=EC=9E=84=EC=9E=90=20=ED=81=B4=EB=9E=98?= =?UTF-8?q?=EC=8A=A4=20=EB=A9=94=EC=84=9C=EB=93=9C=20=EC=82=AC=EC=9A=A9?= =?UTF-8?q?=ED=95=98=EB=8F=84=EB=A1=9D=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../artie/domain/user/service/UserServiceImpl.java | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/yapp/artie/domain/user/service/UserServiceImpl.java b/src/main/java/com/yapp/artie/domain/user/service/UserServiceImpl.java index e0674b3b..6dc29ec3 100644 --- a/src/main/java/com/yapp/artie/domain/user/service/UserServiceImpl.java +++ b/src/main/java/com/yapp/artie/domain/user/service/UserServiceImpl.java @@ -23,6 +23,7 @@ public class UserServiceImpl implements UserDetailsService, UserUseCase { private final UserRepository userRepository; private final CategoryRepository categoryRepository; private final JwtService jwtService; + private final RegisterUserService registerUserService; @Override public Optional findByUid(String uid) { @@ -35,16 +36,8 @@ public User findById(Long id) { } @Override - @Transactional public CreateUserResponseDto register(String uid, String username, String picture) { - User user = findByUid(uid) - .orElse(User.create(uid, username, picture)); - - if (user.getId() == null) { - userRepository.save(user); - } - - return new CreateUserResponseDto(user.getId()); + return registerUserService.register(uid, username, picture); } @Override @@ -68,7 +61,7 @@ public UserDetails loadUserByUsername(String username) { .authorities("user") .build(); } - + @Override @Transactional public void updateUserName(Long userId, String name) { From 06765434366bd515f9d762916b5a53ada7e9174f Mon Sep 17 00:00:00 2001 From: leesky Date: Tue, 28 Mar 2023 04:41:32 +0900 Subject: [PATCH 005/141] =?UTF-8?q?feat=20:=20=EC=9C=84=EC=9E=84=EC=9E=90?= =?UTF-8?q?=20=ED=81=B4=EB=9E=98=EC=8A=A4=20=EC=B6=94=EC=B6=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../user/service/RegisterUserService.java | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 src/main/java/com/yapp/artie/domain/user/service/RegisterUserService.java diff --git a/src/main/java/com/yapp/artie/domain/user/service/RegisterUserService.java b/src/main/java/com/yapp/artie/domain/user/service/RegisterUserService.java new file mode 100644 index 00000000..de0ac920 --- /dev/null +++ b/src/main/java/com/yapp/artie/domain/user/service/RegisterUserService.java @@ -0,0 +1,28 @@ +package com.yapp.artie.domain.user.service; + +import com.yapp.artie.domain.user.domain.User; +import com.yapp.artie.domain.user.dto.response.CreateUserResponseDto; +import com.yapp.artie.domain.user.repository.UserRepository; +import com.yapp.artie.global.annotation.UseCase; +import lombok.RequiredArgsConstructor; +import org.springframework.transaction.annotation.Transactional; + +@UseCase +@Transactional(readOnly = true) +@RequiredArgsConstructor +public class RegisterUserService { + + private final UserRepository userRepository; + + @Transactional + public CreateUserResponseDto register(String uid, String username, String picture) { + User user = userRepository.findByUid(uid) + .orElse(User.create(uid, username, picture)); + + if (user.getId() == null) { + userRepository.save(user); + } + + return new CreateUserResponseDto(user.getId()); + } +} \ No newline at end of file From d22fe3aa9d40683c285ce78f7bb614dee0cd2790 Mon Sep 17 00:00:00 2001 From: leesky Date: Tue, 28 Mar 2023 06:26:43 +0900 Subject: [PATCH 006/141] =?UTF-8?q?fix=20:=20CreateUserResponseDto=20Gette?= =?UTF-8?q?r=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../artie/domain/user/dto/response/CreateUserResponseDto.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/com/yapp/artie/domain/user/dto/response/CreateUserResponseDto.java b/src/main/java/com/yapp/artie/domain/user/dto/response/CreateUserResponseDto.java index d644bdd4..f2eeb8b7 100644 --- a/src/main/java/com/yapp/artie/domain/user/dto/response/CreateUserResponseDto.java +++ b/src/main/java/com/yapp/artie/domain/user/dto/response/CreateUserResponseDto.java @@ -1,8 +1,10 @@ package com.yapp.artie.domain.user.dto.response; import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Getter; @Schema(description = "회원 Response") +@Getter public class CreateUserResponseDto { @Schema(description = "아이디") From e5b7ee1ff87deeff126fc1fbac37f235a0c749ad Mon Sep 17 00:00:00 2001 From: leesky Date: Tue, 28 Mar 2023 06:27:20 +0900 Subject: [PATCH 007/141] =?UTF-8?q?refactor=20:=20Optional=EA=B3=BC=20?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=EB=A6=BC=EC=9D=84=20=EC=9D=B4=EC=9A=A9?= =?UTF-8?q?=ED=95=B4=EC=84=9C=20=EC=BD=94=EB=93=9C=20=EA=B0=9C=EC=84=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../user/service/RegisterUserService.java | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/main/java/com/yapp/artie/domain/user/service/RegisterUserService.java b/src/main/java/com/yapp/artie/domain/user/service/RegisterUserService.java index de0ac920..2a7930d3 100644 --- a/src/main/java/com/yapp/artie/domain/user/service/RegisterUserService.java +++ b/src/main/java/com/yapp/artie/domain/user/service/RegisterUserService.java @@ -4,25 +4,25 @@ import com.yapp.artie.domain.user.dto.response.CreateUserResponseDto; import com.yapp.artie.domain.user.repository.UserRepository; import com.yapp.artie.global.annotation.UseCase; +import java.util.Optional; import lombok.RequiredArgsConstructor; import org.springframework.transaction.annotation.Transactional; @UseCase -@Transactional(readOnly = true) +@Transactional @RequiredArgsConstructor -public class RegisterUserService { +public class RegisterUserService implements RegisterUserUseCase { private final UserRepository userRepository; - @Transactional - public CreateUserResponseDto register(String uid, String username, String picture) { - User user = userRepository.findByUid(uid) - .orElse(User.create(uid, username, picture)); + @Override + public CreateUserResponseDto register(final String uid, final String username, + final String picture) { - if (user.getId() == null) { - userRepository.save(user); - } - - return new CreateUserResponseDto(user.getId()); + final Optional user = userRepository.findByUid(uid); + return user.map(entity -> new CreateUserResponseDto(entity.getId())) + .orElseGet(() -> new CreateUserResponseDto(userRepository + .save(User.create(uid, username, picture)) + .getId())); } } \ No newline at end of file From d0a74a542942f3edfe8b575a07d17128bfc70f6b Mon Sep 17 00:00:00 2001 From: leesky Date: Tue, 28 Mar 2023 06:28:05 +0900 Subject: [PATCH 008/141] =?UTF-8?q?feat=20:=20RegisterUserUseCase=20?= =?UTF-8?q?=EC=9D=B8=ED=84=B0=ED=8E=98=EC=9D=B4=EC=8A=A4=20=EC=B6=94?= =?UTF-8?q?=EC=B6=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../artie/domain/user/service/RegisterUserUseCase.java | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 src/main/java/com/yapp/artie/domain/user/service/RegisterUserUseCase.java diff --git a/src/main/java/com/yapp/artie/domain/user/service/RegisterUserUseCase.java b/src/main/java/com/yapp/artie/domain/user/service/RegisterUserUseCase.java new file mode 100644 index 00000000..3034adb8 --- /dev/null +++ b/src/main/java/com/yapp/artie/domain/user/service/RegisterUserUseCase.java @@ -0,0 +1,8 @@ +package com.yapp.artie.domain.user.service; + +import com.yapp.artie.domain.user.dto.response.CreateUserResponseDto; + +public interface RegisterUserUseCase { + + CreateUserResponseDto register(String uid, String username, String picture); +} From 87f57a41a5b00b1f11de5df33024402ce3ff6955 Mon Sep 17 00:00:00 2001 From: leesky Date: Tue, 28 Mar 2023 06:29:04 +0900 Subject: [PATCH 009/141] =?UTF-8?q?test=20:=20RegisterUserService=20?= =?UTF-8?q?=EB=8B=A8=EC=9C=84=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EC=9E=91?= =?UTF-8?q?=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../port/in}/RegisterUserUseCase.java | 2 +- .../service/RegisterUserService.java | 3 +- .../com/yapp/artie/common/UserTestData.java | 55 +++++++++++++++++ .../service/RegisterUserServiceTest.java | 59 +++++++++++++++++++ 4 files changed, 117 insertions(+), 2 deletions(-) rename src/main/java/com/yapp/artie/domain/user/{service => application/port/in}/RegisterUserUseCase.java (77%) rename src/main/java/com/yapp/artie/domain/user/{ => application}/service/RegisterUserService.java (87%) create mode 100644 src/test/java/com/yapp/artie/common/UserTestData.java create mode 100644 src/test/java/com/yapp/artie/domain/user/application/service/RegisterUserServiceTest.java diff --git a/src/main/java/com/yapp/artie/domain/user/service/RegisterUserUseCase.java b/src/main/java/com/yapp/artie/domain/user/application/port/in/RegisterUserUseCase.java similarity index 77% rename from src/main/java/com/yapp/artie/domain/user/service/RegisterUserUseCase.java rename to src/main/java/com/yapp/artie/domain/user/application/port/in/RegisterUserUseCase.java index 3034adb8..865f4100 100644 --- a/src/main/java/com/yapp/artie/domain/user/service/RegisterUserUseCase.java +++ b/src/main/java/com/yapp/artie/domain/user/application/port/in/RegisterUserUseCase.java @@ -1,4 +1,4 @@ -package com.yapp.artie.domain.user.service; +package com.yapp.artie.domain.user.application.port.in; import com.yapp.artie.domain.user.dto.response.CreateUserResponseDto; diff --git a/src/main/java/com/yapp/artie/domain/user/service/RegisterUserService.java b/src/main/java/com/yapp/artie/domain/user/application/service/RegisterUserService.java similarity index 87% rename from src/main/java/com/yapp/artie/domain/user/service/RegisterUserService.java rename to src/main/java/com/yapp/artie/domain/user/application/service/RegisterUserService.java index 2a7930d3..4b2affde 100644 --- a/src/main/java/com/yapp/artie/domain/user/service/RegisterUserService.java +++ b/src/main/java/com/yapp/artie/domain/user/application/service/RegisterUserService.java @@ -1,5 +1,6 @@ -package com.yapp.artie.domain.user.service; +package com.yapp.artie.domain.user.application.service; +import com.yapp.artie.domain.user.application.port.in.RegisterUserUseCase; import com.yapp.artie.domain.user.domain.User; import com.yapp.artie.domain.user.dto.response.CreateUserResponseDto; import com.yapp.artie.domain.user.repository.UserRepository; diff --git a/src/test/java/com/yapp/artie/common/UserTestData.java b/src/test/java/com/yapp/artie/common/UserTestData.java new file mode 100644 index 00000000..b72c93e1 --- /dev/null +++ b/src/test/java/com/yapp/artie/common/UserTestData.java @@ -0,0 +1,55 @@ +package com.yapp.artie.common; + +import com.yapp.artie.domain.user.domain.User; + +public class UserTestData { + + public static UserBuilder defaultUser() { + + return new UserBuilder() + .withId(1L) + .withUid("uid") + .withName("Test User") + .withProfileImage("profileImage.com/user/1/profileImage.png"); + } + + public static class UserBuilder { + + private Long id; + private String uid; + private String name; + private String profileImage; + + + public UserBuilder withId(Long id) { + this.id = id; + return this; + } + + + public UserBuilder withUid(String uid) { + this.uid = uid; + return this; + } + + + public UserBuilder withName(String name) { + this.name = name; + return this; + } + + public UserBuilder withProfileImage(String profileImage) { + this.profileImage = profileImage; + return this; + } + + public User build() { + return User.create( + this.id, + this.uid, + this.name, + this.profileImage + ); + } + } +} diff --git a/src/test/java/com/yapp/artie/domain/user/application/service/RegisterUserServiceTest.java b/src/test/java/com/yapp/artie/domain/user/application/service/RegisterUserServiceTest.java new file mode 100644 index 00000000..8d8026cd --- /dev/null +++ b/src/test/java/com/yapp/artie/domain/user/application/service/RegisterUserServiceTest.java @@ -0,0 +1,59 @@ +package com.yapp.artie.domain.user.application.service; + +import static com.yapp.artie.common.UserTestData.defaultUser; +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.BDDMockito.given; +import static org.mockito.BDDMockito.then; +import static org.mockito.Mockito.never; + +import com.yapp.artie.domain.user.dto.response.CreateUserResponseDto; +import com.yapp.artie.domain.user.repository.UserRepository; +import java.util.Optional; +import org.junit.jupiter.api.Test; +import org.mockito.Mockito; + +class RegisterUserServiceTest { + + private final UserRepository userRepository = Mockito.mock(UserRepository.class); + private final RegisterUserService registerUserService = new RegisterUserService(userRepository); + + @Test + void register_이미_등록된_사용자라면_ID를_그대로_반환한다() { + givenUser(); + CreateUserResponseDto actual = registerUserService.register("1", "test", null); + assertThat(actual.getId()).isEqualTo(1L); + } + + @Test + void register_이미_등록된_사용자라면_저장소에_저장하지_않는다() { + givenUser(); + registerUserService.register("1", "test", null); + then(userRepository) + .should(never()) + .save(any()); + } + + @Test + void register_신규_사용자라면_새로운_id를_부여받는다() { + Long expectedId = 2L; + givenSaveWillReturnUserWithId(expectedId); + CreateUserResponseDto actual = registerUserService.register("1", "test", null); + assertThat(actual.getId()).isEqualTo(expectedId); + then(userRepository) + .should() + .save(any()); + } + + private void givenUser() { + given(userRepository.findByUid(any())) + .willReturn(Optional.ofNullable(defaultUser().build())); + } + + private void givenSaveWillReturnUserWithId(Long id) { + given(userRepository.save(any())) + .willReturn(defaultUser() + .withId(id) + .build()); + } +} \ No newline at end of file From 020a571d55233a467167d97b6d59de671731ad5c Mon Sep 17 00:00:00 2001 From: leesky Date: Tue, 28 Mar 2023 06:52:16 +0900 Subject: [PATCH 010/141] =?UTF-8?q?refactor=20:=20RenameUserUseCase=20?= =?UTF-8?q?=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../port/in/RenameUserUseCase.java | 6 +++++ .../service/RenameUserService.java | 26 +++++++++++++++++++ .../domain/user/service/UserServiceImpl.java | 6 +++-- 3 files changed, 36 insertions(+), 2 deletions(-) create mode 100644 src/main/java/com/yapp/artie/domain/user/application/port/in/RenameUserUseCase.java create mode 100644 src/main/java/com/yapp/artie/domain/user/application/service/RenameUserService.java diff --git a/src/main/java/com/yapp/artie/domain/user/application/port/in/RenameUserUseCase.java b/src/main/java/com/yapp/artie/domain/user/application/port/in/RenameUserUseCase.java new file mode 100644 index 00000000..256511ff --- /dev/null +++ b/src/main/java/com/yapp/artie/domain/user/application/port/in/RenameUserUseCase.java @@ -0,0 +1,6 @@ +package com.yapp.artie.domain.user.application.port.in; + +public interface RenameUserUseCase { + + void rename(Long userId, String name); +} diff --git a/src/main/java/com/yapp/artie/domain/user/application/service/RenameUserService.java b/src/main/java/com/yapp/artie/domain/user/application/service/RenameUserService.java new file mode 100644 index 00000000..2c83f8cc --- /dev/null +++ b/src/main/java/com/yapp/artie/domain/user/application/service/RenameUserService.java @@ -0,0 +1,26 @@ +package com.yapp.artie.domain.user.application.service; + +import com.yapp.artie.domain.user.application.port.in.RenameUserUseCase; +import com.yapp.artie.domain.user.domain.User; +import com.yapp.artie.domain.user.exception.UserNotFoundException; +import com.yapp.artie.domain.user.repository.UserRepository; +import com.yapp.artie.global.annotation.UseCase; +import lombok.RequiredArgsConstructor; +import org.springframework.transaction.annotation.Transactional; + +@UseCase +@Transactional +@RequiredArgsConstructor +public class RenameUserService implements RenameUserUseCase { + + private final UserRepository userRepository; + + @Override + @Transactional + public void rename(Long userId, String name) { + User user = userRepository.findById(userId) + .orElseThrow(UserNotFoundException::new); + + user.setName(name); + } +} \ No newline at end of file diff --git a/src/main/java/com/yapp/artie/domain/user/service/UserServiceImpl.java b/src/main/java/com/yapp/artie/domain/user/service/UserServiceImpl.java index 6dc29ec3..3db8e20c 100644 --- a/src/main/java/com/yapp/artie/domain/user/service/UserServiceImpl.java +++ b/src/main/java/com/yapp/artie/domain/user/service/UserServiceImpl.java @@ -3,6 +3,8 @@ import static org.springframework.security.core.userdetails.User.builder; import com.yapp.artie.domain.archive.repository.CategoryRepository; +import com.yapp.artie.domain.user.application.service.RegisterUserService; +import com.yapp.artie.domain.user.application.service.RenameUserService; import com.yapp.artie.domain.user.domain.User; import com.yapp.artie.domain.user.dto.response.CreateUserResponseDto; import com.yapp.artie.domain.user.exception.UserNotFoundException; @@ -24,6 +26,7 @@ public class UserServiceImpl implements UserDetailsService, UserUseCase { private final CategoryRepository categoryRepository; private final JwtService jwtService; private final RegisterUserService registerUserService; + private final RenameUserService renameUserService; @Override public Optional findByUid(String uid) { @@ -65,7 +68,6 @@ public UserDetails loadUserByUsername(String username) { @Override @Transactional public void updateUserName(Long userId, String name) { - User user = findById(userId); - user.setName(name); + renameUserService.rename(userId, name); } } From 08e9f017fbf84a3844d8dfcddc4e5e96b7b35eca Mon Sep 17 00:00:00 2001 From: leesky Date: Tue, 28 Mar 2023 07:11:53 +0900 Subject: [PATCH 011/141] =?UTF-8?q?test=20:=20RenameUserService=20?= =?UTF-8?q?=EB=8B=A8=EC=9C=84=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EC=9E=91?= =?UTF-8?q?=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/RenameUserServiceTest.java | 57 +++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 src/test/java/com/yapp/artie/domain/user/application/service/RenameUserServiceTest.java diff --git a/src/test/java/com/yapp/artie/domain/user/application/service/RenameUserServiceTest.java b/src/test/java/com/yapp/artie/domain/user/application/service/RenameUserServiceTest.java new file mode 100644 index 00000000..bf0c035d --- /dev/null +++ b/src/test/java/com/yapp/artie/domain/user/application/service/RenameUserServiceTest.java @@ -0,0 +1,57 @@ +package com.yapp.artie.domain.user.application.service; + +import static com.yapp.artie.common.UserTestData.defaultUser; +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.BDDMockito.given; + +import com.yapp.artie.domain.user.domain.User; +import com.yapp.artie.domain.user.exception.UserNotFoundException; +import com.yapp.artie.domain.user.repository.UserRepository; +import java.util.Optional; +import org.junit.jupiter.api.Test; +import org.mockito.Mockito; + +class RenameUserServiceTest { + + private final UserRepository userRepository = Mockito.mock(UserRepository.class); + private final RenameUserService renameUserService = new RenameUserService(userRepository); + + @Test + void rename_사용자를_찾을_수_없으면_예외를_발생한다() { + givenUserFindWillFail(); + assertThatThrownBy(() -> renameUserService.rename(1L, "test")) + .isInstanceOf(UserNotFoundException.class); + } + + @Test + void rename_주어진_이름으로_사용자의_이름이_변경된다() { + User user = defaultUser().build(); + givenUserByReference(user); + + String beforeName = userRepository + .findById(1L) + .orElseThrow() + .getName(); + + String expectedName = "tomcat"; + renameUserService.rename(1L, expectedName); + + assertThat(user.getName()).isEqualTo(expectedName); + assertThat(user.getName()).isNotEqualTo(beforeName); + } + + + private void givenUserByReference(User user) { + given(userRepository.findById(any())) + .willReturn(Optional.ofNullable(user)); + } + + private void givenUserFindWillFail() { + given(userRepository.findById(any())) + .willThrow(UserNotFoundException.class); + } + + +} \ No newline at end of file From 55ca459e359fe328ed95b95be9c049019d3e7bf1 Mon Sep 17 00:00:00 2001 From: leesky Date: Tue, 28 Mar 2023 07:29:38 +0900 Subject: [PATCH 012/141] =?UTF-8?q?fix=20:=20=EC=A4=91=EB=B3=B5=20?= =?UTF-8?q?=EC=95=A0=EB=85=B8=ED=85=8C=EC=9D=B4=EC=85=98=20=EC=A0=9C?= =?UTF-8?q?=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/user/application/service/RenameUserService.java | 1 - .../com/yapp/artie/domain/user/service/UserServiceImpl.java | 1 - .../com/yapp/artie/domain/user/service/UserServiceTest.java | 5 +++++ 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/yapp/artie/domain/user/application/service/RenameUserService.java b/src/main/java/com/yapp/artie/domain/user/application/service/RenameUserService.java index 2c83f8cc..e1fe2c59 100644 --- a/src/main/java/com/yapp/artie/domain/user/application/service/RenameUserService.java +++ b/src/main/java/com/yapp/artie/domain/user/application/service/RenameUserService.java @@ -16,7 +16,6 @@ public class RenameUserService implements RenameUserUseCase { private final UserRepository userRepository; @Override - @Transactional public void rename(Long userId, String name) { User user = userRepository.findById(userId) .orElseThrow(UserNotFoundException::new); diff --git a/src/main/java/com/yapp/artie/domain/user/service/UserServiceImpl.java b/src/main/java/com/yapp/artie/domain/user/service/UserServiceImpl.java index 3db8e20c..69e99b99 100644 --- a/src/main/java/com/yapp/artie/domain/user/service/UserServiceImpl.java +++ b/src/main/java/com/yapp/artie/domain/user/service/UserServiceImpl.java @@ -66,7 +66,6 @@ public UserDetails loadUserByUsername(String username) { } @Override - @Transactional public void updateUserName(Long userId, String name) { renameUserService.rename(userId, name); } diff --git a/src/test/java/com/yapp/artie/domain/user/service/UserServiceTest.java b/src/test/java/com/yapp/artie/domain/user/service/UserServiceTest.java index ff067d1f..a6a0af48 100644 --- a/src/test/java/com/yapp/artie/domain/user/service/UserServiceTest.java +++ b/src/test/java/com/yapp/artie/domain/user/service/UserServiceTest.java @@ -2,13 +2,17 @@ import static org.assertj.core.api.AssertionsForClassTypes.assertThatThrownBy; import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyLong; +import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.BDDMockito.given; +import com.yapp.artie.domain.user.application.service.RenameUserService; import com.yapp.artie.domain.user.domain.User; import com.yapp.artie.domain.user.domain.UserTest; import com.yapp.artie.domain.user.exception.UserNotFoundException; import com.yapp.artie.domain.user.repository.UserRepository; import com.yapp.artie.global.authentication.JwtService; +import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -31,6 +35,7 @@ class UserServiceTest { private JwtService jwtService; @Test + @Disabled @DisplayName("유저 닉네임(이름) 변경 테스트 - 존재하지 않는 userId로 조회시 예외처리") public void updateUserNameFailTest() throws Exception { User user = UserTest.TEST_USER; From 3ad8b03fa0bea968c2e64787f882aca33e89fb6f Mon Sep 17 00:00:00 2001 From: leesky Date: Wed, 29 Mar 2023 02:33:57 +0900 Subject: [PATCH 013/141] =?UTF-8?q?refactor=20:=20UserWithdrawalUseCase=20?= =?UTF-8?q?=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../port/in/UserWithdrawalUseCase.java | 6 ++++ .../service/UserWithdrawalService.java | 31 +++++++++++++++++++ .../domain/user/service/UserServiceImpl.java | 13 ++------ 3 files changed, 40 insertions(+), 10 deletions(-) create mode 100644 src/main/java/com/yapp/artie/domain/user/application/port/in/UserWithdrawalUseCase.java create mode 100644 src/main/java/com/yapp/artie/domain/user/application/service/UserWithdrawalService.java diff --git a/src/main/java/com/yapp/artie/domain/user/application/port/in/UserWithdrawalUseCase.java b/src/main/java/com/yapp/artie/domain/user/application/port/in/UserWithdrawalUseCase.java new file mode 100644 index 00000000..1920b2e0 --- /dev/null +++ b/src/main/java/com/yapp/artie/domain/user/application/port/in/UserWithdrawalUseCase.java @@ -0,0 +1,6 @@ +package com.yapp.artie.domain.user.application.port.in; + +public interface UserWithdrawalUseCase { + + void delete(Long id); +} diff --git a/src/main/java/com/yapp/artie/domain/user/application/service/UserWithdrawalService.java b/src/main/java/com/yapp/artie/domain/user/application/service/UserWithdrawalService.java new file mode 100644 index 00000000..3ff9950e --- /dev/null +++ b/src/main/java/com/yapp/artie/domain/user/application/service/UserWithdrawalService.java @@ -0,0 +1,31 @@ +package com.yapp.artie.domain.user.application.service; + +import com.yapp.artie.domain.archive.repository.CategoryRepository; +import com.yapp.artie.domain.user.application.port.in.UserWithdrawalUseCase; +import com.yapp.artie.domain.user.domain.User; +import com.yapp.artie.domain.user.exception.UserNotFoundException; +import com.yapp.artie.domain.user.repository.UserRepository; +import com.yapp.artie.global.annotation.UseCase; +import com.yapp.artie.global.authentication.JwtService; +import lombok.RequiredArgsConstructor; +import org.springframework.transaction.annotation.Transactional; + +@UseCase +@Transactional +@RequiredArgsConstructor +public class UserWithdrawalService implements UserWithdrawalUseCase { + + private final JwtService jwtService; + private final CategoryRepository categoryRepository; + private final UserRepository userRepository; + + @Override + public void delete(Long id) { + User user = userRepository.findById(id).orElseThrow(UserNotFoundException::new); + jwtService.withdraw(user.getUid()); + + categoryRepository.deleteAllByUser(user); + userRepository.delete(user); + } + +} \ No newline at end of file diff --git a/src/main/java/com/yapp/artie/domain/user/service/UserServiceImpl.java b/src/main/java/com/yapp/artie/domain/user/service/UserServiceImpl.java index 69e99b99..dfe318d3 100644 --- a/src/main/java/com/yapp/artie/domain/user/service/UserServiceImpl.java +++ b/src/main/java/com/yapp/artie/domain/user/service/UserServiceImpl.java @@ -2,14 +2,13 @@ import static org.springframework.security.core.userdetails.User.builder; -import com.yapp.artie.domain.archive.repository.CategoryRepository; import com.yapp.artie.domain.user.application.service.RegisterUserService; import com.yapp.artie.domain.user.application.service.RenameUserService; +import com.yapp.artie.domain.user.application.service.UserWithdrawalService; import com.yapp.artie.domain.user.domain.User; import com.yapp.artie.domain.user.dto.response.CreateUserResponseDto; import com.yapp.artie.domain.user.exception.UserNotFoundException; import com.yapp.artie.domain.user.repository.UserRepository; -import com.yapp.artie.global.authentication.JwtService; import java.util.Optional; import lombok.RequiredArgsConstructor; import org.springframework.security.core.userdetails.UserDetails; @@ -23,10 +22,9 @@ public class UserServiceImpl implements UserDetailsService, UserUseCase { private final UserRepository userRepository; - private final CategoryRepository categoryRepository; - private final JwtService jwtService; private final RegisterUserService registerUserService; private final RenameUserService renameUserService; + private final UserWithdrawalService userWithdrawalService; @Override public Optional findByUid(String uid) { @@ -44,13 +42,8 @@ public CreateUserResponseDto register(String uid, String username, String pictur } @Override - @Transactional public void delete(Long id) { - User user = findById(id); - jwtService.withdraw(user.getUid()); - - categoryRepository.deleteAllByUser(user); - userRepository.delete(user); + userWithdrawalService.delete(id); } @Override From 2737099d0b479695a41996624c868f9b0bc4aa39 Mon Sep 17 00:00:00 2001 From: leesky Date: Wed, 29 Mar 2023 03:20:13 +0900 Subject: [PATCH 014/141] =?UTF-8?q?style=20:=20=EC=BD=94=EB=93=9C=20?= =?UTF-8?q?=EC=A0=95=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../user/application/service/UserWithdrawalService.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/yapp/artie/domain/user/application/service/UserWithdrawalService.java b/src/main/java/com/yapp/artie/domain/user/application/service/UserWithdrawalService.java index 3ff9950e..f0060879 100644 --- a/src/main/java/com/yapp/artie/domain/user/application/service/UserWithdrawalService.java +++ b/src/main/java/com/yapp/artie/domain/user/application/service/UserWithdrawalService.java @@ -21,9 +21,10 @@ public class UserWithdrawalService implements UserWithdrawalUseCase { @Override public void delete(Long id) { - User user = userRepository.findById(id).orElseThrow(UserNotFoundException::new); - jwtService.withdraw(user.getUid()); + User user = userRepository.findById(id) + .orElseThrow(UserNotFoundException::new); + jwtService.withdraw(user.getUid()); categoryRepository.deleteAllByUser(user); userRepository.delete(user); } From bdb0c1ec23705b98891224256dab97a4b965a1bc Mon Sep 17 00:00:00 2001 From: leesky Date: Wed, 29 Mar 2023 03:20:30 +0900 Subject: [PATCH 015/141] =?UTF-8?q?test=20:=20UserWithdrawalService=20?= =?UTF-8?q?=EB=8B=A8=EC=9C=84=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EC=9E=91?= =?UTF-8?q?=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/UserWithdrawalServiceTest.java | 76 +++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 src/test/java/com/yapp/artie/domain/user/application/service/UserWithdrawalServiceTest.java diff --git a/src/test/java/com/yapp/artie/domain/user/application/service/UserWithdrawalServiceTest.java b/src/test/java/com/yapp/artie/domain/user/application/service/UserWithdrawalServiceTest.java new file mode 100644 index 00000000..77331932 --- /dev/null +++ b/src/test/java/com/yapp/artie/domain/user/application/service/UserWithdrawalServiceTest.java @@ -0,0 +1,76 @@ +package com.yapp.artie.domain.user.application.service; + +import static com.yapp.artie.common.UserTestData.defaultUser; +import static org.assertj.core.api.Assertions.assertThatThrownBy; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.BDDMockito.given; +import static org.mockito.BDDMockito.then; + +import com.yapp.artie.domain.archive.repository.CategoryRepository; +import com.yapp.artie.domain.user.domain.User; +import com.yapp.artie.domain.user.exception.UserNotFoundException; +import com.yapp.artie.domain.user.repository.UserRepository; +import com.yapp.artie.global.authentication.JwtService; +import java.util.Optional; +import org.junit.jupiter.api.Test; +import org.mockito.Mockito; + +class UserWithdrawalServiceTest { + + private final UserRepository userRepository = Mockito.mock(UserRepository.class); + private final CategoryRepository categoryRepository = Mockito.mock(CategoryRepository.class); + private final JwtService jwtService = Mockito.mock(JwtService.class); + private final UserWithdrawalService userWithdrawalService = new UserWithdrawalService( + jwtService, categoryRepository, userRepository); + + @Test + void delete_사용자를_찾을_수_없으면_예외를_발생한다() { + givenUserFindWillFail(); + assertThatThrownBy(() -> userWithdrawalService.delete(1L)) + .isInstanceOf(UserNotFoundException.class); + } + + @Test + void delete_사용자_삭제_요청을_받으면_firebase에서_삭제되도록_요청한다() { + givenUser(); + userWithdrawalService.delete(1L); + then(jwtService) + .should() + .withdraw(any()); + } + + @Test + void delete_사용자_삭제_요청을_받으면_사용자의_모든_데이터를_삭제한다() { + givenUser(); + userWithdrawalService.delete(1L); + then(categoryRepository) + .should() + .deleteAllByUser(any()); + } + + @Test + void delete_데이터베이스에서_사용자를_삭제하도록_요청한다() { + User user = defaultUser().build(); + givenUserByReference(user); + userWithdrawalService.delete(1L); + then(userRepository) + .should() + .delete(eq(user)); + } + + private void givenUserByReference(User user) { + given(userRepository.findById(any())) + .willReturn(Optional.ofNullable(user)); + } + + private void givenUser() { + given(userRepository.findById(any())) + .willReturn(Optional.ofNullable(defaultUser().build())); + } + + private void givenUserFindWillFail() { + given(userRepository.findById(any())) + .willThrow(UserNotFoundException.class); + } +} \ No newline at end of file From d9fc327cee37365f81d3917ccce3905208f7263f Mon Sep 17 00:00:00 2001 From: leesky Date: Wed, 29 Mar 2023 16:10:17 +0900 Subject: [PATCH 016/141] =?UTF-8?q?fix=20:=20User=20=ED=81=B4=EB=9E=98?= =?UTF-8?q?=EC=8A=A4=20=EC=9D=B4=EB=A6=84=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../archive/domain/category/Category.java | 10 ++--- .../archive/domain/exhibit/Exhibit.java | 10 ++--- .../artie/domain/archive/domain/tag/Tag.java | 6 +-- .../repository/CategoryRepository.java | 12 +++--- .../archive/repository/ExhibitRepository.java | 12 +++--- .../archive/service/ArtworkService.java | 4 +- .../archive/service/CategoryService.java | 26 ++++++------ .../archive/service/ExhibitService.java | 6 +-- .../domain/archive/service/TagService.java | 4 +- .../domain/question/domain/Question.java | 4 +- .../service/RegisterUserService.java | 6 +-- .../service/RenameUserService.java | 4 +- .../service/UserWithdrawalService.java | 4 +- .../user/controller/UserController.java | 10 ++--- .../domain/{User.java => UserJpaEntity.java} | 10 ++--- .../user/repository/UserRepository.java | 6 +-- .../domain/user/service/UserServiceImpl.java | 8 ++-- .../user/service/UserThumbnailService.java | 4 +- .../domain/user/service/UserUseCase.java | 7 ++-- .../com/yapp/artie/common/UserTestData.java | 6 +-- .../repository/CategoryRepositoryTest.java | 4 +- .../archive/service/ArtworkServiceTest.java | 18 ++++---- .../archive/service/CategoryServiceTest.java | 36 ++++++++-------- .../archive/service/ExhibitServiceTest.java | 42 +++++++++---------- .../service/RenameUserServiceTest.java | 6 +-- .../service/UserWithdrawalServiceTest.java | 6 +-- .../user/controller/UserControllerTest.java | 4 +- .../artie/domain/user/domain/UserTest.java | 4 +- .../user/repository/UserRepositoryTest.java | 4 +- .../domain/user/service/UserServiceTest.java | 7 +--- .../service/UserThumbnailServiceTest.java | 10 ++--- 31 files changed, 148 insertions(+), 152 deletions(-) rename src/main/java/com/yapp/artie/domain/user/domain/{User.java => UserJpaEntity.java} (71%) diff --git a/src/main/java/com/yapp/artie/domain/archive/domain/category/Category.java b/src/main/java/com/yapp/artie/domain/archive/domain/category/Category.java index 51df2ec2..ae53aed6 100644 --- a/src/main/java/com/yapp/artie/domain/archive/domain/category/Category.java +++ b/src/main/java/com/yapp/artie/domain/archive/domain/category/Category.java @@ -1,7 +1,7 @@ package com.yapp.artie.domain.archive.domain.category; import com.yapp.artie.domain.archive.domain.exhibit.Exhibit; -import com.yapp.artie.domain.user.domain.User; +import com.yapp.artie.domain.user.domain.UserJpaEntity; import com.yapp.artie.global.common.BaseEntity; import java.util.ArrayList; import java.util.List; @@ -30,7 +30,7 @@ public class Category extends BaseEntity { @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "user_id", nullable = false) - private User user; + private UserJpaEntity user; @Column(nullable = false) private String name; @@ -41,13 +41,13 @@ public class Category extends BaseEntity { @Column(nullable = false, name = "seq") private int sequence; - private Category(User user, String name, int sequence) { + private Category(UserJpaEntity user, String name, int sequence) { this.user = user; this.name = name; this.sequence = sequence; } - public static Category create(User user, String name, int sequence) { + public static Category create(UserJpaEntity user, String name, int sequence) { return new Category(user, name, sequence); } @@ -56,7 +56,7 @@ public void addExhibit(Exhibit exhibit) { exhibit.categorize(this); } - public boolean ownedBy(User user) { + public boolean ownedBy(UserJpaEntity user) { return this.user.equals(user); } diff --git a/src/main/java/com/yapp/artie/domain/archive/domain/exhibit/Exhibit.java b/src/main/java/com/yapp/artie/domain/archive/domain/exhibit/Exhibit.java index b2bc6cfd..86377481 100644 --- a/src/main/java/com/yapp/artie/domain/archive/domain/exhibit/Exhibit.java +++ b/src/main/java/com/yapp/artie/domain/archive/domain/exhibit/Exhibit.java @@ -3,7 +3,7 @@ import com.yapp.artie.domain.archive.domain.artwork.Artwork; import com.yapp.artie.domain.archive.domain.category.Category; -import com.yapp.artie.domain.user.domain.User; +import com.yapp.artie.domain.user.domain.UserJpaEntity; import com.yapp.artie.global.common.BaseEntity; import java.time.LocalDate; import java.util.ArrayList; @@ -38,7 +38,7 @@ public class Exhibit extends BaseEntity { @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "user_id", nullable = false) - private User user; + private UserJpaEntity user; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "category_id", nullable = false) @@ -57,7 +57,7 @@ public class Exhibit extends BaseEntity { @Column(nullable = false, columnDefinition = "varchar(32) default 'NONE'") private PinType pinType; - private Exhibit(User user, Category category, ExhibitContents contents, Publication publication) { + private Exhibit(UserJpaEntity user, Category category, ExhibitContents contents, Publication publication) { this.user = user; this.category = category; this.contents = contents; @@ -77,7 +77,7 @@ public void categorize(Category category) { this.category = category; } - public boolean ownedBy(User user) { + public boolean ownedBy(UserJpaEntity user) { return this.user.equals(user); } @@ -98,7 +98,7 @@ public void addArtwork(Artwork artwork) { artwork.display(this); } - public static Exhibit create(String name, LocalDate postDate, Category category, User user, + public static Exhibit create(String name, LocalDate postDate, Category category, UserJpaEntity user, String attachedLink) { ExhibitContents contents = new ExhibitContents(name, null, attachedLink, postDate); Publication publication = new Publication(); diff --git a/src/main/java/com/yapp/artie/domain/archive/domain/tag/Tag.java b/src/main/java/com/yapp/artie/domain/archive/domain/tag/Tag.java index cfb8e1f8..23503adc 100644 --- a/src/main/java/com/yapp/artie/domain/archive/domain/tag/Tag.java +++ b/src/main/java/com/yapp/artie/domain/archive/domain/tag/Tag.java @@ -1,7 +1,7 @@ package com.yapp.artie.domain.archive.domain.tag; import com.yapp.artie.domain.archive.domain.artwork.Artwork; -import com.yapp.artie.domain.user.domain.User; +import com.yapp.artie.domain.user.domain.UserJpaEntity; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.FetchType; @@ -25,7 +25,7 @@ public class Tag { @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "user_id", nullable = false) - private User user; + private UserJpaEntity user; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "image_id", nullable = false) @@ -37,7 +37,7 @@ public class Tag { @Column(nullable = false) private String name; - public Tag(User user, Artwork artwork, int sequence, String name) { + public Tag(UserJpaEntity user, Artwork artwork, int sequence, String name) { this.user = user; this.artwork = artwork; this.sequence = sequence; diff --git a/src/main/java/com/yapp/artie/domain/archive/repository/CategoryRepository.java b/src/main/java/com/yapp/artie/domain/archive/repository/CategoryRepository.java index fef3839a..ae7ce9a8 100644 --- a/src/main/java/com/yapp/artie/domain/archive/repository/CategoryRepository.java +++ b/src/main/java/com/yapp/artie/domain/archive/repository/CategoryRepository.java @@ -2,7 +2,7 @@ import com.yapp.artie.domain.archive.domain.category.Category; import com.yapp.artie.domain.archive.dto.cateogry.CategoryDto; -import com.yapp.artie.domain.user.domain.User; +import com.yapp.artie.domain.user.domain.UserJpaEntity; import java.util.List; import org.springframework.data.jpa.repository.EntityGraph; import org.springframework.data.jpa.repository.JpaRepository; @@ -15,20 +15,20 @@ public interface CategoryRepository extends JpaRepository { @Query("select new com.yapp.artie.domain.archive.dto.cateogry.CategoryDto(c.id, c.name, c.sequence) from Category c where c.user = :user order by c.sequence") - List findCategoryDto(@Param("user") User user); + List findCategoryDto(@Param("user") UserJpaEntity user); @Modifying(clearAutomatically = true) @Query("update Category c set c.sequence = c.sequence - 1 where c.sequence > :sequence and c.user = :user") - void bulkSequenceMinus(@Param("user") User user, @Param("sequence") int sequence); + void bulkSequenceMinus(@Param("user") UserJpaEntity user, @Param("sequence") int sequence); @EntityGraph(attributePaths = {"user"}) Category findCategoryEntityGraphById(Long id); - int countCategoriesByUser(@Param("user") User user); + int countCategoriesByUser(@Param("user") UserJpaEntity user); - List findCategoriesByUserOrderBySequence(User user); + List findCategoriesByUserOrderBySequence(UserJpaEntity user); @Modifying(clearAutomatically = true) - void deleteAllByUser(User user); + void deleteAllByUser(UserJpaEntity user); } diff --git a/src/main/java/com/yapp/artie/domain/archive/repository/ExhibitRepository.java b/src/main/java/com/yapp/artie/domain/archive/repository/ExhibitRepository.java index bcbde60a..2cc0eaac 100644 --- a/src/main/java/com/yapp/artie/domain/archive/repository/ExhibitRepository.java +++ b/src/main/java/com/yapp/artie/domain/archive/repository/ExhibitRepository.java @@ -6,7 +6,7 @@ import com.yapp.artie.domain.archive.dto.exhibit.CalenderQueryResultDto; import com.yapp.artie.domain.archive.dto.exhibit.ExhibitByDateResponseDto; import com.yapp.artie.domain.archive.dto.exhibit.PostInfoDto; -import com.yapp.artie.domain.user.domain.User; +import com.yapp.artie.domain.user.domain.UserJpaEntity; import java.time.LocalDateTime; import java.util.List; import java.util.Optional; @@ -25,7 +25,7 @@ public interface ExhibitRepository extends JpaRepository { @Query("select count(e.id) from Exhibit e " + "where e.user = :user " + "and e.publication.isPublished = true") - int countExhibit(@Param("user") User user); + int countExhibit(@Param("user") UserJpaEntity user); @EntityGraph(attributePaths = {"user"}) Optional findExhibitEntityGraphById(Long id); @@ -36,7 +36,7 @@ public interface ExhibitRepository extends JpaRepository { @Query("select new com.yapp.artie.domain.archive.dto.exhibit." + "PostInfoDto(e.id, e.contents.name, e.contents.date, e.contents.attachedLink, e.publication.isPublished) " + "from Exhibit e where e.user = :user and e.publication.isPublished = false") - List findDraftExhibitDto(@Param("user") User user); + List findDraftExhibitDto(@Param("user") UserJpaEntity user); @Query( value = "select e from Exhibit e " @@ -45,7 +45,7 @@ public interface ExhibitRepository extends JpaRepository { + "and e.publication.isPublished = true", countQuery = "select count(e.id) from Exhibit e" ) - Page findExhibitByCategoryAsPage(Pageable pageable, @Param("user") User user, + Page findExhibitByCategoryAsPage(Pageable pageable, @Param("user") UserJpaEntity user, @Param("category") Category category); @Query( @@ -54,7 +54,7 @@ Page findExhibitByCategoryAsPage(Pageable pageable, @Param("user") User + "and e.publication.isPublished = true", countQuery = "select count(e.id) from Exhibit e" ) - Page findExhibitAsPage(Pageable pageable, @Param("user") User user); + Page findExhibitAsPage(Pageable pageable, @Param("user") UserJpaEntity user); @Query(value = "SELECT p.calenderDate, p.postId, p.postNum, image. `uri` FROM " + "( SELECT DATE(created_at) as calenderDate, MAX(id) AS postId, count(*) postNum FROM post " @@ -81,7 +81,7 @@ void updateExhibitCreatedAt(@Param("createdAt") LocalDateTime createdAt, + "WHERE e.createdAt BETWEEN :start AND :end " + "AND e.user = :user AND e.publication.isPublished = true " + "ORDER BY e.createdAt DESC") - List findExhibitsByDate(@Param("user") User user, + List findExhibitsByDate(@Param("user") UserJpaEntity user, @Param("start") LocalDateTime start, @Param("end") LocalDateTime end); diff --git a/src/main/java/com/yapp/artie/domain/archive/service/ArtworkService.java b/src/main/java/com/yapp/artie/domain/archive/service/ArtworkService.java index d1f1a2b5..41bfc931 100644 --- a/src/main/java/com/yapp/artie/domain/archive/service/ArtworkService.java +++ b/src/main/java/com/yapp/artie/domain/archive/service/ArtworkService.java @@ -10,7 +10,7 @@ import com.yapp.artie.domain.archive.exception.ArtworkNotFoundException; import com.yapp.artie.domain.archive.repository.ArtworkRepository; import com.yapp.artie.domain.s3.service.S3Service; -import com.yapp.artie.domain.user.domain.User; +import com.yapp.artie.domain.user.domain.UserJpaEntity; import com.yapp.artie.domain.user.service.UserUseCase; import com.yapp.artie.global.util.S3Utils; import java.util.List; @@ -68,7 +68,7 @@ public Long create(CreateArtworkRequestDto createArtworkRequestDto, Long userId) Artwork.create(exhibit, artworkNum <= 0, createArtworkRequestDto.getName(), createArtworkRequestDto.getArtist(), createArtworkRequestDto.getImageUri())); - User user = userService.findById(userId); + UserJpaEntity user = userService.findById(userId); if (createArtworkRequestDto.getTags() != null) { tagService.addTagsToArtwork(createArtworkRequestDto.getTags(), artwork, user); } diff --git a/src/main/java/com/yapp/artie/domain/archive/service/CategoryService.java b/src/main/java/com/yapp/artie/domain/archive/service/CategoryService.java index 00a4ccc9..1715a957 100644 --- a/src/main/java/com/yapp/artie/domain/archive/service/CategoryService.java +++ b/src/main/java/com/yapp/artie/domain/archive/service/CategoryService.java @@ -11,7 +11,7 @@ import com.yapp.artie.domain.archive.exception.NotOwnerOfCategoryException; import com.yapp.artie.domain.archive.repository.CategoryRepository; import com.yapp.artie.domain.archive.repository.ExhibitRepository; -import com.yapp.artie.domain.user.domain.User; +import com.yapp.artie.domain.user.domain.UserJpaEntity; import com.yapp.artie.domain.user.service.UserUseCase; import java.util.List; import java.util.Optional; @@ -33,14 +33,14 @@ public class CategoryService { public Category findCategoryWithUser(Long id, Long userId) { Category category = Optional.ofNullable(categoryRepository.findCategoryEntityGraphById(id)) .orElseThrow(CategoryNotFoundException::new); - User user = findUser(userId); + UserJpaEntity user = findUser(userId); validateOwnedByUser(category, user); return category; } public List categoriesOf(Long userId) { - User user = findUser(userId); + UserJpaEntity user = findUser(userId); List categories = categoryRepository.findCategoriesByUserOrderBySequence(user) .stream().map(this::buildCategoryDto).collect( Collectors.toList()); @@ -51,7 +51,7 @@ public List categoriesOf(Long userId) { @Transactional public Long create(CreateCategoryRequestDto createCategoryRequestDto, Long userId) { - User user = findUser(userId); + UserJpaEntity user = findUser(userId); String name = createCategoryRequestDto.getName(); validateDuplicateCategory(name, user); @@ -60,7 +60,7 @@ public Long create(CreateCategoryRequestDto createCategoryRequestDto, Long userI @Transactional public void delete(Long id, Long userId) { - User user = findUser(userId); + UserJpaEntity user = findUser(userId); Category category = categoryRepository.findCategoryEntityGraphById(id); validateValidPair(user, category); @@ -70,7 +70,7 @@ public void delete(Long id, Long userId) { @Transactional public void update(UpdateCategoryRequestDto updateCategoryRequestDto, Long id, Long userId) { - User user = findUser(userId); + UserJpaEntity user = findUser(userId); Category category = categoryRepository.findCategoryEntityGraphById(id); validateValidPair(user, category); @@ -79,7 +79,7 @@ public void update(UpdateCategoryRequestDto updateCategoryRequestDto, Long id, L @Transactional public void shuffle(List changeCategorySequenceDtos, Long userId) { - User user = findUser(userId); + UserJpaEntity user = findUser(userId); List categories = categoryRepository.findCategoriesByUserOrderBySequence(user); validateChangeCategoriesLengthWithOriginal(changeCategorySequenceDtos, categories); @@ -92,7 +92,7 @@ public void shuffle(List changeCategorySequenceDtos, Long userId) { } } - private Category createCategory(String name, User user) { + private Category createCategory(String name, UserJpaEntity user) { int sequence = getSequence(user); validateExceedLimitCategoryCount(sequence); @@ -101,11 +101,11 @@ private Category createCategory(String name, User user) { return category; } - private User findUser(Long userId) { + private UserJpaEntity findUser(Long userId) { return userService.findById(userId); } - private int getSequence(User user) { + private int getSequence(UserJpaEntity user) { return categoryRepository.countCategoriesByUser(user); } @@ -115,7 +115,7 @@ private void validateExistAtLeastOneCategory(List categories) { } } - private void validateDuplicateCategory(String name, User user) { + private void validateDuplicateCategory(String name, UserJpaEntity user) { List categories = categoryRepository.findCategoryDto(user); long count = categories.stream() .filter(categoryDto -> categoryDto.getName().equals(name)) @@ -126,7 +126,7 @@ private void validateDuplicateCategory(String name, User user) { } } - private void validateValidPair(User user, Category category) { + private void validateValidPair(UserJpaEntity user, Category category) { validateCategoryFound(category); validateOwnedByUser(category, user); } @@ -137,7 +137,7 @@ private void validateCategoryFound(Category category) { } } - private void validateOwnedByUser(Category category, User user) { + private void validateOwnedByUser(Category category, UserJpaEntity user) { if (!category.ownedBy(user)) { throw new NotOwnerOfCategoryException(); } diff --git a/src/main/java/com/yapp/artie/domain/archive/service/ExhibitService.java b/src/main/java/com/yapp/artie/domain/archive/service/ExhibitService.java index e2f9d494..d0cf359a 100644 --- a/src/main/java/com/yapp/artie/domain/archive/service/ExhibitService.java +++ b/src/main/java/com/yapp/artie/domain/archive/service/ExhibitService.java @@ -16,7 +16,7 @@ import com.yapp.artie.domain.archive.exception.NotOwnerOfExhibitException; import com.yapp.artie.domain.archive.repository.ArtworkRepository; import com.yapp.artie.domain.archive.repository.ExhibitRepository; -import com.yapp.artie.domain.user.domain.User; +import com.yapp.artie.domain.user.domain.UserJpaEntity; import com.yapp.artie.domain.user.service.UserUseCase; import com.yapp.artie.global.util.DateUtils; import com.yapp.artie.global.util.S3Utils; @@ -192,7 +192,7 @@ public void updatePostPinType(Long userId, Long exhibitId, boolean categoryType, } } - private User findUser(Long userId) { + private UserJpaEntity findUser(Long userId) { return userService.findById(userId); } @@ -202,7 +202,7 @@ private String getMainImageUri(Exhibit exhibit) { } // TODO : public이 아니도록 수정 - public void validateOwnedByUser(User user, Exhibit exhibit) { + public void validateOwnedByUser(UserJpaEntity user, Exhibit exhibit) { if (!exhibit.ownedBy(user)) { throw new NotOwnerOfExhibitException(); } diff --git a/src/main/java/com/yapp/artie/domain/archive/service/TagService.java b/src/main/java/com/yapp/artie/domain/archive/service/TagService.java index 08e5e325..d9eb6919 100644 --- a/src/main/java/com/yapp/artie/domain/archive/service/TagService.java +++ b/src/main/java/com/yapp/artie/domain/archive/service/TagService.java @@ -3,7 +3,7 @@ import com.yapp.artie.domain.archive.domain.artwork.Artwork; import com.yapp.artie.domain.archive.domain.tag.Tag; import com.yapp.artie.domain.archive.repository.TagRepository; -import com.yapp.artie.domain.user.domain.User; +import com.yapp.artie.domain.user.domain.UserJpaEntity; import java.util.List; import java.util.concurrent.atomic.AtomicInteger; import java.util.stream.Collectors; @@ -25,7 +25,7 @@ public List getTagNames(Artwork artwork) { @Transactional public void addTagsToArtwork(List tagNames, Artwork artwork, - User user) { + UserJpaEntity user) { AtomicInteger seq = new AtomicInteger(1); List tags = tagNames.stream() .map(tagName -> new Tag(user, artwork, seq.getAndIncrement(), tagName)) diff --git a/src/main/java/com/yapp/artie/domain/question/domain/Question.java b/src/main/java/com/yapp/artie/domain/question/domain/Question.java index 91eb9060..7b93b941 100644 --- a/src/main/java/com/yapp/artie/domain/question/domain/Question.java +++ b/src/main/java/com/yapp/artie/domain/question/domain/Question.java @@ -1,6 +1,6 @@ package com.yapp.artie.domain.question.domain; -import com.yapp.artie.domain.user.domain.User; +import com.yapp.artie.domain.user.domain.UserJpaEntity; import com.yapp.artie.global.common.BaseEntity; import javax.persistence.Column; import javax.persistence.Entity; @@ -25,7 +25,7 @@ public class Question extends BaseEntity { @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "user_id") - private User user; + private UserJpaEntity user; @Column(nullable = false) private String title; diff --git a/src/main/java/com/yapp/artie/domain/user/application/service/RegisterUserService.java b/src/main/java/com/yapp/artie/domain/user/application/service/RegisterUserService.java index 4b2affde..3fa6c998 100644 --- a/src/main/java/com/yapp/artie/domain/user/application/service/RegisterUserService.java +++ b/src/main/java/com/yapp/artie/domain/user/application/service/RegisterUserService.java @@ -1,7 +1,7 @@ package com.yapp.artie.domain.user.application.service; import com.yapp.artie.domain.user.application.port.in.RegisterUserUseCase; -import com.yapp.artie.domain.user.domain.User; +import com.yapp.artie.domain.user.domain.UserJpaEntity; import com.yapp.artie.domain.user.dto.response.CreateUserResponseDto; import com.yapp.artie.domain.user.repository.UserRepository; import com.yapp.artie.global.annotation.UseCase; @@ -20,10 +20,10 @@ public class RegisterUserService implements RegisterUserUseCase { public CreateUserResponseDto register(final String uid, final String username, final String picture) { - final Optional user = userRepository.findByUid(uid); + final Optional user = userRepository.findByUid(uid); return user.map(entity -> new CreateUserResponseDto(entity.getId())) .orElseGet(() -> new CreateUserResponseDto(userRepository - .save(User.create(uid, username, picture)) + .save(UserJpaEntity.create(uid, username, picture)) .getId())); } } \ No newline at end of file diff --git a/src/main/java/com/yapp/artie/domain/user/application/service/RenameUserService.java b/src/main/java/com/yapp/artie/domain/user/application/service/RenameUserService.java index e1fe2c59..6a444f9d 100644 --- a/src/main/java/com/yapp/artie/domain/user/application/service/RenameUserService.java +++ b/src/main/java/com/yapp/artie/domain/user/application/service/RenameUserService.java @@ -1,7 +1,7 @@ package com.yapp.artie.domain.user.application.service; import com.yapp.artie.domain.user.application.port.in.RenameUserUseCase; -import com.yapp.artie.domain.user.domain.User; +import com.yapp.artie.domain.user.domain.UserJpaEntity; import com.yapp.artie.domain.user.exception.UserNotFoundException; import com.yapp.artie.domain.user.repository.UserRepository; import com.yapp.artie.global.annotation.UseCase; @@ -17,7 +17,7 @@ public class RenameUserService implements RenameUserUseCase { @Override public void rename(Long userId, String name) { - User user = userRepository.findById(userId) + UserJpaEntity user = userRepository.findById(userId) .orElseThrow(UserNotFoundException::new); user.setName(name); diff --git a/src/main/java/com/yapp/artie/domain/user/application/service/UserWithdrawalService.java b/src/main/java/com/yapp/artie/domain/user/application/service/UserWithdrawalService.java index f0060879..c0f57301 100644 --- a/src/main/java/com/yapp/artie/domain/user/application/service/UserWithdrawalService.java +++ b/src/main/java/com/yapp/artie/domain/user/application/service/UserWithdrawalService.java @@ -2,7 +2,7 @@ import com.yapp.artie.domain.archive.repository.CategoryRepository; import com.yapp.artie.domain.user.application.port.in.UserWithdrawalUseCase; -import com.yapp.artie.domain.user.domain.User; +import com.yapp.artie.domain.user.domain.UserJpaEntity; import com.yapp.artie.domain.user.exception.UserNotFoundException; import com.yapp.artie.domain.user.repository.UserRepository; import com.yapp.artie.global.annotation.UseCase; @@ -21,7 +21,7 @@ public class UserWithdrawalService implements UserWithdrawalUseCase { @Override public void delete(Long id) { - User user = userRepository.findById(id) + UserJpaEntity user = userRepository.findById(id) .orElseThrow(UserNotFoundException::new); jwtService.withdraw(user.getUid()); diff --git a/src/main/java/com/yapp/artie/domain/user/controller/UserController.java b/src/main/java/com/yapp/artie/domain/user/controller/UserController.java index f5d24cd7..eea6a939 100644 --- a/src/main/java/com/yapp/artie/domain/user/controller/UserController.java +++ b/src/main/java/com/yapp/artie/domain/user/controller/UserController.java @@ -1,7 +1,7 @@ package com.yapp.artie.domain.user.controller; import com.google.firebase.auth.FirebaseToken; -import com.yapp.artie.domain.user.domain.User; +import com.yapp.artie.domain.user.domain.UserJpaEntity; import com.yapp.artie.domain.user.dto.response.CreateUserResponseDto; import com.yapp.artie.domain.user.dto.response.UserThumbnailResponseDto; import com.yapp.artie.domain.user.service.UserUseCase; @@ -67,13 +67,13 @@ public ResponseEntity register( @ApiResponse( responseCode = "200", description = "유저가 성공적으로 조회됨", - content = @Content(mediaType = "application/json", schema = @Schema(implementation = User.class))), + content = @Content(mediaType = "application/json", schema = @Schema(implementation = UserJpaEntity.class))), }) @GetMapping("/me") - public ResponseEntity me(Authentication authentication) { + public ResponseEntity me(Authentication authentication) { Long userId = getUserId(authentication); - User user = userService.findById(userId); + UserJpaEntity user = userService.findById(userId); return ResponseEntity.ok().body(user); } @@ -98,7 +98,7 @@ public ResponseEntity deleteUser(Authentication authentica @ApiResponse( responseCode = "200", description = "썸네일이 성공적으로 조회됨", - content = @Content(mediaType = "application/json", schema = @Schema(implementation = User.class))), + content = @Content(mediaType = "application/json", schema = @Schema(implementation = UserJpaEntity.class))), }) @GetMapping("/my-page") public ResponseEntity my(Authentication authentication) { diff --git a/src/main/java/com/yapp/artie/domain/user/domain/User.java b/src/main/java/com/yapp/artie/domain/user/domain/UserJpaEntity.java similarity index 71% rename from src/main/java/com/yapp/artie/domain/user/domain/User.java rename to src/main/java/com/yapp/artie/domain/user/domain/UserJpaEntity.java index e01cd666..564bcb4c 100644 --- a/src/main/java/com/yapp/artie/domain/user/domain/User.java +++ b/src/main/java/com/yapp/artie/domain/user/domain/UserJpaEntity.java @@ -15,7 +15,7 @@ @Getter @Setter @NoArgsConstructor -public class User extends BaseEntity { +public class UserJpaEntity extends BaseEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @@ -28,16 +28,16 @@ public class User extends BaseEntity { private String profileImage; - public static User create(String uid, String name, String picture) { - User user = new User(); + public static UserJpaEntity create(String uid, String name, String picture) { + UserJpaEntity user = new UserJpaEntity(); user.setUid(uid); user.setName(name); user.setProfileImage(picture); return user; } - public static User create(Long id, String uid, String name, String profileImage) { - User user = new User(); + public static UserJpaEntity create(Long id, String uid, String name, String profileImage) { + UserJpaEntity user = new UserJpaEntity(); user.id = id; user.uid = uid; user.name = name; diff --git a/src/main/java/com/yapp/artie/domain/user/repository/UserRepository.java b/src/main/java/com/yapp/artie/domain/user/repository/UserRepository.java index 4bc94ca1..63e630d9 100644 --- a/src/main/java/com/yapp/artie/domain/user/repository/UserRepository.java +++ b/src/main/java/com/yapp/artie/domain/user/repository/UserRepository.java @@ -1,12 +1,12 @@ package com.yapp.artie.domain.user.repository; -import com.yapp.artie.domain.user.domain.User; +import com.yapp.artie.domain.user.domain.UserJpaEntity; import java.util.Optional; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; @Repository -public interface UserRepository extends JpaRepository { +public interface UserRepository extends JpaRepository { - Optional findByUid(String uid); + Optional findByUid(String uid); } diff --git a/src/main/java/com/yapp/artie/domain/user/service/UserServiceImpl.java b/src/main/java/com/yapp/artie/domain/user/service/UserServiceImpl.java index dfe318d3..1a066cd3 100644 --- a/src/main/java/com/yapp/artie/domain/user/service/UserServiceImpl.java +++ b/src/main/java/com/yapp/artie/domain/user/service/UserServiceImpl.java @@ -5,7 +5,7 @@ import com.yapp.artie.domain.user.application.service.RegisterUserService; import com.yapp.artie.domain.user.application.service.RenameUserService; import com.yapp.artie.domain.user.application.service.UserWithdrawalService; -import com.yapp.artie.domain.user.domain.User; +import com.yapp.artie.domain.user.domain.UserJpaEntity; import com.yapp.artie.domain.user.dto.response.CreateUserResponseDto; import com.yapp.artie.domain.user.exception.UserNotFoundException; import com.yapp.artie.domain.user.repository.UserRepository; @@ -27,12 +27,12 @@ public class UserServiceImpl implements UserDetailsService, UserUseCase { private final UserWithdrawalService userWithdrawalService; @Override - public Optional findByUid(String uid) { + public Optional findByUid(String uid) { return userRepository.findByUid(uid); } @Override - public User findById(Long id) { + public UserJpaEntity findById(Long id) { return userRepository.findById(id).orElseThrow(UserNotFoundException::new); } @@ -48,7 +48,7 @@ public void delete(Long id) { @Override public UserDetails loadUserByUsername(String username) { - User user = userRepository.findByUid(username) + UserJpaEntity user = userRepository.findByUid(username) .orElseThrow(UserNotFoundException::new); return builder() diff --git a/src/main/java/com/yapp/artie/domain/user/service/UserThumbnailService.java b/src/main/java/com/yapp/artie/domain/user/service/UserThumbnailService.java index b9b72eb3..8ecdcb8d 100644 --- a/src/main/java/com/yapp/artie/domain/user/service/UserThumbnailService.java +++ b/src/main/java/com/yapp/artie/domain/user/service/UserThumbnailService.java @@ -2,7 +2,7 @@ import com.yapp.artie.domain.archive.service.ExhibitService; -import com.yapp.artie.domain.user.domain.User; +import com.yapp.artie.domain.user.domain.UserJpaEntity; import com.yapp.artie.domain.user.dto.response.UserThumbnailResponseDto; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; @@ -17,7 +17,7 @@ public class UserThumbnailService { private final ExhibitService exhibitService; public UserThumbnailResponseDto getUserThumbnail(Long id) { - User user = userService.findById(id); + UserJpaEntity user = userService.findById(id); int exhibitCount = exhibitService.getExhibitCount(user.getId()); return new UserThumbnailResponseDto(user.getName(), exhibitCount); } diff --git a/src/main/java/com/yapp/artie/domain/user/service/UserUseCase.java b/src/main/java/com/yapp/artie/domain/user/service/UserUseCase.java index 82717e60..608b6268 100644 --- a/src/main/java/com/yapp/artie/domain/user/service/UserUseCase.java +++ b/src/main/java/com/yapp/artie/domain/user/service/UserUseCase.java @@ -1,16 +1,15 @@ package com.yapp.artie.domain.user.service; -import com.yapp.artie.domain.user.domain.User; +import com.yapp.artie.domain.user.domain.UserJpaEntity; import com.yapp.artie.domain.user.dto.response.CreateUserResponseDto; import java.util.Optional; import org.springframework.security.core.userdetails.UserDetails; -import org.springframework.transaction.annotation.Transactional; public interface UserUseCase { - Optional findByUid(String uid); + Optional findByUid(String uid); - User findById(Long id); + UserJpaEntity findById(Long id); CreateUserResponseDto register(String uid, String username, String picture); diff --git a/src/test/java/com/yapp/artie/common/UserTestData.java b/src/test/java/com/yapp/artie/common/UserTestData.java index b72c93e1..6fb22ce8 100644 --- a/src/test/java/com/yapp/artie/common/UserTestData.java +++ b/src/test/java/com/yapp/artie/common/UserTestData.java @@ -1,6 +1,6 @@ package com.yapp.artie.common; -import com.yapp.artie.domain.user.domain.User; +import com.yapp.artie.domain.user.domain.UserJpaEntity; public class UserTestData { @@ -43,8 +43,8 @@ public UserBuilder withProfileImage(String profileImage) { return this; } - public User build() { - return User.create( + public UserJpaEntity build() { + return UserJpaEntity.create( this.id, this.uid, this.name, diff --git a/src/test/java/com/yapp/artie/domain/archive/repository/CategoryRepositoryTest.java b/src/test/java/com/yapp/artie/domain/archive/repository/CategoryRepositoryTest.java index 7ee600ab..657498e0 100644 --- a/src/test/java/com/yapp/artie/domain/archive/repository/CategoryRepositoryTest.java +++ b/src/test/java/com/yapp/artie/domain/archive/repository/CategoryRepositoryTest.java @@ -6,7 +6,7 @@ import com.yapp.artie.domain.archive.domain.category.Category; import com.yapp.artie.domain.archive.domain.exhibit.Exhibit; import com.yapp.artie.domain.archive.domain.tag.Tag; -import com.yapp.artie.domain.user.domain.User; +import com.yapp.artie.domain.user.domain.UserJpaEntity; import com.yapp.artie.domain.user.domain.UserTest; import com.yapp.artie.domain.user.repository.UserRepository; import java.time.LocalDate; @@ -43,7 +43,7 @@ public class CategoryRepositoryTest { @Test @DisplayName("유저 기반 카테고리 삭제 - 카테고리가 삭제되면 해당하는 전시, 작품, 태그도 삭제되어야합니다") void deleteAllByUser() { - User user = userRepository.save(UserTest.TEST_SAVED_USER); + UserJpaEntity user = userRepository.save(UserTest.TEST_SAVED_USER); Category category = categoryRepository.save(Category.create(user, "category-name", 1)); Exhibit exhibit = exhibitRepository.save( Exhibit.create("exhibit-name", LocalDate.now(), category, user, "exhibit-link")); diff --git a/src/test/java/com/yapp/artie/domain/archive/service/ArtworkServiceTest.java b/src/test/java/com/yapp/artie/domain/archive/service/ArtworkServiceTest.java index eb7ab103..5ed450af 100644 --- a/src/test/java/com/yapp/artie/domain/archive/service/ArtworkServiceTest.java +++ b/src/test/java/com/yapp/artie/domain/archive/service/ArtworkServiceTest.java @@ -10,7 +10,7 @@ import com.yapp.artie.domain.archive.repository.ArtworkRepository; import com.yapp.artie.domain.archive.repository.CategoryRepository; import com.yapp.artie.domain.archive.repository.ExhibitRepository; -import com.yapp.artie.domain.user.domain.User; +import com.yapp.artie.domain.user.domain.UserJpaEntity; import java.time.LocalDate; import java.util.ArrayList; import java.util.Arrays; @@ -45,8 +45,8 @@ class ArtworkServiceTest { @Autowired ArtworkService artworkService; - User createUser(String name, String uid) { - User user = new User(); + UserJpaEntity createUser(String name, String uid) { + UserJpaEntity user = new UserJpaEntity(); user.setName(name); user.setUid(uid); em.persist(user); @@ -58,7 +58,7 @@ User createUser(String name, String uid) { @Test @DisplayName("정상 작품 등록") public void create_정상_작품_등록() throws Exception { - User user = createUser("user", "tu"); + UserJpaEntity user = createUser("user", "tu"); Category defaultCategory = categoryRepository.findCategoryEntityGraphById(user.getId()); Exhibit exhibit = exhibitRepository.save( Exhibit.create("test", LocalDate.now(), defaultCategory, user, null)); @@ -82,7 +82,7 @@ User createUser(String name, String uid) { @Test @DisplayName("태그 없이도 정상 작품 등록") public void create_태그_없이_등록() throws Exception { - User user = createUser("user", "tu"); + UserJpaEntity user = createUser("user", "tu"); Category defaultCategory = categoryRepository.findCategoryEntityGraphById(user.getId()); Exhibit exhibit = exhibitRepository.save( Exhibit.create("test", LocalDate.now(), defaultCategory, user, null)); @@ -104,7 +104,7 @@ User createUser(String name, String uid) { @Test @DisplayName("빌더로 작품 등록") public void create_빌더로_등록() throws Exception { - User user = createUser("user", "tu"); + UserJpaEntity user = createUser("user", "tu"); Category defaultCategory = categoryRepository.findCategoryEntityGraphById(user.getId()); Exhibit exhibit = exhibitRepository.save( Exhibit.create("test", LocalDate.now(), defaultCategory, user, null)); @@ -131,7 +131,7 @@ User createUser(String name, String uid) { @Test @DisplayName("전시에 등록되는 첫 작품은 대표 작품으로 설정") public void create_첫_작품_대표_작품_설정() { - User user = createUser("user", "tu"); + UserJpaEntity user = createUser("user", "tu"); Category defaultCategory = categoryRepository.findCategoryEntityGraphById(user.getId()); Exhibit exhibit = exhibitRepository.save( Exhibit.create("test", LocalDate.now(), defaultCategory, user, null)); @@ -160,7 +160,7 @@ User createUser(String name, String uid) { @Test @DisplayName("정상 다중 작품 등록") public void createBatch_정상_다중_작품_등록() { - User user = createUser("user", "tu"); + UserJpaEntity user = createUser("user", "tu"); Category defaultCategory = categoryRepository.findCategoryEntityGraphById(user.getId()); Exhibit exhibit = exhibitRepository.save( Exhibit.create("test", LocalDate.now(), defaultCategory, user, null)); @@ -185,7 +185,7 @@ User createUser(String name, String uid) { @Test @DisplayName("대표 작품을 삭제하였을 경우, 자동으로 다른 대표 작품을 설정해야합니다") public void delete_대표_작품_삭제() { - User user = createUser("user", "tu"); + UserJpaEntity user = createUser("user", "tu"); Category defaultCategory = categoryRepository.findCategoryEntityGraphById(user.getId()); Exhibit exhibit = exhibitRepository.save( Exhibit.create("test", LocalDate.now(), defaultCategory, user, null)); diff --git a/src/test/java/com/yapp/artie/domain/archive/service/CategoryServiceTest.java b/src/test/java/com/yapp/artie/domain/archive/service/CategoryServiceTest.java index d6cbe3ab..d1686f5c 100644 --- a/src/test/java/com/yapp/artie/domain/archive/service/CategoryServiceTest.java +++ b/src/test/java/com/yapp/artie/domain/archive/service/CategoryServiceTest.java @@ -19,7 +19,7 @@ import com.yapp.artie.domain.archive.repository.CategoryRepository; import com.yapp.artie.domain.archive.repository.ExhibitRepository; import com.yapp.artie.domain.archive.repository.TagRepository; -import com.yapp.artie.domain.user.domain.User; +import com.yapp.artie.domain.user.domain.UserJpaEntity; import com.yapp.artie.domain.user.repository.UserRepository; import java.time.LocalDate; import java.util.ArrayList; @@ -72,24 +72,24 @@ void setUp() { } private void createUser(String name, String uid) { - User user = new User(); + UserJpaEntity user = new UserJpaEntity(); user.setName(name); user.setUid(uid); em.persist(user); } - private User findUser(String uid) { + private UserJpaEntity findUser(String uid) { return userRepository.findByUid(uid).get(); } - private void createCategoryBy(User user, int count) { + private void createCategoryBy(UserJpaEntity user, int count) { for (int sequence = 0; sequence < count; sequence++) { createCategory(user, Integer.toString(sequence)); } } - private Long createCategory(User user, String name) { + private Long createCategory(UserJpaEntity user, String name) { return categoryService.create(new CreateCategoryRequestDto(name), user.getId()); } @@ -106,7 +106,7 @@ private Category findCategory(Long id) { @Test public void findCategoryWithUser_카테고리와_함께_유저_프록시도_초기화_해야한다() throws Exception { - User user = findUser("1"); + UserJpaEntity user = findUser("1"); Long created = createCategory(user, "test"); Category categoryWithUser = categoryService.findCategoryWithUser(created, user.getId()); @@ -115,7 +115,7 @@ private Category findCategory(Long id) { @Test public void categoriesOf_카테고리_목록_정상_조회() { - User user = findUser("1"); + UserJpaEntity user = findUser("1"); Category category1 = categoryRepository.save(Category.create(user, "test-category-1", 1)); Category category2 = categoryRepository.save(Category.create(user, "test-category-2", 2)); exhibitRepository.save( @@ -169,7 +169,7 @@ private Category findCategory(Long id) { @Test public void delete_카테고리를_삭제한다() throws Exception { - User user = findUser("1"); + UserJpaEntity user = findUser("1"); Long created = createCategory(user, "test"); categoryService.delete(created, user.getId()); assertThat(Optional.ofNullable(findCategory(created))).isNotPresent(); @@ -177,7 +177,7 @@ private Category findCategory(Long id) { @Test public void delete_카테고리를_삭제하면_전시데이터도_삭제된다() throws Exception { - User user = findUser("1"); + UserJpaEntity user = findUser("1"); Long created = createCategory(user, "test"); Exhibit exhibit = exhibitRepository.save( Exhibit.create("test", LocalDate.now(), findCategory(created), user, "link")); @@ -203,8 +203,8 @@ private Category findCategory(Long id) { @Test public void delete_다른사람의_카테고리를_삭제하려_시도할_경우_예외를_발생한다() throws Exception { - User user1 = findUser("1"); - User user2 = findUser("2"); + UserJpaEntity user1 = findUser("1"); + UserJpaEntity user2 = findUser("2"); Long created = createCategory(user2, "test"); assertThatThrownBy(() -> { @@ -214,7 +214,7 @@ private Category findCategory(Long id) { @Test public void update_카테고리를_수정한다() throws Exception { - User user = findUser("1"); + UserJpaEntity user = findUser("1"); Long created = createCategory(user, "test"); categoryService.update(new UpdateCategoryRequestDto("rename"), created, user.getId()); assertThat(findCategory(created).getName()).isEqualTo("rename"); @@ -222,8 +222,8 @@ private Category findCategory(Long id) { @Test public void update_다른사람의_카테고리를_수정하려_시도할_경우_예외를_발생한다() throws Exception { - User user1 = findUser("1"); - User user2 = findUser("2"); + UserJpaEntity user1 = findUser("1"); + UserJpaEntity user2 = findUser("2"); Long created = createCategory(user2, "test"); assertThatThrownBy(() -> { @@ -233,7 +233,7 @@ private Category findCategory(Long id) { @Test public void sequence_카테고리_생성_시_시퀀스가_오름차순으로_생성된다() throws Exception { - User user = findUser("1"); + UserJpaEntity user = findUser("1"); createCategoryBy(user, 5); List categories = categoryService.categoriesOf(user.getId()); for (int expected = 0; expected < categories.size(); expected++) { @@ -245,7 +245,7 @@ private Category findCategory(Long id) { @ParameterizedTest(name = "[시퀀스 벌크성 업데이트 테스트 #{index}] => {0}번 카테고리가 삭제될 경우") @ValueSource(ints = {1, 2, 3, 4, 5}) public void sequence_카테고리_삭제_시_시퀀스가_누락된_숫자없이_오름차순으로_정렬된다(int target) throws Exception { - User user = findUser("1"); + UserJpaEntity user = findUser("1"); createCategoryBy(user, 5); List categories = categoryService.categoriesOf(user.getId()); @@ -268,7 +268,7 @@ private Category findCategory(Long id) { .mapToInt(Integer::parseInt) .boxed() .collect(Collectors.toList()); - User user = findUser("1"); + UserJpaEntity user = findUser("1"); createCategoryBy(user, expected.length()); //when @@ -289,7 +289,7 @@ private Category findCategory(Long id) { @Test public void shuffle_주어진_리스트가_원본_카테고리의_수와_같지않으면_예외를_발생한다() throws Exception { - User user = findUser("1"); + UserJpaEntity user = findUser("1"); createCategoryBy(user, 5); assertThatThrownBy(() -> { diff --git a/src/test/java/com/yapp/artie/domain/archive/service/ExhibitServiceTest.java b/src/test/java/com/yapp/artie/domain/archive/service/ExhibitServiceTest.java index d31c50d6..5af3d4b2 100644 --- a/src/test/java/com/yapp/artie/domain/archive/service/ExhibitServiceTest.java +++ b/src/test/java/com/yapp/artie/domain/archive/service/ExhibitServiceTest.java @@ -24,7 +24,7 @@ import com.yapp.artie.domain.archive.repository.CategoryRepository; import com.yapp.artie.domain.archive.repository.ExhibitRepository; import com.yapp.artie.domain.archive.repository.TagRepository; -import com.yapp.artie.domain.user.domain.User; +import com.yapp.artie.domain.user.domain.UserJpaEntity; import com.yapp.artie.domain.user.repository.UserRepository; import java.time.LocalDate; import java.time.LocalDateTime; @@ -75,8 +75,8 @@ class ExhibitServiceTest { @Autowired TagRepository tagRepository; - User createUser(String name, String uid) { - User user = new User(); + UserJpaEntity createUser(String name, String uid) { + UserJpaEntity user = new UserJpaEntity(); user.setName(name); user.setUid(uid); em.persist(user); @@ -87,7 +87,7 @@ User createUser(String name, String uid) { @Test public void getExhibitCount_전시의_개수를_반환한다() throws Exception { - User user = createUser("user", "tu1"); + UserJpaEntity user = createUser("user", "tu1"); CategoryDto defaultCategory = categoryService.categoriesOf(user.getId()).get(0); for (int i = 0; i < 5; i++) { CreateExhibitRequestDto exhibitRequestDto = new CreateExhibitRequestDto("test", @@ -102,7 +102,7 @@ User createUser(String name, String uid) { @Test public void create_전시를_생성한다() throws Exception { - User user = createUser("user", "tu1"); + UserJpaEntity user = createUser("user", "tu1"); CategoryDto defaultCategory = categoryService.categoriesOf(user.getId()).get(0); CreateExhibitRequestDto exhibitRequestDto = new CreateExhibitRequestDto("test", defaultCategory.getId(), @@ -116,8 +116,8 @@ User createUser(String name, String uid) { @Test public void create_다른_사용자의_카테고리에_전시를_생성하려고_하는_경우_예외를_발생한다() throws Exception { - User user = createUser("user", "tu"); - User userAnother = createUser("userAnother", "tu2"); + UserJpaEntity user = createUser("user", "tu"); + UserJpaEntity userAnother = createUser("userAnother", "tu2"); CategoryDto defaultCategory = categoryService.categoriesOf(user.getId()).get(0); CreateExhibitRequestDto exhibitRequestDto = new CreateExhibitRequestDto("test", defaultCategory.getId(), @@ -130,7 +130,7 @@ User createUser(String name, String uid) { @Test public void publish_임시저장된_전시를_영구저장한다() throws Exception { - User user = createUser("user", "tu"); + UserJpaEntity user = createUser("user", "tu"); CategoryDto defaultCategory = categoryService.categoriesOf(user.getId()).get(0); CreateExhibitRequestDto exhibitRequestDto = new CreateExhibitRequestDto("test", defaultCategory.getId(), @@ -145,7 +145,7 @@ User createUser(String name, String uid) { @Test public void publish_이미_발행된_전시를_영구_저장_요청하면_예외를_발생한다() throws Exception { - User user = createUser("user", "tu"); + UserJpaEntity user = createUser("user", "tu"); CategoryDto defaultCategory = categoryService.categoriesOf(user.getId()).get(0); CreateExhibitRequestDto exhibitRequestDto = new CreateExhibitRequestDto("test", defaultCategory.getId(), @@ -162,7 +162,7 @@ User createUser(String name, String uid) { @Test public void update_전시를_수정한다() throws Exception { - User user = createUser("user", "tu"); + UserJpaEntity user = createUser("user", "tu"); CategoryDto defaultCategory = categoryService.categoriesOf(user.getId()).get(0); CreateExhibitRequestDto exhibitRequestDto = new CreateExhibitRequestDto("test", defaultCategory.getId(), @@ -187,7 +187,7 @@ User createUser(String name, String uid) { @Test public void delete_전시를_삭제한다() throws Exception { - User user = createUser("user", "tu"); + UserJpaEntity user = createUser("user", "tu"); CategoryDto defaultCategory = categoryService.categoriesOf(user.getId()).get(0); CreateExhibitRequestDto exhibitRequestDto = new CreateExhibitRequestDto("test", defaultCategory.getId(), @@ -209,7 +209,7 @@ User createUser(String name, String uid) { @Test public void getExhibitByMonthly_월_별로_전시를_조회한다() throws Exception { - User user = createUser("user", "tu"); + UserJpaEntity user = createUser("user", "tu"); Category defaultCategory = categoryRepository.findCategoryEntityGraphById(user.getId()); for (int i = 1; i <= 5; i++) { @@ -241,7 +241,7 @@ User createUser(String name, String uid) { @Test public void updatePostPinType_카테고리_상단_설정_CATEGORY_TO_NONE() { - User user = createUser("user", "tu"); + UserJpaEntity user = createUser("user", "tu"); CategoryDto defaultCategory = categoryService.categoriesOf(user.getId()).get(0); CreateExhibitRequestDto exhibitRequestDto = new CreateExhibitRequestDto("test", defaultCategory.getId(), @@ -262,7 +262,7 @@ User createUser(String name, String uid) { @Test public void updatePostPinType_전체기록_상단_설정_BOTH_TO_ALL() { - User user = createUser("user", "tu"); + UserJpaEntity user = createUser("user", "tu"); CategoryDto defaultCategory = categoryService.categoriesOf(user.getId()).get(0); CreateExhibitRequestDto exhibitRequestDto = new CreateExhibitRequestDto("test", defaultCategory.getId(), @@ -284,7 +284,7 @@ User createUser(String name, String uid) { @Test public void updatePostPinType_전체기록_상단_설정_CATEGORY_TO_BOTH() { - User user = createUser("user", "tu"); + UserJpaEntity user = createUser("user", "tu"); CategoryDto defaultCategory = categoryService.categoriesOf(user.getId()).get(0); CreateExhibitRequestDto exhibitRequestDto = new CreateExhibitRequestDto("test", defaultCategory.getId(), @@ -306,7 +306,7 @@ User createUser(String name, String uid) { @Test public void updatePostPinType_카테고리_상단_설정_해제() { - User user = createUser("user", "tu"); + UserJpaEntity user = createUser("user", "tu"); CategoryDto defaultCategory = categoryService.categoriesOf(user.getId()).get(0); CreateExhibitRequestDto exhibitRequestDto = new CreateExhibitRequestDto("test", defaultCategory.getId(), @@ -323,7 +323,7 @@ User createUser(String name, String uid) { @Test public void updatePostPinType_전체기록_상단_설정_해제() { - User user = createUser("user", "tu"); + UserJpaEntity user = createUser("user", "tu"); CategoryDto defaultCategory = categoryService.categoriesOf(user.getId()).get(0); CreateExhibitRequestDto exhibitRequestDto = new CreateExhibitRequestDto("test", defaultCategory.getId(), @@ -341,7 +341,7 @@ User createUser(String name, String uid) { @Test public void getExhibitByPage_상단고정포함_카테고리_전시목록() { - User user = createUser("user", "tu"); + UserJpaEntity user = createUser("user", "tu"); Category defaultCategory = categoryService.findCategoryWithUser( categoryService.categoriesOf(user.getId()).get(0).getId(), user.getId()); Exhibit exhibit = exhibitRepository.save( @@ -372,7 +372,7 @@ User createUser(String name, String uid) { @Test public void getExhibitByPage_상단고정포함_전체_전시목록() { - User user = createUser("user", "tu"); + UserJpaEntity user = createUser("user", "tu"); Category defaultCategory = categoryService.findCategoryWithUser( categoryService.categoriesOf(user.getId()).get(0).getId(), user.getId()); Exhibit exhibit = exhibitRepository.save( @@ -403,7 +403,7 @@ User createUser(String name, String uid) { @Test public void getExhibitThumbnailByCategory_카테고리별_전시목록은_상단고정이_반영되지_않아야힙니다() { - User user = createUser("user", "tu"); + UserJpaEntity user = createUser("user", "tu"); Category defaultCategory = categoryService.findCategoryWithUser( categoryService.categoriesOf(user.getId()).get(0).getId(), user.getId()); List imageUriList = new ArrayList<>(); @@ -440,7 +440,7 @@ User createUser(String name, String uid) { @Test public void getExhibitsByDate_특정_일자의_전시_목록_조회() throws Exception { - User user = createUser("user", "tu"); + UserJpaEntity user = createUser("user", "tu"); Category defaultCategory = categoryRepository.findCategoryEntityGraphById(user.getId()); for (int i = 1; i <= 2; i++) { diff --git a/src/test/java/com/yapp/artie/domain/user/application/service/RenameUserServiceTest.java b/src/test/java/com/yapp/artie/domain/user/application/service/RenameUserServiceTest.java index bf0c035d..3ee712de 100644 --- a/src/test/java/com/yapp/artie/domain/user/application/service/RenameUserServiceTest.java +++ b/src/test/java/com/yapp/artie/domain/user/application/service/RenameUserServiceTest.java @@ -6,7 +6,7 @@ import static org.mockito.ArgumentMatchers.any; import static org.mockito.BDDMockito.given; -import com.yapp.artie.domain.user.domain.User; +import com.yapp.artie.domain.user.domain.UserJpaEntity; import com.yapp.artie.domain.user.exception.UserNotFoundException; import com.yapp.artie.domain.user.repository.UserRepository; import java.util.Optional; @@ -27,7 +27,7 @@ class RenameUserServiceTest { @Test void rename_주어진_이름으로_사용자의_이름이_변경된다() { - User user = defaultUser().build(); + UserJpaEntity user = defaultUser().build(); givenUserByReference(user); String beforeName = userRepository @@ -43,7 +43,7 @@ class RenameUserServiceTest { } - private void givenUserByReference(User user) { + private void givenUserByReference(UserJpaEntity user) { given(userRepository.findById(any())) .willReturn(Optional.ofNullable(user)); } diff --git a/src/test/java/com/yapp/artie/domain/user/application/service/UserWithdrawalServiceTest.java b/src/test/java/com/yapp/artie/domain/user/application/service/UserWithdrawalServiceTest.java index 77331932..6ccc28b5 100644 --- a/src/test/java/com/yapp/artie/domain/user/application/service/UserWithdrawalServiceTest.java +++ b/src/test/java/com/yapp/artie/domain/user/application/service/UserWithdrawalServiceTest.java @@ -8,7 +8,7 @@ import static org.mockito.BDDMockito.then; import com.yapp.artie.domain.archive.repository.CategoryRepository; -import com.yapp.artie.domain.user.domain.User; +import com.yapp.artie.domain.user.domain.UserJpaEntity; import com.yapp.artie.domain.user.exception.UserNotFoundException; import com.yapp.artie.domain.user.repository.UserRepository; import com.yapp.artie.global.authentication.JwtService; @@ -51,7 +51,7 @@ class UserWithdrawalServiceTest { @Test void delete_데이터베이스에서_사용자를_삭제하도록_요청한다() { - User user = defaultUser().build(); + UserJpaEntity user = defaultUser().build(); givenUserByReference(user); userWithdrawalService.delete(1L); then(userRepository) @@ -59,7 +59,7 @@ class UserWithdrawalServiceTest { .delete(eq(user)); } - private void givenUserByReference(User user) { + private void givenUserByReference(UserJpaEntity user) { given(userRepository.findById(any())) .willReturn(Optional.ofNullable(user)); } diff --git a/src/test/java/com/yapp/artie/domain/user/controller/UserControllerTest.java b/src/test/java/com/yapp/artie/domain/user/controller/UserControllerTest.java index 3785f001..955e9c9d 100644 --- a/src/test/java/com/yapp/artie/domain/user/controller/UserControllerTest.java +++ b/src/test/java/com/yapp/artie/domain/user/controller/UserControllerTest.java @@ -16,7 +16,7 @@ import com.yapp.artie.domain.archive.repository.CategoryRepository; import com.yapp.artie.domain.archive.repository.ExhibitRepository; import com.yapp.artie.domain.archive.repository.TagRepository; -import com.yapp.artie.domain.user.domain.User; +import com.yapp.artie.domain.user.domain.UserJpaEntity; import com.yapp.artie.domain.user.domain.UserTest; import com.yapp.artie.domain.user.repository.UserRepository; import com.yapp.artie.global.authentication.JwtServiceImpl; @@ -54,7 +54,7 @@ class UserControllerTest extends BaseIntegrationTest { @Test @DisplayName("유저 삭제(탈퇴) API - 유저 데이터가 삭제되면 해당 유저의 카테고리, 전시, 작품, 태그 데이터가 함께 삭제되어야합니다.") public void deleteUser() throws Exception { - User user = userRepository.save(UserTest.TEST_SAVED_USER); + UserJpaEntity user = userRepository.save(UserTest.TEST_SAVED_USER); Category category = categoryRepository.save(Category.create(user, "category-name", 1)); Exhibit exhibit = exhibitRepository.save( Exhibit.create("exhibit-name", LocalDate.now(), category, user, "exhibit-link")); diff --git a/src/test/java/com/yapp/artie/domain/user/domain/UserTest.java b/src/test/java/com/yapp/artie/domain/user/domain/UserTest.java index 1d331b1c..31d9ac1d 100644 --- a/src/test/java/com/yapp/artie/domain/user/domain/UserTest.java +++ b/src/test/java/com/yapp/artie/domain/user/domain/UserTest.java @@ -5,7 +5,7 @@ @DisplayName("User 테스트") public class UserTest { - public static final User TEST_USER = User.create("test-uid", "test-name", "test-profile"); - public static final User TEST_SAVED_USER = User.create(1L, "test-uid", "test-name", + public static final UserJpaEntity TEST_USER = UserJpaEntity.create("test-uid", "test-name", "test-profile"); + public static final UserJpaEntity TEST_SAVED_USER = UserJpaEntity.create(1L, "test-uid", "test-name", "test-profile"); } \ No newline at end of file diff --git a/src/test/java/com/yapp/artie/domain/user/repository/UserRepositoryTest.java b/src/test/java/com/yapp/artie/domain/user/repository/UserRepositoryTest.java index c3947e92..9c969352 100644 --- a/src/test/java/com/yapp/artie/domain/user/repository/UserRepositoryTest.java +++ b/src/test/java/com/yapp/artie/domain/user/repository/UserRepositoryTest.java @@ -2,7 +2,7 @@ import static org.assertj.core.api.Assertions.assertThat; -import com.yapp.artie.domain.user.domain.User; +import com.yapp.artie.domain.user.domain.UserJpaEntity; import com.yapp.artie.domain.user.domain.UserTest; import javax.persistence.EntityManager; import org.junit.jupiter.api.DisplayName; @@ -25,7 +25,7 @@ public class UserRepositoryTest { @Test @DisplayName("유저 삭제") void delete() { - User user = userRepository.save(UserTest.TEST_SAVED_USER); + UserJpaEntity user = userRepository.save(UserTest.TEST_SAVED_USER); em.clear(); userRepository.delete(user); diff --git a/src/test/java/com/yapp/artie/domain/user/service/UserServiceTest.java b/src/test/java/com/yapp/artie/domain/user/service/UserServiceTest.java index a6a0af48..9a71ea56 100644 --- a/src/test/java/com/yapp/artie/domain/user/service/UserServiceTest.java +++ b/src/test/java/com/yapp/artie/domain/user/service/UserServiceTest.java @@ -2,12 +2,9 @@ import static org.assertj.core.api.AssertionsForClassTypes.assertThatThrownBy; import static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.anyLong; -import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.BDDMockito.given; -import com.yapp.artie.domain.user.application.service.RenameUserService; -import com.yapp.artie.domain.user.domain.User; +import com.yapp.artie.domain.user.domain.UserJpaEntity; import com.yapp.artie.domain.user.domain.UserTest; import com.yapp.artie.domain.user.exception.UserNotFoundException; import com.yapp.artie.domain.user.repository.UserRepository; @@ -38,7 +35,7 @@ class UserServiceTest { @Disabled @DisplayName("유저 닉네임(이름) 변경 테스트 - 존재하지 않는 userId로 조회시 예외처리") public void updateUserNameFailTest() throws Exception { - User user = UserTest.TEST_USER; + UserJpaEntity user = UserTest.TEST_USER; given(userRepository.findById(any())).willThrow(new UserNotFoundException()); assertThatThrownBy(() -> userService.updateUserName(user.getId(), "new-name")).isInstanceOf( diff --git a/src/test/java/com/yapp/artie/domain/user/service/UserThumbnailServiceTest.java b/src/test/java/com/yapp/artie/domain/user/service/UserThumbnailServiceTest.java index 5e3eb832..f9ded866 100644 --- a/src/test/java/com/yapp/artie/domain/user/service/UserThumbnailServiceTest.java +++ b/src/test/java/com/yapp/artie/domain/user/service/UserThumbnailServiceTest.java @@ -7,7 +7,7 @@ import com.yapp.artie.domain.archive.dto.exhibit.CreateExhibitRequestDto; import com.yapp.artie.domain.archive.service.CategoryService; import com.yapp.artie.domain.archive.service.ExhibitService; -import com.yapp.artie.domain.user.domain.User; +import com.yapp.artie.domain.user.domain.UserJpaEntity; import com.yapp.artie.domain.user.dto.response.UserThumbnailResponseDto; import java.time.LocalDate; import javax.persistence.EntityManager; @@ -32,8 +32,8 @@ class UserThumbnailServiceTest { @Autowired UserThumbnailService userThumbnailService; - User createUser(String name, String uid) { - User user = new User(); + UserJpaEntity createUser(String name, String uid) { + UserJpaEntity user = new UserJpaEntity(); user.setName(name); user.setUid(uid); em.persist(user); @@ -42,7 +42,7 @@ User createUser(String name, String uid) { return user; } - void createExhibit(User user) { + void createExhibit(UserJpaEntity user) { CategoryDto defaultCategory = categoryService.categoriesOf(user.getId()).get(0); CreateExhibitRequestDto exhibitRequestDto = new CreateExhibitRequestDto("test", defaultCategory.getId(), @@ -56,7 +56,7 @@ void createExhibit(User user) { public void getUserThumbnail_사용자의_닉네임과_전시개수를_반환한다() throws Exception { String expectedName = "le2sky"; int expectedCount = 10; - User user = createUser(expectedName, "test-123"); + UserJpaEntity user = createUser(expectedName, "test-123"); for (int i = 0; i < expectedCount; i++) { createExhibit(user); } From dda1f97acfbcac9f112865e39c7fa6f4b3e1f49e Mon Sep 17 00:00:00 2001 From: leesky Date: Wed, 29 Mar 2023 16:10:54 +0900 Subject: [PATCH 017/141] =?UTF-8?q?chore=20:=20UserJpaEntity=20=ED=8C=A8?= =?UTF-8?q?=ED=82=A4=EC=A7=80=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../archive/domain/category/Category.java | 2 +- .../archive/domain/exhibit/Exhibit.java | 2 +- .../artie/domain/archive/domain/tag/Tag.java | 2 +- .../repository/CategoryRepository.java | 2 +- .../archive/repository/ExhibitRepository.java | 2 +- .../archive/service/ArtworkService.java | 2 +- .../archive/service/CategoryService.java | 2 +- .../archive/service/ExhibitService.java | 2 +- .../domain/archive/service/TagService.java | 2 +- .../domain/question/domain/Question.java | 2 +- .../service/RegisterUserService.java | 2 +- .../service/RenameUserService.java | 2 +- .../service/UserWithdrawalService.java | 2 +- .../user/controller/UserController.java | 4 +- .../domain/user/domain/UserJpaEntity.java | 47 ------------------- .../user/repository/UserRepository.java | 2 +- .../domain/user/service/UserServiceImpl.java | 2 +- .../user/service/UserThumbnailService.java | 2 +- .../domain/user/service/UserUseCase.java | 2 +- .../com/yapp/artie/common/UserTestData.java | 2 +- .../repository/CategoryRepositoryTest.java | 2 +- .../archive/service/ArtworkServiceTest.java | 2 +- .../archive/service/CategoryServiceTest.java | 2 +- .../archive/service/ExhibitServiceTest.java | 2 +- .../service/RenameUserServiceTest.java | 2 +- .../service/UserWithdrawalServiceTest.java | 2 +- .../user/controller/UserControllerTest.java | 2 +- .../artie/domain/user/domain/UserTest.java | 1 + .../user/repository/UserRepositoryTest.java | 2 +- .../domain/user/service/UserServiceTest.java | 2 +- .../service/UserThumbnailServiceTest.java | 2 +- 31 files changed, 31 insertions(+), 77 deletions(-) delete mode 100644 src/main/java/com/yapp/artie/domain/user/domain/UserJpaEntity.java diff --git a/src/main/java/com/yapp/artie/domain/archive/domain/category/Category.java b/src/main/java/com/yapp/artie/domain/archive/domain/category/Category.java index ae53aed6..1d373665 100644 --- a/src/main/java/com/yapp/artie/domain/archive/domain/category/Category.java +++ b/src/main/java/com/yapp/artie/domain/archive/domain/category/Category.java @@ -1,7 +1,7 @@ package com.yapp.artie.domain.archive.domain.category; import com.yapp.artie.domain.archive.domain.exhibit.Exhibit; -import com.yapp.artie.domain.user.domain.UserJpaEntity; +import com.yapp.artie.domain.user.adapter.out.persistence.UserJpaEntity; import com.yapp.artie.global.common.BaseEntity; import java.util.ArrayList; import java.util.List; diff --git a/src/main/java/com/yapp/artie/domain/archive/domain/exhibit/Exhibit.java b/src/main/java/com/yapp/artie/domain/archive/domain/exhibit/Exhibit.java index 86377481..07755e7c 100644 --- a/src/main/java/com/yapp/artie/domain/archive/domain/exhibit/Exhibit.java +++ b/src/main/java/com/yapp/artie/domain/archive/domain/exhibit/Exhibit.java @@ -3,7 +3,7 @@ import com.yapp.artie.domain.archive.domain.artwork.Artwork; import com.yapp.artie.domain.archive.domain.category.Category; -import com.yapp.artie.domain.user.domain.UserJpaEntity; +import com.yapp.artie.domain.user.adapter.out.persistence.UserJpaEntity; import com.yapp.artie.global.common.BaseEntity; import java.time.LocalDate; import java.util.ArrayList; diff --git a/src/main/java/com/yapp/artie/domain/archive/domain/tag/Tag.java b/src/main/java/com/yapp/artie/domain/archive/domain/tag/Tag.java index 23503adc..bc29bacb 100644 --- a/src/main/java/com/yapp/artie/domain/archive/domain/tag/Tag.java +++ b/src/main/java/com/yapp/artie/domain/archive/domain/tag/Tag.java @@ -1,7 +1,7 @@ package com.yapp.artie.domain.archive.domain.tag; import com.yapp.artie.domain.archive.domain.artwork.Artwork; -import com.yapp.artie.domain.user.domain.UserJpaEntity; +import com.yapp.artie.domain.user.adapter.out.persistence.UserJpaEntity; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.FetchType; diff --git a/src/main/java/com/yapp/artie/domain/archive/repository/CategoryRepository.java b/src/main/java/com/yapp/artie/domain/archive/repository/CategoryRepository.java index ae7ce9a8..4ac44b85 100644 --- a/src/main/java/com/yapp/artie/domain/archive/repository/CategoryRepository.java +++ b/src/main/java/com/yapp/artie/domain/archive/repository/CategoryRepository.java @@ -2,7 +2,7 @@ import com.yapp.artie.domain.archive.domain.category.Category; import com.yapp.artie.domain.archive.dto.cateogry.CategoryDto; -import com.yapp.artie.domain.user.domain.UserJpaEntity; +import com.yapp.artie.domain.user.adapter.out.persistence.UserJpaEntity; import java.util.List; import org.springframework.data.jpa.repository.EntityGraph; import org.springframework.data.jpa.repository.JpaRepository; diff --git a/src/main/java/com/yapp/artie/domain/archive/repository/ExhibitRepository.java b/src/main/java/com/yapp/artie/domain/archive/repository/ExhibitRepository.java index 2cc0eaac..49476417 100644 --- a/src/main/java/com/yapp/artie/domain/archive/repository/ExhibitRepository.java +++ b/src/main/java/com/yapp/artie/domain/archive/repository/ExhibitRepository.java @@ -6,7 +6,7 @@ import com.yapp.artie.domain.archive.dto.exhibit.CalenderQueryResultDto; import com.yapp.artie.domain.archive.dto.exhibit.ExhibitByDateResponseDto; import com.yapp.artie.domain.archive.dto.exhibit.PostInfoDto; -import com.yapp.artie.domain.user.domain.UserJpaEntity; +import com.yapp.artie.domain.user.adapter.out.persistence.UserJpaEntity; import java.time.LocalDateTime; import java.util.List; import java.util.Optional; diff --git a/src/main/java/com/yapp/artie/domain/archive/service/ArtworkService.java b/src/main/java/com/yapp/artie/domain/archive/service/ArtworkService.java index 41bfc931..f5b54d5c 100644 --- a/src/main/java/com/yapp/artie/domain/archive/service/ArtworkService.java +++ b/src/main/java/com/yapp/artie/domain/archive/service/ArtworkService.java @@ -10,7 +10,7 @@ import com.yapp.artie.domain.archive.exception.ArtworkNotFoundException; import com.yapp.artie.domain.archive.repository.ArtworkRepository; import com.yapp.artie.domain.s3.service.S3Service; -import com.yapp.artie.domain.user.domain.UserJpaEntity; +import com.yapp.artie.domain.user.adapter.out.persistence.UserJpaEntity; import com.yapp.artie.domain.user.service.UserUseCase; import com.yapp.artie.global.util.S3Utils; import java.util.List; diff --git a/src/main/java/com/yapp/artie/domain/archive/service/CategoryService.java b/src/main/java/com/yapp/artie/domain/archive/service/CategoryService.java index 1715a957..478d8f39 100644 --- a/src/main/java/com/yapp/artie/domain/archive/service/CategoryService.java +++ b/src/main/java/com/yapp/artie/domain/archive/service/CategoryService.java @@ -11,7 +11,7 @@ import com.yapp.artie.domain.archive.exception.NotOwnerOfCategoryException; import com.yapp.artie.domain.archive.repository.CategoryRepository; import com.yapp.artie.domain.archive.repository.ExhibitRepository; -import com.yapp.artie.domain.user.domain.UserJpaEntity; +import com.yapp.artie.domain.user.adapter.out.persistence.UserJpaEntity; import com.yapp.artie.domain.user.service.UserUseCase; import java.util.List; import java.util.Optional; diff --git a/src/main/java/com/yapp/artie/domain/archive/service/ExhibitService.java b/src/main/java/com/yapp/artie/domain/archive/service/ExhibitService.java index d0cf359a..219d9859 100644 --- a/src/main/java/com/yapp/artie/domain/archive/service/ExhibitService.java +++ b/src/main/java/com/yapp/artie/domain/archive/service/ExhibitService.java @@ -16,7 +16,7 @@ import com.yapp.artie.domain.archive.exception.NotOwnerOfExhibitException; import com.yapp.artie.domain.archive.repository.ArtworkRepository; import com.yapp.artie.domain.archive.repository.ExhibitRepository; -import com.yapp.artie.domain.user.domain.UserJpaEntity; +import com.yapp.artie.domain.user.adapter.out.persistence.UserJpaEntity; import com.yapp.artie.domain.user.service.UserUseCase; import com.yapp.artie.global.util.DateUtils; import com.yapp.artie.global.util.S3Utils; diff --git a/src/main/java/com/yapp/artie/domain/archive/service/TagService.java b/src/main/java/com/yapp/artie/domain/archive/service/TagService.java index d9eb6919..9ff9b1ca 100644 --- a/src/main/java/com/yapp/artie/domain/archive/service/TagService.java +++ b/src/main/java/com/yapp/artie/domain/archive/service/TagService.java @@ -3,7 +3,7 @@ import com.yapp.artie.domain.archive.domain.artwork.Artwork; import com.yapp.artie.domain.archive.domain.tag.Tag; import com.yapp.artie.domain.archive.repository.TagRepository; -import com.yapp.artie.domain.user.domain.UserJpaEntity; +import com.yapp.artie.domain.user.adapter.out.persistence.UserJpaEntity; import java.util.List; import java.util.concurrent.atomic.AtomicInteger; import java.util.stream.Collectors; diff --git a/src/main/java/com/yapp/artie/domain/question/domain/Question.java b/src/main/java/com/yapp/artie/domain/question/domain/Question.java index 7b93b941..63271222 100644 --- a/src/main/java/com/yapp/artie/domain/question/domain/Question.java +++ b/src/main/java/com/yapp/artie/domain/question/domain/Question.java @@ -1,6 +1,6 @@ package com.yapp.artie.domain.question.domain; -import com.yapp.artie.domain.user.domain.UserJpaEntity; +import com.yapp.artie.domain.user.adapter.out.persistence.UserJpaEntity; import com.yapp.artie.global.common.BaseEntity; import javax.persistence.Column; import javax.persistence.Entity; diff --git a/src/main/java/com/yapp/artie/domain/user/application/service/RegisterUserService.java b/src/main/java/com/yapp/artie/domain/user/application/service/RegisterUserService.java index 3fa6c998..376e12e9 100644 --- a/src/main/java/com/yapp/artie/domain/user/application/service/RegisterUserService.java +++ b/src/main/java/com/yapp/artie/domain/user/application/service/RegisterUserService.java @@ -1,7 +1,7 @@ package com.yapp.artie.domain.user.application.service; +import com.yapp.artie.domain.user.adapter.out.persistence.UserJpaEntity; import com.yapp.artie.domain.user.application.port.in.RegisterUserUseCase; -import com.yapp.artie.domain.user.domain.UserJpaEntity; import com.yapp.artie.domain.user.dto.response.CreateUserResponseDto; import com.yapp.artie.domain.user.repository.UserRepository; import com.yapp.artie.global.annotation.UseCase; diff --git a/src/main/java/com/yapp/artie/domain/user/application/service/RenameUserService.java b/src/main/java/com/yapp/artie/domain/user/application/service/RenameUserService.java index 6a444f9d..271a183a 100644 --- a/src/main/java/com/yapp/artie/domain/user/application/service/RenameUserService.java +++ b/src/main/java/com/yapp/artie/domain/user/application/service/RenameUserService.java @@ -1,7 +1,7 @@ package com.yapp.artie.domain.user.application.service; +import com.yapp.artie.domain.user.adapter.out.persistence.UserJpaEntity; import com.yapp.artie.domain.user.application.port.in.RenameUserUseCase; -import com.yapp.artie.domain.user.domain.UserJpaEntity; import com.yapp.artie.domain.user.exception.UserNotFoundException; import com.yapp.artie.domain.user.repository.UserRepository; import com.yapp.artie.global.annotation.UseCase; diff --git a/src/main/java/com/yapp/artie/domain/user/application/service/UserWithdrawalService.java b/src/main/java/com/yapp/artie/domain/user/application/service/UserWithdrawalService.java index c0f57301..611937c5 100644 --- a/src/main/java/com/yapp/artie/domain/user/application/service/UserWithdrawalService.java +++ b/src/main/java/com/yapp/artie/domain/user/application/service/UserWithdrawalService.java @@ -1,8 +1,8 @@ package com.yapp.artie.domain.user.application.service; import com.yapp.artie.domain.archive.repository.CategoryRepository; +import com.yapp.artie.domain.user.adapter.out.persistence.UserJpaEntity; import com.yapp.artie.domain.user.application.port.in.UserWithdrawalUseCase; -import com.yapp.artie.domain.user.domain.UserJpaEntity; import com.yapp.artie.domain.user.exception.UserNotFoundException; import com.yapp.artie.domain.user.repository.UserRepository; import com.yapp.artie.global.annotation.UseCase; diff --git a/src/main/java/com/yapp/artie/domain/user/controller/UserController.java b/src/main/java/com/yapp/artie/domain/user/controller/UserController.java index eea6a939..a7541f30 100644 --- a/src/main/java/com/yapp/artie/domain/user/controller/UserController.java +++ b/src/main/java/com/yapp/artie/domain/user/controller/UserController.java @@ -1,11 +1,11 @@ package com.yapp.artie.domain.user.controller; import com.google.firebase.auth.FirebaseToken; -import com.yapp.artie.domain.user.domain.UserJpaEntity; +import com.yapp.artie.domain.user.adapter.out.persistence.UserJpaEntity; import com.yapp.artie.domain.user.dto.response.CreateUserResponseDto; import com.yapp.artie.domain.user.dto.response.UserThumbnailResponseDto; -import com.yapp.artie.domain.user.service.UserUseCase; import com.yapp.artie.domain.user.service.UserThumbnailService; +import com.yapp.artie.domain.user.service.UserUseCase; import com.yapp.artie.global.authentication.JwtService; import com.yapp.artie.global.exception.common.InvalidValueException; import com.yapp.artie.global.exception.response.ErrorResponse; diff --git a/src/main/java/com/yapp/artie/domain/user/domain/UserJpaEntity.java b/src/main/java/com/yapp/artie/domain/user/domain/UserJpaEntity.java deleted file mode 100644 index 564bcb4c..00000000 --- a/src/main/java/com/yapp/artie/domain/user/domain/UserJpaEntity.java +++ /dev/null @@ -1,47 +0,0 @@ -package com.yapp.artie.domain.user.domain; - -import com.yapp.artie.global.common.BaseEntity; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; - - -@Entity -@Getter -@Setter -@NoArgsConstructor -public class UserJpaEntity extends BaseEntity { - - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - private Long id; - - @Column(nullable = false) - private String uid; - - private String name; - - private String profileImage; - - public static UserJpaEntity create(String uid, String name, String picture) { - UserJpaEntity user = new UserJpaEntity(); - user.setUid(uid); - user.setName(name); - user.setProfileImage(picture); - return user; - } - - public static UserJpaEntity create(Long id, String uid, String name, String profileImage) { - UserJpaEntity user = new UserJpaEntity(); - user.id = id; - user.uid = uid; - user.name = name; - user.profileImage = profileImage; - return user; - } -} diff --git a/src/main/java/com/yapp/artie/domain/user/repository/UserRepository.java b/src/main/java/com/yapp/artie/domain/user/repository/UserRepository.java index 63e630d9..99ecd06f 100644 --- a/src/main/java/com/yapp/artie/domain/user/repository/UserRepository.java +++ b/src/main/java/com/yapp/artie/domain/user/repository/UserRepository.java @@ -1,6 +1,6 @@ package com.yapp.artie.domain.user.repository; -import com.yapp.artie.domain.user.domain.UserJpaEntity; +import com.yapp.artie.domain.user.adapter.out.persistence.UserJpaEntity; import java.util.Optional; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; diff --git a/src/main/java/com/yapp/artie/domain/user/service/UserServiceImpl.java b/src/main/java/com/yapp/artie/domain/user/service/UserServiceImpl.java index 1a066cd3..bea0384b 100644 --- a/src/main/java/com/yapp/artie/domain/user/service/UserServiceImpl.java +++ b/src/main/java/com/yapp/artie/domain/user/service/UserServiceImpl.java @@ -2,10 +2,10 @@ import static org.springframework.security.core.userdetails.User.builder; +import com.yapp.artie.domain.user.adapter.out.persistence.UserJpaEntity; import com.yapp.artie.domain.user.application.service.RegisterUserService; import com.yapp.artie.domain.user.application.service.RenameUserService; import com.yapp.artie.domain.user.application.service.UserWithdrawalService; -import com.yapp.artie.domain.user.domain.UserJpaEntity; import com.yapp.artie.domain.user.dto.response.CreateUserResponseDto; import com.yapp.artie.domain.user.exception.UserNotFoundException; import com.yapp.artie.domain.user.repository.UserRepository; diff --git a/src/main/java/com/yapp/artie/domain/user/service/UserThumbnailService.java b/src/main/java/com/yapp/artie/domain/user/service/UserThumbnailService.java index 8ecdcb8d..69205c8c 100644 --- a/src/main/java/com/yapp/artie/domain/user/service/UserThumbnailService.java +++ b/src/main/java/com/yapp/artie/domain/user/service/UserThumbnailService.java @@ -2,7 +2,7 @@ import com.yapp.artie.domain.archive.service.ExhibitService; -import com.yapp.artie.domain.user.domain.UserJpaEntity; +import com.yapp.artie.domain.user.adapter.out.persistence.UserJpaEntity; import com.yapp.artie.domain.user.dto.response.UserThumbnailResponseDto; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; diff --git a/src/main/java/com/yapp/artie/domain/user/service/UserUseCase.java b/src/main/java/com/yapp/artie/domain/user/service/UserUseCase.java index 608b6268..5c71cb13 100644 --- a/src/main/java/com/yapp/artie/domain/user/service/UserUseCase.java +++ b/src/main/java/com/yapp/artie/domain/user/service/UserUseCase.java @@ -1,6 +1,6 @@ package com.yapp.artie.domain.user.service; -import com.yapp.artie.domain.user.domain.UserJpaEntity; +import com.yapp.artie.domain.user.adapter.out.persistence.UserJpaEntity; import com.yapp.artie.domain.user.dto.response.CreateUserResponseDto; import java.util.Optional; import org.springframework.security.core.userdetails.UserDetails; diff --git a/src/test/java/com/yapp/artie/common/UserTestData.java b/src/test/java/com/yapp/artie/common/UserTestData.java index 6fb22ce8..3b7fe4fc 100644 --- a/src/test/java/com/yapp/artie/common/UserTestData.java +++ b/src/test/java/com/yapp/artie/common/UserTestData.java @@ -1,6 +1,6 @@ package com.yapp.artie.common; -import com.yapp.artie.domain.user.domain.UserJpaEntity; +import com.yapp.artie.domain.user.adapter.out.persistence.UserJpaEntity; public class UserTestData { diff --git a/src/test/java/com/yapp/artie/domain/archive/repository/CategoryRepositoryTest.java b/src/test/java/com/yapp/artie/domain/archive/repository/CategoryRepositoryTest.java index 657498e0..f0e45d27 100644 --- a/src/test/java/com/yapp/artie/domain/archive/repository/CategoryRepositoryTest.java +++ b/src/test/java/com/yapp/artie/domain/archive/repository/CategoryRepositoryTest.java @@ -6,7 +6,7 @@ import com.yapp.artie.domain.archive.domain.category.Category; import com.yapp.artie.domain.archive.domain.exhibit.Exhibit; import com.yapp.artie.domain.archive.domain.tag.Tag; -import com.yapp.artie.domain.user.domain.UserJpaEntity; +import com.yapp.artie.domain.user.adapter.out.persistence.UserJpaEntity; import com.yapp.artie.domain.user.domain.UserTest; import com.yapp.artie.domain.user.repository.UserRepository; import java.time.LocalDate; diff --git a/src/test/java/com/yapp/artie/domain/archive/service/ArtworkServiceTest.java b/src/test/java/com/yapp/artie/domain/archive/service/ArtworkServiceTest.java index 5ed450af..4360df1b 100644 --- a/src/test/java/com/yapp/artie/domain/archive/service/ArtworkServiceTest.java +++ b/src/test/java/com/yapp/artie/domain/archive/service/ArtworkServiceTest.java @@ -10,7 +10,7 @@ import com.yapp.artie.domain.archive.repository.ArtworkRepository; import com.yapp.artie.domain.archive.repository.CategoryRepository; import com.yapp.artie.domain.archive.repository.ExhibitRepository; -import com.yapp.artie.domain.user.domain.UserJpaEntity; +import com.yapp.artie.domain.user.adapter.out.persistence.UserJpaEntity; import java.time.LocalDate; import java.util.ArrayList; import java.util.Arrays; diff --git a/src/test/java/com/yapp/artie/domain/archive/service/CategoryServiceTest.java b/src/test/java/com/yapp/artie/domain/archive/service/CategoryServiceTest.java index d1686f5c..27927ea3 100644 --- a/src/test/java/com/yapp/artie/domain/archive/service/CategoryServiceTest.java +++ b/src/test/java/com/yapp/artie/domain/archive/service/CategoryServiceTest.java @@ -19,7 +19,7 @@ import com.yapp.artie.domain.archive.repository.CategoryRepository; import com.yapp.artie.domain.archive.repository.ExhibitRepository; import com.yapp.artie.domain.archive.repository.TagRepository; -import com.yapp.artie.domain.user.domain.UserJpaEntity; +import com.yapp.artie.domain.user.adapter.out.persistence.UserJpaEntity; import com.yapp.artie.domain.user.repository.UserRepository; import java.time.LocalDate; import java.util.ArrayList; diff --git a/src/test/java/com/yapp/artie/domain/archive/service/ExhibitServiceTest.java b/src/test/java/com/yapp/artie/domain/archive/service/ExhibitServiceTest.java index 5af3d4b2..c2c606d2 100644 --- a/src/test/java/com/yapp/artie/domain/archive/service/ExhibitServiceTest.java +++ b/src/test/java/com/yapp/artie/domain/archive/service/ExhibitServiceTest.java @@ -24,7 +24,7 @@ import com.yapp.artie.domain.archive.repository.CategoryRepository; import com.yapp.artie.domain.archive.repository.ExhibitRepository; import com.yapp.artie.domain.archive.repository.TagRepository; -import com.yapp.artie.domain.user.domain.UserJpaEntity; +import com.yapp.artie.domain.user.adapter.out.persistence.UserJpaEntity; import com.yapp.artie.domain.user.repository.UserRepository; import java.time.LocalDate; import java.time.LocalDateTime; diff --git a/src/test/java/com/yapp/artie/domain/user/application/service/RenameUserServiceTest.java b/src/test/java/com/yapp/artie/domain/user/application/service/RenameUserServiceTest.java index 3ee712de..e461ab59 100644 --- a/src/test/java/com/yapp/artie/domain/user/application/service/RenameUserServiceTest.java +++ b/src/test/java/com/yapp/artie/domain/user/application/service/RenameUserServiceTest.java @@ -6,7 +6,7 @@ import static org.mockito.ArgumentMatchers.any; import static org.mockito.BDDMockito.given; -import com.yapp.artie.domain.user.domain.UserJpaEntity; +import com.yapp.artie.domain.user.adapter.out.persistence.UserJpaEntity; import com.yapp.artie.domain.user.exception.UserNotFoundException; import com.yapp.artie.domain.user.repository.UserRepository; import java.util.Optional; diff --git a/src/test/java/com/yapp/artie/domain/user/application/service/UserWithdrawalServiceTest.java b/src/test/java/com/yapp/artie/domain/user/application/service/UserWithdrawalServiceTest.java index 6ccc28b5..bf1459c2 100644 --- a/src/test/java/com/yapp/artie/domain/user/application/service/UserWithdrawalServiceTest.java +++ b/src/test/java/com/yapp/artie/domain/user/application/service/UserWithdrawalServiceTest.java @@ -8,7 +8,7 @@ import static org.mockito.BDDMockito.then; import com.yapp.artie.domain.archive.repository.CategoryRepository; -import com.yapp.artie.domain.user.domain.UserJpaEntity; +import com.yapp.artie.domain.user.adapter.out.persistence.UserJpaEntity; import com.yapp.artie.domain.user.exception.UserNotFoundException; import com.yapp.artie.domain.user.repository.UserRepository; import com.yapp.artie.global.authentication.JwtService; diff --git a/src/test/java/com/yapp/artie/domain/user/controller/UserControllerTest.java b/src/test/java/com/yapp/artie/domain/user/controller/UserControllerTest.java index 955e9c9d..68a3471e 100644 --- a/src/test/java/com/yapp/artie/domain/user/controller/UserControllerTest.java +++ b/src/test/java/com/yapp/artie/domain/user/controller/UserControllerTest.java @@ -16,7 +16,7 @@ import com.yapp.artie.domain.archive.repository.CategoryRepository; import com.yapp.artie.domain.archive.repository.ExhibitRepository; import com.yapp.artie.domain.archive.repository.TagRepository; -import com.yapp.artie.domain.user.domain.UserJpaEntity; +import com.yapp.artie.domain.user.adapter.out.persistence.UserJpaEntity; import com.yapp.artie.domain.user.domain.UserTest; import com.yapp.artie.domain.user.repository.UserRepository; import com.yapp.artie.global.authentication.JwtServiceImpl; diff --git a/src/test/java/com/yapp/artie/domain/user/domain/UserTest.java b/src/test/java/com/yapp/artie/domain/user/domain/UserTest.java index 31d9ac1d..7ba4de7c 100644 --- a/src/test/java/com/yapp/artie/domain/user/domain/UserTest.java +++ b/src/test/java/com/yapp/artie/domain/user/domain/UserTest.java @@ -1,5 +1,6 @@ package com.yapp.artie.domain.user.domain; +import com.yapp.artie.domain.user.adapter.out.persistence.UserJpaEntity; import org.junit.jupiter.api.DisplayName; @DisplayName("User 테스트") diff --git a/src/test/java/com/yapp/artie/domain/user/repository/UserRepositoryTest.java b/src/test/java/com/yapp/artie/domain/user/repository/UserRepositoryTest.java index 9c969352..448106fb 100644 --- a/src/test/java/com/yapp/artie/domain/user/repository/UserRepositoryTest.java +++ b/src/test/java/com/yapp/artie/domain/user/repository/UserRepositoryTest.java @@ -2,7 +2,7 @@ import static org.assertj.core.api.Assertions.assertThat; -import com.yapp.artie.domain.user.domain.UserJpaEntity; +import com.yapp.artie.domain.user.adapter.out.persistence.UserJpaEntity; import com.yapp.artie.domain.user.domain.UserTest; import javax.persistence.EntityManager; import org.junit.jupiter.api.DisplayName; diff --git a/src/test/java/com/yapp/artie/domain/user/service/UserServiceTest.java b/src/test/java/com/yapp/artie/domain/user/service/UserServiceTest.java index 9a71ea56..15ba63b7 100644 --- a/src/test/java/com/yapp/artie/domain/user/service/UserServiceTest.java +++ b/src/test/java/com/yapp/artie/domain/user/service/UserServiceTest.java @@ -4,7 +4,7 @@ import static org.mockito.ArgumentMatchers.any; import static org.mockito.BDDMockito.given; -import com.yapp.artie.domain.user.domain.UserJpaEntity; +import com.yapp.artie.domain.user.adapter.out.persistence.UserJpaEntity; import com.yapp.artie.domain.user.domain.UserTest; import com.yapp.artie.domain.user.exception.UserNotFoundException; import com.yapp.artie.domain.user.repository.UserRepository; diff --git a/src/test/java/com/yapp/artie/domain/user/service/UserThumbnailServiceTest.java b/src/test/java/com/yapp/artie/domain/user/service/UserThumbnailServiceTest.java index f9ded866..cc1017d3 100644 --- a/src/test/java/com/yapp/artie/domain/user/service/UserThumbnailServiceTest.java +++ b/src/test/java/com/yapp/artie/domain/user/service/UserThumbnailServiceTest.java @@ -7,7 +7,7 @@ import com.yapp.artie.domain.archive.dto.exhibit.CreateExhibitRequestDto; import com.yapp.artie.domain.archive.service.CategoryService; import com.yapp.artie.domain.archive.service.ExhibitService; -import com.yapp.artie.domain.user.domain.UserJpaEntity; +import com.yapp.artie.domain.user.adapter.out.persistence.UserJpaEntity; import com.yapp.artie.domain.user.dto.response.UserThumbnailResponseDto; import java.time.LocalDate; import javax.persistence.EntityManager; From 439fb29b29409824ce66a0b0295c87dd41b0f44c Mon Sep 17 00:00:00 2001 From: leesky Date: Wed, 29 Mar 2023 16:25:42 +0900 Subject: [PATCH 018/141] =?UTF-8?q?feat=20:=20User=20=EB=8F=84=EB=A9=94?= =?UTF-8?q?=EC=9D=B8=20=EC=97=94=ED=8B=B0=ED=8B=B0=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/yapp/artie/domain/user/domain/User.java | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 src/main/java/com/yapp/artie/domain/user/domain/User.java diff --git a/src/main/java/com/yapp/artie/domain/user/domain/User.java b/src/main/java/com/yapp/artie/domain/user/domain/User.java new file mode 100644 index 00000000..9d685083 --- /dev/null +++ b/src/main/java/com/yapp/artie/domain/user/domain/User.java @@ -0,0 +1,5 @@ +package com.yapp.artie.domain.user.domain; + +public class User { + +} From db74687c5b2fa781a4b2317dcf88e2b3fe5cba31 Mon Sep 17 00:00:00 2001 From: leesky Date: Wed, 29 Mar 2023 16:30:35 +0900 Subject: [PATCH 019/141] =?UTF-8?q?feat=20:=20=EC=98=81=EC=86=8D=EC=84=B1?= =?UTF-8?q?=20=EC=96=B4=EB=8C=91=ED=84=B0=20=EA=B8=B0=EB=B0=98=20=ED=81=B4?= =?UTF-8?q?=EB=9E=98=EC=8A=A4=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../out/persistence/UserJpaEntity.java | 47 +++++++++++++++++++ .../adapter/out/persistence/UserMapper.java | 5 ++ .../persistence/UserPersistenceAdapter.java | 7 +++ .../application/port/out/DeleteUserPort.java | 8 ++++ .../application/port/out/LoadUserPort.java | 10 ++++ .../application/port/out/SaveUserPort.java | 8 ++++ .../port/out/UpdateUserStatePort.java | 8 ++++ 7 files changed, 93 insertions(+) create mode 100644 src/main/java/com/yapp/artie/domain/user/adapter/out/persistence/UserJpaEntity.java create mode 100644 src/main/java/com/yapp/artie/domain/user/adapter/out/persistence/UserMapper.java create mode 100644 src/main/java/com/yapp/artie/domain/user/adapter/out/persistence/UserPersistenceAdapter.java create mode 100644 src/main/java/com/yapp/artie/domain/user/application/port/out/DeleteUserPort.java create mode 100644 src/main/java/com/yapp/artie/domain/user/application/port/out/LoadUserPort.java create mode 100644 src/main/java/com/yapp/artie/domain/user/application/port/out/SaveUserPort.java create mode 100644 src/main/java/com/yapp/artie/domain/user/application/port/out/UpdateUserStatePort.java diff --git a/src/main/java/com/yapp/artie/domain/user/adapter/out/persistence/UserJpaEntity.java b/src/main/java/com/yapp/artie/domain/user/adapter/out/persistence/UserJpaEntity.java new file mode 100644 index 00000000..c1e8a624 --- /dev/null +++ b/src/main/java/com/yapp/artie/domain/user/adapter/out/persistence/UserJpaEntity.java @@ -0,0 +1,47 @@ +package com.yapp.artie.domain.user.adapter.out.persistence; + +import com.yapp.artie.global.common.BaseEntity; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + + +@Entity +@Getter +@Setter +@NoArgsConstructor +public class UserJpaEntity extends BaseEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @Column(nullable = false) + private String uid; + + private String name; + + private String profileImage; + + public static UserJpaEntity create(String uid, String name, String picture) { + UserJpaEntity user = new UserJpaEntity(); + user.setUid(uid); + user.setName(name); + user.setProfileImage(picture); + return user; + } + + public static UserJpaEntity create(Long id, String uid, String name, String profileImage) { + UserJpaEntity user = new UserJpaEntity(); + user.id = id; + user.uid = uid; + user.name = name; + user.profileImage = profileImage; + return user; + } +} diff --git a/src/main/java/com/yapp/artie/domain/user/adapter/out/persistence/UserMapper.java b/src/main/java/com/yapp/artie/domain/user/adapter/out/persistence/UserMapper.java new file mode 100644 index 00000000..f1696112 --- /dev/null +++ b/src/main/java/com/yapp/artie/domain/user/adapter/out/persistence/UserMapper.java @@ -0,0 +1,5 @@ +package com.yapp.artie.domain.user.adapter.out.persistence; + +public class UserMapper { + +} diff --git a/src/main/java/com/yapp/artie/domain/user/adapter/out/persistence/UserPersistenceAdapter.java b/src/main/java/com/yapp/artie/domain/user/adapter/out/persistence/UserPersistenceAdapter.java new file mode 100644 index 00000000..bd4d35a6 --- /dev/null +++ b/src/main/java/com/yapp/artie/domain/user/adapter/out/persistence/UserPersistenceAdapter.java @@ -0,0 +1,7 @@ +package com.yapp.artie.domain.user.adapter.out.persistence; + +class UserPersistenceAdapter { + + + +} diff --git a/src/main/java/com/yapp/artie/domain/user/application/port/out/DeleteUserPort.java b/src/main/java/com/yapp/artie/domain/user/application/port/out/DeleteUserPort.java new file mode 100644 index 00000000..7690afa8 --- /dev/null +++ b/src/main/java/com/yapp/artie/domain/user/application/port/out/DeleteUserPort.java @@ -0,0 +1,8 @@ +package com.yapp.artie.domain.user.application.port.out; + +import com.yapp.artie.domain.user.domain.User; + +public interface DeleteUserPort { + + void delete(User user); +} diff --git a/src/main/java/com/yapp/artie/domain/user/application/port/out/LoadUserPort.java b/src/main/java/com/yapp/artie/domain/user/application/port/out/LoadUserPort.java new file mode 100644 index 00000000..688111e1 --- /dev/null +++ b/src/main/java/com/yapp/artie/domain/user/application/port/out/LoadUserPort.java @@ -0,0 +1,10 @@ +package com.yapp.artie.domain.user.application.port.out; + +import com.yapp.artie.domain.user.domain.User; + +public interface LoadUserPort { + + User loadById(Long userId); + + User loadByUid(String uid); +} diff --git a/src/main/java/com/yapp/artie/domain/user/application/port/out/SaveUserPort.java b/src/main/java/com/yapp/artie/domain/user/application/port/out/SaveUserPort.java new file mode 100644 index 00000000..04697283 --- /dev/null +++ b/src/main/java/com/yapp/artie/domain/user/application/port/out/SaveUserPort.java @@ -0,0 +1,8 @@ +package com.yapp.artie.domain.user.application.port.out; + +import com.yapp.artie.domain.user.domain.User; + +public interface SaveUserPort { + + void save(User user); +} diff --git a/src/main/java/com/yapp/artie/domain/user/application/port/out/UpdateUserStatePort.java b/src/main/java/com/yapp/artie/domain/user/application/port/out/UpdateUserStatePort.java new file mode 100644 index 00000000..fd935c77 --- /dev/null +++ b/src/main/java/com/yapp/artie/domain/user/application/port/out/UpdateUserStatePort.java @@ -0,0 +1,8 @@ +package com.yapp.artie.domain.user.application.port.out; + +import com.yapp.artie.domain.user.domain.User; + +public interface UpdateUserStatePort { + + void updateName(User user); +} From 100a4fe96f62032f8d66dc862ea01fe830471172 Mon Sep 17 00:00:00 2001 From: leesky Date: Wed, 29 Mar 2023 16:36:33 +0900 Subject: [PATCH 020/141] =?UTF-8?q?chore=20:=20=EC=B5=9C=EC=83=81=EC=9C=84?= =?UTF-8?q?=20=EA=B2=BD=EB=A1=9C=EC=9D=98=20out=20=ED=8F=B4=EB=8D=94?= =?UTF-8?q?=EB=A7=8C=20=EB=AC=B4=EC=8B=9C=ED=95=98=EB=8F=84=EB=A1=9D=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 5194f51b..4ac01389 100644 --- a/.gitignore +++ b/.gitignore @@ -19,7 +19,7 @@ build/ *.iws *.iml *.ipr -out/ +out ### NetBeans ### /nbproject/private/ From 0e50414eb69308343701311d603aaae084d840f2 Mon Sep 17 00:00:00 2001 From: leesky Date: Wed, 29 Mar 2023 16:36:46 +0900 Subject: [PATCH 021/141] =?UTF-8?q?fix=20:=20UserRepository=20=EC=9C=84?= =?UTF-8?q?=EC=B9=98=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../application/service/RegisterUserService.java | 2 +- .../user/application/service/RenameUserService.java | 2 +- .../application/service/UserWithdrawalService.java | 2 +- .../artie/domain/user/repository/UserRepository.java | 12 ------------ .../artie/domain/user/service/UserServiceImpl.java | 2 +- .../archive/repository/CategoryRepositoryTest.java | 2 +- .../domain/archive/service/CategoryServiceTest.java | 2 +- .../domain/archive/service/ExhibitServiceTest.java | 2 +- .../application/service/RegisterUserServiceTest.java | 2 +- .../application/service/RenameUserServiceTest.java | 2 +- .../service/UserWithdrawalServiceTest.java | 2 +- .../domain/user/controller/UserControllerTest.java | 2 +- .../domain/user/repository/UserRepositoryTest.java | 1 + .../artie/domain/user/service/UserServiceTest.java | 2 +- 14 files changed, 13 insertions(+), 24 deletions(-) delete mode 100644 src/main/java/com/yapp/artie/domain/user/repository/UserRepository.java diff --git a/src/main/java/com/yapp/artie/domain/user/application/service/RegisterUserService.java b/src/main/java/com/yapp/artie/domain/user/application/service/RegisterUserService.java index 376e12e9..987d3a78 100644 --- a/src/main/java/com/yapp/artie/domain/user/application/service/RegisterUserService.java +++ b/src/main/java/com/yapp/artie/domain/user/application/service/RegisterUserService.java @@ -3,7 +3,7 @@ import com.yapp.artie.domain.user.adapter.out.persistence.UserJpaEntity; import com.yapp.artie.domain.user.application.port.in.RegisterUserUseCase; import com.yapp.artie.domain.user.dto.response.CreateUserResponseDto; -import com.yapp.artie.domain.user.repository.UserRepository; +import com.yapp.artie.domain.user.adapter.out.persistence.UserRepository; import com.yapp.artie.global.annotation.UseCase; import java.util.Optional; import lombok.RequiredArgsConstructor; diff --git a/src/main/java/com/yapp/artie/domain/user/application/service/RenameUserService.java b/src/main/java/com/yapp/artie/domain/user/application/service/RenameUserService.java index 271a183a..444b8781 100644 --- a/src/main/java/com/yapp/artie/domain/user/application/service/RenameUserService.java +++ b/src/main/java/com/yapp/artie/domain/user/application/service/RenameUserService.java @@ -3,7 +3,7 @@ import com.yapp.artie.domain.user.adapter.out.persistence.UserJpaEntity; import com.yapp.artie.domain.user.application.port.in.RenameUserUseCase; import com.yapp.artie.domain.user.exception.UserNotFoundException; -import com.yapp.artie.domain.user.repository.UserRepository; +import com.yapp.artie.domain.user.adapter.out.persistence.UserRepository; import com.yapp.artie.global.annotation.UseCase; import lombok.RequiredArgsConstructor; import org.springframework.transaction.annotation.Transactional; diff --git a/src/main/java/com/yapp/artie/domain/user/application/service/UserWithdrawalService.java b/src/main/java/com/yapp/artie/domain/user/application/service/UserWithdrawalService.java index 611937c5..eea8c093 100644 --- a/src/main/java/com/yapp/artie/domain/user/application/service/UserWithdrawalService.java +++ b/src/main/java/com/yapp/artie/domain/user/application/service/UserWithdrawalService.java @@ -4,7 +4,7 @@ import com.yapp.artie.domain.user.adapter.out.persistence.UserJpaEntity; import com.yapp.artie.domain.user.application.port.in.UserWithdrawalUseCase; import com.yapp.artie.domain.user.exception.UserNotFoundException; -import com.yapp.artie.domain.user.repository.UserRepository; +import com.yapp.artie.domain.user.adapter.out.persistence.UserRepository; import com.yapp.artie.global.annotation.UseCase; import com.yapp.artie.global.authentication.JwtService; import lombok.RequiredArgsConstructor; diff --git a/src/main/java/com/yapp/artie/domain/user/repository/UserRepository.java b/src/main/java/com/yapp/artie/domain/user/repository/UserRepository.java deleted file mode 100644 index 99ecd06f..00000000 --- a/src/main/java/com/yapp/artie/domain/user/repository/UserRepository.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.yapp.artie.domain.user.repository; - -import com.yapp.artie.domain.user.adapter.out.persistence.UserJpaEntity; -import java.util.Optional; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; - -@Repository -public interface UserRepository extends JpaRepository { - - Optional findByUid(String uid); -} diff --git a/src/main/java/com/yapp/artie/domain/user/service/UserServiceImpl.java b/src/main/java/com/yapp/artie/domain/user/service/UserServiceImpl.java index bea0384b..ebe9c910 100644 --- a/src/main/java/com/yapp/artie/domain/user/service/UserServiceImpl.java +++ b/src/main/java/com/yapp/artie/domain/user/service/UserServiceImpl.java @@ -8,7 +8,7 @@ import com.yapp.artie.domain.user.application.service.UserWithdrawalService; import com.yapp.artie.domain.user.dto.response.CreateUserResponseDto; import com.yapp.artie.domain.user.exception.UserNotFoundException; -import com.yapp.artie.domain.user.repository.UserRepository; +import com.yapp.artie.domain.user.adapter.out.persistence.UserRepository; import java.util.Optional; import lombok.RequiredArgsConstructor; import org.springframework.security.core.userdetails.UserDetails; diff --git a/src/test/java/com/yapp/artie/domain/archive/repository/CategoryRepositoryTest.java b/src/test/java/com/yapp/artie/domain/archive/repository/CategoryRepositoryTest.java index f0e45d27..aec0ea8b 100644 --- a/src/test/java/com/yapp/artie/domain/archive/repository/CategoryRepositoryTest.java +++ b/src/test/java/com/yapp/artie/domain/archive/repository/CategoryRepositoryTest.java @@ -8,7 +8,7 @@ import com.yapp.artie.domain.archive.domain.tag.Tag; import com.yapp.artie.domain.user.adapter.out.persistence.UserJpaEntity; import com.yapp.artie.domain.user.domain.UserTest; -import com.yapp.artie.domain.user.repository.UserRepository; +import com.yapp.artie.domain.user.adapter.out.persistence.UserRepository; import java.time.LocalDate; import javax.persistence.EntityManager; import org.junit.jupiter.api.DisplayName; diff --git a/src/test/java/com/yapp/artie/domain/archive/service/CategoryServiceTest.java b/src/test/java/com/yapp/artie/domain/archive/service/CategoryServiceTest.java index 27927ea3..7d1c4eb9 100644 --- a/src/test/java/com/yapp/artie/domain/archive/service/CategoryServiceTest.java +++ b/src/test/java/com/yapp/artie/domain/archive/service/CategoryServiceTest.java @@ -20,7 +20,7 @@ import com.yapp.artie.domain.archive.repository.ExhibitRepository; import com.yapp.artie.domain.archive.repository.TagRepository; import com.yapp.artie.domain.user.adapter.out.persistence.UserJpaEntity; -import com.yapp.artie.domain.user.repository.UserRepository; +import com.yapp.artie.domain.user.adapter.out.persistence.UserRepository; import java.time.LocalDate; import java.util.ArrayList; import java.util.Arrays; diff --git a/src/test/java/com/yapp/artie/domain/archive/service/ExhibitServiceTest.java b/src/test/java/com/yapp/artie/domain/archive/service/ExhibitServiceTest.java index c2c606d2..4a0c4a36 100644 --- a/src/test/java/com/yapp/artie/domain/archive/service/ExhibitServiceTest.java +++ b/src/test/java/com/yapp/artie/domain/archive/service/ExhibitServiceTest.java @@ -25,7 +25,7 @@ import com.yapp.artie.domain.archive.repository.ExhibitRepository; import com.yapp.artie.domain.archive.repository.TagRepository; import com.yapp.artie.domain.user.adapter.out.persistence.UserJpaEntity; -import com.yapp.artie.domain.user.repository.UserRepository; +import com.yapp.artie.domain.user.adapter.out.persistence.UserRepository; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.YearMonth; diff --git a/src/test/java/com/yapp/artie/domain/user/application/service/RegisterUserServiceTest.java b/src/test/java/com/yapp/artie/domain/user/application/service/RegisterUserServiceTest.java index 8d8026cd..454e0ae9 100644 --- a/src/test/java/com/yapp/artie/domain/user/application/service/RegisterUserServiceTest.java +++ b/src/test/java/com/yapp/artie/domain/user/application/service/RegisterUserServiceTest.java @@ -8,7 +8,7 @@ import static org.mockito.Mockito.never; import com.yapp.artie.domain.user.dto.response.CreateUserResponseDto; -import com.yapp.artie.domain.user.repository.UserRepository; +import com.yapp.artie.domain.user.adapter.out.persistence.UserRepository; import java.util.Optional; import org.junit.jupiter.api.Test; import org.mockito.Mockito; diff --git a/src/test/java/com/yapp/artie/domain/user/application/service/RenameUserServiceTest.java b/src/test/java/com/yapp/artie/domain/user/application/service/RenameUserServiceTest.java index e461ab59..5b4cb14d 100644 --- a/src/test/java/com/yapp/artie/domain/user/application/service/RenameUserServiceTest.java +++ b/src/test/java/com/yapp/artie/domain/user/application/service/RenameUserServiceTest.java @@ -8,7 +8,7 @@ import com.yapp.artie.domain.user.adapter.out.persistence.UserJpaEntity; import com.yapp.artie.domain.user.exception.UserNotFoundException; -import com.yapp.artie.domain.user.repository.UserRepository; +import com.yapp.artie.domain.user.adapter.out.persistence.UserRepository; import java.util.Optional; import org.junit.jupiter.api.Test; import org.mockito.Mockito; diff --git a/src/test/java/com/yapp/artie/domain/user/application/service/UserWithdrawalServiceTest.java b/src/test/java/com/yapp/artie/domain/user/application/service/UserWithdrawalServiceTest.java index bf1459c2..69a07478 100644 --- a/src/test/java/com/yapp/artie/domain/user/application/service/UserWithdrawalServiceTest.java +++ b/src/test/java/com/yapp/artie/domain/user/application/service/UserWithdrawalServiceTest.java @@ -10,7 +10,7 @@ import com.yapp.artie.domain.archive.repository.CategoryRepository; import com.yapp.artie.domain.user.adapter.out.persistence.UserJpaEntity; import com.yapp.artie.domain.user.exception.UserNotFoundException; -import com.yapp.artie.domain.user.repository.UserRepository; +import com.yapp.artie.domain.user.adapter.out.persistence.UserRepository; import com.yapp.artie.global.authentication.JwtService; import java.util.Optional; import org.junit.jupiter.api.Test; diff --git a/src/test/java/com/yapp/artie/domain/user/controller/UserControllerTest.java b/src/test/java/com/yapp/artie/domain/user/controller/UserControllerTest.java index 68a3471e..86968ebf 100644 --- a/src/test/java/com/yapp/artie/domain/user/controller/UserControllerTest.java +++ b/src/test/java/com/yapp/artie/domain/user/controller/UserControllerTest.java @@ -18,7 +18,7 @@ import com.yapp.artie.domain.archive.repository.TagRepository; import com.yapp.artie.domain.user.adapter.out.persistence.UserJpaEntity; import com.yapp.artie.domain.user.domain.UserTest; -import com.yapp.artie.domain.user.repository.UserRepository; +import com.yapp.artie.domain.user.adapter.out.persistence.UserRepository; import com.yapp.artie.global.authentication.JwtServiceImpl; import java.time.LocalDate; import javax.persistence.EntityManager; diff --git a/src/test/java/com/yapp/artie/domain/user/repository/UserRepositoryTest.java b/src/test/java/com/yapp/artie/domain/user/repository/UserRepositoryTest.java index 448106fb..d6449f89 100644 --- a/src/test/java/com/yapp/artie/domain/user/repository/UserRepositoryTest.java +++ b/src/test/java/com/yapp/artie/domain/user/repository/UserRepositoryTest.java @@ -3,6 +3,7 @@ import static org.assertj.core.api.Assertions.assertThat; import com.yapp.artie.domain.user.adapter.out.persistence.UserJpaEntity; +import com.yapp.artie.domain.user.adapter.out.persistence.UserRepository; import com.yapp.artie.domain.user.domain.UserTest; import javax.persistence.EntityManager; import org.junit.jupiter.api.DisplayName; diff --git a/src/test/java/com/yapp/artie/domain/user/service/UserServiceTest.java b/src/test/java/com/yapp/artie/domain/user/service/UserServiceTest.java index 15ba63b7..866d0f96 100644 --- a/src/test/java/com/yapp/artie/domain/user/service/UserServiceTest.java +++ b/src/test/java/com/yapp/artie/domain/user/service/UserServiceTest.java @@ -7,7 +7,7 @@ import com.yapp.artie.domain.user.adapter.out.persistence.UserJpaEntity; import com.yapp.artie.domain.user.domain.UserTest; import com.yapp.artie.domain.user.exception.UserNotFoundException; -import com.yapp.artie.domain.user.repository.UserRepository; +import com.yapp.artie.domain.user.adapter.out.persistence.UserRepository; import com.yapp.artie.global.authentication.JwtService; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.DisplayName; From 0e3e2b918b82182394b9306c50542d949f5ef453 Mon Sep 17 00:00:00 2001 From: leesky Date: Wed, 29 Mar 2023 16:43:47 +0900 Subject: [PATCH 022/141] =?UTF-8?q?fix=20:=20=EB=AA=A8=EB=93=A0=20?= =?UTF-8?q?=EA=B2=BD=EB=A1=9C=20out=20=EB=94=94=EB=A0=89=ED=84=B0=EB=A6=AC?= =?UTF-8?q?=20=EB=AC=B4=EC=8B=9C=EB=90=98=EB=8A=94=20=EC=9D=B4=EC=8A=88=20?= =?UTF-8?q?=ED=95=B4=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 4ac01389..3dd46776 100644 --- a/.gitignore +++ b/.gitignore @@ -19,7 +19,7 @@ build/ *.iws *.iml *.ipr -out +out/** ### NetBeans ### /nbproject/private/ From 3f4e3630d5388fc2bd85753331622b5c28a516db Mon Sep 17 00:00:00 2001 From: leesky Date: Wed, 29 Mar 2023 16:44:03 +0900 Subject: [PATCH 023/141] =?UTF-8?q?chore=20:=20=EC=B6=94=EC=A0=81=EC=95=88?= =?UTF-8?q?=EB=90=9C=20UserRepository=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../user/adapter/out/persistence/UserRepository.java | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 src/main/java/com/yapp/artie/domain/user/adapter/out/persistence/UserRepository.java diff --git a/src/main/java/com/yapp/artie/domain/user/adapter/out/persistence/UserRepository.java b/src/main/java/com/yapp/artie/domain/user/adapter/out/persistence/UserRepository.java new file mode 100644 index 00000000..34a781bb --- /dev/null +++ b/src/main/java/com/yapp/artie/domain/user/adapter/out/persistence/UserRepository.java @@ -0,0 +1,11 @@ +package com.yapp.artie.domain.user.adapter.out.persistence; + +import java.util.Optional; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface UserRepository extends JpaRepository { + + Optional findByUid(String uid); +} From 76eb904f63cda59d34931258e180433a04c2c379 Mon Sep 17 00:00:00 2001 From: leesky Date: Wed, 29 Mar 2023 17:33:17 +0900 Subject: [PATCH 024/141] =?UTF-8?q?feat=20:=20=EC=98=81=EC=86=8D=EC=84=B1?= =?UTF-8?q?=20=EC=96=B4=EB=8C=91=ED=84=B0=20=EB=BC=88=EB=8C=80=20=EC=BD=94?= =?UTF-8?q?=EB=93=9C=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../persistence/UserPersistenceAdapter.java | 38 ++++++++++++++++++- 1 file changed, 37 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/yapp/artie/domain/user/adapter/out/persistence/UserPersistenceAdapter.java b/src/main/java/com/yapp/artie/domain/user/adapter/out/persistence/UserPersistenceAdapter.java index bd4d35a6..1d031e05 100644 --- a/src/main/java/com/yapp/artie/domain/user/adapter/out/persistence/UserPersistenceAdapter.java +++ b/src/main/java/com/yapp/artie/domain/user/adapter/out/persistence/UserPersistenceAdapter.java @@ -1,7 +1,43 @@ package com.yapp.artie.domain.user.adapter.out.persistence; -class UserPersistenceAdapter { +import com.yapp.artie.domain.user.application.port.out.DeleteUserPort; +import com.yapp.artie.domain.user.application.port.out.LoadUserPort; +import com.yapp.artie.domain.user.application.port.out.SaveUserPort; +import com.yapp.artie.domain.user.application.port.out.UpdateUserStatePort; +import com.yapp.artie.domain.user.domain.User; +import com.yapp.artie.global.annotation.PersistenceAdapter; +import lombok.RequiredArgsConstructor; +@PersistenceAdapter +@RequiredArgsConstructor +class UserPersistenceAdapter implements DeleteUserPort, SaveUserPort, LoadUserPort, + UpdateUserStatePort { + private final UserRepository userRepository; + private final UserMapper userMapper; + @Override + public User loadById(Long userId) { + return null; + } + + @Override + public User loadByUid(String uid) { + return null; + } + + @Override + public void delete(User user) { + + } + + @Override + public void save(User user) { + + } + + @Override + public void updateName(User user) { + + } } From 01cc80d5ffbb9cf09e599719a32b5d6511fc42ee Mon Sep 17 00:00:00 2001 From: leesky Date: Wed, 29 Mar 2023 17:33:36 +0900 Subject: [PATCH 025/141] =?UTF-8?q?feat=20:=20User=20=EB=8F=84=EB=A9=94?= =?UTF-8?q?=EC=9D=B8=20=EC=97=94=ED=8B=B0=ED=8B=B0=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../yapp/artie/domain/user/domain/User.java | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/src/main/java/com/yapp/artie/domain/user/domain/User.java b/src/main/java/com/yapp/artie/domain/user/domain/User.java index 9d685083..0a4aa2f8 100644 --- a/src/main/java/com/yapp/artie/domain/user/domain/User.java +++ b/src/main/java/com/yapp/artie/domain/user/domain/User.java @@ -1,5 +1,27 @@ package com.yapp.artie.domain.user.domain; +import lombok.AccessLevel; +import lombok.AllArgsConstructor; +import lombok.Getter; + +@AllArgsConstructor(access = AccessLevel.PRIVATE) +@Getter public class User { + private final Long id; + private final String uid; + private final String profileImage; + private String name; + + public static User withoutId(String uid, String name, String profileImage) { + return new User(null, uid, name, profileImage); + } + + public static User withId(Long id, String uid, String name, String profileImage) { + return new User(id, uid, name, profileImage); + } + + public void rename(String name) { + this.name = name; + } } From c8080ad011f942bbb8618a232e03fe0dbaae9c62 Mon Sep 17 00:00:00 2001 From: leesky Date: Wed, 29 Mar 2023 17:33:52 +0900 Subject: [PATCH 026/141] =?UTF-8?q?test=20:=20rename=20=EB=A1=9C=EC=A7=81?= =?UTF-8?q?=20=EB=8B=A8=EC=9C=84=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EC=9E=91?= =?UTF-8?q?=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../yapp/artie/domain/user/domain/UserTest.java | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/src/test/java/com/yapp/artie/domain/user/domain/UserTest.java b/src/test/java/com/yapp/artie/domain/user/domain/UserTest.java index 7ba4de7c..8c830177 100644 --- a/src/test/java/com/yapp/artie/domain/user/domain/UserTest.java +++ b/src/test/java/com/yapp/artie/domain/user/domain/UserTest.java @@ -1,12 +1,25 @@ package com.yapp.artie.domain.user.domain; +import static org.assertj.core.api.Assertions.assertThat; + import com.yapp.artie.domain.user.adapter.out.persistence.UserJpaEntity; import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; @DisplayName("User 테스트") public class UserTest { - public static final UserJpaEntity TEST_USER = UserJpaEntity.create("test-uid", "test-name", "test-profile"); - public static final UserJpaEntity TEST_SAVED_USER = UserJpaEntity.create(1L, "test-uid", "test-name", + public static final UserJpaEntity TEST_USER = UserJpaEntity.create("test-uid", "test-name", + "test-profile"); + public static final UserJpaEntity TEST_SAVED_USER = UserJpaEntity.create(1L, "test-uid", + "test-name", "test-profile"); + + @Test + void rename_사용자_이름을_변경한다() { + // TODO : 데이터 생성 편의 클래스에서 도메인 엔티티를 반환하도록 변경 + User user = User.withId(1L, "test", "lee", null); + user.rename("tomcat"); + assertThat(user.getName()).isEqualTo("tomcat"); + } } \ No newline at end of file From ae14cd24b74b7bb367508585ae0621cc3b8ac338 Mon Sep 17 00:00:00 2001 From: leesky Date: Wed, 29 Mar 2023 17:38:41 +0900 Subject: [PATCH 027/141] =?UTF-8?q?feat=20:=20UserMapper=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../out/persistence/UserJpaEntity.java | 2 ++ .../adapter/out/persistence/UserMapper.java | 19 +++++++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/src/main/java/com/yapp/artie/domain/user/adapter/out/persistence/UserJpaEntity.java b/src/main/java/com/yapp/artie/domain/user/adapter/out/persistence/UserJpaEntity.java index c1e8a624..477422e6 100644 --- a/src/main/java/com/yapp/artie/domain/user/adapter/out/persistence/UserJpaEntity.java +++ b/src/main/java/com/yapp/artie/domain/user/adapter/out/persistence/UserJpaEntity.java @@ -6,6 +6,7 @@ import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; +import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; @@ -15,6 +16,7 @@ @Getter @Setter @NoArgsConstructor +@AllArgsConstructor public class UserJpaEntity extends BaseEntity { @Id diff --git a/src/main/java/com/yapp/artie/domain/user/adapter/out/persistence/UserMapper.java b/src/main/java/com/yapp/artie/domain/user/adapter/out/persistence/UserMapper.java index f1696112..a8462764 100644 --- a/src/main/java/com/yapp/artie/domain/user/adapter/out/persistence/UserMapper.java +++ b/src/main/java/com/yapp/artie/domain/user/adapter/out/persistence/UserMapper.java @@ -1,5 +1,24 @@ package com.yapp.artie.domain.user.adapter.out.persistence; +import com.yapp.artie.domain.user.domain.User; +import org.springframework.stereotype.Component; + +@Component public class UserMapper { + User mapToDomainEntity(UserJpaEntity user) { + return User.withId(user.getId(), + user.getUid(), + user.getName(), + user.getProfileImage()); + } + + UserJpaEntity mapToJpaEntity(User user) { + return new UserJpaEntity( + user.getId(), + user.getUid(), + user.getName(), + user.getProfileImage() + ); + } } From efc63b843988e18314c60dbbe6a34b9e4ef245cf Mon Sep 17 00:00:00 2001 From: leesky Date: Wed, 29 Mar 2023 17:43:08 +0900 Subject: [PATCH 028/141] =?UTF-8?q?feat=20:=20user=20=EC=98=81=EC=86=8D?= =?UTF-8?q?=EC=84=B1=20=EC=96=B4=EB=8C=91=ED=84=B0=20=EC=BF=BC=EB=A6=AC=20?= =?UTF-8?q?=EC=9D=B8=ED=84=B0=ED=8E=98=EC=9D=B4=EC=8A=A4=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../out/persistence/UserPersistenceAdapter.java | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/yapp/artie/domain/user/adapter/out/persistence/UserPersistenceAdapter.java b/src/main/java/com/yapp/artie/domain/user/adapter/out/persistence/UserPersistenceAdapter.java index 1d031e05..18d46eb7 100644 --- a/src/main/java/com/yapp/artie/domain/user/adapter/out/persistence/UserPersistenceAdapter.java +++ b/src/main/java/com/yapp/artie/domain/user/adapter/out/persistence/UserPersistenceAdapter.java @@ -5,6 +5,7 @@ import com.yapp.artie.domain.user.application.port.out.SaveUserPort; import com.yapp.artie.domain.user.application.port.out.UpdateUserStatePort; import com.yapp.artie.domain.user.domain.User; +import com.yapp.artie.domain.user.exception.UserNotFoundException; import com.yapp.artie.global.annotation.PersistenceAdapter; import lombok.RequiredArgsConstructor; @@ -18,12 +19,18 @@ class UserPersistenceAdapter implements DeleteUserPort, SaveUserPort, LoadUserPo @Override public User loadById(Long userId) { - return null; + UserJpaEntity userJpaEntity = userRepository.findById(userId) + .orElseThrow(UserNotFoundException::new); + + return userMapper.mapToDomainEntity(userJpaEntity); } @Override public User loadByUid(String uid) { - return null; + UserJpaEntity userJpaEntity = userRepository.findByUid(uid) + .orElseThrow(UserNotFoundException::new); + + return userMapper.mapToDomainEntity(userJpaEntity); } @Override From 1c6af40f4066a474fc732da2a401fa23c6667109 Mon Sep 17 00:00:00 2001 From: leesky Date: Wed, 29 Mar 2023 17:43:40 +0900 Subject: [PATCH 029/141] =?UTF-8?q?chore=20:=20import=EB=AC=B8=20=EC=B5=9C?= =?UTF-8?q?=EC=A0=81=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/user/application/service/RegisterUserService.java | 2 +- .../domain/user/application/service/RenameUserService.java | 2 +- .../domain/user/application/service/UserWithdrawalService.java | 2 +- .../com/yapp/artie/domain/user/service/UserServiceImpl.java | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/yapp/artie/domain/user/application/service/RegisterUserService.java b/src/main/java/com/yapp/artie/domain/user/application/service/RegisterUserService.java index 987d3a78..ede6128a 100644 --- a/src/main/java/com/yapp/artie/domain/user/application/service/RegisterUserService.java +++ b/src/main/java/com/yapp/artie/domain/user/application/service/RegisterUserService.java @@ -1,9 +1,9 @@ package com.yapp.artie.domain.user.application.service; import com.yapp.artie.domain.user.adapter.out.persistence.UserJpaEntity; +import com.yapp.artie.domain.user.adapter.out.persistence.UserRepository; import com.yapp.artie.domain.user.application.port.in.RegisterUserUseCase; import com.yapp.artie.domain.user.dto.response.CreateUserResponseDto; -import com.yapp.artie.domain.user.adapter.out.persistence.UserRepository; import com.yapp.artie.global.annotation.UseCase; import java.util.Optional; import lombok.RequiredArgsConstructor; diff --git a/src/main/java/com/yapp/artie/domain/user/application/service/RenameUserService.java b/src/main/java/com/yapp/artie/domain/user/application/service/RenameUserService.java index 444b8781..10e57f70 100644 --- a/src/main/java/com/yapp/artie/domain/user/application/service/RenameUserService.java +++ b/src/main/java/com/yapp/artie/domain/user/application/service/RenameUserService.java @@ -1,9 +1,9 @@ package com.yapp.artie.domain.user.application.service; import com.yapp.artie.domain.user.adapter.out.persistence.UserJpaEntity; +import com.yapp.artie.domain.user.adapter.out.persistence.UserRepository; import com.yapp.artie.domain.user.application.port.in.RenameUserUseCase; import com.yapp.artie.domain.user.exception.UserNotFoundException; -import com.yapp.artie.domain.user.adapter.out.persistence.UserRepository; import com.yapp.artie.global.annotation.UseCase; import lombok.RequiredArgsConstructor; import org.springframework.transaction.annotation.Transactional; diff --git a/src/main/java/com/yapp/artie/domain/user/application/service/UserWithdrawalService.java b/src/main/java/com/yapp/artie/domain/user/application/service/UserWithdrawalService.java index eea8c093..839cc442 100644 --- a/src/main/java/com/yapp/artie/domain/user/application/service/UserWithdrawalService.java +++ b/src/main/java/com/yapp/artie/domain/user/application/service/UserWithdrawalService.java @@ -2,9 +2,9 @@ import com.yapp.artie.domain.archive.repository.CategoryRepository; import com.yapp.artie.domain.user.adapter.out.persistence.UserJpaEntity; +import com.yapp.artie.domain.user.adapter.out.persistence.UserRepository; import com.yapp.artie.domain.user.application.port.in.UserWithdrawalUseCase; import com.yapp.artie.domain.user.exception.UserNotFoundException; -import com.yapp.artie.domain.user.adapter.out.persistence.UserRepository; import com.yapp.artie.global.annotation.UseCase; import com.yapp.artie.global.authentication.JwtService; import lombok.RequiredArgsConstructor; diff --git a/src/main/java/com/yapp/artie/domain/user/service/UserServiceImpl.java b/src/main/java/com/yapp/artie/domain/user/service/UserServiceImpl.java index ebe9c910..86a903cf 100644 --- a/src/main/java/com/yapp/artie/domain/user/service/UserServiceImpl.java +++ b/src/main/java/com/yapp/artie/domain/user/service/UserServiceImpl.java @@ -3,12 +3,12 @@ import static org.springframework.security.core.userdetails.User.builder; import com.yapp.artie.domain.user.adapter.out.persistence.UserJpaEntity; +import com.yapp.artie.domain.user.adapter.out.persistence.UserRepository; import com.yapp.artie.domain.user.application.service.RegisterUserService; import com.yapp.artie.domain.user.application.service.RenameUserService; import com.yapp.artie.domain.user.application.service.UserWithdrawalService; import com.yapp.artie.domain.user.dto.response.CreateUserResponseDto; import com.yapp.artie.domain.user.exception.UserNotFoundException; -import com.yapp.artie.domain.user.adapter.out.persistence.UserRepository; import java.util.Optional; import lombok.RequiredArgsConstructor; import org.springframework.security.core.userdetails.UserDetails; From 2b78eeae11fb7a33bd2f82218e454e6a8ab95732 Mon Sep 17 00:00:00 2001 From: leesky Date: Wed, 29 Mar 2023 17:56:07 +0900 Subject: [PATCH 030/141] =?UTF-8?q?feat=20:=20=EC=98=81=EC=86=8D=EC=84=B1?= =?UTF-8?q?=20=EC=96=B4=EB=8C=91=ED=84=B0=20=EC=BB=A4=EB=A7=A8=EB=93=9C=20?= =?UTF-8?q?=EB=A9=94=EC=84=9C=EB=93=9C=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../persistence/UserPersistenceAdapter.java | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/yapp/artie/domain/user/adapter/out/persistence/UserPersistenceAdapter.java b/src/main/java/com/yapp/artie/domain/user/adapter/out/persistence/UserPersistenceAdapter.java index 18d46eb7..42f44911 100644 --- a/src/main/java/com/yapp/artie/domain/user/adapter/out/persistence/UserPersistenceAdapter.java +++ b/src/main/java/com/yapp/artie/domain/user/adapter/out/persistence/UserPersistenceAdapter.java @@ -19,10 +19,7 @@ class UserPersistenceAdapter implements DeleteUserPort, SaveUserPort, LoadUserPo @Override public User loadById(Long userId) { - UserJpaEntity userJpaEntity = userRepository.findById(userId) - .orElseThrow(UserNotFoundException::new); - - return userMapper.mapToDomainEntity(userJpaEntity); + return userMapper.mapToDomainEntity(findByIdOrThrow(userId)); } @Override @@ -34,17 +31,23 @@ public User loadByUid(String uid) { } @Override - public void delete(User user) { - + public void save(User user) { + userRepository.save(userMapper.mapToJpaEntity(user)); } @Override - public void save(User user) { - + public void delete(User user) { + userRepository.delete(findByIdOrThrow(user.getId())); } @Override public void updateName(User user) { + UserJpaEntity userJpaEntity = findByIdOrThrow(user.getId()); + userJpaEntity.setName(user.getName()); + } + private UserJpaEntity findByIdOrThrow(Long id) { + return userRepository.findById(id) + .orElseThrow(UserNotFoundException::new); } } From 401304fa9a044a1fc896641e43b8c301f7a7a6e1 Mon Sep 17 00:00:00 2001 From: leesky Date: Wed, 29 Mar 2023 20:26:35 +0900 Subject: [PATCH 031/141] =?UTF-8?q?style=20:=20=EC=BD=94=EB=93=9C=20?= =?UTF-8?q?=EC=A0=95=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../out/persistence/UserPersistenceAdapter.java | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/yapp/artie/domain/user/adapter/out/persistence/UserPersistenceAdapter.java b/src/main/java/com/yapp/artie/domain/user/adapter/out/persistence/UserPersistenceAdapter.java index 42f44911..0d7461f2 100644 --- a/src/main/java/com/yapp/artie/domain/user/adapter/out/persistence/UserPersistenceAdapter.java +++ b/src/main/java/com/yapp/artie/domain/user/adapter/out/persistence/UserPersistenceAdapter.java @@ -24,15 +24,13 @@ public User loadById(Long userId) { @Override public User loadByUid(String uid) { - UserJpaEntity userJpaEntity = userRepository.findByUid(uid) - .orElseThrow(UserNotFoundException::new); - - return userMapper.mapToDomainEntity(userJpaEntity); + return userMapper.mapToDomainEntity(findByUidOrThrow(uid)); } @Override - public void save(User user) { - userRepository.save(userMapper.mapToJpaEntity(user)); + public Long save(User user) { + UserJpaEntity entity = userRepository.save(userMapper.mapToJpaEntity(user)); + return entity.getId(); } @Override @@ -46,6 +44,11 @@ public void updateName(User user) { userJpaEntity.setName(user.getName()); } + private UserJpaEntity findByUidOrThrow(String uid) { + return userRepository.findByUid(uid) + .orElseThrow(UserNotFoundException::new); + } + private UserJpaEntity findByIdOrThrow(Long id) { return userRepository.findById(id) .orElseThrow(UserNotFoundException::new); From e492cc68b7ecf4339978292ebb95e6720b71d5b9 Mon Sep 17 00:00:00 2001 From: leesky Date: Wed, 29 Mar 2023 20:27:02 +0900 Subject: [PATCH 032/141] =?UTF-8?q?fix=20:=20save=20=EB=B0=98=ED=99=98?= =?UTF-8?q?=EA=B0=92=20Long=EC=9C=BC=EB=A1=9C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../artie/domain/user/application/port/out/SaveUserPort.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/yapp/artie/domain/user/application/port/out/SaveUserPort.java b/src/main/java/com/yapp/artie/domain/user/application/port/out/SaveUserPort.java index 04697283..4c7133a9 100644 --- a/src/main/java/com/yapp/artie/domain/user/application/port/out/SaveUserPort.java +++ b/src/main/java/com/yapp/artie/domain/user/application/port/out/SaveUserPort.java @@ -4,5 +4,5 @@ public interface SaveUserPort { - void save(User user); + Long save(User user); } From f628caca24a6a80e9857460913ebbeca376a5703 Mon Sep 17 00:00:00 2001 From: leesky Date: Thu, 30 Mar 2023 00:59:44 +0900 Subject: [PATCH 033/141] =?UTF-8?q?fix=20:=20Entity=20=EC=95=A0=EB=85=B8?= =?UTF-8?q?=ED=85=8C=EC=9D=B4=EC=85=98=EC=9C=BC=EB=A1=9C=20user=20?= =?UTF-8?q?=ED=85=8C=EC=9D=B4=EB=B8=94=EC=97=90=20=EB=A7=A4=ED=95=91?= =?UTF-8?q?=ED=95=98=EB=8F=84=EB=A1=9D=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/user/adapter/out/persistence/UserJpaEntity.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/com/yapp/artie/domain/user/adapter/out/persistence/UserJpaEntity.java b/src/main/java/com/yapp/artie/domain/user/adapter/out/persistence/UserJpaEntity.java index 477422e6..ef380fbd 100644 --- a/src/main/java/com/yapp/artie/domain/user/adapter/out/persistence/UserJpaEntity.java +++ b/src/main/java/com/yapp/artie/domain/user/adapter/out/persistence/UserJpaEntity.java @@ -6,6 +6,7 @@ import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; +import javax.persistence.Table; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; @@ -13,6 +14,7 @@ @Entity +@Table(name = "user") @Getter @Setter @NoArgsConstructor From 197da901b8e4b4a5c9d9d42af0113b242f4ea271 Mon Sep 17 00:00:00 2001 From: leesky Date: Thu, 30 Mar 2023 01:00:10 +0900 Subject: [PATCH 034/141] =?UTF-8?q?fix=20:=20UserMapper=20=EC=9D=B8?= =?UTF-8?q?=EC=9E=90=20=EC=88=9C=EC=84=9C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/user/adapter/out/persistence/UserMapper.java | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/yapp/artie/domain/user/adapter/out/persistence/UserMapper.java b/src/main/java/com/yapp/artie/domain/user/adapter/out/persistence/UserMapper.java index a8462764..c0972888 100644 --- a/src/main/java/com/yapp/artie/domain/user/adapter/out/persistence/UserMapper.java +++ b/src/main/java/com/yapp/artie/domain/user/adapter/out/persistence/UserMapper.java @@ -9,16 +9,17 @@ public class UserMapper { User mapToDomainEntity(UserJpaEntity user) { return User.withId(user.getId(), user.getUid(), - user.getName(), - user.getProfileImage()); + user.getProfileImage(), + user.getName() + ); } UserJpaEntity mapToJpaEntity(User user) { return new UserJpaEntity( user.getId(), user.getUid(), - user.getName(), - user.getProfileImage() + user.getProfileImage(), + user.getName() ); } } From 99e7d2a1983851f671a05ec2f73d556c4ce932c2 Mon Sep 17 00:00:00 2001 From: leesky Date: Thu, 30 Mar 2023 01:01:44 +0900 Subject: [PATCH 035/141] =?UTF-8?q?refactor=20:=20findByOrThrow=20->=20fin?= =?UTF-8?q?dByOrElseThrow=EB=A1=9C=20=EC=9D=B4=EB=A6=84=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../out/persistence/UserPersistenceAdapter.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/yapp/artie/domain/user/adapter/out/persistence/UserPersistenceAdapter.java b/src/main/java/com/yapp/artie/domain/user/adapter/out/persistence/UserPersistenceAdapter.java index 0d7461f2..e45759d0 100644 --- a/src/main/java/com/yapp/artie/domain/user/adapter/out/persistence/UserPersistenceAdapter.java +++ b/src/main/java/com/yapp/artie/domain/user/adapter/out/persistence/UserPersistenceAdapter.java @@ -19,12 +19,12 @@ class UserPersistenceAdapter implements DeleteUserPort, SaveUserPort, LoadUserPo @Override public User loadById(Long userId) { - return userMapper.mapToDomainEntity(findByIdOrThrow(userId)); + return userMapper.mapToDomainEntity(findByIdOrElseThrow(userId)); } @Override public User loadByUid(String uid) { - return userMapper.mapToDomainEntity(findByUidOrThrow(uid)); + return userMapper.mapToDomainEntity(findByUidOrElseThrow(uid)); } @Override @@ -35,21 +35,21 @@ public Long save(User user) { @Override public void delete(User user) { - userRepository.delete(findByIdOrThrow(user.getId())); + userRepository.delete(findByIdOrElseThrow(user.getId())); } @Override public void updateName(User user) { - UserJpaEntity userJpaEntity = findByIdOrThrow(user.getId()); + UserJpaEntity userJpaEntity = findByIdOrElseThrow(user.getId()); userJpaEntity.setName(user.getName()); } - private UserJpaEntity findByUidOrThrow(String uid) { + private UserJpaEntity findByUidOrElseThrow(String uid) { return userRepository.findByUid(uid) .orElseThrow(UserNotFoundException::new); } - private UserJpaEntity findByIdOrThrow(Long id) { + private UserJpaEntity findByIdOrElseThrow(Long id) { return userRepository.findById(id) .orElseThrow(UserNotFoundException::new); } From cc47db1082307009db78820cc9ae5414c36a469f Mon Sep 17 00:00:00 2001 From: leesky Date: Thu, 30 Mar 2023 01:02:08 +0900 Subject: [PATCH 036/141] =?UTF-8?q?fix=20:=20@Repository=20=EC=95=A0?= =?UTF-8?q?=EB=85=B8=ED=85=8C=EC=9D=B4=EC=85=98=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/user/adapter/out/persistence/UserRepository.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/com/yapp/artie/domain/user/adapter/out/persistence/UserRepository.java b/src/main/java/com/yapp/artie/domain/user/adapter/out/persistence/UserRepository.java index 34a781bb..9d476321 100644 --- a/src/main/java/com/yapp/artie/domain/user/adapter/out/persistence/UserRepository.java +++ b/src/main/java/com/yapp/artie/domain/user/adapter/out/persistence/UserRepository.java @@ -4,7 +4,6 @@ import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; -@Repository public interface UserRepository extends JpaRepository { Optional findByUid(String uid); From a0f76a90dffeaf1c1a2567c073cba26a0ace829b Mon Sep 17 00:00:00 2001 From: leesky Date: Thu, 30 Mar 2023 01:02:44 +0900 Subject: [PATCH 037/141] =?UTF-8?q?fix=20:=20=ED=8C=A9=ED=86=A0=EB=A6=AC?= =?UTF-8?q?=20=EB=A9=94=EC=84=9C=EB=93=9C=20=ED=8C=8C=EB=9D=BC=EB=AF=B8?= =?UTF-8?q?=ED=84=B0=20=EC=88=9C=EC=84=9C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/yapp/artie/domain/user/domain/User.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/yapp/artie/domain/user/domain/User.java b/src/main/java/com/yapp/artie/domain/user/domain/User.java index 0a4aa2f8..f650692f 100644 --- a/src/main/java/com/yapp/artie/domain/user/domain/User.java +++ b/src/main/java/com/yapp/artie/domain/user/domain/User.java @@ -13,12 +13,12 @@ public class User { private final String profileImage; private String name; - public static User withoutId(String uid, String name, String profileImage) { - return new User(null, uid, name, profileImage); + public static User withoutId(String uid, String profileImage, String name) { + return new User(null, uid, profileImage, name); } - public static User withId(Long id, String uid, String name, String profileImage) { - return new User(id, uid, name, profileImage); + public static User withId(Long id, String uid, String profileImage, String name) { + return new User(id, uid, profileImage, name); } public void rename(String name) { From 9c7b94ce897ee52daa057429367ab87ee847042b Mon Sep 17 00:00:00 2001 From: leesky Date: Thu, 30 Mar 2023 01:04:20 +0900 Subject: [PATCH 038/141] =?UTF-8?q?chore=20:=20format-sql=20=EC=98=B5?= =?UTF-8?q?=EC=85=98=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/resources/application.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/test/resources/application.yml b/src/test/resources/application.yml index dc44b2f6..3f0b6eb2 100644 --- a/src/test/resources/application.yml +++ b/src/test/resources/application.yml @@ -8,7 +8,8 @@ spring: properties: hibernate: auto_quote_keyword: true - format_sql: true + format_sql: true + show-sql : true hibernate: ddl-auto: create-drop show-sql: true From 4f1d68a9956ac41dbdaa846e5c742b23dc147c42 Mon Sep 17 00:00:00 2001 From: leesky Date: Thu, 30 Mar 2023 01:05:34 +0900 Subject: [PATCH 039/141] =?UTF-8?q?test=20:=20=EC=98=81=EC=86=8D=EC=84=B1?= =?UTF-8?q?=20=EC=96=B4=EB=8C=91=ED=84=B0=20=ED=86=B5=ED=95=A9=20=ED=85=8C?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../UserPersistenceAdapterTest.java | 99 +++++++++++++++++++ .../service/RenameUserServiceTest.java | 2 - .../UserPersistenceAdapterTest.sql | 31 ++++++ 3 files changed, 130 insertions(+), 2 deletions(-) create mode 100644 src/test/java/com/yapp/artie/domain/user/adapter/out/persistence/UserPersistenceAdapterTest.java create mode 100644 src/test/resources/com/yapp/artie/domain/user/adapter/out/persistence/UserPersistenceAdapterTest.sql diff --git a/src/test/java/com/yapp/artie/domain/user/adapter/out/persistence/UserPersistenceAdapterTest.java b/src/test/java/com/yapp/artie/domain/user/adapter/out/persistence/UserPersistenceAdapterTest.java new file mode 100644 index 00000000..4df569d3 --- /dev/null +++ b/src/test/java/com/yapp/artie/domain/user/adapter/out/persistence/UserPersistenceAdapterTest.java @@ -0,0 +1,99 @@ +package com.yapp.artie.domain.user.adapter.out.persistence; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; + +import com.yapp.artie.domain.user.domain.User; +import com.yapp.artie.domain.user.exception.UserNotFoundException; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabase; +import org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabase.Replace; +import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; +import org.springframework.context.annotation.Import; +import org.springframework.test.context.jdbc.Sql; + +@DataJpaTest +@Import({UserPersistenceAdapter.class, UserMapper.class}) +@AutoConfigureTestDatabase(replace = Replace.NONE) +class UserPersistenceAdapterTest { + + @Autowired + private UserPersistenceAdapter adapterUnderTest; + + @Autowired + private UserRepository userRepository; + + @Test + @Sql("UserPersistenceAdapterTest.sql") + void loadById_id를_이용해서_사용자_조회() { + User user = adapterUnderTest.loadById(1L); + assertThat(user.getName()).isEqualTo("이하늘"); + } + + @Test + void loadById_사용자를_찾을_수_없으면_예외를_발생한다() { + assertThatThrownBy(() -> { + adapterUnderTest.loadById(1L); + }).isInstanceOf(UserNotFoundException.class); + } + + @Test + @Sql("UserPersistenceAdapterTest.sql") + void loadById_uid를_이용해서_사용자_조회() { + User user = adapterUnderTest.loadByUid("mock-01"); + assertThat(user.getName()).isEqualTo("이하늘"); + } + + @Test + void loadByUid_사용자를_찾을_수_없으면_예외를_발생한다() { + assertThatThrownBy(() -> { + adapterUnderTest.loadByUid("no-user-uid"); + }).isInstanceOf(UserNotFoundException.class); + } + + @Test + @Sql("UserPersistenceAdapterTest.sql") + void delete_사용자를_데이터베이스에서_삭제한다() { + adapterUnderTest.delete(adapterUnderTest.loadById(1L)); + + assertThat(userRepository.count()).isEqualTo(5); + assertThatThrownBy(() -> { + adapterUnderTest.loadById(1L); + }).isInstanceOf(UserNotFoundException.class); + } + + @Test + void delete_사용자를_찾을_수_없으면_예외를_발생한다() { + assertThatThrownBy(() -> { + adapterUnderTest.delete(adapterUnderTest.loadById(1L)); + }).isInstanceOf(UserNotFoundException.class); + } + + @Test + void save_사용자를_데이터베이스에_저장한다() { + adapterUnderTest.save(User.withoutId("sample", "test", "tomcat")); + assertThat(userRepository.count()).isEqualTo(1); + } + + @Test + @Sql("UserPersistenceAdapterTest.sql") + void updateName_사용자의_이름을_변경한다() { + User user = adapterUnderTest.loadById(1L); + user.rename("tomcat"); + + adapterUnderTest.updateName(user); + + String actual = userRepository.findById(1L) + .orElseThrow() + .getName(); + assertThat(actual).isEqualTo("tomcat"); + } + + @Test + void updateName_사용자를_찾을_수_없으면_예외를_발생한다() { + assertThatThrownBy(() -> { + adapterUnderTest.updateName(User.withId(1L, "sample", "test", "not tomcat")); + }).isInstanceOf(UserNotFoundException.class); + } +} \ No newline at end of file diff --git a/src/test/java/com/yapp/artie/domain/user/application/service/RenameUserServiceTest.java b/src/test/java/com/yapp/artie/domain/user/application/service/RenameUserServiceTest.java index 5b4cb14d..8b448525 100644 --- a/src/test/java/com/yapp/artie/domain/user/application/service/RenameUserServiceTest.java +++ b/src/test/java/com/yapp/artie/domain/user/application/service/RenameUserServiceTest.java @@ -52,6 +52,4 @@ private void givenUserFindWillFail() { given(userRepository.findById(any())) .willThrow(UserNotFoundException.class); } - - } \ No newline at end of file diff --git a/src/test/resources/com/yapp/artie/domain/user/adapter/out/persistence/UserPersistenceAdapterTest.sql b/src/test/resources/com/yapp/artie/domain/user/adapter/out/persistence/UserPersistenceAdapterTest.sql new file mode 100644 index 00000000..87bb8ded --- /dev/null +++ b/src/test/resources/com/yapp/artie/domain/user/adapter/out/persistence/UserPersistenceAdapterTest.sql @@ -0,0 +1,31 @@ +INSERT INTO `user` + (id, created_at, updated_at, name, profile_image, uid) +VALUES (1, '2023-02-04 21:58:50', '2023-02-04 21:58:50', '이하늘', + 'https://avatars.githubusercontent.com/u/39932141?v=4', 'mock-01'); + +INSERT INTO `user` + (id, created_at, updated_at, name, profile_image, uid) +VALUES (2, '2023-02-04 21:58:50', '2023-02-04 21:58:50', '김하늘', + 'https://avatars.githubusercontent.com/u/39932141?v=4', 'mock-02'); + +INSERT INTO `user` + (id, created_at, updated_at, name, profile_image, uid) +VALUES (3, '2023-02-04 21:58:50', '2023-02-04 21:58:50', '박하늘', + 'https://avatars.githubusercontent.com/u/39932141?v=4', 'mock-03'); + +INSERT INTO `user` + (id, created_at, updated_at, name, profile_image, uid) +VALUES (4, '2023-02-04 21:58:50', '2023-02-04 21:58:50', '강하늘', + 'https://avatars.githubusercontent.com/u/39932141?v=4', 'mock-04'); + +INSERT INTO `user` + (id, created_at, updated_at, name, profile_image, uid) +VALUES (5, '2023-02-04 21:58:50', '2023-02-04 21:58:50', '최하늘', + 'https://avatars.githubusercontent.com/u/39932141?v=4', 'mock-05'); + +INSERT INTO `user` + (id, created_at, updated_at, name, profile_image, uid) +VALUES (6, '2023-02-04 21:58:50', '2023-02-04 21:58:50', '권하늘', + 'https://avatars.githubusercontent.com/u/39932141?v=4', 'mock-06'); + + From 1415aba5e9a66b0d0aee4391db95e5ecb90d57db Mon Sep 17 00:00:00 2001 From: leesky Date: Thu, 30 Mar 2023 01:28:00 +0900 Subject: [PATCH 040/141] =?UTF-8?q?fix=20:=20Renameservice=EC=99=80=20?= =?UTF-8?q?=ED=85=8C=EC=8A=A4=ED=8A=B8=EC=97=90=EC=84=9C=20=EC=95=84?= =?UTF-8?q?=EC=9B=83=20=ED=8F=AC=ED=8A=B8=20=EC=82=AC=EC=9A=A9=ED=95=98?= =?UTF-8?q?=EB=8F=84=EB=A1=9D=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/RenameUserService.java | 15 +++++----- .../service/RenameUserServiceTest.java | 28 +++++++++---------- 2 files changed, 22 insertions(+), 21 deletions(-) diff --git a/src/main/java/com/yapp/artie/domain/user/application/service/RenameUserService.java b/src/main/java/com/yapp/artie/domain/user/application/service/RenameUserService.java index 10e57f70..a4cdbaa3 100644 --- a/src/main/java/com/yapp/artie/domain/user/application/service/RenameUserService.java +++ b/src/main/java/com/yapp/artie/domain/user/application/service/RenameUserService.java @@ -1,9 +1,9 @@ package com.yapp.artie.domain.user.application.service; -import com.yapp.artie.domain.user.adapter.out.persistence.UserJpaEntity; -import com.yapp.artie.domain.user.adapter.out.persistence.UserRepository; import com.yapp.artie.domain.user.application.port.in.RenameUserUseCase; -import com.yapp.artie.domain.user.exception.UserNotFoundException; +import com.yapp.artie.domain.user.application.port.out.LoadUserPort; +import com.yapp.artie.domain.user.application.port.out.UpdateUserStatePort; +import com.yapp.artie.domain.user.domain.User; import com.yapp.artie.global.annotation.UseCase; import lombok.RequiredArgsConstructor; import org.springframework.transaction.annotation.Transactional; @@ -13,13 +13,14 @@ @RequiredArgsConstructor public class RenameUserService implements RenameUserUseCase { - private final UserRepository userRepository; + private final LoadUserPort loadUserPort; + private final UpdateUserStatePort updateUserStatePort; @Override public void rename(Long userId, String name) { - UserJpaEntity user = userRepository.findById(userId) - .orElseThrow(UserNotFoundException::new); + User user = loadUserPort.loadById(userId); + user.rename(name); - user.setName(name); + updateUserStatePort.updateName(user); } } \ No newline at end of file diff --git a/src/test/java/com/yapp/artie/domain/user/application/service/RenameUserServiceTest.java b/src/test/java/com/yapp/artie/domain/user/application/service/RenameUserServiceTest.java index 8b448525..e2192aca 100644 --- a/src/test/java/com/yapp/artie/domain/user/application/service/RenameUserServiceTest.java +++ b/src/test/java/com/yapp/artie/domain/user/application/service/RenameUserServiceTest.java @@ -6,17 +6,19 @@ import static org.mockito.ArgumentMatchers.any; import static org.mockito.BDDMockito.given; -import com.yapp.artie.domain.user.adapter.out.persistence.UserJpaEntity; +import com.yapp.artie.domain.user.application.port.out.LoadUserPort; +import com.yapp.artie.domain.user.application.port.out.UpdateUserStatePort; +import com.yapp.artie.domain.user.domain.User; import com.yapp.artie.domain.user.exception.UserNotFoundException; -import com.yapp.artie.domain.user.adapter.out.persistence.UserRepository; -import java.util.Optional; import org.junit.jupiter.api.Test; import org.mockito.Mockito; class RenameUserServiceTest { - private final UserRepository userRepository = Mockito.mock(UserRepository.class); - private final RenameUserService renameUserService = new RenameUserService(userRepository); + private final UpdateUserStatePort updateUserStatePort = Mockito.mock(UpdateUserStatePort.class); + private final LoadUserPort loadUserPort = Mockito.mock(LoadUserPort.class); + private final RenameUserService renameUserService = new RenameUserService(loadUserPort, + updateUserStatePort); @Test void rename_사용자를_찾을_수_없으면_예외를_발생한다() { @@ -27,12 +29,11 @@ class RenameUserServiceTest { @Test void rename_주어진_이름으로_사용자의_이름이_변경된다() { - UserJpaEntity user = defaultUser().build(); + User user = defaultUser().build(); givenUserByReference(user); - String beforeName = userRepository - .findById(1L) - .orElseThrow() + String beforeName = loadUserPort + .loadById(1L) .getName(); String expectedName = "tomcat"; @@ -42,14 +43,13 @@ class RenameUserServiceTest { assertThat(user.getName()).isNotEqualTo(beforeName); } - - private void givenUserByReference(UserJpaEntity user) { - given(userRepository.findById(any())) - .willReturn(Optional.ofNullable(user)); + private void givenUserByReference(User user) { + given(loadUserPort.loadById(any())) + .willReturn(user); } private void givenUserFindWillFail() { - given(userRepository.findById(any())) + given(loadUserPort.loadById(any())) .willThrow(UserNotFoundException.class); } } \ No newline at end of file From 00e8e0d968fe0aa20bd935b44133df2ea44683cb Mon Sep 17 00:00:00 2001 From: leesky Date: Thu, 30 Mar 2023 01:28:26 +0900 Subject: [PATCH 041/141] =?UTF-8?q?fix=20:=20UsetTestData=EC=97=90?= =?UTF-8?q?=EC=84=9C=20=EB=8F=84=EB=A9=94=EC=9D=B8=20=EA=B0=9D=EC=B2=B4=20?= =?UTF-8?q?=EB=B0=98=ED=99=98=ED=95=98=EB=8F=84=EB=A1=9D=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/yapp/artie/common/UserTestData.java | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/src/test/java/com/yapp/artie/common/UserTestData.java b/src/test/java/com/yapp/artie/common/UserTestData.java index 3b7fe4fc..a5d1a0a2 100644 --- a/src/test/java/com/yapp/artie/common/UserTestData.java +++ b/src/test/java/com/yapp/artie/common/UserTestData.java @@ -1,6 +1,6 @@ package com.yapp.artie.common; -import com.yapp.artie.domain.user.adapter.out.persistence.UserJpaEntity; +import com.yapp.artie.domain.user.domain.User; public class UserTestData { @@ -20,13 +20,11 @@ public static class UserBuilder { private String name; private String profileImage; - public UserBuilder withId(Long id) { this.id = id; return this; } - public UserBuilder withUid(String uid) { this.uid = uid; return this; @@ -43,12 +41,12 @@ public UserBuilder withProfileImage(String profileImage) { return this; } - public UserJpaEntity build() { - return UserJpaEntity.create( + public User build() { + return User.withId( this.id, this.uid, - this.name, - this.profileImage + this.profileImage, + this.name ); } } From 919dc9fd07d25a0460c575cc3f2c1816c052d707 Mon Sep 17 00:00:00 2001 From: leesky Date: Thu, 30 Mar 2023 01:30:57 +0900 Subject: [PATCH 042/141] =?UTF-8?q?fix=20:=20=EC=98=81=EC=86=8D=EC=84=B1?= =?UTF-8?q?=20=EC=96=B4=EB=8C=91=ED=84=B0=EC=97=90=EC=84=9C=20defaultUser?= =?UTF-8?q?=20=EC=82=AC=EC=9A=A9=ED=95=98=EB=8F=84=EB=A1=9D=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../adapter/out/persistence/UserPersistenceAdapterTest.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/test/java/com/yapp/artie/domain/user/adapter/out/persistence/UserPersistenceAdapterTest.java b/src/test/java/com/yapp/artie/domain/user/adapter/out/persistence/UserPersistenceAdapterTest.java index 4df569d3..ecaecd96 100644 --- a/src/test/java/com/yapp/artie/domain/user/adapter/out/persistence/UserPersistenceAdapterTest.java +++ b/src/test/java/com/yapp/artie/domain/user/adapter/out/persistence/UserPersistenceAdapterTest.java @@ -1,5 +1,6 @@ package com.yapp.artie.domain.user.adapter.out.persistence; +import static com.yapp.artie.common.UserTestData.defaultUser; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; @@ -72,7 +73,7 @@ class UserPersistenceAdapterTest { @Test void save_사용자를_데이터베이스에_저장한다() { - adapterUnderTest.save(User.withoutId("sample", "test", "tomcat")); + adapterUnderTest.save(defaultUser().withId(null).build()); assertThat(userRepository.count()).isEqualTo(1); } @@ -93,7 +94,7 @@ class UserPersistenceAdapterTest { @Test void updateName_사용자를_찾을_수_없으면_예외를_발생한다() { assertThatThrownBy(() -> { - adapterUnderTest.updateName(User.withId(1L, "sample", "test", "not tomcat")); + adapterUnderTest.updateName(defaultUser().build()); }).isInstanceOf(UserNotFoundException.class); } } \ No newline at end of file From 7f0f725894455440dcfa7c87302f4d239268e838 Mon Sep 17 00:00:00 2001 From: leesky Date: Thu, 30 Mar 2023 02:06:17 +0900 Subject: [PATCH 043/141] =?UTF-8?q?fix=20:=20RegisterUserService=EC=99=80?= =?UTF-8?q?=20=ED=85=8C=EC=8A=A4=ED=8A=B8=EC=97=90=EC=84=9C=20=EC=95=84?= =?UTF-8?q?=EC=9B=83=20=ED=8F=AC=ED=8A=B8=20=EC=82=AC=EC=9A=A9=ED=95=98?= =?UTF-8?q?=EB=8F=84=EB=A1=9D=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/RegisterUserService.java | 27 +++++++++----- .../service/RegisterUserServiceTest.java | 35 +++++++++++-------- 2 files changed, 39 insertions(+), 23 deletions(-) diff --git a/src/main/java/com/yapp/artie/domain/user/application/service/RegisterUserService.java b/src/main/java/com/yapp/artie/domain/user/application/service/RegisterUserService.java index ede6128a..5c6c0943 100644 --- a/src/main/java/com/yapp/artie/domain/user/application/service/RegisterUserService.java +++ b/src/main/java/com/yapp/artie/domain/user/application/service/RegisterUserService.java @@ -1,11 +1,12 @@ package com.yapp.artie.domain.user.application.service; -import com.yapp.artie.domain.user.adapter.out.persistence.UserJpaEntity; -import com.yapp.artie.domain.user.adapter.out.persistence.UserRepository; import com.yapp.artie.domain.user.application.port.in.RegisterUserUseCase; +import com.yapp.artie.domain.user.application.port.out.LoadUserPort; +import com.yapp.artie.domain.user.application.port.out.SaveUserPort; +import com.yapp.artie.domain.user.domain.User; import com.yapp.artie.domain.user.dto.response.CreateUserResponseDto; +import com.yapp.artie.domain.user.exception.UserNotFoundException; import com.yapp.artie.global.annotation.UseCase; -import java.util.Optional; import lombok.RequiredArgsConstructor; import org.springframework.transaction.annotation.Transactional; @@ -14,16 +15,24 @@ @RequiredArgsConstructor public class RegisterUserService implements RegisterUserUseCase { - private final UserRepository userRepository; + private final LoadUserPort loadUserPort; + private final SaveUserPort saveUserPort; @Override public CreateUserResponseDto register(final String uid, final String username, final String picture) { + try { + return new CreateUserResponseDto(getIdIfExists(uid)); + } catch (UserNotFoundException notFoundException) { + return new CreateUserResponseDto(saveUser(User.withoutId(uid, picture, username))); + } + } + + private Long saveUser(final User user) { + return saveUserPort.save(user); + } - final Optional user = userRepository.findByUid(uid); - return user.map(entity -> new CreateUserResponseDto(entity.getId())) - .orElseGet(() -> new CreateUserResponseDto(userRepository - .save(UserJpaEntity.create(uid, username, picture)) - .getId())); + private Long getIdIfExists(final String uid) { + return loadUserPort.loadByUid(uid).getId(); } } \ No newline at end of file diff --git a/src/test/java/com/yapp/artie/domain/user/application/service/RegisterUserServiceTest.java b/src/test/java/com/yapp/artie/domain/user/application/service/RegisterUserServiceTest.java index 454e0ae9..702b15d4 100644 --- a/src/test/java/com/yapp/artie/domain/user/application/service/RegisterUserServiceTest.java +++ b/src/test/java/com/yapp/artie/domain/user/application/service/RegisterUserServiceTest.java @@ -7,16 +7,19 @@ import static org.mockito.BDDMockito.then; import static org.mockito.Mockito.never; +import com.yapp.artie.domain.user.application.port.out.LoadUserPort; +import com.yapp.artie.domain.user.application.port.out.SaveUserPort; import com.yapp.artie.domain.user.dto.response.CreateUserResponseDto; -import com.yapp.artie.domain.user.adapter.out.persistence.UserRepository; -import java.util.Optional; +import com.yapp.artie.domain.user.exception.UserNotFoundException; import org.junit.jupiter.api.Test; import org.mockito.Mockito; class RegisterUserServiceTest { - private final UserRepository userRepository = Mockito.mock(UserRepository.class); - private final RegisterUserService registerUserService = new RegisterUserService(userRepository); + private final LoadUserPort loadUserPort = Mockito.mock(LoadUserPort.class); + private final SaveUserPort saveUserPort = Mockito.mock(SaveUserPort.class); + private final RegisterUserService registerUserService = new RegisterUserService(loadUserPort, + saveUserPort); @Test void register_이미_등록된_사용자라면_ID를_그대로_반환한다() { @@ -29,7 +32,7 @@ class RegisterUserServiceTest { void register_이미_등록된_사용자라면_저장소에_저장하지_않는다() { givenUser(); registerUserService.register("1", "test", null); - then(userRepository) + then(saveUserPort) .should(never()) .save(any()); } @@ -37,23 +40,27 @@ class RegisterUserServiceTest { @Test void register_신규_사용자라면_새로운_id를_부여받는다() { Long expectedId = 2L; - givenSaveWillReturnUserWithId(expectedId); + givenUserFindWithUidWillFail(); + givenSaveWillReturnId(expectedId); CreateUserResponseDto actual = registerUserService.register("1", "test", null); assertThat(actual.getId()).isEqualTo(expectedId); - then(userRepository) + then(saveUserPort) .should() .save(any()); } private void givenUser() { - given(userRepository.findByUid(any())) - .willReturn(Optional.ofNullable(defaultUser().build())); + given(loadUserPort.loadByUid(any())) + .willReturn(defaultUser().build()); } - private void givenSaveWillReturnUserWithId(Long id) { - given(userRepository.save(any())) - .willReturn(defaultUser() - .withId(id) - .build()); + private void givenSaveWillReturnId(Long id) { + given(saveUserPort.save(any())) + .willReturn(id); + } + + private void givenUserFindWithUidWillFail() { + given(loadUserPort.loadByUid(any())) + .willThrow(UserNotFoundException.class); } } \ No newline at end of file From bc23da29deb11109a6cc24e1b306f63ba1a55b32 Mon Sep 17 00:00:00 2001 From: leesky Date: Thu, 30 Mar 2023 02:19:42 +0900 Subject: [PATCH 044/141] =?UTF-8?q?fix=20:=20UserWithdrwalService=EC=99=80?= =?UTF-8?q?=20=ED=85=8C=EC=8A=A4=ED=8A=B8=EC=97=90=EC=84=9C=20=EC=95=84?= =?UTF-8?q?=EC=9B=83=20=ED=8F=AC=ED=8A=B8=EB=A5=BC=20=EC=82=AC=EC=9A=A9?= =?UTF-8?q?=ED=95=98=EB=8F=84=EB=A1=9D=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/UserWithdrawalService.java | 18 ++++++------ .../service/UserWithdrawalServiceTest.java | 28 ++++++++++--------- 2 files changed, 25 insertions(+), 21 deletions(-) diff --git a/src/main/java/com/yapp/artie/domain/user/application/service/UserWithdrawalService.java b/src/main/java/com/yapp/artie/domain/user/application/service/UserWithdrawalService.java index 839cc442..99036a19 100644 --- a/src/main/java/com/yapp/artie/domain/user/application/service/UserWithdrawalService.java +++ b/src/main/java/com/yapp/artie/domain/user/application/service/UserWithdrawalService.java @@ -2,9 +2,10 @@ import com.yapp.artie.domain.archive.repository.CategoryRepository; import com.yapp.artie.domain.user.adapter.out.persistence.UserJpaEntity; -import com.yapp.artie.domain.user.adapter.out.persistence.UserRepository; import com.yapp.artie.domain.user.application.port.in.UserWithdrawalUseCase; -import com.yapp.artie.domain.user.exception.UserNotFoundException; +import com.yapp.artie.domain.user.application.port.out.DeleteUserPort; +import com.yapp.artie.domain.user.application.port.out.LoadUserPort; +import com.yapp.artie.domain.user.domain.User; import com.yapp.artie.global.annotation.UseCase; import com.yapp.artie.global.authentication.JwtService; import lombok.RequiredArgsConstructor; @@ -17,16 +18,17 @@ public class UserWithdrawalService implements UserWithdrawalUseCase { private final JwtService jwtService; private final CategoryRepository categoryRepository; - private final UserRepository userRepository; + private final LoadUserPort loadUserPort; + private final DeleteUserPort deleteUserPort; @Override public void delete(Long id) { - UserJpaEntity user = userRepository.findById(id) - .orElseThrow(UserNotFoundException::new); - + User user = loadUserPort.loadById(id); jwtService.withdraw(user.getUid()); - categoryRepository.deleteAllByUser(user); - userRepository.delete(user); + // TODO : 꼭 변경해야함! User 도메인을 받던지 따로 입력 모델을 만들자. + categoryRepository.deleteAllByUser( + new UserJpaEntity(user.getId(), user.getUid(), user.getName(), user.getProfileImage())); + deleteUserPort.delete(user); } } \ No newline at end of file diff --git a/src/test/java/com/yapp/artie/domain/user/application/service/UserWithdrawalServiceTest.java b/src/test/java/com/yapp/artie/domain/user/application/service/UserWithdrawalServiceTest.java index 69a07478..9e3606ba 100644 --- a/src/test/java/com/yapp/artie/domain/user/application/service/UserWithdrawalServiceTest.java +++ b/src/test/java/com/yapp/artie/domain/user/application/service/UserWithdrawalServiceTest.java @@ -8,21 +8,23 @@ import static org.mockito.BDDMockito.then; import com.yapp.artie.domain.archive.repository.CategoryRepository; -import com.yapp.artie.domain.user.adapter.out.persistence.UserJpaEntity; +import com.yapp.artie.domain.user.application.port.out.DeleteUserPort; +import com.yapp.artie.domain.user.application.port.out.LoadUserPort; +import com.yapp.artie.domain.user.domain.User; import com.yapp.artie.domain.user.exception.UserNotFoundException; -import com.yapp.artie.domain.user.adapter.out.persistence.UserRepository; import com.yapp.artie.global.authentication.JwtService; -import java.util.Optional; import org.junit.jupiter.api.Test; import org.mockito.Mockito; class UserWithdrawalServiceTest { - private final UserRepository userRepository = Mockito.mock(UserRepository.class); private final CategoryRepository categoryRepository = Mockito.mock(CategoryRepository.class); private final JwtService jwtService = Mockito.mock(JwtService.class); + private final LoadUserPort loadUserPort = Mockito.mock(LoadUserPort.class); + private final DeleteUserPort deleteUserPort = Mockito.mock(DeleteUserPort.class); + private final UserWithdrawalService userWithdrawalService = new UserWithdrawalService( - jwtService, categoryRepository, userRepository); + jwtService, categoryRepository, loadUserPort, deleteUserPort); @Test void delete_사용자를_찾을_수_없으면_예외를_발생한다() { @@ -51,26 +53,26 @@ class UserWithdrawalServiceTest { @Test void delete_데이터베이스에서_사용자를_삭제하도록_요청한다() { - UserJpaEntity user = defaultUser().build(); + User user = defaultUser().build(); givenUserByReference(user); userWithdrawalService.delete(1L); - then(userRepository) + then(deleteUserPort) .should() .delete(eq(user)); } - private void givenUserByReference(UserJpaEntity user) { - given(userRepository.findById(any())) - .willReturn(Optional.ofNullable(user)); + private void givenUserByReference(User user) { + given(loadUserPort.loadById(any())) + .willReturn(user); } private void givenUser() { - given(userRepository.findById(any())) - .willReturn(Optional.ofNullable(defaultUser().build())); + given(loadUserPort.loadById(any())) + .willReturn(defaultUser().build()); } private void givenUserFindWillFail() { - given(userRepository.findById(any())) + given(loadUserPort.loadById(any())) .willThrow(UserNotFoundException.class); } } \ No newline at end of file From 5eb58e8b76f051af5b8a64668113f04239ab3bd5 Mon Sep 17 00:00:00 2001 From: leesky Date: Thu, 30 Mar 2023 04:35:03 +0900 Subject: [PATCH 045/141] =?UTF-8?q?feat=20:=20user=20jpa=20entity=20equals?= =?UTF-8?q?=20and=20hashcode=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../out/persistence/UserJpaEntity.java | 38 +++++++++++++++++-- 1 file changed, 34 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/yapp/artie/domain/user/adapter/out/persistence/UserJpaEntity.java b/src/main/java/com/yapp/artie/domain/user/adapter/out/persistence/UserJpaEntity.java index ef380fbd..305d8f88 100644 --- a/src/main/java/com/yapp/artie/domain/user/adapter/out/persistence/UserJpaEntity.java +++ b/src/main/java/com/yapp/artie/domain/user/adapter/out/persistence/UserJpaEntity.java @@ -1,6 +1,7 @@ package com.yapp.artie.domain.user.adapter.out.persistence; import com.yapp.artie.global.common.BaseEntity; +import java.util.Objects; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; @@ -24,13 +25,10 @@ public class UserJpaEntity extends BaseEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; - @Column(nullable = false) private String uid; - - private String name; - private String profileImage; + private String name; public static UserJpaEntity create(String uid, String name, String picture) { UserJpaEntity user = new UserJpaEntity(); @@ -48,4 +46,36 @@ public static UserJpaEntity create(Long id, String uid, String name, String prof user.profileImage = profileImage; return user; } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + + UserJpaEntity that = (UserJpaEntity) o; + + if (!Objects.equals(id, that.id)) { + return false; + } + if (!Objects.equals(uid, that.uid)) { + return false; + } + if (!Objects.equals(profileImage, that.profileImage)) { + return false; + } + return Objects.equals(name, that.name); + } + + @Override + public int hashCode() { + int result = id != null ? id.hashCode() : 0; + result = 31 * result + (uid != null ? uid.hashCode() : 0); + result = 31 * result + (profileImage != null ? profileImage.hashCode() : 0); + result = 31 * result + (name != null ? name.hashCode() : 0); + return result; + } } From 891406f85656bd9c76bd8c8f5dd2ae183e3fc24e Mon Sep 17 00:00:00 2001 From: leesky Date: Thu, 30 Mar 2023 04:35:45 +0900 Subject: [PATCH 046/141] =?UTF-8?q?fix=20:=20UserUsecase=20=EB=B0=98?= =?UTF-8?q?=ED=99=98=EA=B0=92=20JPA=20=EC=97=94=ED=8B=B0=ED=8B=B0=EB=A1=9C?= =?UTF-8?q?=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/user/service/UserServiceImpl.java | 33 ++++--------------- .../domain/user/service/UserUseCase.java | 7 +--- 2 files changed, 8 insertions(+), 32 deletions(-) diff --git a/src/main/java/com/yapp/artie/domain/user/service/UserServiceImpl.java b/src/main/java/com/yapp/artie/domain/user/service/UserServiceImpl.java index 86a903cf..45c6a011 100644 --- a/src/main/java/com/yapp/artie/domain/user/service/UserServiceImpl.java +++ b/src/main/java/com/yapp/artie/domain/user/service/UserServiceImpl.java @@ -1,39 +1,32 @@ package com.yapp.artie.domain.user.service; -import static org.springframework.security.core.userdetails.User.builder; - import com.yapp.artie.domain.user.adapter.out.persistence.UserJpaEntity; import com.yapp.artie.domain.user.adapter.out.persistence.UserRepository; +import com.yapp.artie.domain.user.application.service.GetUserService; import com.yapp.artie.domain.user.application.service.RegisterUserService; import com.yapp.artie.domain.user.application.service.RenameUserService; import com.yapp.artie.domain.user.application.service.UserWithdrawalService; +import com.yapp.artie.domain.user.domain.User; import com.yapp.artie.domain.user.dto.response.CreateUserResponseDto; import com.yapp.artie.domain.user.exception.UserNotFoundException; -import java.util.Optional; import lombok.RequiredArgsConstructor; -import org.springframework.security.core.userdetails.UserDetails; -import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @Service -@Transactional(readOnly = true) @RequiredArgsConstructor -public class UserServiceImpl implements UserDetailsService, UserUseCase { +public class UserServiceImpl implements UserUseCase { - private final UserRepository userRepository; private final RegisterUserService registerUserService; private final RenameUserService renameUserService; private final UserWithdrawalService userWithdrawalService; - - @Override - public Optional findByUid(String uid) { - return userRepository.findByUid(uid); - } + private final GetUserService getUserService; + private final UserRepository userRepository; @Override public UserJpaEntity findById(Long id) { - return userRepository.findById(id).orElseThrow(UserNotFoundException::new); + User user = getUserService.loadUserById(id); + return new UserJpaEntity(user.getId(), user.getUid(), user.getProfileImage(), user.getName()); } @Override @@ -46,18 +39,6 @@ public void delete(Long id) { userWithdrawalService.delete(id); } - @Override - public UserDetails loadUserByUsername(String username) { - UserJpaEntity user = userRepository.findByUid(username) - .orElseThrow(UserNotFoundException::new); - - return builder() - .username(String.valueOf(user.getId())) - .password(user.getUid()) - .authorities("user") - .build(); - } - @Override public void updateUserName(Long userId, String name) { renameUserService.rename(userId, name); diff --git a/src/main/java/com/yapp/artie/domain/user/service/UserUseCase.java b/src/main/java/com/yapp/artie/domain/user/service/UserUseCase.java index 5c71cb13..17355d44 100644 --- a/src/main/java/com/yapp/artie/domain/user/service/UserUseCase.java +++ b/src/main/java/com/yapp/artie/domain/user/service/UserUseCase.java @@ -1,21 +1,16 @@ package com.yapp.artie.domain.user.service; import com.yapp.artie.domain.user.adapter.out.persistence.UserJpaEntity; +import com.yapp.artie.domain.user.domain.User; import com.yapp.artie.domain.user.dto.response.CreateUserResponseDto; -import java.util.Optional; -import org.springframework.security.core.userdetails.UserDetails; public interface UserUseCase { - Optional findByUid(String uid); - UserJpaEntity findById(Long id); CreateUserResponseDto register(String uid, String username, String picture); void delete(Long id); - UserDetails loadUserByUsername(String username); - void updateUserName(Long userId, String name); } From fdda6d14ccef7834549df079af33dc04d8f3e332 Mon Sep 17 00:00:00 2001 From: leesky Date: Thu, 30 Mar 2023 04:37:10 +0900 Subject: [PATCH 047/141] =?UTF-8?q?style=20:=20=EC=BD=94=EB=93=9C=20?= =?UTF-8?q?=EA=B0=80=EB=8F=85=EC=84=B1=20=EC=A0=95=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../artie/domain/user/adapter/out/persistence/UserMapper.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/yapp/artie/domain/user/adapter/out/persistence/UserMapper.java b/src/main/java/com/yapp/artie/domain/user/adapter/out/persistence/UserMapper.java index c0972888..76c69a0e 100644 --- a/src/main/java/com/yapp/artie/domain/user/adapter/out/persistence/UserMapper.java +++ b/src/main/java/com/yapp/artie/domain/user/adapter/out/persistence/UserMapper.java @@ -20,6 +20,6 @@ UserJpaEntity mapToJpaEntity(User user) { user.getUid(), user.getProfileImage(), user.getName() - ); + ); } } From 8480b6877f2a758f57e5b508b65a88c6085f513b Mon Sep 17 00:00:00 2001 From: leesky Date: Thu, 30 Mar 2023 04:37:58 +0900 Subject: [PATCH 048/141] =?UTF-8?q?fix=20:=20defaultUser=20=EC=82=AC?= =?UTF-8?q?=EC=9A=A9=ED=95=98=EB=8F=84=EB=A1=9D=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/yapp/artie/domain/user/domain/UserTest.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/test/java/com/yapp/artie/domain/user/domain/UserTest.java b/src/test/java/com/yapp/artie/domain/user/domain/UserTest.java index 8c830177..f1d03528 100644 --- a/src/test/java/com/yapp/artie/domain/user/domain/UserTest.java +++ b/src/test/java/com/yapp/artie/domain/user/domain/UserTest.java @@ -1,7 +1,9 @@ package com.yapp.artie.domain.user.domain; +import static com.yapp.artie.common.UserTestData.defaultUser; import static org.assertj.core.api.Assertions.assertThat; +import com.yapp.artie.common.UserTestData; import com.yapp.artie.domain.user.adapter.out.persistence.UserJpaEntity; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; @@ -17,8 +19,7 @@ public class UserTest { @Test void rename_사용자_이름을_변경한다() { - // TODO : 데이터 생성 편의 클래스에서 도메인 엔티티를 반환하도록 변경 - User user = User.withId(1L, "test", "lee", null); + User user = defaultUser().build(); user.rename("tomcat"); assertThat(user.getName()).isEqualTo("tomcat"); } From c87aa4d1ca1e4fb9f7c8d9ff2ce60cf3201777e7 Mon Sep 17 00:00:00 2001 From: leesky Date: Thu, 30 Mar 2023 04:39:09 +0900 Subject: [PATCH 049/141] =?UTF-8?q?refactor=20:=20=EC=9D=BD=EA=B8=B0=20?= =?UTF-8?q?=EC=A0=84=EC=9A=A9=20=EC=9C=A0=EC=8A=A4=EC=BC=80=EC=9D=B4?= =?UTF-8?q?=EC=8A=A4=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../application/port/in/GetUserQuery.java | 12 +++++ .../application/service/GetUserService.java | 35 +++++++++++++ .../service/GetUserServiceTest.java | 50 +++++++++++++++++++ 3 files changed, 97 insertions(+) create mode 100644 src/main/java/com/yapp/artie/domain/user/application/port/in/GetUserQuery.java create mode 100644 src/main/java/com/yapp/artie/domain/user/application/service/GetUserService.java create mode 100644 src/test/java/com/yapp/artie/domain/user/application/service/GetUserServiceTest.java diff --git a/src/main/java/com/yapp/artie/domain/user/application/port/in/GetUserQuery.java b/src/main/java/com/yapp/artie/domain/user/application/port/in/GetUserQuery.java new file mode 100644 index 00000000..3d935016 --- /dev/null +++ b/src/main/java/com/yapp/artie/domain/user/application/port/in/GetUserQuery.java @@ -0,0 +1,12 @@ +package com.yapp.artie.domain.user.application.port.in; + +import com.yapp.artie.domain.user.domain.User; +import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.security.core.userdetails.UserDetailsService; + +public interface GetUserQuery extends UserDetailsService { + + User loadUserById(Long userId); + + UserDetails loadUserByUsername(String uid); +} diff --git a/src/main/java/com/yapp/artie/domain/user/application/service/GetUserService.java b/src/main/java/com/yapp/artie/domain/user/application/service/GetUserService.java new file mode 100644 index 00000000..27d1489e --- /dev/null +++ b/src/main/java/com/yapp/artie/domain/user/application/service/GetUserService.java @@ -0,0 +1,35 @@ +package com.yapp.artie.domain.user.application.service; + +import static org.springframework.security.core.userdetails.User.builder; + +import com.yapp.artie.domain.user.application.port.in.GetUserQuery; +import com.yapp.artie.domain.user.application.port.out.LoadUserPort; +import com.yapp.artie.domain.user.domain.User; +import com.yapp.artie.global.annotation.UseCase; +import lombok.RequiredArgsConstructor; +import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.transaction.annotation.Transactional; + +@UseCase +@Transactional(readOnly = true) +@RequiredArgsConstructor +public class GetUserService implements GetUserQuery { + + private final LoadUserPort loadUserPort; + + @Override + public User loadUserById(Long userId) { + return loadUserPort.loadById(userId); + } + + @Override + public UserDetails loadUserByUsername(String uid) { + User user = loadUserPort.loadByUid(uid); + + return builder() + .username(String.valueOf(user.getId())) + .password(user.getUid()) + .authorities("user") + .build(); + } +} diff --git a/src/test/java/com/yapp/artie/domain/user/application/service/GetUserServiceTest.java b/src/test/java/com/yapp/artie/domain/user/application/service/GetUserServiceTest.java new file mode 100644 index 00000000..5eb5af8f --- /dev/null +++ b/src/test/java/com/yapp/artie/domain/user/application/service/GetUserServiceTest.java @@ -0,0 +1,50 @@ +package com.yapp.artie.domain.user.application.service; + +import static com.yapp.artie.common.UserTestData.defaultUser; +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.BDDMockito.given; + +import com.yapp.artie.domain.user.application.port.out.LoadUserPort; +import com.yapp.artie.domain.user.domain.User; +import com.yapp.artie.domain.user.exception.UserNotFoundException; +import org.junit.jupiter.api.Test; +import org.mockito.Mockito; + +class GetUserServiceTest { + + private final LoadUserPort loadUserPort = Mockito.mock(LoadUserPort.class); + private final GetUserService getUserService = new GetUserService(loadUserPort); + + @Test + void loadUserById_사용자를_찾을_수_없으면_예외를_발생한다() { + givenUserFindWillFail(); + assertThatThrownBy(() -> getUserService.loadUserById(1L)) + .isInstanceOf(UserNotFoundException.class); + } + + @Test + void loadUserById_사용자를_조회한다() { + User user = defaultUser().build(); + givenUserByReference(user); + User actual = getUserService.loadUserById(1L); + assertThat(actual.getId()).isEqualTo(user.getId()); + } + + private void givenUserByReference(User user) { + given(loadUserPort.loadById(any())) + .willReturn(user); + } + + private void givenUser() { + given(loadUserPort.loadById(any())) + .willReturn(defaultUser().build()); + } + + private void givenUserFindWillFail() { + given(loadUserPort.loadById(any())) + .willThrow(UserNotFoundException.class); + } +} \ No newline at end of file From 4768bdbe44f7801c500698704445411ef7e516af Mon Sep 17 00:00:00 2001 From: leesky Date: Thu, 30 Mar 2023 04:40:01 +0900 Subject: [PATCH 050/141] =?UTF-8?q?chore=20:=20import=EB=AC=B8=20=EC=B5=9C?= =?UTF-8?q?=EC=A0=81=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/user/adapter/out/persistence/UserRepository.java | 1 - .../com/yapp/artie/domain/user/service/UserServiceImpl.java | 2 -- .../java/com/yapp/artie/domain/user/service/UserUseCase.java | 1 - 3 files changed, 4 deletions(-) diff --git a/src/main/java/com/yapp/artie/domain/user/adapter/out/persistence/UserRepository.java b/src/main/java/com/yapp/artie/domain/user/adapter/out/persistence/UserRepository.java index 9d476321..075a96d3 100644 --- a/src/main/java/com/yapp/artie/domain/user/adapter/out/persistence/UserRepository.java +++ b/src/main/java/com/yapp/artie/domain/user/adapter/out/persistence/UserRepository.java @@ -2,7 +2,6 @@ import java.util.Optional; import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; public interface UserRepository extends JpaRepository { diff --git a/src/main/java/com/yapp/artie/domain/user/service/UserServiceImpl.java b/src/main/java/com/yapp/artie/domain/user/service/UserServiceImpl.java index 45c6a011..96449f52 100644 --- a/src/main/java/com/yapp/artie/domain/user/service/UserServiceImpl.java +++ b/src/main/java/com/yapp/artie/domain/user/service/UserServiceImpl.java @@ -8,10 +8,8 @@ import com.yapp.artie.domain.user.application.service.UserWithdrawalService; import com.yapp.artie.domain.user.domain.User; import com.yapp.artie.domain.user.dto.response.CreateUserResponseDto; -import com.yapp.artie.domain.user.exception.UserNotFoundException; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; @Service @RequiredArgsConstructor diff --git a/src/main/java/com/yapp/artie/domain/user/service/UserUseCase.java b/src/main/java/com/yapp/artie/domain/user/service/UserUseCase.java index 17355d44..14226618 100644 --- a/src/main/java/com/yapp/artie/domain/user/service/UserUseCase.java +++ b/src/main/java/com/yapp/artie/domain/user/service/UserUseCase.java @@ -1,7 +1,6 @@ package com.yapp.artie.domain.user.service; import com.yapp.artie.domain.user.adapter.out.persistence.UserJpaEntity; -import com.yapp.artie.domain.user.domain.User; import com.yapp.artie.domain.user.dto.response.CreateUserResponseDto; public interface UserUseCase { From 47bf41263b173bc248263ec73b7818183879149a Mon Sep 17 00:00:00 2001 From: leesky Date: Thu, 30 Mar 2023 20:30:09 +0900 Subject: [PATCH 051/141] =?UTF-8?q?fix=20:=20UserThumbnailService=20?= =?UTF-8?q?=EC=9D=B4=EB=A6=84=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/GetUserThumbnailService.java} | 3 ++- .../service/GetUserThumbnailServiceTest.java} | 7 ++++--- 2 files changed, 6 insertions(+), 4 deletions(-) rename src/main/java/com/yapp/artie/domain/user/{service/UserThumbnailService.java => application/service/GetUserThumbnailService.java} (87%) rename src/test/java/com/yapp/artie/domain/user/{service/UserThumbnailServiceTest.java => application/service/GetUserThumbnailServiceTest.java} (89%) diff --git a/src/main/java/com/yapp/artie/domain/user/service/UserThumbnailService.java b/src/main/java/com/yapp/artie/domain/user/application/service/GetUserThumbnailService.java similarity index 87% rename from src/main/java/com/yapp/artie/domain/user/service/UserThumbnailService.java rename to src/main/java/com/yapp/artie/domain/user/application/service/GetUserThumbnailService.java index 69205c8c..8b7302f3 100644 --- a/src/main/java/com/yapp/artie/domain/user/service/UserThumbnailService.java +++ b/src/main/java/com/yapp/artie/domain/user/application/service/GetUserThumbnailService.java @@ -1,9 +1,10 @@ -package com.yapp.artie.domain.user.service; +package com.yapp.artie.domain.user.application.service; import com.yapp.artie.domain.archive.service.ExhibitService; import com.yapp.artie.domain.user.adapter.out.persistence.UserJpaEntity; import com.yapp.artie.domain.user.dto.response.UserThumbnailResponseDto; +import com.yapp.artie.domain.user.service.UserUseCase; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; diff --git a/src/test/java/com/yapp/artie/domain/user/service/UserThumbnailServiceTest.java b/src/test/java/com/yapp/artie/domain/user/application/service/GetUserThumbnailServiceTest.java similarity index 89% rename from src/test/java/com/yapp/artie/domain/user/service/UserThumbnailServiceTest.java rename to src/test/java/com/yapp/artie/domain/user/application/service/GetUserThumbnailServiceTest.java index cc1017d3..2906c3de 100644 --- a/src/test/java/com/yapp/artie/domain/user/service/UserThumbnailServiceTest.java +++ b/src/test/java/com/yapp/artie/domain/user/application/service/GetUserThumbnailServiceTest.java @@ -8,6 +8,7 @@ import com.yapp.artie.domain.archive.service.CategoryService; import com.yapp.artie.domain.archive.service.ExhibitService; import com.yapp.artie.domain.user.adapter.out.persistence.UserJpaEntity; +import com.yapp.artie.domain.user.application.service.GetUserThumbnailService; import com.yapp.artie.domain.user.dto.response.UserThumbnailResponseDto; import java.time.LocalDate; import javax.persistence.EntityManager; @@ -18,7 +19,7 @@ @Transactional @SpringBootTest -class UserThumbnailServiceTest { +class GetUserThumbnailServiceTest { @Autowired EntityManager em; @@ -30,7 +31,7 @@ class UserThumbnailServiceTest { CategoryService categoryService; @Autowired - UserThumbnailService userThumbnailService; + GetUserThumbnailService getUserThumbnailService; UserJpaEntity createUser(String name, String uid) { UserJpaEntity user = new UserJpaEntity(); @@ -61,7 +62,7 @@ void createExhibit(UserJpaEntity user) { createExhibit(user); } - UserThumbnailResponseDto userThumbnail = userThumbnailService.getUserThumbnail(user.getId()); + UserThumbnailResponseDto userThumbnail = getUserThumbnailService.getUserThumbnail(user.getId()); assertThat(userThumbnail.getExhibitCount()).isEqualTo(10); assertThat(userThumbnail.getName()).isEqualTo(expectedName); } From 7d2e0aae27433a19e4550022dbc461ef7b2e673d Mon Sep 17 00:00:00 2001 From: leesky Date: Thu, 30 Mar 2023 20:31:12 +0900 Subject: [PATCH 052/141] =?UTF-8?q?feat=20:=20=EC=8D=B8=EB=84=A4=EC=9D=BC?= =?UTF-8?q?=20=EC=A1=B0=ED=9A=8C=EC=9A=A9=20=EC=9C=A0=EC=8A=A4=EC=BC=80?= =?UTF-8?q?=EC=9D=B4=EC=8A=A4=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../port/in/GetUserThumbnailQuery.java | 8 ++ .../service/GetUserThumbnailService.java | 18 ++-- .../service/GetUserThumbnailServiceTest.java | 91 ++++++++----------- 3 files changed, 58 insertions(+), 59 deletions(-) create mode 100644 src/main/java/com/yapp/artie/domain/user/application/port/in/GetUserThumbnailQuery.java diff --git a/src/main/java/com/yapp/artie/domain/user/application/port/in/GetUserThumbnailQuery.java b/src/main/java/com/yapp/artie/domain/user/application/port/in/GetUserThumbnailQuery.java new file mode 100644 index 00000000..ebc1669a --- /dev/null +++ b/src/main/java/com/yapp/artie/domain/user/application/port/in/GetUserThumbnailQuery.java @@ -0,0 +1,8 @@ +package com.yapp.artie.domain.user.application.port.in; + +import com.yapp.artie.domain.user.dto.response.UserThumbnailResponseDto; + +public interface GetUserThumbnailQuery { + + UserThumbnailResponseDto loadUserThumbnailById(Long id); +} diff --git a/src/main/java/com/yapp/artie/domain/user/application/service/GetUserThumbnailService.java b/src/main/java/com/yapp/artie/domain/user/application/service/GetUserThumbnailService.java index 8b7302f3..cecc9e30 100644 --- a/src/main/java/com/yapp/artie/domain/user/application/service/GetUserThumbnailService.java +++ b/src/main/java/com/yapp/artie/domain/user/application/service/GetUserThumbnailService.java @@ -2,23 +2,25 @@ import com.yapp.artie.domain.archive.service.ExhibitService; -import com.yapp.artie.domain.user.adapter.out.persistence.UserJpaEntity; +import com.yapp.artie.domain.user.application.port.in.GetUserThumbnailQuery; +import com.yapp.artie.domain.user.application.port.out.LoadUserPort; +import com.yapp.artie.domain.user.domain.User; import com.yapp.artie.domain.user.dto.response.UserThumbnailResponseDto; -import com.yapp.artie.domain.user.service.UserUseCase; +import com.yapp.artie.global.annotation.UseCase; import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -@Service +@UseCase @Transactional(readOnly = true) @RequiredArgsConstructor -public class UserThumbnailService { +public class GetUserThumbnailService implements GetUserThumbnailQuery { - private final UserUseCase userService; + private final LoadUserPort loadUserPort; private final ExhibitService exhibitService; - public UserThumbnailResponseDto getUserThumbnail(Long id) { - UserJpaEntity user = userService.findById(id); + @Override + public UserThumbnailResponseDto loadUserThumbnailById(Long id) { + User user = loadUserPort.loadById(id); int exhibitCount = exhibitService.getExhibitCount(user.getId()); return new UserThumbnailResponseDto(user.getName(), exhibitCount); } diff --git a/src/test/java/com/yapp/artie/domain/user/application/service/GetUserThumbnailServiceTest.java b/src/test/java/com/yapp/artie/domain/user/application/service/GetUserThumbnailServiceTest.java index 2906c3de..7284b9d9 100644 --- a/src/test/java/com/yapp/artie/domain/user/application/service/GetUserThumbnailServiceTest.java +++ b/src/test/java/com/yapp/artie/domain/user/application/service/GetUserThumbnailServiceTest.java @@ -1,69 +1,58 @@ -package com.yapp.artie.domain.user.service; +package com.yapp.artie.domain.user.application.service; +import static com.yapp.artie.common.UserTestData.defaultUser; import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.BDDMockito.given; -import com.yapp.artie.domain.archive.dto.cateogry.CategoryDto; -import com.yapp.artie.domain.archive.dto.cateogry.CreateCategoryRequestDto; -import com.yapp.artie.domain.archive.dto.exhibit.CreateExhibitRequestDto; -import com.yapp.artie.domain.archive.service.CategoryService; import com.yapp.artie.domain.archive.service.ExhibitService; -import com.yapp.artie.domain.user.adapter.out.persistence.UserJpaEntity; -import com.yapp.artie.domain.user.application.service.GetUserThumbnailService; +import com.yapp.artie.domain.user.application.port.out.LoadUserPort; +import com.yapp.artie.domain.user.domain.User; import com.yapp.artie.domain.user.dto.response.UserThumbnailResponseDto; -import java.time.LocalDate; -import javax.persistence.EntityManager; +import com.yapp.artie.domain.user.exception.UserNotFoundException; import org.junit.jupiter.api.Test; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.transaction.annotation.Transactional; +import org.mockito.Mockito; -@Transactional -@SpringBootTest class GetUserThumbnailServiceTest { - @Autowired - EntityManager em; + private final LoadUserPort loadUserPort = Mockito.mock(LoadUserPort.class); + private final ExhibitService exhibitService = Mockito.mock(ExhibitService.class); + private final GetUserThumbnailService getUserThumbnailService = new GetUserThumbnailService( + loadUserPort, exhibitService); - @Autowired - ExhibitService exhibitService; - - @Autowired - CategoryService categoryService; - - @Autowired - GetUserThumbnailService getUserThumbnailService; - - UserJpaEntity createUser(String name, String uid) { - UserJpaEntity user = new UserJpaEntity(); - user.setName(name); - user.setUid(uid); - em.persist(user); - categoryService.create(new CreateCategoryRequestDto("test"), user.getId()); - - return user; + @Test + void loadUserThumbnailWithId_사용자를_찾을_수_없으면_예외를_발생한다() { + givenUserFindWillFail(); + assertThatThrownBy(() -> getUserThumbnailService.loadUserThumbnailById(1L)) + .isInstanceOf(UserNotFoundException.class); } - void createExhibit(UserJpaEntity user) { - CategoryDto defaultCategory = categoryService.categoriesOf(user.getId()).get(0); - CreateExhibitRequestDto exhibitRequestDto = new CreateExhibitRequestDto("test", - defaultCategory.getId(), - LocalDate.now(), null); + @Test + public void getUserThumbnail_사용자의_닉네임과_전시개수를_반환한다() throws Exception { + User user = defaultUser() + .withName("tomcat") + .build(); + givenUserByReference(user); + givenExhibitCountWillReturnBy(5); + + UserThumbnailResponseDto userThumbnail = getUserThumbnailService.loadUserThumbnailById(user.getId()); + assertThat(userThumbnail.getExhibitCount()).isEqualTo(5); + assertThat(userThumbnail.getName()).isEqualTo("tomcat"); + } - Long created = exhibitService.create(exhibitRequestDto, user.getId()); - exhibitService.publish(created, user.getId()); + private void givenExhibitCountWillReturnBy(int count) { + given(exhibitService.getExhibitCount(any())) + .willReturn(count); } - @Test - public void getUserThumbnail_사용자의_닉네임과_전시개수를_반환한다() throws Exception { - String expectedName = "le2sky"; - int expectedCount = 10; - UserJpaEntity user = createUser(expectedName, "test-123"); - for (int i = 0; i < expectedCount; i++) { - createExhibit(user); - } + private void givenUserByReference(User user) { + given(loadUserPort.loadById(any())) + .willReturn(user); + } - UserThumbnailResponseDto userThumbnail = getUserThumbnailService.getUserThumbnail(user.getId()); - assertThat(userThumbnail.getExhibitCount()).isEqualTo(10); - assertThat(userThumbnail.getName()).isEqualTo(expectedName); + private void givenUserFindWillFail() { + given(loadUserPort.loadById(any())) + .willThrow(UserNotFoundException.class); } } \ No newline at end of file From 875678028c269ae849b22bf1f14f7ea1e7d7ea90 Mon Sep 17 00:00:00 2001 From: leesky Date: Thu, 30 Mar 2023 20:31:34 +0900 Subject: [PATCH 053/141] =?UTF-8?q?fix=20:=20=EC=BB=A8=ED=8A=B8=EB=A1=A4?= =?UTF-8?q?=EB=9F=AC=EC=97=90=EC=84=9C=20=EB=B3=80=EA=B2=BD=EB=90=9C=20Thu?= =?UTF-8?q?mnailService=EB=A5=BC=20=EC=82=AC=EC=9A=A9=ED=95=98=EB=8F=84?= =?UTF-8?q?=EB=A1=9D=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../yapp/artie/domain/user/controller/UserController.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/yapp/artie/domain/user/controller/UserController.java b/src/main/java/com/yapp/artie/domain/user/controller/UserController.java index a7541f30..4c059442 100644 --- a/src/main/java/com/yapp/artie/domain/user/controller/UserController.java +++ b/src/main/java/com/yapp/artie/domain/user/controller/UserController.java @@ -4,7 +4,7 @@ import com.yapp.artie.domain.user.adapter.out.persistence.UserJpaEntity; import com.yapp.artie.domain.user.dto.response.CreateUserResponseDto; import com.yapp.artie.domain.user.dto.response.UserThumbnailResponseDto; -import com.yapp.artie.domain.user.service.UserThumbnailService; +import com.yapp.artie.domain.user.application.service.GetUserThumbnailService; import com.yapp.artie.domain.user.service.UserUseCase; import com.yapp.artie.global.authentication.JwtService; import com.yapp.artie.global.exception.common.InvalidValueException; @@ -39,7 +39,7 @@ public class UserController { private final UserUseCase userService; - private final UserThumbnailService userThumbnailService; + private final GetUserThumbnailService getUserThumbnailService; private final JwtService jwtService; @Operation(summary = "유저 생성", description = "Firebase를 통해 생성한 UID 기반 유저 생성") @@ -104,7 +104,7 @@ public ResponseEntity deleteUser(Authentication authentica public ResponseEntity my(Authentication authentication) { Long userId = getUserId(authentication); - return ResponseEntity.ok().body(userThumbnailService.getUserThumbnail(userId)); + return ResponseEntity.ok().body(getUserThumbnailService.loadUserThumbnailById(userId)); } @Operation(summary = "유저 닉네임 수정", description = "유저의 서비스 닉네임 수정") From 25198bf89dae959c8a4dd599d0138cf84111d840 Mon Sep 17 00:00:00 2001 From: leesky Date: Fri, 31 Mar 2023 00:43:23 +0900 Subject: [PATCH 054/141] =?UTF-8?q?test=20:=20UserDetails=20=EA=B2=80?= =?UTF-8?q?=EC=A6=9D=20=EB=8B=A8=EC=9C=84=ED=85=8C=EC=8A=A4=ED=8A=B8=20?= =?UTF-8?q?=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/GetUserServiceTest.java | 24 +++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/src/test/java/com/yapp/artie/domain/user/application/service/GetUserServiceTest.java b/src/test/java/com/yapp/artie/domain/user/application/service/GetUserServiceTest.java index 5eb5af8f..1ecf0398 100644 --- a/src/test/java/com/yapp/artie/domain/user/application/service/GetUserServiceTest.java +++ b/src/test/java/com/yapp/artie/domain/user/application/service/GetUserServiceTest.java @@ -3,7 +3,6 @@ import static com.yapp.artie.common.UserTestData.defaultUser; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; -import static org.junit.jupiter.api.Assertions.*; import static org.mockito.ArgumentMatchers.any; import static org.mockito.BDDMockito.given; @@ -12,6 +11,7 @@ import com.yapp.artie.domain.user.exception.UserNotFoundException; import org.junit.jupiter.api.Test; import org.mockito.Mockito; +import org.springframework.security.core.userdetails.UserDetails; class GetUserServiceTest { @@ -33,14 +33,30 @@ class GetUserServiceTest { assertThat(actual.getId()).isEqualTo(user.getId()); } + @Test + void loadUserByUsername_사용자를_조회했을_때_반환되는_객체의_ID는_엔티티의_식별자와_같다() { + User user = defaultUser().build(); + givenUserByReferenceWithUid(user); + UserDetails actual = getUserService.loadUserByUsername(user.getUid()); + assertThat(actual.getUsername()).isEqualTo(user.getId().toString()); + } + + @Test + void loadUserByUsername_사용자를_조회했을_때_반환되는_객체의_PW는_엔티티의_UID와_같다() { + User user = defaultUser().build(); + givenUserByReferenceWithUid(user); + UserDetails actual = getUserService.loadUserByUsername(user.getUid()); + assertThat(actual.getPassword()).isEqualTo(user.getUid()); + } + private void givenUserByReference(User user) { given(loadUserPort.loadById(any())) .willReturn(user); } - private void givenUser() { - given(loadUserPort.loadById(any())) - .willReturn(defaultUser().build()); + private void givenUserByReferenceWithUid(User user) { + given(loadUserPort.loadByUid(any())) + .willReturn(user); } private void givenUserFindWillFail() { From bb9ba504da98574c5ef366dd3dafe824f96db95b Mon Sep 17 00:00:00 2001 From: leesky Date: Fri, 31 Mar 2023 00:43:40 +0900 Subject: [PATCH 055/141] =?UTF-8?q?fix=20:=20=ED=85=8C=EC=8A=A4=ED=8A=B8?= =?UTF-8?q?=20=EB=A9=94=EC=84=9C=EB=93=9C=EB=AA=85=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../user/application/service/GetUserThumbnailServiceTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/com/yapp/artie/domain/user/application/service/GetUserThumbnailServiceTest.java b/src/test/java/com/yapp/artie/domain/user/application/service/GetUserThumbnailServiceTest.java index 7284b9d9..f60c4505 100644 --- a/src/test/java/com/yapp/artie/domain/user/application/service/GetUserThumbnailServiceTest.java +++ b/src/test/java/com/yapp/artie/domain/user/application/service/GetUserThumbnailServiceTest.java @@ -29,7 +29,7 @@ class GetUserThumbnailServiceTest { } @Test - public void getUserThumbnail_사용자의_닉네임과_전시개수를_반환한다() throws Exception { + public void loadUserThumbnailWithId_사용자의_닉네임과_전시개수를_반환한다() throws Exception { User user = defaultUser() .withName("tomcat") .build(); From b1317699b5d0a52b0c19e8efae400a95446c05da Mon Sep 17 00:00:00 2001 From: leesky Date: Fri, 31 Mar 2023 00:46:43 +0900 Subject: [PATCH 056/141] =?UTF-8?q?chore=20:=20import=EB=AC=B8=20=EC=B5=9C?= =?UTF-8?q?=EC=A0=81=ED=99=94=20=EB=B0=8F=20=EB=B6=88=ED=95=84=EC=9A=94?= =?UTF-8?q?=ED=95=9C=20=ED=8C=8C=EC=9D=BC=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../user/controller/UserController.java | 2 +- .../user/repository/UserRepositoryTest.java | 38 ------------------- 2 files changed, 1 insertion(+), 39 deletions(-) delete mode 100644 src/test/java/com/yapp/artie/domain/user/repository/UserRepositoryTest.java diff --git a/src/main/java/com/yapp/artie/domain/user/controller/UserController.java b/src/main/java/com/yapp/artie/domain/user/controller/UserController.java index 4c059442..86decd74 100644 --- a/src/main/java/com/yapp/artie/domain/user/controller/UserController.java +++ b/src/main/java/com/yapp/artie/domain/user/controller/UserController.java @@ -2,9 +2,9 @@ import com.google.firebase.auth.FirebaseToken; import com.yapp.artie.domain.user.adapter.out.persistence.UserJpaEntity; +import com.yapp.artie.domain.user.application.service.GetUserThumbnailService; import com.yapp.artie.domain.user.dto.response.CreateUserResponseDto; import com.yapp.artie.domain.user.dto.response.UserThumbnailResponseDto; -import com.yapp.artie.domain.user.application.service.GetUserThumbnailService; import com.yapp.artie.domain.user.service.UserUseCase; import com.yapp.artie.global.authentication.JwtService; import com.yapp.artie.global.exception.common.InvalidValueException; diff --git a/src/test/java/com/yapp/artie/domain/user/repository/UserRepositoryTest.java b/src/test/java/com/yapp/artie/domain/user/repository/UserRepositoryTest.java deleted file mode 100644 index d6449f89..00000000 --- a/src/test/java/com/yapp/artie/domain/user/repository/UserRepositoryTest.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.yapp.artie.domain.user.repository; - -import static org.assertj.core.api.Assertions.assertThat; - -import com.yapp.artie.domain.user.adapter.out.persistence.UserJpaEntity; -import com.yapp.artie.domain.user.adapter.out.persistence.UserRepository; -import com.yapp.artie.domain.user.domain.UserTest; -import javax.persistence.EntityManager; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabase; -import org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabase.Replace; -import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; - -@DataJpaTest -@AutoConfigureTestDatabase(replace = Replace.NONE) -public class UserRepositoryTest { - - @Autowired - EntityManager em; - - @Autowired - UserRepository userRepository; - - @Test - @DisplayName("유저 삭제") - void delete() { - UserJpaEntity user = userRepository.save(UserTest.TEST_SAVED_USER); - em.clear(); - - userRepository.delete(user); - em.flush(); - - assertThat(userRepository.findById(user.getId()).isPresent()).isFalse(); - } - -} From e2b904595610c071d00dc9dadc8895b06e000b56 Mon Sep 17 00:00:00 2001 From: leesky Date: Fri, 31 Mar 2023 01:05:21 +0900 Subject: [PATCH 057/141] =?UTF-8?q?fix=20:=20=EC=83=9D=EC=84=B1=EC=9E=90?= =?UTF-8?q?=EB=A1=9C=20=EB=84=98=EA=B2=A8=EC=A3=BC=EB=8A=94=20=EC=9D=B8?= =?UTF-8?q?=EC=9E=90=20=EC=88=9C=EC=84=9C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/user/application/service/UserWithdrawalService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/yapp/artie/domain/user/application/service/UserWithdrawalService.java b/src/main/java/com/yapp/artie/domain/user/application/service/UserWithdrawalService.java index 99036a19..8db85cf4 100644 --- a/src/main/java/com/yapp/artie/domain/user/application/service/UserWithdrawalService.java +++ b/src/main/java/com/yapp/artie/domain/user/application/service/UserWithdrawalService.java @@ -27,7 +27,7 @@ public void delete(Long id) { jwtService.withdraw(user.getUid()); // TODO : 꼭 변경해야함! User 도메인을 받던지 따로 입력 모델을 만들자. categoryRepository.deleteAllByUser( - new UserJpaEntity(user.getId(), user.getUid(), user.getName(), user.getProfileImage())); + new UserJpaEntity(user.getId(), user.getUid(), user.getProfileImage(), user.getName())); deleteUserPort.delete(user); } From 5f23b1a5b09d9cd5084d9139679c7087d4568cee Mon Sep 17 00:00:00 2001 From: leesky Date: Fri, 31 Mar 2023 05:04:20 +0900 Subject: [PATCH 058/141] =?UTF-8?q?feat=20:=20uid=20=EC=BB=AC=EB=9F=BC?= =?UTF-8?q?=EC=97=90=20=EC=9D=B8=EB=8D=B1=EC=8A=A4=20=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/user/adapter/out/persistence/UserJpaEntity.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/yapp/artie/domain/user/adapter/out/persistence/UserJpaEntity.java b/src/main/java/com/yapp/artie/domain/user/adapter/out/persistence/UserJpaEntity.java index 305d8f88..033393ae 100644 --- a/src/main/java/com/yapp/artie/domain/user/adapter/out/persistence/UserJpaEntity.java +++ b/src/main/java/com/yapp/artie/domain/user/adapter/out/persistence/UserJpaEntity.java @@ -7,6 +7,7 @@ import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; +import javax.persistence.Index; import javax.persistence.Table; import lombok.AllArgsConstructor; import lombok.Getter; @@ -15,7 +16,7 @@ @Entity -@Table(name = "user") +@Table(name = "user", indexes = @Index(name = "index_user_uid", columnList = "uid")) @Getter @Setter @NoArgsConstructor From ee1b61baa97cedc5e9c2cf44ebcfc2d6469947e2 Mon Sep 17 00:00:00 2001 From: leesky Date: Sat, 1 Apr 2023 03:00:52 +0900 Subject: [PATCH 059/141] =?UTF-8?q?chore=20:=20UserController=20=ED=8C=A8?= =?UTF-8?q?=ED=82=A4=EC=A7=80=20=EC=9C=84=EC=B9=98=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../user/{controller => adapter/in/web}/UserController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename src/main/java/com/yapp/artie/domain/user/{controller => adapter/in/web}/UserController.java (99%) diff --git a/src/main/java/com/yapp/artie/domain/user/controller/UserController.java b/src/main/java/com/yapp/artie/domain/user/adapter/in/web/UserController.java similarity index 99% rename from src/main/java/com/yapp/artie/domain/user/controller/UserController.java rename to src/main/java/com/yapp/artie/domain/user/adapter/in/web/UserController.java index 86decd74..9c39cdfb 100644 --- a/src/main/java/com/yapp/artie/domain/user/controller/UserController.java +++ b/src/main/java/com/yapp/artie/domain/user/adapter/in/web/UserController.java @@ -1,4 +1,4 @@ -package com.yapp.artie.domain.user.controller; +package com.yapp.artie.domain.user.adapter.in.web; import com.google.firebase.auth.FirebaseToken; import com.yapp.artie.domain.user.adapter.out.persistence.UserJpaEntity; From 209ecb39281c4ddfec7dc576ea9d66c3f839a260 Mon Sep 17 00:00:00 2001 From: leesky Date: Sat, 1 Apr 2023 03:15:39 +0900 Subject: [PATCH 060/141] =?UTF-8?q?fix=20:=20userService=EB=A5=BC=20?= =?UTF-8?q?=EC=82=AC=EC=9A=A9=ED=95=98=EB=8A=94=20=EC=BD=94=EB=93=9C?= =?UTF-8?q?=EC=97=90=EC=84=9C=20=EC=9D=B8=ED=8F=AC=ED=8A=B8=EB=A5=BC=20?= =?UTF-8?q?=EC=82=AC=EC=9A=A9=ED=95=98=EB=8F=84=EB=A1=9D=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../user/adapter/in/web/UserController.java | 34 ++++++++++++------- 1 file changed, 22 insertions(+), 12 deletions(-) diff --git a/src/main/java/com/yapp/artie/domain/user/adapter/in/web/UserController.java b/src/main/java/com/yapp/artie/domain/user/adapter/in/web/UserController.java index 9c39cdfb..47329405 100644 --- a/src/main/java/com/yapp/artie/domain/user/adapter/in/web/UserController.java +++ b/src/main/java/com/yapp/artie/domain/user/adapter/in/web/UserController.java @@ -2,10 +2,17 @@ import com.google.firebase.auth.FirebaseToken; import com.yapp.artie.domain.user.adapter.out.persistence.UserJpaEntity; +import com.yapp.artie.domain.user.application.port.in.GetUserQuery; +import com.yapp.artie.domain.user.application.port.in.GetUserThumbnailQuery; +import com.yapp.artie.domain.user.application.port.in.RegisterUserUseCase; +import com.yapp.artie.domain.user.application.port.in.RenameUserUseCase; +import com.yapp.artie.domain.user.application.port.in.UserWithdrawalUseCase; import com.yapp.artie.domain.user.application.service.GetUserThumbnailService; +import com.yapp.artie.domain.user.domain.User; import com.yapp.artie.domain.user.dto.response.CreateUserResponseDto; import com.yapp.artie.domain.user.dto.response.UserThumbnailResponseDto; import com.yapp.artie.domain.user.service.UserUseCase; +import com.yapp.artie.global.annotation.InboundAdapter; import com.yapp.artie.global.authentication.JwtService; import com.yapp.artie.global.exception.common.InvalidValueException; import com.yapp.artie.global.exception.response.ErrorResponse; @@ -34,13 +41,17 @@ import org.springframework.web.bind.annotation.RestController; @RequestMapping("/user") -@RestController +@InboundAdapter @RequiredArgsConstructor public class UserController { - private final UserUseCase userService; - private final GetUserThumbnailService getUserThumbnailService; private final JwtService jwtService; + private final RegisterUserUseCase registerUserUseCase; + private final UserWithdrawalUseCase userWithdrawalUseCase; + private final RenameUserUseCase renameUserUseCase; + private final GetUserThumbnailQuery getUserThumbnailQuery; + private final GetUserQuery getUserQuery; + @Operation(summary = "유저 생성", description = "Firebase를 통해 생성한 UID 기반 유저 생성") @ApiResponses(value = { @@ -57,23 +68,22 @@ public ResponseEntity register( validateUidWithToken(uid, decodedToken); return ResponseEntity.status(HttpStatus.CREATED).body( - userService.register(decodedToken.getUid(), decodedToken.getName(), + registerUserUseCase.register(decodedToken.getUid(), decodedToken.getName(), decodedToken.getPicture())); } - //TODO : 인가테스트 용, 삭제 필요 @Operation(summary = "유저 조회", description = "토큰 기반 유저 조회") @ApiResponses(value = { @ApiResponse( responseCode = "200", description = "유저가 성공적으로 조회됨", - content = @Content(mediaType = "application/json", schema = @Schema(implementation = UserJpaEntity.class))), + content = @Content(mediaType = "application/json", schema = @Schema(implementation = User.class))), }) @GetMapping("/me") - public ResponseEntity me(Authentication authentication) { + public ResponseEntity me(Authentication authentication) { Long userId = getUserId(authentication); - UserJpaEntity user = userService.findById(userId); + User user = getUserQuery.loadUserById(userId); return ResponseEntity.ok().body(user); } @@ -89,7 +99,7 @@ public ResponseEntity me(Authentication authentication) { public ResponseEntity deleteUser(Authentication authentication) { Long userId = getUserId(authentication); - userService.delete(userId); + userWithdrawalUseCase.delete(userId); return ResponseEntity.noContent().build(); } @@ -104,7 +114,7 @@ public ResponseEntity deleteUser(Authentication authentica public ResponseEntity my(Authentication authentication) { Long userId = getUserId(authentication); - return ResponseEntity.ok().body(getUserThumbnailService.loadUserThumbnailById(userId)); + return ResponseEntity.ok().body(getUserThumbnailQuery.loadUserThumbnailById(userId)); } @Operation(summary = "유저 닉네임 수정", description = "유저의 서비스 닉네임 수정") @@ -132,7 +142,7 @@ public ResponseEntity updateUserName(Authentication authen @Parameter(name = "name", description = "변경할 닉네임", in = ParameterIn.QUERY) @Valid @RequestParam("name") String name) { Long userId = getUserId(authentication); - userService.updateUserName(userId, name); + renameUserUseCase.rename(userId, name); return ResponseEntity.noContent().build(); } @@ -142,7 +152,7 @@ private void validateUidWithToken(String uid, FirebaseToken decodedToken) { } } - // TODO : 앱 배포했을 때에는 0L 대신에 exception을 던지도록 변경해야 합니다. + // TODO : 앱 배포했을 때에는 1L 대신에 exception을 던지도록 변경해야 합니다. private Long getUserId(Authentication authentication) { if (Optional.ofNullable(authentication).isPresent()) { return Long.parseLong(authentication.getName()); From 6e7abecfb530606cfea4125eda2d0b8ddfeb1d3f Mon Sep 17 00:00:00 2001 From: leesky Date: Sat, 1 Apr 2023 03:16:27 +0900 Subject: [PATCH 061/141] =?UTF-8?q?chore=20:=20=EC=82=AC=EC=9A=A9=ED=95=98?= =?UTF-8?q?=EC=A7=80=20=EC=95=8A=EB=8A=94=20=ED=85=8C=EC=8A=A4=ED=8A=B8?= =?UTF-8?q?=EC=BD=94=EB=93=9C=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/user/service/UserServiceTest.java | 46 ------------------- 1 file changed, 46 deletions(-) delete mode 100644 src/test/java/com/yapp/artie/domain/user/service/UserServiceTest.java diff --git a/src/test/java/com/yapp/artie/domain/user/service/UserServiceTest.java b/src/test/java/com/yapp/artie/domain/user/service/UserServiceTest.java deleted file mode 100644 index 866d0f96..00000000 --- a/src/test/java/com/yapp/artie/domain/user/service/UserServiceTest.java +++ /dev/null @@ -1,46 +0,0 @@ -package com.yapp.artie.domain.user.service; - -import static org.assertj.core.api.AssertionsForClassTypes.assertThatThrownBy; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.BDDMockito.given; - -import com.yapp.artie.domain.user.adapter.out.persistence.UserJpaEntity; -import com.yapp.artie.domain.user.domain.UserTest; -import com.yapp.artie.domain.user.exception.UserNotFoundException; -import com.yapp.artie.domain.user.adapter.out.persistence.UserRepository; -import com.yapp.artie.global.authentication.JwtService; -import org.junit.jupiter.api.Disabled; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.junit.jupiter.MockitoExtension; -import org.springframework.transaction.annotation.Transactional; - -@Transactional -@ExtendWith(MockitoExtension.class) -class UserServiceTest { - - @InjectMocks - private UserServiceImpl userService; - - @Mock - private UserRepository userRepository; - - @Mock - private JwtService jwtService; - - @Test - @Disabled - @DisplayName("유저 닉네임(이름) 변경 테스트 - 존재하지 않는 userId로 조회시 예외처리") - public void updateUserNameFailTest() throws Exception { - UserJpaEntity user = UserTest.TEST_USER; - given(userRepository.findById(any())).willThrow(new UserNotFoundException()); - - assertThatThrownBy(() -> userService.updateUserName(user.getId(), "new-name")).isInstanceOf( - UserNotFoundException.class); - } - - // TODO: delete 서비스 메소드가, jwtService.withDraw를, FirebaseAuth.deleteUser를 잘 호출하는지 확인하는 테스트 추가 필요 -} \ No newline at end of file From 82ded2bdc44e5c84ebd6f893ad6bebcd65b0bf77 Mon Sep 17 00:00:00 2001 From: leesky Date: Sat, 1 Apr 2023 05:50:31 +0900 Subject: [PATCH 062/141] =?UTF-8?q?fix=20:=20=EA=B8=B0=EB=B3=B8=20?= =?UTF-8?q?=ED=86=B5=ED=95=A9=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EC=B6=94?= =?UTF-8?q?=EC=83=81=20=ED=81=B4=EB=9E=98=EC=8A=A4=EB=A5=BC=20WebMvcTest?= =?UTF-8?q?=EB=A5=BC=20=EC=82=AC=EC=9A=A9=ED=95=98=EB=8F=84=EB=A1=9D=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/yapp/artie/BaseIntegrationTest.java | 21 ------------------- .../common/BaseControllerIntegrationTest.java | 19 +++++++++++++++++ 2 files changed, 19 insertions(+), 21 deletions(-) delete mode 100644 src/test/java/com/yapp/artie/BaseIntegrationTest.java create mode 100644 src/test/java/com/yapp/artie/common/BaseControllerIntegrationTest.java diff --git a/src/test/java/com/yapp/artie/BaseIntegrationTest.java b/src/test/java/com/yapp/artie/BaseIntegrationTest.java deleted file mode 100644 index 15d192b1..00000000 --- a/src/test/java/com/yapp/artie/BaseIntegrationTest.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.yapp.artie; - -import com.fasterxml.jackson.databind.ObjectMapper; -import org.junit.jupiter.api.Disabled; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.web.servlet.MockMvc; -import org.springframework.transaction.annotation.Transactional; - -@SpringBootTest -@Disabled -@AutoConfigureMockMvc -@Transactional -public class BaseIntegrationTest { - - @Autowired - protected MockMvc mvc; - @Autowired - protected ObjectMapper objectMapper; -} \ No newline at end of file diff --git a/src/test/java/com/yapp/artie/common/BaseControllerIntegrationTest.java b/src/test/java/com/yapp/artie/common/BaseControllerIntegrationTest.java new file mode 100644 index 00000000..9e7340a9 --- /dev/null +++ b/src/test/java/com/yapp/artie/common/BaseControllerIntegrationTest.java @@ -0,0 +1,19 @@ +package com.yapp.artie.common; + +import com.yapp.artie.global.authentication.JwtService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.data.jpa.mapping.JpaMetamodelMappingContext; +import org.springframework.test.web.servlet.MockMvc; + +@WebMvcTest +@MockBean(JpaMetamodelMappingContext.class) +public abstract class BaseControllerIntegrationTest { + + @Autowired + protected MockMvc mvc; + + @MockBean + protected JwtService jwtService; +} \ No newline at end of file From e6950b005cb78184c77eb1a82cc2978008aa1592 Mon Sep 17 00:00:00 2001 From: leesky Date: Sat, 1 Apr 2023 05:51:54 +0900 Subject: [PATCH 063/141] =?UTF-8?q?refactor=20:=20RegisterUserController?= =?UTF-8?q?=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../in/web/RegisterUserController.java | 57 +++++++++++++++++++ .../user/adapter/in/web/UserController.java | 38 ------------- .../in/web/RegisterUserControllerTest.java | 41 +++++++++++++ 3 files changed, 98 insertions(+), 38 deletions(-) create mode 100644 src/main/java/com/yapp/artie/domain/user/adapter/in/web/RegisterUserController.java create mode 100644 src/test/java/com/yapp/artie/domain/user/adapter/in/web/RegisterUserControllerTest.java diff --git a/src/main/java/com/yapp/artie/domain/user/adapter/in/web/RegisterUserController.java b/src/main/java/com/yapp/artie/domain/user/adapter/in/web/RegisterUserController.java new file mode 100644 index 00000000..459ca856 --- /dev/null +++ b/src/main/java/com/yapp/artie/domain/user/adapter/in/web/RegisterUserController.java @@ -0,0 +1,57 @@ +package com.yapp.artie.domain.user.adapter.in.web; + + +import com.yapp.artie.domain.user.application.port.in.RegisterUserUseCase; +import com.yapp.artie.domain.user.dto.response.CreateUserResponseDto; +import com.yapp.artie.global.annotation.InboundAdapter; +import com.yapp.artie.global.authentication.ArtieToken; +import com.yapp.artie.global.authentication.JwtService; +import com.yapp.artie.global.exception.common.InvalidValueException; +import io.swagger.v3.oas.annotations.Operation; +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.responses.ApiResponses; +import javax.servlet.http.HttpServletRequest; +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.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +@InboundAdapter +@RestController +@RequestMapping("/user") +@RequiredArgsConstructor +public class RegisterUserController { + + private final JwtService jwtService; + private final RegisterUserUseCase registerUserUseCase; + + @Operation(summary = "유저 생성", description = "Firebase를 통해 생성한 UID 기반 유저 생성") + @ApiResponses(value = { + @ApiResponse( + responseCode = "201", + description = "유저가 성공적으로 생성됨", + content = @Content(mediaType = "application/json", schema = @Schema(implementation = CreateUserResponseDto.class))), + }) + @PostMapping() + public ResponseEntity register( + HttpServletRequest request, @RequestParam("uid") String uid) { + String authorization = request.getHeader("Authorization"); + ArtieToken decodedToken = jwtService.verify(authorization); + validateUidWithToken(uid, decodedToken); + + return ResponseEntity.status(HttpStatus.CREATED).body( + registerUserUseCase.register(decodedToken.getUid(), decodedToken.getName(), + decodedToken.getPicture())); + } + + private void validateUidWithToken(String uid, ArtieToken decodedToken) { + if (!decodedToken.getUid().equals(uid)) { + throw new InvalidValueException(); + } + } +} diff --git a/src/main/java/com/yapp/artie/domain/user/adapter/in/web/UserController.java b/src/main/java/com/yapp/artie/domain/user/adapter/in/web/UserController.java index 47329405..20002512 100644 --- a/src/main/java/com/yapp/artie/domain/user/adapter/in/web/UserController.java +++ b/src/main/java/com/yapp/artie/domain/user/adapter/in/web/UserController.java @@ -1,20 +1,13 @@ package com.yapp.artie.domain.user.adapter.in.web; -import com.google.firebase.auth.FirebaseToken; import com.yapp.artie.domain.user.adapter.out.persistence.UserJpaEntity; import com.yapp.artie.domain.user.application.port.in.GetUserQuery; import com.yapp.artie.domain.user.application.port.in.GetUserThumbnailQuery; -import com.yapp.artie.domain.user.application.port.in.RegisterUserUseCase; import com.yapp.artie.domain.user.application.port.in.RenameUserUseCase; import com.yapp.artie.domain.user.application.port.in.UserWithdrawalUseCase; -import com.yapp.artie.domain.user.application.service.GetUserThumbnailService; import com.yapp.artie.domain.user.domain.User; -import com.yapp.artie.domain.user.dto.response.CreateUserResponseDto; import com.yapp.artie.domain.user.dto.response.UserThumbnailResponseDto; -import com.yapp.artie.domain.user.service.UserUseCase; import com.yapp.artie.global.annotation.InboundAdapter; -import com.yapp.artie.global.authentication.JwtService; -import com.yapp.artie.global.exception.common.InvalidValueException; import com.yapp.artie.global.exception.response.ErrorResponse; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; @@ -24,54 +17,29 @@ import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.responses.ApiResponses; import java.util.Optional; -import javax.servlet.http.HttpServletRequest; import javax.validation.Valid; import lombok.RequiredArgsConstructor; import org.apache.http.HttpEntity; -import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.security.core.Authentication; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PatchMapping; import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; @RequestMapping("/user") @InboundAdapter @RequiredArgsConstructor public class UserController { - private final JwtService jwtService; - private final RegisterUserUseCase registerUserUseCase; private final UserWithdrawalUseCase userWithdrawalUseCase; private final RenameUserUseCase renameUserUseCase; private final GetUserThumbnailQuery getUserThumbnailQuery; private final GetUserQuery getUserQuery; - @Operation(summary = "유저 생성", description = "Firebase를 통해 생성한 UID 기반 유저 생성") - @ApiResponses(value = { - @ApiResponse( - responseCode = "201", - description = "유저가 성공적으로 생성됨", - content = @Content(mediaType = "application/json", schema = @Schema(implementation = CreateUserResponseDto.class))), - }) - @PostMapping() - public ResponseEntity register( - HttpServletRequest request, @RequestParam("uid") String uid) { - String authorization = request.getHeader("Authorization"); - FirebaseToken decodedToken = jwtService.verify(authorization); - validateUidWithToken(uid, decodedToken); - - return ResponseEntity.status(HttpStatus.CREATED).body( - registerUserUseCase.register(decodedToken.getUid(), decodedToken.getName(), - decodedToken.getPicture())); - } - @Operation(summary = "유저 조회", description = "토큰 기반 유저 조회") @ApiResponses(value = { @ApiResponse( @@ -146,12 +114,6 @@ public ResponseEntity updateUserName(Authentication authen return ResponseEntity.noContent().build(); } - private void validateUidWithToken(String uid, FirebaseToken decodedToken) { - if (!decodedToken.getUid().equals(uid)) { - throw new InvalidValueException(); - } - } - // TODO : 앱 배포했을 때에는 1L 대신에 exception을 던지도록 변경해야 합니다. private Long getUserId(Authentication authentication) { if (Optional.ofNullable(authentication).isPresent()) { diff --git a/src/test/java/com/yapp/artie/domain/user/adapter/in/web/RegisterUserControllerTest.java b/src/test/java/com/yapp/artie/domain/user/adapter/in/web/RegisterUserControllerTest.java new file mode 100644 index 00000000..ffaa0b3c --- /dev/null +++ b/src/test/java/com/yapp/artie/domain/user/adapter/in/web/RegisterUserControllerTest.java @@ -0,0 +1,41 @@ +package com.yapp.artie.domain.user.adapter.in.web; + +import static org.mockito.BDDMockito.any; +import static org.mockito.BDDMockito.eq; +import static org.mockito.BDDMockito.given; +import static org.mockito.BDDMockito.then; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +import com.yapp.artie.common.BaseControllerIntegrationTest; +import com.yapp.artie.common.TestArtieToken; +import com.yapp.artie.domain.user.application.port.in.RegisterUserUseCase; +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; +import org.springframework.boot.test.mock.mockito.MockBean; + +@WebMvcTest(controllers = RegisterUserController.class) +class RegisterUserControllerTest extends BaseControllerIntegrationTest { + + @MockBean + private RegisterUserUseCase registerUserUseCase; + + @Test + void testRegister() throws Exception { + givenTestToken("uid", "tomcat", "test.com"); + + mvc.perform(post("/user") + .header("Content-Type", "application/json") + .header("Authorization", "sample") + .param("uid", "uid") + ).andExpect(status().isCreated()); + + then(registerUserUseCase).should() + .register(eq("uid"), eq("tomcat"), eq("test.com")); + } + + private void givenTestToken(String uid, String name, String picture) { + given(jwtService.verify(any())) + .willReturn(new TestArtieToken(uid, name, picture)); + } +} \ No newline at end of file From ea12922d216841640283afa328f678d922e0ad0e Mon Sep 17 00:00:00 2001 From: leesky Date: Sat, 1 Apr 2023 05:52:23 +0900 Subject: [PATCH 064/141] =?UTF-8?q?chore=20:=20extends=20=ED=81=B4?= =?UTF-8?q?=EB=9E=98=EC=8A=A4=20=EC=9D=B4=EB=A6=84=20=EB=B3=80=EA=B2=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/user/controller/UserControllerTest.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/test/java/com/yapp/artie/domain/user/controller/UserControllerTest.java b/src/test/java/com/yapp/artie/domain/user/controller/UserControllerTest.java index 86968ebf..ff5c371f 100644 --- a/src/test/java/com/yapp/artie/domain/user/controller/UserControllerTest.java +++ b/src/test/java/com/yapp/artie/domain/user/controller/UserControllerTest.java @@ -7,7 +7,7 @@ import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; -import com.yapp.artie.BaseIntegrationTest; +import com.yapp.artie.common.BaseControllerIntegrationTest; import com.yapp.artie.domain.archive.domain.artwork.Artwork; import com.yapp.artie.domain.archive.domain.category.Category; import com.yapp.artie.domain.archive.domain.exhibit.Exhibit; @@ -17,9 +17,9 @@ import com.yapp.artie.domain.archive.repository.ExhibitRepository; import com.yapp.artie.domain.archive.repository.TagRepository; import com.yapp.artie.domain.user.adapter.out.persistence.UserJpaEntity; -import com.yapp.artie.domain.user.domain.UserTest; import com.yapp.artie.domain.user.adapter.out.persistence.UserRepository; -import com.yapp.artie.global.authentication.JwtServiceImpl; +import com.yapp.artie.domain.user.domain.UserTest; +import com.yapp.artie.global.authentication.JwtService; import java.time.LocalDate; import javax.persistence.EntityManager; import org.junit.jupiter.api.DisplayName; @@ -27,7 +27,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.mock.mockito.MockBean; -class UserControllerTest extends BaseIntegrationTest { +class UserControllerTest extends BaseControllerIntegrationTest { @Autowired EntityManager em; @@ -48,7 +48,7 @@ class UserControllerTest extends BaseIntegrationTest { TagRepository tagRepository; @MockBean - JwtServiceImpl jwtService; + JwtService jwtService; // TODO : 헤더 토큰 ( Authentication ) 모킹 필요. 현재는 getUserId 메소드에 의존하고 있음 @Test From 410890306f7db92aaf5c532f5394e61502afd1ff Mon Sep 17 00:00:00 2001 From: leesky Date: Sat, 1 Apr 2023 05:54:06 +0900 Subject: [PATCH 065/141] =?UTF-8?q?fix=20:=20=ED=85=8C=EC=8A=A4=ED=8A=B8?= =?UTF-8?q?=20=ED=95=98=EA=B8=B0=20=EC=96=B4=EB=A0=A4=EC=9A=B4=20FirebaseT?= =?UTF-8?q?oken=EC=9D=84=20ArtieToken=EC=9C=BC=EB=A1=9C=20=EB=A7=A4?= =?UTF-8?q?=ED=95=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../global/authentication/ArtieToken.java | 24 ++++++++++++++ .../global/authentication/JwtFilter.java | 4 +-- .../global/authentication/JwtService.java | 4 +-- .../global/authentication/JwtServiceImpl.java | 6 ++-- .../artie/global/config/SecurityConfig.java | 3 +- .../com/yapp/artie/common/TestArtieToken.java | 33 +++++++++++++++++++ 6 files changed, 64 insertions(+), 10 deletions(-) create mode 100644 src/main/java/com/yapp/artie/global/authentication/ArtieToken.java create mode 100644 src/test/java/com/yapp/artie/common/TestArtieToken.java diff --git a/src/main/java/com/yapp/artie/global/authentication/ArtieToken.java b/src/main/java/com/yapp/artie/global/authentication/ArtieToken.java new file mode 100644 index 00000000..3865ffa8 --- /dev/null +++ b/src/main/java/com/yapp/artie/global/authentication/ArtieToken.java @@ -0,0 +1,24 @@ +package com.yapp.artie.global.authentication; + +import com.google.firebase.auth.FirebaseToken; + +public class ArtieToken { + + private final FirebaseToken firebaseToken; + + public ArtieToken(FirebaseToken firebaseToken) { + this.firebaseToken = firebaseToken; + } + + public String getUid() { + return firebaseToken.getUid(); + } + + public String getName() { + return firebaseToken.getName(); + } + + public String getPicture() { + return firebaseToken.getPicture(); + } +} diff --git a/src/main/java/com/yapp/artie/global/authentication/JwtFilter.java b/src/main/java/com/yapp/artie/global/authentication/JwtFilter.java index c4ed4f36..41f7b5a0 100644 --- a/src/main/java/com/yapp/artie/global/authentication/JwtFilter.java +++ b/src/main/java/com/yapp/artie/global/authentication/JwtFilter.java @@ -1,6 +1,5 @@ package com.yapp.artie.global.authentication; -import com.google.firebase.auth.FirebaseToken; import java.io.IOException; import java.util.NoSuchElementException; import javax.servlet.FilterChain; @@ -26,12 +25,11 @@ public class JwtFilter extends OncePerRequestFilter { @Override protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { - setTokenAtSecurityContext(jwtService.verify(request.getHeader("Authorization"))); filterChain.doFilter(request, response); } - private void setTokenAtSecurityContext(FirebaseToken decodedToken) throws NoSuchElementException { + private void setTokenAtSecurityContext(ArtieToken decodedToken) throws NoSuchElementException { UserDetails user = userDetailsService.loadUserByUsername(decodedToken.getUid()); UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken( user, user.getPassword(), user.getAuthorities()); diff --git a/src/main/java/com/yapp/artie/global/authentication/JwtService.java b/src/main/java/com/yapp/artie/global/authentication/JwtService.java index 1bf804dc..a6fc8b35 100644 --- a/src/main/java/com/yapp/artie/global/authentication/JwtService.java +++ b/src/main/java/com/yapp/artie/global/authentication/JwtService.java @@ -1,10 +1,8 @@ package com.yapp.artie.global.authentication; -import com.google.firebase.auth.FirebaseToken; - public interface JwtService { - FirebaseToken verify(String header); + ArtieToken verify(String header); void withdraw(String uid); } diff --git a/src/main/java/com/yapp/artie/global/authentication/JwtServiceImpl.java b/src/main/java/com/yapp/artie/global/authentication/JwtServiceImpl.java index cabb6a1a..c7d07c06 100644 --- a/src/main/java/com/yapp/artie/global/authentication/JwtServiceImpl.java +++ b/src/main/java/com/yapp/artie/global/authentication/JwtServiceImpl.java @@ -1,6 +1,5 @@ package com.yapp.artie.global.authentication; -import com.google.firebase.auth.FirebaseToken; import com.yapp.artie.global.exception.authentication.NotExistValidTokenException; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -15,9 +14,10 @@ public class JwtServiceImpl implements JwtService { private final JwtDecoder decoder; @Override - public FirebaseToken verify(String header) { + public ArtieToken verify(String header) { validateHeader(header); - return decoder.decode(refineHeaderAsToken(header)); + return new ArtieToken(decoder + .decode(refineHeaderAsToken(header))); } @Override diff --git a/src/main/java/com/yapp/artie/global/config/SecurityConfig.java b/src/main/java/com/yapp/artie/global/config/SecurityConfig.java index 2be3fa6e..34175cb7 100644 --- a/src/main/java/com/yapp/artie/global/config/SecurityConfig.java +++ b/src/main/java/com/yapp/artie/global/config/SecurityConfig.java @@ -3,6 +3,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.yapp.artie.global.authentication.JwtExceptionHandler; import com.yapp.artie.global.authentication.JwtFilter; +import com.yapp.artie.global.authentication.JwtService; import com.yapp.artie.global.authentication.JwtServiceImpl; import lombok.RequiredArgsConstructor; import org.springframework.context.annotation.Configuration; @@ -25,7 +26,7 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter { private final UserDetailsService userDetailsService; - private final JwtServiceImpl jwtService; + private final JwtService jwtService; @Override public void configure(HttpSecurity http) throws Exception { diff --git a/src/test/java/com/yapp/artie/common/TestArtieToken.java b/src/test/java/com/yapp/artie/common/TestArtieToken.java new file mode 100644 index 00000000..202c9eb7 --- /dev/null +++ b/src/test/java/com/yapp/artie/common/TestArtieToken.java @@ -0,0 +1,33 @@ +package com.yapp.artie.common; + +import com.yapp.artie.global.authentication.ArtieToken; + +public class TestArtieToken extends ArtieToken { + + private final String uid; + private final String name; + private final String picture; + + public TestArtieToken(String uid, String name, + String picture) { + super(null); + this.uid = uid; + this.name = name; + this.picture = picture; + } + + @Override + public String getUid() { + return uid; + } + + @Override + public String getName() { + return name; + } + + @Override + public String getPicture() { + return picture; + } +} From e1d45ce3d970503bd8259edb5c54872761c3c23c Mon Sep 17 00:00:00 2001 From: leesky Date: Sat, 1 Apr 2023 05:54:35 +0900 Subject: [PATCH 066/141] =?UTF-8?q?chore=20:=20import=EB=AC=B8=20=EC=B5=9C?= =?UTF-8?q?=EC=A0=81=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/yapp/artie/global/config/SecurityConfig.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/com/yapp/artie/global/config/SecurityConfig.java b/src/main/java/com/yapp/artie/global/config/SecurityConfig.java index 34175cb7..b9df3997 100644 --- a/src/main/java/com/yapp/artie/global/config/SecurityConfig.java +++ b/src/main/java/com/yapp/artie/global/config/SecurityConfig.java @@ -4,7 +4,6 @@ import com.yapp.artie.global.authentication.JwtExceptionHandler; import com.yapp.artie.global.authentication.JwtFilter; import com.yapp.artie.global.authentication.JwtService; -import com.yapp.artie.global.authentication.JwtServiceImpl; import lombok.RequiredArgsConstructor; import org.springframework.context.annotation.Configuration; import org.springframework.http.HttpMethod; From 2ffd9dd05c546dd02326e10fc68b42a45d6e3457 Mon Sep 17 00:00:00 2001 From: leesky Date: Sat, 1 Apr 2023 23:19:35 +0900 Subject: [PATCH 067/141] =?UTF-8?q?chore=20:=20import=EB=AC=B8=20=EC=B5=9C?= =?UTF-8?q?=EC=A0=81=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../artie/domain/archive/repository/CategoryRepositoryTest.java | 2 +- src/test/java/com/yapp/artie/domain/user/domain/UserTest.java | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/src/test/java/com/yapp/artie/domain/archive/repository/CategoryRepositoryTest.java b/src/test/java/com/yapp/artie/domain/archive/repository/CategoryRepositoryTest.java index aec0ea8b..12e89ec9 100644 --- a/src/test/java/com/yapp/artie/domain/archive/repository/CategoryRepositoryTest.java +++ b/src/test/java/com/yapp/artie/domain/archive/repository/CategoryRepositoryTest.java @@ -7,8 +7,8 @@ import com.yapp.artie.domain.archive.domain.exhibit.Exhibit; import com.yapp.artie.domain.archive.domain.tag.Tag; import com.yapp.artie.domain.user.adapter.out.persistence.UserJpaEntity; -import com.yapp.artie.domain.user.domain.UserTest; import com.yapp.artie.domain.user.adapter.out.persistence.UserRepository; +import com.yapp.artie.domain.user.domain.UserTest; import java.time.LocalDate; import javax.persistence.EntityManager; import org.junit.jupiter.api.DisplayName; diff --git a/src/test/java/com/yapp/artie/domain/user/domain/UserTest.java b/src/test/java/com/yapp/artie/domain/user/domain/UserTest.java index f1d03528..27c5f156 100644 --- a/src/test/java/com/yapp/artie/domain/user/domain/UserTest.java +++ b/src/test/java/com/yapp/artie/domain/user/domain/UserTest.java @@ -3,7 +3,6 @@ import static com.yapp.artie.common.UserTestData.defaultUser; import static org.assertj.core.api.Assertions.assertThat; -import com.yapp.artie.common.UserTestData; import com.yapp.artie.domain.user.adapter.out.persistence.UserJpaEntity; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; From c240b55f10005fbb6abbdcb8c24027f746c3e3bb Mon Sep 17 00:00:00 2001 From: leesky Date: Sat, 1 Apr 2023 23:20:41 +0900 Subject: [PATCH 068/141] =?UTF-8?q?feat=20:=20RenameUserController=20?= =?UTF-8?q?=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../adapter/in/web/RenameUserController.java | 72 +++++++++++++++++++ .../in/web/RenameUserControllerTest.java | 34 +++++++++ 2 files changed, 106 insertions(+) create mode 100644 src/main/java/com/yapp/artie/domain/user/adapter/in/web/RenameUserController.java create mode 100644 src/test/java/com/yapp/artie/domain/user/adapter/in/web/RenameUserControllerTest.java diff --git a/src/main/java/com/yapp/artie/domain/user/adapter/in/web/RenameUserController.java b/src/main/java/com/yapp/artie/domain/user/adapter/in/web/RenameUserController.java new file mode 100644 index 00000000..5ea6dd8a --- /dev/null +++ b/src/main/java/com/yapp/artie/domain/user/adapter/in/web/RenameUserController.java @@ -0,0 +1,72 @@ +package com.yapp.artie.domain.user.adapter.in.web; + +import com.yapp.artie.domain.user.application.port.in.RenameUserUseCase; +import com.yapp.artie.global.annotation.InboundAdapter; +import com.yapp.artie.global.exception.response.ErrorResponse; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.enums.ParameterIn; +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.responses.ApiResponses; +import java.util.Optional; +import javax.validation.Valid; +import lombok.RequiredArgsConstructor; +import org.apache.http.HttpEntity; +import org.springframework.http.ResponseEntity; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.web.bind.annotation.PatchMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + + +@InboundAdapter +@RestController +@RequestMapping("/user") +@RequiredArgsConstructor +public class RenameUserController { + + private final RenameUserUseCase renameUserUseCase; + + @Operation(summary = "유저 닉네임 수정", description = "유저의 서비스 닉네임 수정") + @ApiResponses(value = { + @ApiResponse( + responseCode = "204", + description = "닉네임이 성공적으로 수정됨", + content = @Content(mediaType = "application/json", schema = @Schema(implementation = Void.class))), + @ApiResponse( + responseCode = "400", + description = "잘못된 입력", + content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorResponse.class))), + @ApiResponse( + responseCode = "401", + description = "인증 오류", + content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorResponse.class))), + @ApiResponse( + responseCode = "404", + description = "찾을 수 없는 회원", + content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorResponse.class))), + }) + @PatchMapping() + public ResponseEntity rename(Authentication authentication, + @Parameter(name = "name", description = "변경할 닉네임", in = ParameterIn.QUERY) @Valid @RequestParam("name") String name) { + + System.out.println(authentication); + Long userId = getUserId(authentication); + renameUserUseCase.rename(userId, name); + return ResponseEntity.noContent().build(); + } + + // TODO : 앱 배포했을 때에는 1L 대신에 exception을 던지도록 변경해야 합니다. + private Long getUserId(Authentication authentication) { + if (Optional.ofNullable(authentication).isPresent()) { + return Long.parseLong(authentication.getName()); + } + return 1L; + } +} + diff --git a/src/test/java/com/yapp/artie/domain/user/adapter/in/web/RenameUserControllerTest.java b/src/test/java/com/yapp/artie/domain/user/adapter/in/web/RenameUserControllerTest.java new file mode 100644 index 00000000..3700f67d --- /dev/null +++ b/src/test/java/com/yapp/artie/domain/user/adapter/in/web/RenameUserControllerTest.java @@ -0,0 +1,34 @@ +package com.yapp.artie.domain.user.adapter.in.web; + +import static com.yapp.artie.common.UserTestData.defaultUser; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.BDDMockito.then; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.patch; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +import com.yapp.artie.common.BaseControllerIntegrationTest; +import com.yapp.artie.domain.user.application.port.in.RenameUserUseCase; +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; +import org.springframework.boot.test.mock.mockito.MockBean; + +@WebMvcTest(controllers = RenameUserController.class) +class RenameUserControllerTest extends BaseControllerIntegrationTest { + + @MockBean + private RenameUserUseCase renameUserUseCase; + + @Test + void testRename() throws Exception { + givenUserByReference(defaultUser().withId(1L).build()); + + mvc.perform(patch("/user") + .header("Content-Type", "application/json") + .queryParam("name", "tomcat") + ) + .andExpect(status().isNoContent()); + + then(renameUserUseCase).should() + .rename(eq(1L), eq("tomcat")); + } +} \ No newline at end of file From 31b0ce246d691f0adc74fb0e1bbeef04721f30e2 Mon Sep 17 00:00:00 2001 From: leesky Date: Sat, 1 Apr 2023 23:20:57 +0900 Subject: [PATCH 069/141] =?UTF-8?q?test=20:=20BaseControllerIntegrationTes?= =?UTF-8?q?t=20given=20=EB=A9=94=EC=84=9C=EB=93=9C=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/BaseControllerIntegrationTest.java | 28 +++++++++++++++++++ .../in/web/RegisterUserControllerTest.java | 14 ++++------ 2 files changed, 33 insertions(+), 9 deletions(-) diff --git a/src/test/java/com/yapp/artie/common/BaseControllerIntegrationTest.java b/src/test/java/com/yapp/artie/common/BaseControllerIntegrationTest.java index 9e7340a9..1b464645 100644 --- a/src/test/java/com/yapp/artie/common/BaseControllerIntegrationTest.java +++ b/src/test/java/com/yapp/artie/common/BaseControllerIntegrationTest.java @@ -1,10 +1,16 @@ package com.yapp.artie.common; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.BDDMockito.given; +import static org.springframework.security.core.userdetails.User.builder; + +import com.yapp.artie.domain.user.domain.User; import com.yapp.artie.global.authentication.JwtService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.data.jpa.mapping.JpaMetamodelMappingContext; +import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.test.web.servlet.MockMvc; @WebMvcTest @@ -16,4 +22,26 @@ public abstract class BaseControllerIntegrationTest { @MockBean protected JwtService jwtService; + + @MockBean + protected UserDetailsService userDetailsService; + + protected void givenUserByReference(User user) { + loadUserDetailsWillReturnReference(user); + givenTestToken(user.getUid(), user.getName(), user.getProfileImage()); + } + + private void loadUserDetailsWillReturnReference(User user) { + given(userDetailsService.loadUserByUsername(any())) + .willReturn(builder() + .username(String.valueOf(user.getId())) + .password(user.getUid()) + .authorities("user") + .build()); + } + + private void givenTestToken(String uid, String name, String picture) { + given(jwtService.verify(any())) + .willReturn(new TestArtieToken(uid, name, picture)); + } } \ No newline at end of file diff --git a/src/test/java/com/yapp/artie/domain/user/adapter/in/web/RegisterUserControllerTest.java b/src/test/java/com/yapp/artie/domain/user/adapter/in/web/RegisterUserControllerTest.java index ffaa0b3c..75448793 100644 --- a/src/test/java/com/yapp/artie/domain/user/adapter/in/web/RegisterUserControllerTest.java +++ b/src/test/java/com/yapp/artie/domain/user/adapter/in/web/RegisterUserControllerTest.java @@ -1,14 +1,12 @@ package com.yapp.artie.domain.user.adapter.in.web; -import static org.mockito.BDDMockito.any; +import static com.yapp.artie.common.UserTestData.defaultUser; import static org.mockito.BDDMockito.eq; -import static org.mockito.BDDMockito.given; import static org.mockito.BDDMockito.then; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; import com.yapp.artie.common.BaseControllerIntegrationTest; -import com.yapp.artie.common.TestArtieToken; import com.yapp.artie.domain.user.application.port.in.RegisterUserUseCase; import org.junit.jupiter.api.Test; import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; @@ -22,7 +20,10 @@ class RegisterUserControllerTest extends BaseControllerIntegrationTest { @Test void testRegister() throws Exception { - givenTestToken("uid", "tomcat", "test.com"); + givenUserByReference(defaultUser() + .withName("tomcat") + .withProfileImage("test.com") + .build()); mvc.perform(post("/user") .header("Content-Type", "application/json") @@ -33,9 +34,4 @@ void testRegister() throws Exception { then(registerUserUseCase).should() .register(eq("uid"), eq("tomcat"), eq("test.com")); } - - private void givenTestToken(String uid, String name, String picture) { - given(jwtService.verify(any())) - .willReturn(new TestArtieToken(uid, name, picture)); - } } \ No newline at end of file From 9d86862b18ffb67fdf8cb92abcf901609c3ee4be Mon Sep 17 00:00:00 2001 From: leesky Date: Sat, 1 Apr 2023 23:22:36 +0900 Subject: [PATCH 070/141] =?UTF-8?q?fix=20:=20InboundAdapter=20->=20WebAdap?= =?UTF-8?q?ter=EB=A1=9C=20=EC=9D=B4=EB=A6=84=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/user/adapter/in/web/RegisterUserController.java | 4 ++-- .../domain/user/adapter/in/web/RenameUserController.java | 6 ++---- .../artie/domain/user/adapter/in/web/UserController.java | 4 ++-- .../annotation/{InboundAdapter.java => WebAdapter.java} | 2 +- 4 files changed, 7 insertions(+), 9 deletions(-) rename src/main/java/com/yapp/artie/global/annotation/{InboundAdapter.java => WebAdapter.java} (92%) diff --git a/src/main/java/com/yapp/artie/domain/user/adapter/in/web/RegisterUserController.java b/src/main/java/com/yapp/artie/domain/user/adapter/in/web/RegisterUserController.java index 459ca856..5ca57483 100644 --- a/src/main/java/com/yapp/artie/domain/user/adapter/in/web/RegisterUserController.java +++ b/src/main/java/com/yapp/artie/domain/user/adapter/in/web/RegisterUserController.java @@ -3,7 +3,7 @@ import com.yapp.artie.domain.user.application.port.in.RegisterUserUseCase; import com.yapp.artie.domain.user.dto.response.CreateUserResponseDto; -import com.yapp.artie.global.annotation.InboundAdapter; +import com.yapp.artie.global.annotation.WebAdapter; import com.yapp.artie.global.authentication.ArtieToken; import com.yapp.artie.global.authentication.JwtService; import com.yapp.artie.global.exception.common.InvalidValueException; @@ -21,7 +21,7 @@ import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; -@InboundAdapter +@WebAdapter @RestController @RequestMapping("/user") @RequiredArgsConstructor diff --git a/src/main/java/com/yapp/artie/domain/user/adapter/in/web/RenameUserController.java b/src/main/java/com/yapp/artie/domain/user/adapter/in/web/RenameUserController.java index 5ea6dd8a..85a6b52d 100644 --- a/src/main/java/com/yapp/artie/domain/user/adapter/in/web/RenameUserController.java +++ b/src/main/java/com/yapp/artie/domain/user/adapter/in/web/RenameUserController.java @@ -1,7 +1,7 @@ package com.yapp.artie.domain.user.adapter.in.web; import com.yapp.artie.domain.user.application.port.in.RenameUserUseCase; -import com.yapp.artie.global.annotation.InboundAdapter; +import com.yapp.artie.global.annotation.WebAdapter; import com.yapp.artie.global.exception.response.ErrorResponse; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; @@ -16,15 +16,13 @@ import org.apache.http.HttpEntity; import org.springframework.http.ResponseEntity; import org.springframework.security.core.Authentication; -import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.web.bind.annotation.PatchMapping; -import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; -@InboundAdapter +@WebAdapter @RestController @RequestMapping("/user") @RequiredArgsConstructor diff --git a/src/main/java/com/yapp/artie/domain/user/adapter/in/web/UserController.java b/src/main/java/com/yapp/artie/domain/user/adapter/in/web/UserController.java index 20002512..6994fd3e 100644 --- a/src/main/java/com/yapp/artie/domain/user/adapter/in/web/UserController.java +++ b/src/main/java/com/yapp/artie/domain/user/adapter/in/web/UserController.java @@ -7,7 +7,7 @@ import com.yapp.artie.domain.user.application.port.in.UserWithdrawalUseCase; import com.yapp.artie.domain.user.domain.User; import com.yapp.artie.domain.user.dto.response.UserThumbnailResponseDto; -import com.yapp.artie.global.annotation.InboundAdapter; +import com.yapp.artie.global.annotation.WebAdapter; import com.yapp.artie.global.exception.response.ErrorResponse; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; @@ -30,7 +30,7 @@ import org.springframework.web.bind.annotation.RequestParam; @RequestMapping("/user") -@InboundAdapter +@WebAdapter @RequiredArgsConstructor public class UserController { diff --git a/src/main/java/com/yapp/artie/global/annotation/InboundAdapter.java b/src/main/java/com/yapp/artie/global/annotation/WebAdapter.java similarity index 92% rename from src/main/java/com/yapp/artie/global/annotation/InboundAdapter.java rename to src/main/java/com/yapp/artie/global/annotation/WebAdapter.java index b4c5dc19..eb684c61 100644 --- a/src/main/java/com/yapp/artie/global/annotation/InboundAdapter.java +++ b/src/main/java/com/yapp/artie/global/annotation/WebAdapter.java @@ -10,7 +10,7 @@ @Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Component -public @interface InboundAdapter { +public @interface WebAdapter { @AliasFor(annotation = Component.class) String value() default ""; From 39c83b7d2f16678a1069de599eb94e6e91bd4a96 Mon Sep 17 00:00:00 2001 From: leesky Date: Sat, 1 Apr 2023 23:57:29 +0900 Subject: [PATCH 071/141] =?UTF-8?q?feat=20:=20GetUserThumbnailController?= =?UTF-8?q?=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../in/web/GetUserThumbnailController.java | 48 +++++++++++++++++++ .../user/adapter/in/web/UserController.java | 15 ------ .../web/GetUserThumbnailControllerTest.java | 36 ++++++++++++++ 3 files changed, 84 insertions(+), 15 deletions(-) create mode 100644 src/main/java/com/yapp/artie/domain/user/adapter/in/web/GetUserThumbnailController.java create mode 100644 src/test/java/com/yapp/artie/domain/user/adapter/in/web/GetUserThumbnailControllerTest.java diff --git a/src/main/java/com/yapp/artie/domain/user/adapter/in/web/GetUserThumbnailController.java b/src/main/java/com/yapp/artie/domain/user/adapter/in/web/GetUserThumbnailController.java new file mode 100644 index 00000000..5419dd72 --- /dev/null +++ b/src/main/java/com/yapp/artie/domain/user/adapter/in/web/GetUserThumbnailController.java @@ -0,0 +1,48 @@ +package com.yapp.artie.domain.user.adapter.in.web; + +import com.yapp.artie.domain.user.adapter.out.persistence.UserJpaEntity; +import com.yapp.artie.domain.user.application.port.in.GetUserThumbnailQuery; +import com.yapp.artie.domain.user.dto.response.UserThumbnailResponseDto; +import com.yapp.artie.global.annotation.WebAdapter; +import io.swagger.v3.oas.annotations.Operation; +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.responses.ApiResponses; +import java.util.Optional; +import lombok.RequiredArgsConstructor; +import org.springframework.http.ResponseEntity; +import org.springframework.security.core.Authentication; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@WebAdapter +@RestController +@RequestMapping("/user") +@RequiredArgsConstructor +public class GetUserThumbnailController { + + private final GetUserThumbnailQuery getUserThumbnailQuery; + + @Operation(summary = "마이페이지 썸네일 조회", description = "사용자 닉네임, 전시 개수 조회") + @ApiResponses(value = { + @ApiResponse( + responseCode = "200", + description = "썸네일이 성공적으로 조회됨", + content = @Content(mediaType = "application/json", schema = @Schema(implementation = UserJpaEntity.class))), + }) + @GetMapping("/my-page") + public ResponseEntity my(Authentication authentication) { + + Long userId = getUserId(authentication); + return ResponseEntity.ok().body(getUserThumbnailQuery.loadUserThumbnailById(userId)); + } + + private Long getUserId(Authentication authentication) { + if (Optional.ofNullable(authentication).isPresent()) { + return Long.parseLong(authentication.getName()); + } + return 1L; + } +} diff --git a/src/main/java/com/yapp/artie/domain/user/adapter/in/web/UserController.java b/src/main/java/com/yapp/artie/domain/user/adapter/in/web/UserController.java index 6994fd3e..69af7a4f 100644 --- a/src/main/java/com/yapp/artie/domain/user/adapter/in/web/UserController.java +++ b/src/main/java/com/yapp/artie/domain/user/adapter/in/web/UserController.java @@ -36,10 +36,8 @@ public class UserController { private final UserWithdrawalUseCase userWithdrawalUseCase; private final RenameUserUseCase renameUserUseCase; - private final GetUserThumbnailQuery getUserThumbnailQuery; private final GetUserQuery getUserQuery; - @Operation(summary = "유저 조회", description = "토큰 기반 유저 조회") @ApiResponses(value = { @ApiResponse( @@ -71,19 +69,6 @@ public ResponseEntity deleteUser(Authentication authentica return ResponseEntity.noContent().build(); } - @Operation(summary = "마이페이지 썸네일 조회", description = "사용자 닉네임, 전시 개수 조회") - @ApiResponses(value = { - @ApiResponse( - responseCode = "200", - description = "썸네일이 성공적으로 조회됨", - content = @Content(mediaType = "application/json", schema = @Schema(implementation = UserJpaEntity.class))), - }) - @GetMapping("/my-page") - public ResponseEntity my(Authentication authentication) { - - Long userId = getUserId(authentication); - return ResponseEntity.ok().body(getUserThumbnailQuery.loadUserThumbnailById(userId)); - } @Operation(summary = "유저 닉네임 수정", description = "유저의 서비스 닉네임 수정") @ApiResponses(value = { diff --git a/src/test/java/com/yapp/artie/domain/user/adapter/in/web/GetUserThumbnailControllerTest.java b/src/test/java/com/yapp/artie/domain/user/adapter/in/web/GetUserThumbnailControllerTest.java new file mode 100644 index 00000000..c838c7d8 --- /dev/null +++ b/src/test/java/com/yapp/artie/domain/user/adapter/in/web/GetUserThumbnailControllerTest.java @@ -0,0 +1,36 @@ +package com.yapp.artie.domain.user.adapter.in.web; + +import static com.yapp.artie.common.UserTestData.defaultUser; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.BDDMockito.then; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +import com.yapp.artie.common.BaseControllerIntegrationTest; +import com.yapp.artie.domain.user.application.port.in.GetUserThumbnailQuery; +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; +import org.springframework.boot.test.mock.mockito.MockBean; + +@WebMvcTest(controllers = GetUserThumbnailController.class) +class GetUserThumbnailControllerTest extends BaseControllerIntegrationTest { + + @MockBean + private GetUserThumbnailQuery getUserThumbnailQuery; + + @Test + void testMy() throws Exception { + givenUserByReference(defaultUser() + .withName("tomcat") + .build()); + + mvc.perform(get("/user/my-page") + .header("Content-Type", "application/json") + .header("Authorization", "sample") + ).andExpect(status().isOk()); + + then(getUserThumbnailQuery).should() + .loadUserThumbnailById(eq(1L)); + } +} \ No newline at end of file From a8e487219ca0549deae32ba31b2b0a172267fb0a Mon Sep 17 00:00:00 2001 From: leesky Date: Sat, 1 Apr 2023 23:57:54 +0900 Subject: [PATCH 072/141] =?UTF-8?q?chore=20:=20import=EB=AC=B8=20=EC=B5=9C?= =?UTF-8?q?=EC=A0=81=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../yapp/artie/domain/user/adapter/in/web/UserController.java | 3 --- .../user/adapter/in/web/GetUserThumbnailControllerTest.java | 1 - 2 files changed, 4 deletions(-) diff --git a/src/main/java/com/yapp/artie/domain/user/adapter/in/web/UserController.java b/src/main/java/com/yapp/artie/domain/user/adapter/in/web/UserController.java index 69af7a4f..c7164219 100644 --- a/src/main/java/com/yapp/artie/domain/user/adapter/in/web/UserController.java +++ b/src/main/java/com/yapp/artie/domain/user/adapter/in/web/UserController.java @@ -1,12 +1,9 @@ package com.yapp.artie.domain.user.adapter.in.web; -import com.yapp.artie.domain.user.adapter.out.persistence.UserJpaEntity; import com.yapp.artie.domain.user.application.port.in.GetUserQuery; -import com.yapp.artie.domain.user.application.port.in.GetUserThumbnailQuery; import com.yapp.artie.domain.user.application.port.in.RenameUserUseCase; import com.yapp.artie.domain.user.application.port.in.UserWithdrawalUseCase; import com.yapp.artie.domain.user.domain.User; -import com.yapp.artie.domain.user.dto.response.UserThumbnailResponseDto; import com.yapp.artie.global.annotation.WebAdapter; import com.yapp.artie.global.exception.response.ErrorResponse; import io.swagger.v3.oas.annotations.Operation; diff --git a/src/test/java/com/yapp/artie/domain/user/adapter/in/web/GetUserThumbnailControllerTest.java b/src/test/java/com/yapp/artie/domain/user/adapter/in/web/GetUserThumbnailControllerTest.java index c838c7d8..61539bcf 100644 --- a/src/test/java/com/yapp/artie/domain/user/adapter/in/web/GetUserThumbnailControllerTest.java +++ b/src/test/java/com/yapp/artie/domain/user/adapter/in/web/GetUserThumbnailControllerTest.java @@ -4,7 +4,6 @@ import static org.mockito.ArgumentMatchers.eq; import static org.mockito.BDDMockito.then; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; import com.yapp.artie.common.BaseControllerIntegrationTest; From c5d7983a831914fd5ebd594d82b124619404f1ab Mon Sep 17 00:00:00 2001 From: leesky Date: Sun, 2 Apr 2023 00:37:26 +0900 Subject: [PATCH 073/141] =?UTF-8?q?chore=20:=20authentication=EC=9D=84=20u?= =?UTF-8?q?ser=20=EB=8F=84=EB=A9=94=EC=9D=B8=EC=9D=98=20=EC=95=84=EC=9B=83?= =?UTF-8?q?=20=EC=96=B4=EB=8C=91=ED=84=B0=EB=A1=9C=20=EC=82=AC=EC=9A=A9?= =?UTF-8?q?=ED=95=98=EA=B8=B0=20=EC=9C=84=ED=95=B4=20=ED=8C=A8=ED=82=A4?= =?UTF-8?q?=EC=A7=80=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../user/adapter/in/web/RegisterUserController.java | 4 ++-- .../user/adapter/out}/authentication/ArtieToken.java | 2 +- .../user/adapter/out}/authentication/JwtDecoder.java | 2 +- .../adapter/out}/authentication/JwtServiceImpl.java | 3 ++- .../adapter/out}/authentication/WithdrawalHandler.java | 2 +- .../domain/user/application/port/out/JwtService.java | 10 ++++++++++ .../application/service/UserWithdrawalService.java | 2 +- .../yapp/artie/global/authentication/JwtFilter.java | 2 ++ .../yapp/artie/global/authentication/JwtService.java | 8 -------- .../com/yapp/artie/global/config/SecurityConfig.java | 2 +- .../artie/common/BaseControllerIntegrationTest.java | 2 +- .../java/com/yapp/artie/common/TestArtieToken.java | 2 +- .../application/service/UserWithdrawalServiceTest.java | 2 +- .../domain/user/controller/UserControllerTest.java | 2 +- 14 files changed, 25 insertions(+), 20 deletions(-) rename src/main/java/com/yapp/artie/{global => domain/user/adapter/out}/authentication/ArtieToken.java (87%) rename src/main/java/com/yapp/artie/{global => domain/user/adapter/out}/authentication/JwtDecoder.java (96%) rename src/main/java/com/yapp/artie/{global => domain/user/adapter/out}/authentication/JwtServiceImpl.java (89%) rename src/main/java/com/yapp/artie/{global => domain/user/adapter/out}/authentication/WithdrawalHandler.java (94%) create mode 100644 src/main/java/com/yapp/artie/domain/user/application/port/out/JwtService.java delete mode 100644 src/main/java/com/yapp/artie/global/authentication/JwtService.java diff --git a/src/main/java/com/yapp/artie/domain/user/adapter/in/web/RegisterUserController.java b/src/main/java/com/yapp/artie/domain/user/adapter/in/web/RegisterUserController.java index 5ca57483..ea5e52f0 100644 --- a/src/main/java/com/yapp/artie/domain/user/adapter/in/web/RegisterUserController.java +++ b/src/main/java/com/yapp/artie/domain/user/adapter/in/web/RegisterUserController.java @@ -1,11 +1,11 @@ package com.yapp.artie.domain.user.adapter.in.web; +import com.yapp.artie.domain.user.adapter.out.authentication.ArtieToken; import com.yapp.artie.domain.user.application.port.in.RegisterUserUseCase; +import com.yapp.artie.domain.user.application.port.out.JwtService; import com.yapp.artie.domain.user.dto.response.CreateUserResponseDto; import com.yapp.artie.global.annotation.WebAdapter; -import com.yapp.artie.global.authentication.ArtieToken; -import com.yapp.artie.global.authentication.JwtService; import com.yapp.artie.global.exception.common.InvalidValueException; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.Content; diff --git a/src/main/java/com/yapp/artie/global/authentication/ArtieToken.java b/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/ArtieToken.java similarity index 87% rename from src/main/java/com/yapp/artie/global/authentication/ArtieToken.java rename to src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/ArtieToken.java index 3865ffa8..448923e2 100644 --- a/src/main/java/com/yapp/artie/global/authentication/ArtieToken.java +++ b/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/ArtieToken.java @@ -1,4 +1,4 @@ -package com.yapp.artie.global.authentication; +package com.yapp.artie.domain.user.adapter.out.authentication; import com.google.firebase.auth.FirebaseToken; diff --git a/src/main/java/com/yapp/artie/global/authentication/JwtDecoder.java b/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/JwtDecoder.java similarity index 96% rename from src/main/java/com/yapp/artie/global/authentication/JwtDecoder.java rename to src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/JwtDecoder.java index 5f445394..8f6021a3 100644 --- a/src/main/java/com/yapp/artie/global/authentication/JwtDecoder.java +++ b/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/JwtDecoder.java @@ -1,4 +1,4 @@ -package com.yapp.artie.global.authentication; +package com.yapp.artie.domain.user.adapter.out.authentication; import com.google.firebase.auth.FirebaseAuth; import com.google.firebase.auth.FirebaseAuthException; diff --git a/src/main/java/com/yapp/artie/global/authentication/JwtServiceImpl.java b/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/JwtServiceImpl.java similarity index 89% rename from src/main/java/com/yapp/artie/global/authentication/JwtServiceImpl.java rename to src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/JwtServiceImpl.java index c7d07c06..3e2ab3a5 100644 --- a/src/main/java/com/yapp/artie/global/authentication/JwtServiceImpl.java +++ b/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/JwtServiceImpl.java @@ -1,5 +1,6 @@ -package com.yapp.artie.global.authentication; +package com.yapp.artie.domain.user.adapter.out.authentication; +import com.yapp.artie.domain.user.application.port.out.JwtService; import com.yapp.artie.global.exception.authentication.NotExistValidTokenException; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; diff --git a/src/main/java/com/yapp/artie/global/authentication/WithdrawalHandler.java b/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/WithdrawalHandler.java similarity index 94% rename from src/main/java/com/yapp/artie/global/authentication/WithdrawalHandler.java rename to src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/WithdrawalHandler.java index 373b5f1f..f00842bb 100644 --- a/src/main/java/com/yapp/artie/global/authentication/WithdrawalHandler.java +++ b/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/WithdrawalHandler.java @@ -1,4 +1,4 @@ -package com.yapp.artie.global.authentication; +package com.yapp.artie.domain.user.adapter.out.authentication; import com.google.firebase.auth.AuthErrorCode; import com.google.firebase.auth.FirebaseAuth; diff --git a/src/main/java/com/yapp/artie/domain/user/application/port/out/JwtService.java b/src/main/java/com/yapp/artie/domain/user/application/port/out/JwtService.java new file mode 100644 index 00000000..be3dee6c --- /dev/null +++ b/src/main/java/com/yapp/artie/domain/user/application/port/out/JwtService.java @@ -0,0 +1,10 @@ +package com.yapp.artie.domain.user.application.port.out; + +import com.yapp.artie.domain.user.adapter.out.authentication.ArtieToken; + +public interface JwtService { + + ArtieToken verify(String header); + + void withdraw(String uid); +} diff --git a/src/main/java/com/yapp/artie/domain/user/application/service/UserWithdrawalService.java b/src/main/java/com/yapp/artie/domain/user/application/service/UserWithdrawalService.java index 8db85cf4..4619099a 100644 --- a/src/main/java/com/yapp/artie/domain/user/application/service/UserWithdrawalService.java +++ b/src/main/java/com/yapp/artie/domain/user/application/service/UserWithdrawalService.java @@ -4,10 +4,10 @@ import com.yapp.artie.domain.user.adapter.out.persistence.UserJpaEntity; import com.yapp.artie.domain.user.application.port.in.UserWithdrawalUseCase; import com.yapp.artie.domain.user.application.port.out.DeleteUserPort; +import com.yapp.artie.domain.user.application.port.out.JwtService; import com.yapp.artie.domain.user.application.port.out.LoadUserPort; import com.yapp.artie.domain.user.domain.User; import com.yapp.artie.global.annotation.UseCase; -import com.yapp.artie.global.authentication.JwtService; import lombok.RequiredArgsConstructor; import org.springframework.transaction.annotation.Transactional; diff --git a/src/main/java/com/yapp/artie/global/authentication/JwtFilter.java b/src/main/java/com/yapp/artie/global/authentication/JwtFilter.java index 41f7b5a0..0bf59bb6 100644 --- a/src/main/java/com/yapp/artie/global/authentication/JwtFilter.java +++ b/src/main/java/com/yapp/artie/global/authentication/JwtFilter.java @@ -1,5 +1,7 @@ package com.yapp.artie.global.authentication; +import com.yapp.artie.domain.user.adapter.out.authentication.ArtieToken; +import com.yapp.artie.domain.user.application.port.out.JwtService; import java.io.IOException; import java.util.NoSuchElementException; import javax.servlet.FilterChain; diff --git a/src/main/java/com/yapp/artie/global/authentication/JwtService.java b/src/main/java/com/yapp/artie/global/authentication/JwtService.java deleted file mode 100644 index a6fc8b35..00000000 --- a/src/main/java/com/yapp/artie/global/authentication/JwtService.java +++ /dev/null @@ -1,8 +0,0 @@ -package com.yapp.artie.global.authentication; - -public interface JwtService { - - ArtieToken verify(String header); - - void withdraw(String uid); -} diff --git a/src/main/java/com/yapp/artie/global/config/SecurityConfig.java b/src/main/java/com/yapp/artie/global/config/SecurityConfig.java index b9df3997..818bf3fb 100644 --- a/src/main/java/com/yapp/artie/global/config/SecurityConfig.java +++ b/src/main/java/com/yapp/artie/global/config/SecurityConfig.java @@ -1,9 +1,9 @@ package com.yapp.artie.global.config; import com.fasterxml.jackson.databind.ObjectMapper; +import com.yapp.artie.domain.user.application.port.out.JwtService; import com.yapp.artie.global.authentication.JwtExceptionHandler; import com.yapp.artie.global.authentication.JwtFilter; -import com.yapp.artie.global.authentication.JwtService; import lombok.RequiredArgsConstructor; import org.springframework.context.annotation.Configuration; import org.springframework.http.HttpMethod; diff --git a/src/test/java/com/yapp/artie/common/BaseControllerIntegrationTest.java b/src/test/java/com/yapp/artie/common/BaseControllerIntegrationTest.java index 1b464645..b274facb 100644 --- a/src/test/java/com/yapp/artie/common/BaseControllerIntegrationTest.java +++ b/src/test/java/com/yapp/artie/common/BaseControllerIntegrationTest.java @@ -4,8 +4,8 @@ import static org.mockito.BDDMockito.given; import static org.springframework.security.core.userdetails.User.builder; +import com.yapp.artie.domain.user.application.port.out.JwtService; import com.yapp.artie.domain.user.domain.User; -import com.yapp.artie.global.authentication.JwtService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; import org.springframework.boot.test.mock.mockito.MockBean; diff --git a/src/test/java/com/yapp/artie/common/TestArtieToken.java b/src/test/java/com/yapp/artie/common/TestArtieToken.java index 202c9eb7..310b81ae 100644 --- a/src/test/java/com/yapp/artie/common/TestArtieToken.java +++ b/src/test/java/com/yapp/artie/common/TestArtieToken.java @@ -1,6 +1,6 @@ package com.yapp.artie.common; -import com.yapp.artie.global.authentication.ArtieToken; +import com.yapp.artie.domain.user.adapter.out.authentication.ArtieToken; public class TestArtieToken extends ArtieToken { diff --git a/src/test/java/com/yapp/artie/domain/user/application/service/UserWithdrawalServiceTest.java b/src/test/java/com/yapp/artie/domain/user/application/service/UserWithdrawalServiceTest.java index 9e3606ba..7b06da74 100644 --- a/src/test/java/com/yapp/artie/domain/user/application/service/UserWithdrawalServiceTest.java +++ b/src/test/java/com/yapp/artie/domain/user/application/service/UserWithdrawalServiceTest.java @@ -9,10 +9,10 @@ import com.yapp.artie.domain.archive.repository.CategoryRepository; import com.yapp.artie.domain.user.application.port.out.DeleteUserPort; +import com.yapp.artie.domain.user.application.port.out.JwtService; import com.yapp.artie.domain.user.application.port.out.LoadUserPort; import com.yapp.artie.domain.user.domain.User; import com.yapp.artie.domain.user.exception.UserNotFoundException; -import com.yapp.artie.global.authentication.JwtService; import org.junit.jupiter.api.Test; import org.mockito.Mockito; diff --git a/src/test/java/com/yapp/artie/domain/user/controller/UserControllerTest.java b/src/test/java/com/yapp/artie/domain/user/controller/UserControllerTest.java index ff5c371f..db254102 100644 --- a/src/test/java/com/yapp/artie/domain/user/controller/UserControllerTest.java +++ b/src/test/java/com/yapp/artie/domain/user/controller/UserControllerTest.java @@ -18,8 +18,8 @@ import com.yapp.artie.domain.archive.repository.TagRepository; import com.yapp.artie.domain.user.adapter.out.persistence.UserJpaEntity; import com.yapp.artie.domain.user.adapter.out.persistence.UserRepository; +import com.yapp.artie.domain.user.application.port.out.JwtService; import com.yapp.artie.domain.user.domain.UserTest; -import com.yapp.artie.global.authentication.JwtService; import java.time.LocalDate; import javax.persistence.EntityManager; import org.junit.jupiter.api.DisplayName; From b4c976448f16a26fbdbdf89f8d30614454ba2191 Mon Sep 17 00:00:00 2001 From: leesky Date: Sun, 2 Apr 2023 00:41:08 +0900 Subject: [PATCH 074/141] =?UTF-8?q?chore=20:=20todo=20=EC=A3=BC=EC=84=9D?= =?UTF-8?q?=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../artie/domain/user/adapter/out/authentication/ArtieToken.java | 1 + .../domain/user/adapter/out/authentication/JwtServiceImpl.java | 1 + .../java/com/yapp/artie/domain/user/service/UserServiceImpl.java | 1 + .../java/com/yapp/artie/domain/user/service/UserUseCase.java | 1 + 4 files changed, 4 insertions(+) diff --git a/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/ArtieToken.java b/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/ArtieToken.java index 448923e2..86e0c379 100644 --- a/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/ArtieToken.java +++ b/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/ArtieToken.java @@ -2,6 +2,7 @@ import com.google.firebase.auth.FirebaseToken; +// TODO : User 도메인 레이어로 이동 public class ArtieToken { private final FirebaseToken firebaseToken; diff --git a/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/JwtServiceImpl.java b/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/JwtServiceImpl.java index 3e2ab3a5..0eb690c9 100644 --- a/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/JwtServiceImpl.java +++ b/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/JwtServiceImpl.java @@ -6,6 +6,7 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; +// TODO : 이름 변경, 애노테이션 생성 @Slf4j @Component @RequiredArgsConstructor diff --git a/src/main/java/com/yapp/artie/domain/user/service/UserServiceImpl.java b/src/main/java/com/yapp/artie/domain/user/service/UserServiceImpl.java index 96449f52..774d51db 100644 --- a/src/main/java/com/yapp/artie/domain/user/service/UserServiceImpl.java +++ b/src/main/java/com/yapp/artie/domain/user/service/UserServiceImpl.java @@ -11,6 +11,7 @@ import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +// TODO : deprecated api로 묶어서 JPA 엔티티를 반환하는 API만 레거시로 남겨둠 @Service @RequiredArgsConstructor public class UserServiceImpl implements UserUseCase { diff --git a/src/main/java/com/yapp/artie/domain/user/service/UserUseCase.java b/src/main/java/com/yapp/artie/domain/user/service/UserUseCase.java index 14226618..6722d455 100644 --- a/src/main/java/com/yapp/artie/domain/user/service/UserUseCase.java +++ b/src/main/java/com/yapp/artie/domain/user/service/UserUseCase.java @@ -3,6 +3,7 @@ import com.yapp.artie.domain.user.adapter.out.persistence.UserJpaEntity; import com.yapp.artie.domain.user.dto.response.CreateUserResponseDto; +// TODO : Deprecated 애노테이션을 붙이고, LoadUserJpaEntity 어쩌구로 이름 변경 필요 public interface UserUseCase { UserJpaEntity findById(Long id); From e3564c0a6fa07329f5057e392ea290fb50183418 Mon Sep 17 00:00:00 2001 From: leesky Date: Sun, 2 Apr 2023 00:48:45 +0900 Subject: [PATCH 075/141] =?UTF-8?q?feat=20:=20UserWithdrawalController=20?= =?UTF-8?q?=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../user/adapter/in/web/UserController.java | 60 ------------------- .../in/web/UserWithdrawalController.java | 48 +++++++++++++++ .../in/web/UserWithdrawalControllerTest.java | 33 ++++++++++ 3 files changed, 81 insertions(+), 60 deletions(-) create mode 100644 src/main/java/com/yapp/artie/domain/user/adapter/in/web/UserWithdrawalController.java create mode 100644 src/test/java/com/yapp/artie/domain/user/adapter/in/web/UserWithdrawalControllerTest.java diff --git a/src/main/java/com/yapp/artie/domain/user/adapter/in/web/UserController.java b/src/main/java/com/yapp/artie/domain/user/adapter/in/web/UserController.java index c7164219..b3df93b3 100644 --- a/src/main/java/com/yapp/artie/domain/user/adapter/in/web/UserController.java +++ b/src/main/java/com/yapp/artie/domain/user/adapter/in/web/UserController.java @@ -1,38 +1,24 @@ package com.yapp.artie.domain.user.adapter.in.web; import com.yapp.artie.domain.user.application.port.in.GetUserQuery; -import com.yapp.artie.domain.user.application.port.in.RenameUserUseCase; -import com.yapp.artie.domain.user.application.port.in.UserWithdrawalUseCase; import com.yapp.artie.domain.user.domain.User; import com.yapp.artie.global.annotation.WebAdapter; -import com.yapp.artie.global.exception.response.ErrorResponse; import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.Parameter; -import io.swagger.v3.oas.annotations.enums.ParameterIn; 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.responses.ApiResponses; import java.util.Optional; -import javax.validation.Valid; import lombok.RequiredArgsConstructor; -import org.apache.http.HttpEntity; import org.springframework.http.ResponseEntity; import org.springframework.security.core.Authentication; -import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PatchMapping; -import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; @RequestMapping("/user") @WebAdapter @RequiredArgsConstructor public class UserController { - - private final UserWithdrawalUseCase userWithdrawalUseCase; - private final RenameUserUseCase renameUserUseCase; private final GetUserQuery getUserQuery; @Operation(summary = "유저 조회", description = "토큰 기반 유저 조회") @@ -44,58 +30,12 @@ public class UserController { }) @GetMapping("/me") public ResponseEntity me(Authentication authentication) { - Long userId = getUserId(authentication); User user = getUserQuery.loadUserById(userId); return ResponseEntity.ok().body(user); } - @Operation(summary = "유저 삭제", description = "회원 탈퇴") - @ApiResponses(value = { - @ApiResponse( - responseCode = "204", - description = "유저가 성공적으로 삭제됨", - content = @Content(mediaType = "application/json", schema = @Schema(implementation = ResponseEntity.class))), - }) - @DeleteMapping() - public ResponseEntity deleteUser(Authentication authentication) { - - Long userId = getUserId(authentication); - userWithdrawalUseCase.delete(userId); - return ResponseEntity.noContent().build(); - } - - - @Operation(summary = "유저 닉네임 수정", description = "유저의 서비스 닉네임 수정") - @ApiResponses(value = { - @ApiResponse( - responseCode = "204", - description = "닉네임이 성공적으로 수정됨", - content = @Content(mediaType = "application/json", schema = @Schema(implementation = Void.class))), - @ApiResponse( - responseCode = "400", - description = "잘못된 입력", - content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorResponse.class))), - @ApiResponse( - responseCode = "401", - description = "인증 오류", - content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorResponse.class))), - @ApiResponse( - responseCode = "404", - description = "찾을 수 없는 회원", - content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorResponse.class))), - }) - @PatchMapping("/{id}") - public ResponseEntity updateUserName(Authentication authentication, - @Parameter(name = "id", description = "유저 ID", in = ParameterIn.PATH) @Valid @PathVariable("id") Long artworkId, - @Parameter(name = "name", description = "변경할 닉네임", in = ParameterIn.QUERY) @Valid @RequestParam("name") String name) { - - Long userId = getUserId(authentication); - renameUserUseCase.rename(userId, name); - return ResponseEntity.noContent().build(); - } - // TODO : 앱 배포했을 때에는 1L 대신에 exception을 던지도록 변경해야 합니다. private Long getUserId(Authentication authentication) { if (Optional.ofNullable(authentication).isPresent()) { diff --git a/src/main/java/com/yapp/artie/domain/user/adapter/in/web/UserWithdrawalController.java b/src/main/java/com/yapp/artie/domain/user/adapter/in/web/UserWithdrawalController.java new file mode 100644 index 00000000..edd1ddc0 --- /dev/null +++ b/src/main/java/com/yapp/artie/domain/user/adapter/in/web/UserWithdrawalController.java @@ -0,0 +1,48 @@ +package com.yapp.artie.domain.user.adapter.in.web; + +import com.yapp.artie.domain.user.application.port.in.UserWithdrawalUseCase; +import com.yapp.artie.global.annotation.WebAdapter; +import io.swagger.v3.oas.annotations.Operation; +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.responses.ApiResponses; +import java.util.Optional; +import lombok.RequiredArgsConstructor; +import org.apache.http.HttpEntity; +import org.springframework.http.ResponseEntity; +import org.springframework.security.core.Authentication; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@WebAdapter +@RestController +@RequestMapping("/user") +@RequiredArgsConstructor +public class UserWithdrawalController { + + private final UserWithdrawalUseCase userWithdrawalUseCase; + + @Operation(summary = "유저 삭제", description = "회원 탈퇴") + @ApiResponses(value = { + @ApiResponse( + responseCode = "204", + description = "유저가 성공적으로 삭제됨", + content = @Content(mediaType = "application/json", schema = @Schema(implementation = ResponseEntity.class))), + }) + @DeleteMapping() + public ResponseEntity deleteUser(Authentication authentication) { + Long userId = getUserId(authentication); + userWithdrawalUseCase.delete(userId); + return ResponseEntity.noContent().build(); + } + + // TODO : 앱 배포했을 때에는 1L 대신에 exception을 던지도록 변경해야 합니다. + private Long getUserId(Authentication authentication) { + if (Optional.ofNullable(authentication).isPresent()) { + return Long.parseLong(authentication.getName()); + } + return 1L; + } +} diff --git a/src/test/java/com/yapp/artie/domain/user/adapter/in/web/UserWithdrawalControllerTest.java b/src/test/java/com/yapp/artie/domain/user/adapter/in/web/UserWithdrawalControllerTest.java new file mode 100644 index 00000000..5cce7405 --- /dev/null +++ b/src/test/java/com/yapp/artie/domain/user/adapter/in/web/UserWithdrawalControllerTest.java @@ -0,0 +1,33 @@ +package com.yapp.artie.domain.user.adapter.in.web; + +import static com.yapp.artie.common.UserTestData.defaultUser; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.BDDMockito.then; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.delete; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +import com.yapp.artie.common.BaseControllerIntegrationTest; +import com.yapp.artie.domain.user.application.port.in.UserWithdrawalUseCase; +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; +import org.springframework.boot.test.mock.mockito.MockBean; + +@WebMvcTest(controllers = UserWithdrawalController.class) +class UserWithdrawalControllerTest extends BaseControllerIntegrationTest { + + @MockBean + private UserWithdrawalUseCase userWithdrawalUseCase; + + @Test + void testDelete() throws Exception { + givenUserByReference(defaultUser().withId(1L).build()); + + mvc.perform(delete("/user") + .header("Content-Type", "application/json") + ) + .andExpect(status().isNoContent()); + + then(userWithdrawalUseCase).should() + .delete(eq(1L)); + } +} \ No newline at end of file From edea734821afe59711949452ab89ff8e811716da Mon Sep 17 00:00:00 2001 From: leesky Date: Sun, 2 Apr 2023 00:48:56 +0900 Subject: [PATCH 076/141] =?UTF-8?q?chore=20:=20todo=20=EC=A3=BC=EC=84=9D?= =?UTF-8?q?=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/user/adapter/in/web/GetUserThumbnailController.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/com/yapp/artie/domain/user/adapter/in/web/GetUserThumbnailController.java b/src/main/java/com/yapp/artie/domain/user/adapter/in/web/GetUserThumbnailController.java index 5419dd72..a66afe2b 100644 --- a/src/main/java/com/yapp/artie/domain/user/adapter/in/web/GetUserThumbnailController.java +++ b/src/main/java/com/yapp/artie/domain/user/adapter/in/web/GetUserThumbnailController.java @@ -39,6 +39,7 @@ public ResponseEntity my(Authentication authentication return ResponseEntity.ok().body(getUserThumbnailQuery.loadUserThumbnailById(userId)); } + // TODO : 앱 배포했을 때에는 1L 대신에 exception을 던지도록 변경해야 합니다. private Long getUserId(Authentication authentication) { if (Optional.ofNullable(authentication).isPresent()) { return Long.parseLong(authentication.getName()); From e121da86885f75f27402c76b271eff95fe41d108 Mon Sep 17 00:00:00 2001 From: leesky Date: Sun, 2 Apr 2023 01:18:58 +0900 Subject: [PATCH 077/141] =?UTF-8?q?refactor=20:=20UserDetailsService?= =?UTF-8?q?=EC=99=80=20GetUserQuery=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../port/in/GetUserDetailsQuery.java | 9 +++ .../application/port/in/GetUserQuery.java | 6 +- .../service/GetUserDetailsService.java | 30 +++++++ .../application/service/GetUserService.java | 14 ---- .../service/GetUserDetailsServiceTest.java | 40 ++++++++++ .../service/GetUserServiceTest.java | 22 ------ .../user/controller/UserControllerTest.java | 78 ------------------- 7 files changed, 80 insertions(+), 119 deletions(-) create mode 100644 src/main/java/com/yapp/artie/domain/user/application/port/in/GetUserDetailsQuery.java create mode 100644 src/main/java/com/yapp/artie/domain/user/application/service/GetUserDetailsService.java create mode 100644 src/test/java/com/yapp/artie/domain/user/application/service/GetUserDetailsServiceTest.java delete mode 100644 src/test/java/com/yapp/artie/domain/user/controller/UserControllerTest.java diff --git a/src/main/java/com/yapp/artie/domain/user/application/port/in/GetUserDetailsQuery.java b/src/main/java/com/yapp/artie/domain/user/application/port/in/GetUserDetailsQuery.java new file mode 100644 index 00000000..a4639edf --- /dev/null +++ b/src/main/java/com/yapp/artie/domain/user/application/port/in/GetUserDetailsQuery.java @@ -0,0 +1,9 @@ +package com.yapp.artie.domain.user.application.port.in; + +import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.security.core.userdetails.UserDetailsService; + +public interface GetUserDetailsQuery extends UserDetailsService { + + UserDetails loadUserByUsername(String uid); +} diff --git a/src/main/java/com/yapp/artie/domain/user/application/port/in/GetUserQuery.java b/src/main/java/com/yapp/artie/domain/user/application/port/in/GetUserQuery.java index 3d935016..c3e73bc7 100644 --- a/src/main/java/com/yapp/artie/domain/user/application/port/in/GetUserQuery.java +++ b/src/main/java/com/yapp/artie/domain/user/application/port/in/GetUserQuery.java @@ -1,12 +1,8 @@ package com.yapp.artie.domain.user.application.port.in; import com.yapp.artie.domain.user.domain.User; -import org.springframework.security.core.userdetails.UserDetails; -import org.springframework.security.core.userdetails.UserDetailsService; -public interface GetUserQuery extends UserDetailsService { +public interface GetUserQuery { User loadUserById(Long userId); - - UserDetails loadUserByUsername(String uid); } diff --git a/src/main/java/com/yapp/artie/domain/user/application/service/GetUserDetailsService.java b/src/main/java/com/yapp/artie/domain/user/application/service/GetUserDetailsService.java new file mode 100644 index 00000000..511f8d11 --- /dev/null +++ b/src/main/java/com/yapp/artie/domain/user/application/service/GetUserDetailsService.java @@ -0,0 +1,30 @@ +package com.yapp.artie.domain.user.application.service; + +import static org.springframework.security.core.userdetails.User.builder; + +import com.yapp.artie.domain.user.application.port.in.GetUserDetailsQuery; +import com.yapp.artie.domain.user.application.port.out.LoadUserPort; +import com.yapp.artie.domain.user.domain.User; +import com.yapp.artie.global.annotation.UseCase; +import lombok.RequiredArgsConstructor; +import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.transaction.annotation.Transactional; + +@UseCase +@Transactional(readOnly = true) +@RequiredArgsConstructor +public class GetUserDetailsService implements GetUserDetailsQuery { + + private final LoadUserPort loadUserPort; + + @Override + public UserDetails loadUserByUsername(String uid) { + User user = loadUserPort.loadByUid(uid); + + return builder() + .username(String.valueOf(user.getId())) + .password(user.getUid()) + .authorities("user") + .build(); + } +} diff --git a/src/main/java/com/yapp/artie/domain/user/application/service/GetUserService.java b/src/main/java/com/yapp/artie/domain/user/application/service/GetUserService.java index 27d1489e..16d918f8 100644 --- a/src/main/java/com/yapp/artie/domain/user/application/service/GetUserService.java +++ b/src/main/java/com/yapp/artie/domain/user/application/service/GetUserService.java @@ -1,13 +1,10 @@ package com.yapp.artie.domain.user.application.service; -import static org.springframework.security.core.userdetails.User.builder; - import com.yapp.artie.domain.user.application.port.in.GetUserQuery; import com.yapp.artie.domain.user.application.port.out.LoadUserPort; import com.yapp.artie.domain.user.domain.User; import com.yapp.artie.global.annotation.UseCase; import lombok.RequiredArgsConstructor; -import org.springframework.security.core.userdetails.UserDetails; import org.springframework.transaction.annotation.Transactional; @UseCase @@ -21,15 +18,4 @@ public class GetUserService implements GetUserQuery { public User loadUserById(Long userId) { return loadUserPort.loadById(userId); } - - @Override - public UserDetails loadUserByUsername(String uid) { - User user = loadUserPort.loadByUid(uid); - - return builder() - .username(String.valueOf(user.getId())) - .password(user.getUid()) - .authorities("user") - .build(); - } } diff --git a/src/test/java/com/yapp/artie/domain/user/application/service/GetUserDetailsServiceTest.java b/src/test/java/com/yapp/artie/domain/user/application/service/GetUserDetailsServiceTest.java new file mode 100644 index 00000000..739d3403 --- /dev/null +++ b/src/test/java/com/yapp/artie/domain/user/application/service/GetUserDetailsServiceTest.java @@ -0,0 +1,40 @@ +package com.yapp.artie.domain.user.application.service; + +import static com.yapp.artie.common.UserTestData.defaultUser; +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.BDDMockito.given; + +import com.yapp.artie.domain.user.application.port.out.LoadUserPort; +import com.yapp.artie.domain.user.domain.User; +import org.junit.jupiter.api.Test; +import org.mockito.Mockito; +import org.springframework.security.core.userdetails.UserDetails; + +class GetUserDetailsServiceTest { + + private final LoadUserPort loadUserPort = Mockito.mock(LoadUserPort.class); + private final GetUserDetailsService getUserDetailsService = new GetUserDetailsService( + loadUserPort); + + @Test + void loadUserByUsername_사용자를_조회했을_때_반환되는_객체의_ID는_엔티티의_식별자와_같다() { + User user = defaultUser().build(); + givenUserByReferenceWithUid(user); + UserDetails actual = getUserDetailsService.loadUserByUsername(user.getUid()); + assertThat(actual.getUsername()).isEqualTo(user.getId().toString()); + } + + @Test + void loadUserByUsername_사용자를_조회했을_때_반환되는_객체의_PW는_엔티티의_UID와_같다() { + User user = defaultUser().build(); + givenUserByReferenceWithUid(user); + UserDetails actual = getUserDetailsService.loadUserByUsername(user.getUid()); + assertThat(actual.getPassword()).isEqualTo(user.getUid()); + } + + private void givenUserByReferenceWithUid(User user) { + given(loadUserPort.loadByUid(any())) + .willReturn(user); + } +} \ No newline at end of file diff --git a/src/test/java/com/yapp/artie/domain/user/application/service/GetUserServiceTest.java b/src/test/java/com/yapp/artie/domain/user/application/service/GetUserServiceTest.java index 1ecf0398..57d40a15 100644 --- a/src/test/java/com/yapp/artie/domain/user/application/service/GetUserServiceTest.java +++ b/src/test/java/com/yapp/artie/domain/user/application/service/GetUserServiceTest.java @@ -11,7 +11,6 @@ import com.yapp.artie.domain.user.exception.UserNotFoundException; import org.junit.jupiter.api.Test; import org.mockito.Mockito; -import org.springframework.security.core.userdetails.UserDetails; class GetUserServiceTest { @@ -33,32 +32,11 @@ class GetUserServiceTest { assertThat(actual.getId()).isEqualTo(user.getId()); } - @Test - void loadUserByUsername_사용자를_조회했을_때_반환되는_객체의_ID는_엔티티의_식별자와_같다() { - User user = defaultUser().build(); - givenUserByReferenceWithUid(user); - UserDetails actual = getUserService.loadUserByUsername(user.getUid()); - assertThat(actual.getUsername()).isEqualTo(user.getId().toString()); - } - - @Test - void loadUserByUsername_사용자를_조회했을_때_반환되는_객체의_PW는_엔티티의_UID와_같다() { - User user = defaultUser().build(); - givenUserByReferenceWithUid(user); - UserDetails actual = getUserService.loadUserByUsername(user.getUid()); - assertThat(actual.getPassword()).isEqualTo(user.getUid()); - } - private void givenUserByReference(User user) { given(loadUserPort.loadById(any())) .willReturn(user); } - private void givenUserByReferenceWithUid(User user) { - given(loadUserPort.loadByUid(any())) - .willReturn(user); - } - private void givenUserFindWillFail() { given(loadUserPort.loadById(any())) .willThrow(UserNotFoundException.class); diff --git a/src/test/java/com/yapp/artie/domain/user/controller/UserControllerTest.java b/src/test/java/com/yapp/artie/domain/user/controller/UserControllerTest.java deleted file mode 100644 index db254102..00000000 --- a/src/test/java/com/yapp/artie/domain/user/controller/UserControllerTest.java +++ /dev/null @@ -1,78 +0,0 @@ -package com.yapp.artie.domain.user.controller; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.ArgumentMatchers.anyString; -import static org.mockito.Mockito.doNothing; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.delete; -import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; - -import com.yapp.artie.common.BaseControllerIntegrationTest; -import com.yapp.artie.domain.archive.domain.artwork.Artwork; -import com.yapp.artie.domain.archive.domain.category.Category; -import com.yapp.artie.domain.archive.domain.exhibit.Exhibit; -import com.yapp.artie.domain.archive.domain.tag.Tag; -import com.yapp.artie.domain.archive.repository.ArtworkRepository; -import com.yapp.artie.domain.archive.repository.CategoryRepository; -import com.yapp.artie.domain.archive.repository.ExhibitRepository; -import com.yapp.artie.domain.archive.repository.TagRepository; -import com.yapp.artie.domain.user.adapter.out.persistence.UserJpaEntity; -import com.yapp.artie.domain.user.adapter.out.persistence.UserRepository; -import com.yapp.artie.domain.user.application.port.out.JwtService; -import com.yapp.artie.domain.user.domain.UserTest; -import java.time.LocalDate; -import javax.persistence.EntityManager; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.mock.mockito.MockBean; - -class UserControllerTest extends BaseControllerIntegrationTest { - - @Autowired - EntityManager em; - - @Autowired - UserRepository userRepository; - - @Autowired - CategoryRepository categoryRepository; - - @Autowired - ExhibitRepository exhibitRepository; - - @Autowired - ArtworkRepository artworkRepository; - - @Autowired - TagRepository tagRepository; - - @MockBean - JwtService jwtService; - - // TODO : 헤더 토큰 ( Authentication ) 모킹 필요. 현재는 getUserId 메소드에 의존하고 있음 - @Test - @DisplayName("유저 삭제(탈퇴) API - 유저 데이터가 삭제되면 해당 유저의 카테고리, 전시, 작품, 태그 데이터가 함께 삭제되어야합니다.") - public void deleteUser() throws Exception { - UserJpaEntity user = userRepository.save(UserTest.TEST_SAVED_USER); - Category category = categoryRepository.save(Category.create(user, "category-name", 1)); - Exhibit exhibit = exhibitRepository.save( - Exhibit.create("exhibit-name", LocalDate.now(), category, user, "exhibit-link")); - Artwork artwork = artworkRepository.save(Artwork.create(exhibit, true, "artwork-uri")); - Tag tag = tagRepository.save(new Tag(user, artwork, 1, "tag-name")); - em.clear(); - - doNothing().when(jwtService).withdraw(anyString()); - - mvc.perform(delete("/user")) - .andExpect(status().isNoContent()) - .andDo(print()); - - em.flush(); - assertThat(userRepository.findById(user.getId()).isPresent()).isFalse(); - assertThat(categoryRepository.findById(category.getId()).isPresent()).isFalse(); - assertThat(exhibitRepository.findById(exhibit.getId()).isPresent()).isFalse(); - assertThat(artworkRepository.findById(artwork.getId()).isPresent()).isFalse(); - assertThat(tagRepository.findById(tag.getId()).isPresent()).isFalse(); - } -} \ No newline at end of file From fba4000fade03b440395292e15ed5c8564ad8d67 Mon Sep 17 00:00:00 2001 From: leesky Date: Sun, 2 Apr 2023 01:19:21 +0900 Subject: [PATCH 078/141] =?UTF-8?q?feat=20:=20GetUserController=20?= =?UTF-8?q?=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...Controller.java => GetUserController.java} | 7 ++-- .../common/BaseControllerIntegrationTest.java | 1 + .../adapter/in/web/GetUserControllerTest.java | 33 +++++++++++++++++++ .../artie/domain/user/domain/UserTest.java | 4 --- 4 files changed, 39 insertions(+), 6 deletions(-) rename src/main/java/com/yapp/artie/domain/user/adapter/in/web/{UserController.java => GetUserController.java} (93%) create mode 100644 src/test/java/com/yapp/artie/domain/user/adapter/in/web/GetUserControllerTest.java diff --git a/src/main/java/com/yapp/artie/domain/user/adapter/in/web/UserController.java b/src/main/java/com/yapp/artie/domain/user/adapter/in/web/GetUserController.java similarity index 93% rename from src/main/java/com/yapp/artie/domain/user/adapter/in/web/UserController.java rename to src/main/java/com/yapp/artie/domain/user/adapter/in/web/GetUserController.java index b3df93b3..e6bf02f5 100644 --- a/src/main/java/com/yapp/artie/domain/user/adapter/in/web/UserController.java +++ b/src/main/java/com/yapp/artie/domain/user/adapter/in/web/GetUserController.java @@ -14,11 +14,14 @@ import org.springframework.security.core.Authentication; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; -@RequestMapping("/user") @WebAdapter +@RestController +@RequestMapping("/user") @RequiredArgsConstructor -public class UserController { +public class GetUserController { + private final GetUserQuery getUserQuery; @Operation(summary = "유저 조회", description = "토큰 기반 유저 조회") diff --git a/src/test/java/com/yapp/artie/common/BaseControllerIntegrationTest.java b/src/test/java/com/yapp/artie/common/BaseControllerIntegrationTest.java index b274facb..43be55ef 100644 --- a/src/test/java/com/yapp/artie/common/BaseControllerIntegrationTest.java +++ b/src/test/java/com/yapp/artie/common/BaseControllerIntegrationTest.java @@ -4,6 +4,7 @@ import static org.mockito.BDDMockito.given; import static org.springframework.security.core.userdetails.User.builder; +import com.yapp.artie.domain.user.application.port.in.GetUserQuery; import com.yapp.artie.domain.user.application.port.out.JwtService; import com.yapp.artie.domain.user.domain.User; import org.springframework.beans.factory.annotation.Autowired; diff --git a/src/test/java/com/yapp/artie/domain/user/adapter/in/web/GetUserControllerTest.java b/src/test/java/com/yapp/artie/domain/user/adapter/in/web/GetUserControllerTest.java new file mode 100644 index 00000000..0d896735 --- /dev/null +++ b/src/test/java/com/yapp/artie/domain/user/adapter/in/web/GetUserControllerTest.java @@ -0,0 +1,33 @@ +package com.yapp.artie.domain.user.adapter.in.web; + +import static com.yapp.artie.common.UserTestData.defaultUser; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.BDDMockito.then; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +import com.yapp.artie.common.BaseControllerIntegrationTest; +import com.yapp.artie.domain.user.application.port.in.GetUserQuery; +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; +import org.springframework.boot.test.mock.mockito.MockBean; + +@WebMvcTest(controllers = GetUserController.class) +class GetUserControllerTest extends BaseControllerIntegrationTest { + + @MockBean + private GetUserQuery getUserQuery; + + @Test + void testMe() throws Exception { + givenUserByReference(defaultUser().withId(1L).build()); + + mvc.perform(get("/user/me") + .header("Content-Type", "application/json") + ) + .andExpect(status().isOk()); + + then(getUserQuery).should() + .loadUserById(eq(1L)); + } +} \ No newline at end of file diff --git a/src/test/java/com/yapp/artie/domain/user/domain/UserTest.java b/src/test/java/com/yapp/artie/domain/user/domain/UserTest.java index 27c5f156..8e7b2347 100644 --- a/src/test/java/com/yapp/artie/domain/user/domain/UserTest.java +++ b/src/test/java/com/yapp/artie/domain/user/domain/UserTest.java @@ -4,14 +4,10 @@ import static org.assertj.core.api.Assertions.assertThat; import com.yapp.artie.domain.user.adapter.out.persistence.UserJpaEntity; -import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -@DisplayName("User 테스트") public class UserTest { - public static final UserJpaEntity TEST_USER = UserJpaEntity.create("test-uid", "test-name", - "test-profile"); public static final UserJpaEntity TEST_SAVED_USER = UserJpaEntity.create(1L, "test-uid", "test-name", "test-profile"); From 133eab8e4d8606db2475f0a46a5262cae2684a68 Mon Sep 17 00:00:00 2001 From: leesky Date: Sun, 2 Apr 2023 01:34:21 +0900 Subject: [PATCH 079/141] =?UTF-8?q?refactor=20:=20Artie=20=ED=86=A0?= =?UTF-8?q?=ED=81=B0=EC=9D=84=20=EB=8F=84=EB=A9=94=EC=9D=B8=20=EB=A0=88?= =?UTF-8?q?=EC=9D=B4=EC=96=B4=EB=A1=9C=20=EC=9D=B4=EB=8F=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../in/web/RegisterUserController.java | 2 +- .../out/authentication/ArtieToken.java | 25 -------------- .../out/authentication/JwtServiceImpl.java | 4 ++- .../out/authentication/TokenGenerator.java | 14 ++++++++ .../user/application/port/out/JwtService.java | 2 +- .../artie/domain/user/domain/ArtieToken.java | 13 ++++++++ .../global/authentication/JwtFilter.java | 2 +- .../common/BaseControllerIntegrationTest.java | 4 +-- .../com/yapp/artie/common/TestArtieToken.java | 33 ------------------- 9 files changed, 35 insertions(+), 64 deletions(-) delete mode 100644 src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/ArtieToken.java create mode 100644 src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/TokenGenerator.java create mode 100644 src/main/java/com/yapp/artie/domain/user/domain/ArtieToken.java delete mode 100644 src/test/java/com/yapp/artie/common/TestArtieToken.java diff --git a/src/main/java/com/yapp/artie/domain/user/adapter/in/web/RegisterUserController.java b/src/main/java/com/yapp/artie/domain/user/adapter/in/web/RegisterUserController.java index ea5e52f0..031d23d3 100644 --- a/src/main/java/com/yapp/artie/domain/user/adapter/in/web/RegisterUserController.java +++ b/src/main/java/com/yapp/artie/domain/user/adapter/in/web/RegisterUserController.java @@ -1,9 +1,9 @@ package com.yapp.artie.domain.user.adapter.in.web; -import com.yapp.artie.domain.user.adapter.out.authentication.ArtieToken; import com.yapp.artie.domain.user.application.port.in.RegisterUserUseCase; import com.yapp.artie.domain.user.application.port.out.JwtService; +import com.yapp.artie.domain.user.domain.ArtieToken; import com.yapp.artie.domain.user.dto.response.CreateUserResponseDto; import com.yapp.artie.global.annotation.WebAdapter; import com.yapp.artie.global.exception.common.InvalidValueException; diff --git a/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/ArtieToken.java b/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/ArtieToken.java deleted file mode 100644 index 86e0c379..00000000 --- a/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/ArtieToken.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.yapp.artie.domain.user.adapter.out.authentication; - -import com.google.firebase.auth.FirebaseToken; - -// TODO : User 도메인 레이어로 이동 -public class ArtieToken { - - private final FirebaseToken firebaseToken; - - public ArtieToken(FirebaseToken firebaseToken) { - this.firebaseToken = firebaseToken; - } - - public String getUid() { - return firebaseToken.getUid(); - } - - public String getName() { - return firebaseToken.getName(); - } - - public String getPicture() { - return firebaseToken.getPicture(); - } -} diff --git a/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/JwtServiceImpl.java b/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/JwtServiceImpl.java index 0eb690c9..fc37ea78 100644 --- a/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/JwtServiceImpl.java +++ b/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/JwtServiceImpl.java @@ -1,6 +1,7 @@ package com.yapp.artie.domain.user.adapter.out.authentication; import com.yapp.artie.domain.user.application.port.out.JwtService; +import com.yapp.artie.domain.user.domain.ArtieToken; import com.yapp.artie.global.exception.authentication.NotExistValidTokenException; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -14,11 +15,12 @@ public class JwtServiceImpl implements JwtService { private final WithdrawalHandler withdrawalHandler; private final JwtDecoder decoder; + private final TokenGenerator tokenGenerator; @Override public ArtieToken verify(String header) { validateHeader(header); - return new ArtieToken(decoder + return tokenGenerator.generateDomainToken(decoder .decode(refineHeaderAsToken(header))); } diff --git a/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/TokenGenerator.java b/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/TokenGenerator.java new file mode 100644 index 00000000..bb36aea4 --- /dev/null +++ b/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/TokenGenerator.java @@ -0,0 +1,14 @@ +package com.yapp.artie.domain.user.adapter.out.authentication; + +import com.google.firebase.auth.FirebaseToken; +import com.yapp.artie.domain.user.domain.ArtieToken; +import org.springframework.stereotype.Component; + +@Component +public class TokenGenerator { + + ArtieToken generateDomainToken(FirebaseToken firebaseToken) { + return new ArtieToken(firebaseToken.getUid(), firebaseToken.getName(), + firebaseToken.getPicture()); + } +} diff --git a/src/main/java/com/yapp/artie/domain/user/application/port/out/JwtService.java b/src/main/java/com/yapp/artie/domain/user/application/port/out/JwtService.java index be3dee6c..977970ab 100644 --- a/src/main/java/com/yapp/artie/domain/user/application/port/out/JwtService.java +++ b/src/main/java/com/yapp/artie/domain/user/application/port/out/JwtService.java @@ -1,6 +1,6 @@ package com.yapp.artie.domain.user.application.port.out; -import com.yapp.artie.domain.user.adapter.out.authentication.ArtieToken; +import com.yapp.artie.domain.user.domain.ArtieToken; public interface JwtService { diff --git a/src/main/java/com/yapp/artie/domain/user/domain/ArtieToken.java b/src/main/java/com/yapp/artie/domain/user/domain/ArtieToken.java new file mode 100644 index 00000000..c1edf42a --- /dev/null +++ b/src/main/java/com/yapp/artie/domain/user/domain/ArtieToken.java @@ -0,0 +1,13 @@ +package com.yapp.artie.domain.user.domain; + +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +@Getter +@RequiredArgsConstructor +public class ArtieToken { + + private final String uid; + private final String name; + private final String picture; +} diff --git a/src/main/java/com/yapp/artie/global/authentication/JwtFilter.java b/src/main/java/com/yapp/artie/global/authentication/JwtFilter.java index 0bf59bb6..6478a7e1 100644 --- a/src/main/java/com/yapp/artie/global/authentication/JwtFilter.java +++ b/src/main/java/com/yapp/artie/global/authentication/JwtFilter.java @@ -1,7 +1,7 @@ package com.yapp.artie.global.authentication; -import com.yapp.artie.domain.user.adapter.out.authentication.ArtieToken; import com.yapp.artie.domain.user.application.port.out.JwtService; +import com.yapp.artie.domain.user.domain.ArtieToken; import java.io.IOException; import java.util.NoSuchElementException; import javax.servlet.FilterChain; diff --git a/src/test/java/com/yapp/artie/common/BaseControllerIntegrationTest.java b/src/test/java/com/yapp/artie/common/BaseControllerIntegrationTest.java index 43be55ef..dd02c552 100644 --- a/src/test/java/com/yapp/artie/common/BaseControllerIntegrationTest.java +++ b/src/test/java/com/yapp/artie/common/BaseControllerIntegrationTest.java @@ -4,8 +4,8 @@ import static org.mockito.BDDMockito.given; import static org.springframework.security.core.userdetails.User.builder; -import com.yapp.artie.domain.user.application.port.in.GetUserQuery; import com.yapp.artie.domain.user.application.port.out.JwtService; +import com.yapp.artie.domain.user.domain.ArtieToken; import com.yapp.artie.domain.user.domain.User; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; @@ -43,6 +43,6 @@ private void loadUserDetailsWillReturnReference(User user) { private void givenTestToken(String uid, String name, String picture) { given(jwtService.verify(any())) - .willReturn(new TestArtieToken(uid, name, picture)); + .willReturn(new ArtieToken(uid, name, picture)); } } \ No newline at end of file diff --git a/src/test/java/com/yapp/artie/common/TestArtieToken.java b/src/test/java/com/yapp/artie/common/TestArtieToken.java deleted file mode 100644 index 310b81ae..00000000 --- a/src/test/java/com/yapp/artie/common/TestArtieToken.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.yapp.artie.common; - -import com.yapp.artie.domain.user.adapter.out.authentication.ArtieToken; - -public class TestArtieToken extends ArtieToken { - - private final String uid; - private final String name; - private final String picture; - - public TestArtieToken(String uid, String name, - String picture) { - super(null); - this.uid = uid; - this.name = name; - this.picture = picture; - } - - @Override - public String getUid() { - return uid; - } - - @Override - public String getName() { - return name; - } - - @Override - public String getPicture() { - return picture; - } -} From 6eec699f690e4d35468fa64dd946782e0dec9c6b Mon Sep 17 00:00:00 2001 From: leesky Date: Sun, 2 Apr 2023 02:20:26 +0900 Subject: [PATCH 080/141] =?UTF-8?q?fix=20:=20=EA=B8=B0=EC=A1=B4=20UserServ?= =?UTF-8?q?ice=20Deprecated=20=EC=B2=98=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../archive/service/ArtworkService.java | 10 ++--- .../archive/service/CategoryService.java | 6 +-- .../archive/service/ExhibitService.java | 6 +-- .../domain/s3/controller/S3Controller.java | 4 +- .../out/persistence/UserJpaEntity.java | 33 -------------- .../user/deprecated/LoadUserJpaEntityApi.java | 21 +++++++++ .../user/deprecated/UserJpaEntityLoader.java | 22 +++++++++ .../domain/user/service/UserServiceImpl.java | 45 ------------------- .../domain/user/service/UserUseCase.java | 16 ------- 9 files changed, 56 insertions(+), 107 deletions(-) create mode 100644 src/main/java/com/yapp/artie/domain/user/deprecated/LoadUserJpaEntityApi.java create mode 100644 src/main/java/com/yapp/artie/domain/user/deprecated/UserJpaEntityLoader.java delete mode 100644 src/main/java/com/yapp/artie/domain/user/service/UserServiceImpl.java delete mode 100644 src/main/java/com/yapp/artie/domain/user/service/UserUseCase.java diff --git a/src/main/java/com/yapp/artie/domain/archive/service/ArtworkService.java b/src/main/java/com/yapp/artie/domain/archive/service/ArtworkService.java index f5b54d5c..a904dc39 100644 --- a/src/main/java/com/yapp/artie/domain/archive/service/ArtworkService.java +++ b/src/main/java/com/yapp/artie/domain/archive/service/ArtworkService.java @@ -11,7 +11,7 @@ import com.yapp.artie.domain.archive.repository.ArtworkRepository; import com.yapp.artie.domain.s3.service.S3Service; import com.yapp.artie.domain.user.adapter.out.persistence.UserJpaEntity; -import com.yapp.artie.domain.user.service.UserUseCase; +import com.yapp.artie.domain.user.deprecated.LoadUserJpaEntityApi; import com.yapp.artie.global.util.S3Utils; import java.util.List; import java.util.stream.Collectors; @@ -31,7 +31,7 @@ @RequiredArgsConstructor public class ArtworkService { - private final UserUseCase userService; + private final LoadUserJpaEntityApi loadUserJpaEntityApi; private final TagService tagService; private final ExhibitService exhibitService; private final S3Service s3Service; @@ -68,7 +68,7 @@ public Long create(CreateArtworkRequestDto createArtworkRequestDto, Long userId) Artwork.create(exhibit, artworkNum <= 0, createArtworkRequestDto.getName(), createArtworkRequestDto.getArtist(), createArtworkRequestDto.getImageUri())); - UserJpaEntity user = userService.findById(userId); + UserJpaEntity user = loadUserJpaEntityApi.findById(userId); if (createArtworkRequestDto.getTags() != null) { tagService.addTagsToArtwork(createArtworkRequestDto.getTags(), artwork, user); } @@ -126,7 +126,7 @@ public void update(Long artworkId, Long userId, UpdateArtworkRequestDto updateAr if (updateArtworkRequestDto.getTags() != null) { tagService.deleteAllByArtwork(artwork); tagService.addTagsToArtwork(updateArtworkRequestDto.getTags(), artwork, - userService.findById(userId)); + loadUserJpaEntityApi.findById(userId)); } } @@ -163,7 +163,7 @@ private ArtworkBrowseThumbnailDto buildArtworkBrowseThumbnail(Artwork artwork) { private Artwork findById(Long id, Long userId) { Artwork artwork = artworkRepository.findById(id).orElseThrow(ArtworkNotFoundException::new); - exhibitService.validateOwnedByUser(userService.findById(userId), artwork.getExhibit()); + exhibitService.validateOwnedByUser(loadUserJpaEntityApi.findById(userId), artwork.getExhibit()); return artwork; } } diff --git a/src/main/java/com/yapp/artie/domain/archive/service/CategoryService.java b/src/main/java/com/yapp/artie/domain/archive/service/CategoryService.java index 478d8f39..77d37bb7 100644 --- a/src/main/java/com/yapp/artie/domain/archive/service/CategoryService.java +++ b/src/main/java/com/yapp/artie/domain/archive/service/CategoryService.java @@ -12,7 +12,7 @@ import com.yapp.artie.domain.archive.repository.CategoryRepository; import com.yapp.artie.domain.archive.repository.ExhibitRepository; import com.yapp.artie.domain.user.adapter.out.persistence.UserJpaEntity; -import com.yapp.artie.domain.user.service.UserUseCase; +import com.yapp.artie.domain.user.deprecated.LoadUserJpaEntityApi; import java.util.List; import java.util.Optional; import java.util.stream.Collectors; @@ -27,7 +27,7 @@ public class CategoryService { private final CategoryRepository categoryRepository; private final ExhibitRepository exhibitRepository; - private final UserUseCase userService; + private final LoadUserJpaEntityApi loadUserJpaEntityApi; private final int CATEGORY_LIMIT_COUNT = 5; public Category findCategoryWithUser(Long id, Long userId) { @@ -102,7 +102,7 @@ private Category createCategory(String name, UserJpaEntity user) { } private UserJpaEntity findUser(Long userId) { - return userService.findById(userId); + return loadUserJpaEntityApi.findById(userId); } private int getSequence(UserJpaEntity user) { diff --git a/src/main/java/com/yapp/artie/domain/archive/service/ExhibitService.java b/src/main/java/com/yapp/artie/domain/archive/service/ExhibitService.java index 219d9859..45610fa0 100644 --- a/src/main/java/com/yapp/artie/domain/archive/service/ExhibitService.java +++ b/src/main/java/com/yapp/artie/domain/archive/service/ExhibitService.java @@ -17,7 +17,7 @@ import com.yapp.artie.domain.archive.repository.ArtworkRepository; import com.yapp.artie.domain.archive.repository.ExhibitRepository; import com.yapp.artie.domain.user.adapter.out.persistence.UserJpaEntity; -import com.yapp.artie.domain.user.service.UserUseCase; +import com.yapp.artie.domain.user.deprecated.LoadUserJpaEntityApi; import com.yapp.artie.global.util.DateUtils; import com.yapp.artie.global.util.S3Utils; import java.time.LocalDate; @@ -43,7 +43,7 @@ public class ExhibitService { private final ExhibitRepository exhibitRepository; private final ArtworkRepository artworkRepository; - private final UserUseCase userService; + private final LoadUserJpaEntityApi loadUserJpaEntityApi; private final CategoryService categoryService; private final S3Utils s3Utils; @@ -193,7 +193,7 @@ public void updatePostPinType(Long userId, Long exhibitId, boolean categoryType, } private UserJpaEntity findUser(Long userId) { - return userService.findById(userId); + return loadUserJpaEntityApi.findById(userId); } private String getMainImageUri(Exhibit exhibit) { diff --git a/src/main/java/com/yapp/artie/domain/s3/controller/S3Controller.java b/src/main/java/com/yapp/artie/domain/s3/controller/S3Controller.java index 64d2688e..4d39c2bb 100644 --- a/src/main/java/com/yapp/artie/domain/s3/controller/S3Controller.java +++ b/src/main/java/com/yapp/artie/domain/s3/controller/S3Controller.java @@ -4,7 +4,7 @@ import com.yapp.artie.domain.s3.dto.response.GetPresignedUrlResponseDto; import com.yapp.artie.domain.s3.dto.response.presignedUrlDataDto; import com.yapp.artie.domain.s3.service.S3Service; -import com.yapp.artie.domain.user.service.UserUseCase; +import com.yapp.artie.domain.user.deprecated.LoadUserJpaEntityApi; import com.yapp.artie.global.exception.response.ErrorResponse; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; @@ -33,7 +33,7 @@ @RequiredArgsConstructor public class S3Controller { - private final UserUseCase userService; + private final LoadUserJpaEntityApi userService; private final S3Service s3Service; @Operation(summary = "이미지 업로드 URL 요청", description = "S3로 이미지를 업로드할 Presigned URL 발급 요청으로, 정상적으로 발급된 이미지에 대해서만 반환함. 각 Presigned URL은 약 3분간 유효함.") diff --git a/src/main/java/com/yapp/artie/domain/user/adapter/out/persistence/UserJpaEntity.java b/src/main/java/com/yapp/artie/domain/user/adapter/out/persistence/UserJpaEntity.java index 033393ae..7592bd1a 100644 --- a/src/main/java/com/yapp/artie/domain/user/adapter/out/persistence/UserJpaEntity.java +++ b/src/main/java/com/yapp/artie/domain/user/adapter/out/persistence/UserJpaEntity.java @@ -1,7 +1,6 @@ package com.yapp.artie.domain.user.adapter.out.persistence; import com.yapp.artie.global.common.BaseEntity; -import java.util.Objects; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; @@ -47,36 +46,4 @@ public static UserJpaEntity create(Long id, String uid, String name, String prof user.profileImage = profileImage; return user; } - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - - UserJpaEntity that = (UserJpaEntity) o; - - if (!Objects.equals(id, that.id)) { - return false; - } - if (!Objects.equals(uid, that.uid)) { - return false; - } - if (!Objects.equals(profileImage, that.profileImage)) { - return false; - } - return Objects.equals(name, that.name); - } - - @Override - public int hashCode() { - int result = id != null ? id.hashCode() : 0; - result = 31 * result + (uid != null ? uid.hashCode() : 0); - result = 31 * result + (profileImage != null ? profileImage.hashCode() : 0); - result = 31 * result + (name != null ? name.hashCode() : 0); - return result; - } } diff --git a/src/main/java/com/yapp/artie/domain/user/deprecated/LoadUserJpaEntityApi.java b/src/main/java/com/yapp/artie/domain/user/deprecated/LoadUserJpaEntityApi.java new file mode 100644 index 00000000..176a34cc --- /dev/null +++ b/src/main/java/com/yapp/artie/domain/user/deprecated/LoadUserJpaEntityApi.java @@ -0,0 +1,21 @@ +package com.yapp.artie.domain.user.deprecated; + +import com.yapp.artie.domain.user.adapter.out.persistence.UserJpaEntity; + +/** + * @author le2ksy + * @deprecated {@code findById} deprecated for package-dependency + * @apiNote + * UserJpaEntity를 로드하는 API입니다. 클래스 의존성을 생각해보면, + * 외부 클라이언트 코드(서비스, 도메인 레이어)에서 Persistence Adapter의 JpaEntity를 의존합니다. + * 외부 클라이언트 코드에서는 이 API를 이용해서 주로 외래키 제약을 만족시키거나, 자신의 리소스에 접근하고 있는지 + * 확인할 때 사용합니다. + *

+ * 따라서, 최종적으로 의존성을 제거하기 위해서는 Category#user가 아닌, Category#ownerId를 가지고 있는 설계가 + * 필요할 것 같다고 생각했습니다. 이에 대해서는 더욱 이야기를 해볼 필요가 있을 것 같습니다. + */ +@Deprecated +public interface LoadUserJpaEntityApi { + + UserJpaEntity findById(Long id); +} diff --git a/src/main/java/com/yapp/artie/domain/user/deprecated/UserJpaEntityLoader.java b/src/main/java/com/yapp/artie/domain/user/deprecated/UserJpaEntityLoader.java new file mode 100644 index 00000000..3d10b3af --- /dev/null +++ b/src/main/java/com/yapp/artie/domain/user/deprecated/UserJpaEntityLoader.java @@ -0,0 +1,22 @@ +package com.yapp.artie.domain.user.deprecated; + +import com.yapp.artie.domain.user.adapter.out.persistence.UserJpaEntity; +import com.yapp.artie.domain.user.adapter.out.persistence.UserRepository; +import com.yapp.artie.domain.user.exception.UserNotFoundException; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +@Transactional(readOnly = true) +@RequiredArgsConstructor +class UserJpaEntityLoader implements LoadUserJpaEntityApi { + + private final UserRepository userRepository; + + @Override + public UserJpaEntity findById(Long id) { + return userRepository.findById(id) + .orElseThrow(UserNotFoundException::new); + } +} diff --git a/src/main/java/com/yapp/artie/domain/user/service/UserServiceImpl.java b/src/main/java/com/yapp/artie/domain/user/service/UserServiceImpl.java deleted file mode 100644 index 774d51db..00000000 --- a/src/main/java/com/yapp/artie/domain/user/service/UserServiceImpl.java +++ /dev/null @@ -1,45 +0,0 @@ -package com.yapp.artie.domain.user.service; - -import com.yapp.artie.domain.user.adapter.out.persistence.UserJpaEntity; -import com.yapp.artie.domain.user.adapter.out.persistence.UserRepository; -import com.yapp.artie.domain.user.application.service.GetUserService; -import com.yapp.artie.domain.user.application.service.RegisterUserService; -import com.yapp.artie.domain.user.application.service.RenameUserService; -import com.yapp.artie.domain.user.application.service.UserWithdrawalService; -import com.yapp.artie.domain.user.domain.User; -import com.yapp.artie.domain.user.dto.response.CreateUserResponseDto; -import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Service; - -// TODO : deprecated api로 묶어서 JPA 엔티티를 반환하는 API만 레거시로 남겨둠 -@Service -@RequiredArgsConstructor -public class UserServiceImpl implements UserUseCase { - - private final RegisterUserService registerUserService; - private final RenameUserService renameUserService; - private final UserWithdrawalService userWithdrawalService; - private final GetUserService getUserService; - private final UserRepository userRepository; - - @Override - public UserJpaEntity findById(Long id) { - User user = getUserService.loadUserById(id); - return new UserJpaEntity(user.getId(), user.getUid(), user.getProfileImage(), user.getName()); - } - - @Override - public CreateUserResponseDto register(String uid, String username, String picture) { - return registerUserService.register(uid, username, picture); - } - - @Override - public void delete(Long id) { - userWithdrawalService.delete(id); - } - - @Override - public void updateUserName(Long userId, String name) { - renameUserService.rename(userId, name); - } -} diff --git a/src/main/java/com/yapp/artie/domain/user/service/UserUseCase.java b/src/main/java/com/yapp/artie/domain/user/service/UserUseCase.java deleted file mode 100644 index 6722d455..00000000 --- a/src/main/java/com/yapp/artie/domain/user/service/UserUseCase.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.yapp.artie.domain.user.service; - -import com.yapp.artie.domain.user.adapter.out.persistence.UserJpaEntity; -import com.yapp.artie.domain.user.dto.response.CreateUserResponseDto; - -// TODO : Deprecated 애노테이션을 붙이고, LoadUserJpaEntity 어쩌구로 이름 변경 필요 -public interface UserUseCase { - - UserJpaEntity findById(Long id); - - CreateUserResponseDto register(String uid, String username, String picture); - - void delete(Long id); - - void updateUserName(Long userId, String name); -} From dabca8406e4ec82db03180ab87f65a5bf39769b6 Mon Sep 17 00:00:00 2001 From: leesky Date: Sun, 2 Apr 2023 23:41:14 +0900 Subject: [PATCH 081/141] =?UTF-8?q?refactor=20:=20jwtService=EB=A5=BC=20?= =?UTF-8?q?=EB=8D=94=EC=9A=B1=20=EA=B5=AC=EC=B2=B4=EC=A0=81=EC=9D=B8=20?= =?UTF-8?q?=EC=9D=B4=EB=A6=84=EC=9C=BC=EB=A1=9C=20=EB=B3=80=EA=B2=BD,=20?= =?UTF-8?q?=EC=9D=B8=ED=84=B0=ED=8E=98=EC=9D=B4=EC=8A=A4=20=EB=B6=84?= =?UTF-8?q?=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../adapter/in/web/RegisterUserController.java | 6 +++--- ...java => FirebaseAuthenticationAdapter.java} | 18 +++++++++--------- ...alHandler.java => FirebaseUserRemover.java} | 8 ++++---- .../port/out/DeleteExternalUserPort.java | 6 ++++++ .../{JwtService.java => TokenParsingPort.java} | 6 ++---- .../service/UserWithdrawalService.java | 7 +++---- .../annotation/AuthenticationAdapter.java | 17 +++++++++++++++++ .../artie/global/authentication/JwtFilter.java | 6 +++--- .../artie/global/config/SecurityConfig.java | 6 +++--- .../common/BaseControllerIntegrationTest.java | 6 +++--- .../service/GetUserThumbnailServiceTest.java | 7 ++++--- 11 files changed, 57 insertions(+), 36 deletions(-) rename src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/{JwtServiceImpl.java => FirebaseAuthenticationAdapter.java} (65%) rename src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/{WithdrawalHandler.java => FirebaseUserRemover.java} (84%) create mode 100644 src/main/java/com/yapp/artie/domain/user/application/port/out/DeleteExternalUserPort.java rename src/main/java/com/yapp/artie/domain/user/application/port/out/{JwtService.java => TokenParsingPort.java} (54%) create mode 100644 src/main/java/com/yapp/artie/global/annotation/AuthenticationAdapter.java diff --git a/src/main/java/com/yapp/artie/domain/user/adapter/in/web/RegisterUserController.java b/src/main/java/com/yapp/artie/domain/user/adapter/in/web/RegisterUserController.java index 031d23d3..baf5c604 100644 --- a/src/main/java/com/yapp/artie/domain/user/adapter/in/web/RegisterUserController.java +++ b/src/main/java/com/yapp/artie/domain/user/adapter/in/web/RegisterUserController.java @@ -2,7 +2,7 @@ import com.yapp.artie.domain.user.application.port.in.RegisterUserUseCase; -import com.yapp.artie.domain.user.application.port.out.JwtService; +import com.yapp.artie.domain.user.application.port.out.TokenParsingPort; import com.yapp.artie.domain.user.domain.ArtieToken; import com.yapp.artie.domain.user.dto.response.CreateUserResponseDto; import com.yapp.artie.global.annotation.WebAdapter; @@ -27,7 +27,7 @@ @RequiredArgsConstructor public class RegisterUserController { - private final JwtService jwtService; + private final TokenParsingPort tokenParsingPort; private final RegisterUserUseCase registerUserUseCase; @Operation(summary = "유저 생성", description = "Firebase를 통해 생성한 UID 기반 유저 생성") @@ -41,7 +41,7 @@ public class RegisterUserController { public ResponseEntity register( HttpServletRequest request, @RequestParam("uid") String uid) { String authorization = request.getHeader("Authorization"); - ArtieToken decodedToken = jwtService.verify(authorization); + ArtieToken decodedToken = tokenParsingPort.parseToken(authorization); validateUidWithToken(uid, decodedToken); return ResponseEntity.status(HttpStatus.CREATED).body( diff --git a/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/JwtServiceImpl.java b/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/FirebaseAuthenticationAdapter.java similarity index 65% rename from src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/JwtServiceImpl.java rename to src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/FirebaseAuthenticationAdapter.java index fc37ea78..904d6394 100644 --- a/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/JwtServiceImpl.java +++ b/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/FirebaseAuthenticationAdapter.java @@ -1,32 +1,32 @@ package com.yapp.artie.domain.user.adapter.out.authentication; -import com.yapp.artie.domain.user.application.port.out.JwtService; +import com.yapp.artie.domain.user.application.port.out.DeleteExternalUserPort; +import com.yapp.artie.domain.user.application.port.out.TokenParsingPort; import com.yapp.artie.domain.user.domain.ArtieToken; +import com.yapp.artie.global.annotation.AuthenticationAdapter; import com.yapp.artie.global.exception.authentication.NotExistValidTokenException; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; -// TODO : 이름 변경, 애노테이션 생성 @Slf4j -@Component +@AuthenticationAdapter @RequiredArgsConstructor -public class JwtServiceImpl implements JwtService { +public class FirebaseAuthenticationAdapter implements DeleteExternalUserPort, TokenParsingPort { - private final WithdrawalHandler withdrawalHandler; + private final FirebaseUserRemover firebaseUserRemover; private final JwtDecoder decoder; private final TokenGenerator tokenGenerator; @Override - public ArtieToken verify(String header) { + public ArtieToken parseToken(String header) { validateHeader(header); return tokenGenerator.generateDomainToken(decoder .decode(refineHeaderAsToken(header))); } @Override - public void withdraw(String uid) { - withdrawalHandler.withdraw(uid); + public void delete(String uid) { + firebaseUserRemover.remove(uid); } private void validateHeader(String header) { diff --git a/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/WithdrawalHandler.java b/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/FirebaseUserRemover.java similarity index 84% rename from src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/WithdrawalHandler.java rename to src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/FirebaseUserRemover.java index f00842bb..bf1f49e9 100644 --- a/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/WithdrawalHandler.java +++ b/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/FirebaseUserRemover.java @@ -12,21 +12,21 @@ @Component @RequiredArgsConstructor -public class WithdrawalHandler { +public class FirebaseUserRemover { private final FirebaseAuth firebaseAuth; - public void withdraw(String uid) { + public void remove(String uid) { try { firebaseAuth.deleteUser(uid); } catch (IllegalArgumentException e) { throw new InvalidFirebaseUidException(); } catch (FirebaseAuthException e) { - throw processWithDrawException(e); + throw processRemoveException(e); } } - private BusinessException processWithDrawException(FirebaseAuthException e) { + private BusinessException processRemoveException(FirebaseAuthException e) { if (Objects.requireNonNull(e.getAuthErrorCode()) == AuthErrorCode.USER_NOT_FOUND) { return new FirebaseUserNotFoundException(); } diff --git a/src/main/java/com/yapp/artie/domain/user/application/port/out/DeleteExternalUserPort.java b/src/main/java/com/yapp/artie/domain/user/application/port/out/DeleteExternalUserPort.java new file mode 100644 index 00000000..9ebcfe28 --- /dev/null +++ b/src/main/java/com/yapp/artie/domain/user/application/port/out/DeleteExternalUserPort.java @@ -0,0 +1,6 @@ +package com.yapp.artie.domain.user.application.port.out; + +public interface DeleteExternalUserPort { + + void delete(String uid); +} diff --git a/src/main/java/com/yapp/artie/domain/user/application/port/out/JwtService.java b/src/main/java/com/yapp/artie/domain/user/application/port/out/TokenParsingPort.java similarity index 54% rename from src/main/java/com/yapp/artie/domain/user/application/port/out/JwtService.java rename to src/main/java/com/yapp/artie/domain/user/application/port/out/TokenParsingPort.java index 977970ab..f94f2b2a 100644 --- a/src/main/java/com/yapp/artie/domain/user/application/port/out/JwtService.java +++ b/src/main/java/com/yapp/artie/domain/user/application/port/out/TokenParsingPort.java @@ -2,9 +2,7 @@ import com.yapp.artie.domain.user.domain.ArtieToken; -public interface JwtService { +public interface TokenParsingPort { - ArtieToken verify(String header); - - void withdraw(String uid); + ArtieToken parseToken(String header); } diff --git a/src/main/java/com/yapp/artie/domain/user/application/service/UserWithdrawalService.java b/src/main/java/com/yapp/artie/domain/user/application/service/UserWithdrawalService.java index 4619099a..f33c25f5 100644 --- a/src/main/java/com/yapp/artie/domain/user/application/service/UserWithdrawalService.java +++ b/src/main/java/com/yapp/artie/domain/user/application/service/UserWithdrawalService.java @@ -3,8 +3,8 @@ import com.yapp.artie.domain.archive.repository.CategoryRepository; import com.yapp.artie.domain.user.adapter.out.persistence.UserJpaEntity; import com.yapp.artie.domain.user.application.port.in.UserWithdrawalUseCase; +import com.yapp.artie.domain.user.application.port.out.DeleteExternalUserPort; import com.yapp.artie.domain.user.application.port.out.DeleteUserPort; -import com.yapp.artie.domain.user.application.port.out.JwtService; import com.yapp.artie.domain.user.application.port.out.LoadUserPort; import com.yapp.artie.domain.user.domain.User; import com.yapp.artie.global.annotation.UseCase; @@ -16,7 +16,7 @@ @RequiredArgsConstructor public class UserWithdrawalService implements UserWithdrawalUseCase { - private final JwtService jwtService; + private final DeleteExternalUserPort deleteExternalUserPort; private final CategoryRepository categoryRepository; private final LoadUserPort loadUserPort; private final DeleteUserPort deleteUserPort; @@ -24,11 +24,10 @@ public class UserWithdrawalService implements UserWithdrawalUseCase { @Override public void delete(Long id) { User user = loadUserPort.loadById(id); - jwtService.withdraw(user.getUid()); + deleteExternalUserPort.delete(user.getUid()); // TODO : 꼭 변경해야함! User 도메인을 받던지 따로 입력 모델을 만들자. categoryRepository.deleteAllByUser( new UserJpaEntity(user.getId(), user.getUid(), user.getProfileImage(), user.getName())); deleteUserPort.delete(user); } - } \ No newline at end of file diff --git a/src/main/java/com/yapp/artie/global/annotation/AuthenticationAdapter.java b/src/main/java/com/yapp/artie/global/annotation/AuthenticationAdapter.java new file mode 100644 index 00000000..6a5b9feb --- /dev/null +++ b/src/main/java/com/yapp/artie/global/annotation/AuthenticationAdapter.java @@ -0,0 +1,17 @@ +package com.yapp.artie.global.annotation; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; +import org.springframework.core.annotation.AliasFor; +import org.springframework.stereotype.Component; + +@Target({ElementType.TYPE}) +@Retention(RetentionPolicy.RUNTIME) +@Component +public @interface AuthenticationAdapter { + + @AliasFor(annotation = Component.class) + String value() default ""; +} diff --git a/src/main/java/com/yapp/artie/global/authentication/JwtFilter.java b/src/main/java/com/yapp/artie/global/authentication/JwtFilter.java index 6478a7e1..911911a1 100644 --- a/src/main/java/com/yapp/artie/global/authentication/JwtFilter.java +++ b/src/main/java/com/yapp/artie/global/authentication/JwtFilter.java @@ -1,6 +1,6 @@ package com.yapp.artie.global.authentication; -import com.yapp.artie.domain.user.application.port.out.JwtService; +import com.yapp.artie.domain.user.application.port.out.TokenParsingPort; import com.yapp.artie.domain.user.domain.ArtieToken; import java.io.IOException; import java.util.NoSuchElementException; @@ -22,12 +22,12 @@ public class JwtFilter extends OncePerRequestFilter { private final UserDetailsService userDetailsService; - private final JwtService jwtService; + private final TokenParsingPort tokenParsingPort; @Override protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { - setTokenAtSecurityContext(jwtService.verify(request.getHeader("Authorization"))); + setTokenAtSecurityContext(tokenParsingPort.parseToken(request.getHeader("Authorization"))); filterChain.doFilter(request, response); } diff --git a/src/main/java/com/yapp/artie/global/config/SecurityConfig.java b/src/main/java/com/yapp/artie/global/config/SecurityConfig.java index 818bf3fb..1cd5b298 100644 --- a/src/main/java/com/yapp/artie/global/config/SecurityConfig.java +++ b/src/main/java/com/yapp/artie/global/config/SecurityConfig.java @@ -1,7 +1,7 @@ package com.yapp.artie.global.config; import com.fasterxml.jackson.databind.ObjectMapper; -import com.yapp.artie.domain.user.application.port.out.JwtService; +import com.yapp.artie.domain.user.application.port.out.TokenParsingPort; import com.yapp.artie.global.authentication.JwtExceptionHandler; import com.yapp.artie.global.authentication.JwtFilter; import lombok.RequiredArgsConstructor; @@ -25,14 +25,14 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter { private final UserDetailsService userDetailsService; - private final JwtService jwtService; + private final TokenParsingPort tokenParsingPort; @Override public void configure(HttpSecurity http) throws Exception { http.authorizeRequests() .anyRequest() .authenticated().and() - .addFilterBefore(new JwtFilter(userDetailsService, jwtService), + .addFilterBefore(new JwtFilter(userDetailsService, tokenParsingPort), UsernamePasswordAuthenticationFilter.class) .addFilterBefore(new JwtExceptionHandler(new ObjectMapper()), JwtFilter.class); diff --git a/src/test/java/com/yapp/artie/common/BaseControllerIntegrationTest.java b/src/test/java/com/yapp/artie/common/BaseControllerIntegrationTest.java index dd02c552..0790e768 100644 --- a/src/test/java/com/yapp/artie/common/BaseControllerIntegrationTest.java +++ b/src/test/java/com/yapp/artie/common/BaseControllerIntegrationTest.java @@ -4,7 +4,7 @@ import static org.mockito.BDDMockito.given; import static org.springframework.security.core.userdetails.User.builder; -import com.yapp.artie.domain.user.application.port.out.JwtService; +import com.yapp.artie.domain.user.application.port.out.TokenParsingPort; import com.yapp.artie.domain.user.domain.ArtieToken; import com.yapp.artie.domain.user.domain.User; import org.springframework.beans.factory.annotation.Autowired; @@ -22,7 +22,7 @@ public abstract class BaseControllerIntegrationTest { protected MockMvc mvc; @MockBean - protected JwtService jwtService; + protected TokenParsingPort tokenParsingPort; @MockBean protected UserDetailsService userDetailsService; @@ -42,7 +42,7 @@ private void loadUserDetailsWillReturnReference(User user) { } private void givenTestToken(String uid, String name, String picture) { - given(jwtService.verify(any())) + given(tokenParsingPort.parseToken(any())) .willReturn(new ArtieToken(uid, name, picture)); } } \ No newline at end of file diff --git a/src/test/java/com/yapp/artie/domain/user/application/service/GetUserThumbnailServiceTest.java b/src/test/java/com/yapp/artie/domain/user/application/service/GetUserThumbnailServiceTest.java index f60c4505..7262fe05 100644 --- a/src/test/java/com/yapp/artie/domain/user/application/service/GetUserThumbnailServiceTest.java +++ b/src/test/java/com/yapp/artie/domain/user/application/service/GetUserThumbnailServiceTest.java @@ -22,21 +22,22 @@ class GetUserThumbnailServiceTest { loadUserPort, exhibitService); @Test - void loadUserThumbnailWithId_사용자를_찾을_수_없으면_예외를_발생한다() { + void loadUserThumbnailById_사용자를_찾을_수_없으면_예외를_발생한다() { givenUserFindWillFail(); assertThatThrownBy(() -> getUserThumbnailService.loadUserThumbnailById(1L)) .isInstanceOf(UserNotFoundException.class); } @Test - public void loadUserThumbnailWithId_사용자의_닉네임과_전시개수를_반환한다() throws Exception { + void loadUserThumbnailById_사용자의_닉네임과_전시개수를_반환한다() { User user = defaultUser() .withName("tomcat") .build(); givenUserByReference(user); givenExhibitCountWillReturnBy(5); - UserThumbnailResponseDto userThumbnail = getUserThumbnailService.loadUserThumbnailById(user.getId()); + UserThumbnailResponseDto userThumbnail = getUserThumbnailService.loadUserThumbnailById( + user.getId()); assertThat(userThumbnail.getExhibitCount()).isEqualTo(5); assertThat(userThumbnail.getName()).isEqualTo("tomcat"); } From 6056b647002a9922fe1b389d9ce9b9c0a1670467 Mon Sep 17 00:00:00 2001 From: leesky Date: Sun, 2 Apr 2023 23:41:28 +0900 Subject: [PATCH 082/141] =?UTF-8?q?chore=20:=20=EC=98=A4=ED=83=88=EC=9E=90?= =?UTF-8?q?=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/UserWithdrawalServiceTest.java | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/test/java/com/yapp/artie/domain/user/application/service/UserWithdrawalServiceTest.java b/src/test/java/com/yapp/artie/domain/user/application/service/UserWithdrawalServiceTest.java index 7b06da74..08f3aba7 100644 --- a/src/test/java/com/yapp/artie/domain/user/application/service/UserWithdrawalServiceTest.java +++ b/src/test/java/com/yapp/artie/domain/user/application/service/UserWithdrawalServiceTest.java @@ -8,8 +8,8 @@ import static org.mockito.BDDMockito.then; import com.yapp.artie.domain.archive.repository.CategoryRepository; +import com.yapp.artie.domain.user.application.port.out.DeleteExternalUserPort; import com.yapp.artie.domain.user.application.port.out.DeleteUserPort; -import com.yapp.artie.domain.user.application.port.out.JwtService; import com.yapp.artie.domain.user.application.port.out.LoadUserPort; import com.yapp.artie.domain.user.domain.User; import com.yapp.artie.domain.user.exception.UserNotFoundException; @@ -19,12 +19,13 @@ class UserWithdrawalServiceTest { private final CategoryRepository categoryRepository = Mockito.mock(CategoryRepository.class); - private final JwtService jwtService = Mockito.mock(JwtService.class); + private final DeleteExternalUserPort deleteExternalUserPort = Mockito.mock( + DeleteExternalUserPort.class); private final LoadUserPort loadUserPort = Mockito.mock(LoadUserPort.class); private final DeleteUserPort deleteUserPort = Mockito.mock(DeleteUserPort.class); private final UserWithdrawalService userWithdrawalService = new UserWithdrawalService( - jwtService, categoryRepository, loadUserPort, deleteUserPort); + deleteExternalUserPort, categoryRepository, loadUserPort, deleteUserPort); @Test void delete_사용자를_찾을_수_없으면_예외를_발생한다() { @@ -37,9 +38,9 @@ class UserWithdrawalServiceTest { void delete_사용자_삭제_요청을_받으면_firebase에서_삭제되도록_요청한다() { givenUser(); userWithdrawalService.delete(1L); - then(jwtService) + then(deleteExternalUserPort) .should() - .withdraw(any()); + .delete(any()); } @Test From d77b39f4bdc3ecf6beeefe665b261fb303138d35 Mon Sep 17 00:00:00 2001 From: leesky Date: Mon, 3 Apr 2023 00:51:15 +0900 Subject: [PATCH 083/141] =?UTF-8?q?fix=20:=20FirebaseAuth=EA=B0=80=20?= =?UTF-8?q?=EC=95=84=EB=8B=8C,=20Abstract=EB=A5=BC=20=EC=B0=B8=EC=A1=B0?= =?UTF-8?q?=ED=95=98=EB=8F=84=EB=A1=9D=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../user/adapter/out/authentication/FirebaseUserRemover.java | 4 ++-- .../domain/user/adapter/out/authentication/JwtDecoder.java | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/FirebaseUserRemover.java b/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/FirebaseUserRemover.java index bf1f49e9..a2714495 100644 --- a/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/FirebaseUserRemover.java +++ b/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/FirebaseUserRemover.java @@ -1,7 +1,7 @@ package com.yapp.artie.domain.user.adapter.out.authentication; +import com.google.firebase.auth.AbstractFirebaseAuth; import com.google.firebase.auth.AuthErrorCode; -import com.google.firebase.auth.FirebaseAuth; import com.google.firebase.auth.FirebaseAuthException; import com.yapp.artie.global.exception.authentication.FirebaseUserNotFoundException; import com.yapp.artie.global.exception.authentication.InvalidFirebaseUidException; @@ -14,7 +14,7 @@ @RequiredArgsConstructor public class FirebaseUserRemover { - private final FirebaseAuth firebaseAuth; + private final AbstractFirebaseAuth firebaseAuth; public void remove(String uid) { try { diff --git a/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/JwtDecoder.java b/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/JwtDecoder.java index 8f6021a3..a69a0b6d 100644 --- a/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/JwtDecoder.java +++ b/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/JwtDecoder.java @@ -1,5 +1,6 @@ package com.yapp.artie.domain.user.adapter.out.authentication; +import com.google.firebase.auth.AbstractFirebaseAuth; import com.google.firebase.auth.FirebaseAuth; import com.google.firebase.auth.FirebaseAuthException; import com.google.firebase.auth.FirebaseToken; @@ -15,7 +16,7 @@ @RequiredArgsConstructor public class JwtDecoder { - private final FirebaseAuth firebaseAuth; + private final AbstractFirebaseAuth firebaseAuth; public FirebaseToken decode(String token) { try { From 8e910497c0c7ac99dfa908f92e6372d97d651a5c Mon Sep 17 00:00:00 2001 From: leesky Date: Mon, 3 Apr 2023 00:51:34 +0900 Subject: [PATCH 084/141] =?UTF-8?q?test=20:=20Firebase=20=EC=82=AC?= =?UTF-8?q?=EC=9A=A9=EC=9E=90=20=EC=82=AD=EC=A0=9C=20=EB=8B=A8=EC=9C=84=20?= =?UTF-8?q?=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../FirebaseUserRemoverTest.java | 78 +++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 src/test/java/com/yapp/artie/domain/user/adapter/out/authentication/FirebaseUserRemoverTest.java diff --git a/src/test/java/com/yapp/artie/domain/user/adapter/out/authentication/FirebaseUserRemoverTest.java b/src/test/java/com/yapp/artie/domain/user/adapter/out/authentication/FirebaseUserRemoverTest.java new file mode 100644 index 00000000..4aeaefce --- /dev/null +++ b/src/test/java/com/yapp/artie/domain/user/adapter/out/authentication/FirebaseUserRemoverTest.java @@ -0,0 +1,78 @@ +package com.yapp.artie.domain.user.adapter.out.authentication; + +import static org.assertj.core.api.Assertions.assertThatThrownBy; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.ArgumentMatchers.isNull; +import static org.mockito.BDDMockito.then; +import static org.mockito.Mockito.doThrow; + +import com.google.firebase.ErrorCode; +import com.google.firebase.auth.AbstractFirebaseAuth; +import com.google.firebase.auth.AuthErrorCode; +import com.google.firebase.auth.FirebaseAuthException; +import com.yapp.artie.global.exception.authentication.FirebaseUserNotFoundException; +import com.yapp.artie.global.exception.authentication.InvalidFirebaseUidException; +import org.junit.jupiter.api.Test; +import org.mockito.Mockito; + +class FirebaseUserRemoverTest { + + private final AbstractFirebaseAuth firebaseAuth = Mockito.mock(AbstractFirebaseAuth.class); + private final FirebaseUserRemover firebaseUserRemover = new FirebaseUserRemover(firebaseAuth); + + @Test + void remove_firebase에_삭제요청을한다() throws Exception { + firebaseUserRemover.remove("uid"); + then(firebaseAuth) + .should() + .deleteUser(eq("uid")); + } + + @Test + void remove_uid가_null인_경우_예외를_발생한다() throws Exception { + givenFirebaseAuthAcceptNull(); + assertThatThrownBy(() -> { + firebaseUserRemover.remove(null); + }).isInstanceOf(InvalidFirebaseUidException.class); + } + + @Test + void remove_uid가_빈_문자열인_경우_예외를_발생한다() throws Exception { + givenFirebaseAuthAcceptEmptyString(); + assertThatThrownBy(() -> { + firebaseUserRemover.remove(""); + }).isInstanceOf(InvalidFirebaseUidException.class); + } + + @Test + void remove_존재하지_않는_사용자라면_예외를_발생한다() throws Exception { + givenUserFindWillFail(); + assertThatThrownBy(() -> { + firebaseUserRemover.remove(""); + }).isInstanceOf(FirebaseUserNotFoundException.class); + } + + private void givenFirebaseAuthAcceptNull() throws Exception { + doThrow(IllegalArgumentException.class) + .when(firebaseAuth) + .deleteUser(isNull()); + } + + private void givenFirebaseAuthAcceptEmptyString() throws Exception { + doThrow(IllegalArgumentException.class) + .when(firebaseAuth) + .deleteUser(eq("")); + } + + private void givenUserFindWillFail() throws Exception { + doThrow(new FirebaseAuthException( + ErrorCode.NOT_FOUND, + "user not found", + null, + null, + AuthErrorCode.USER_NOT_FOUND)) + .when(firebaseAuth) + .deleteUser(any()); + } +} \ No newline at end of file From 667a34f677b28fe5d51bdf73dde58c66352b7391 Mon Sep 17 00:00:00 2001 From: leesky Date: Mon, 3 Apr 2023 01:33:51 +0900 Subject: [PATCH 085/141] =?UTF-8?q?test=20:=20JwtDecoder=20=EB=8B=A8?= =?UTF-8?q?=EC=9C=84=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../out/authentication/JwtDecoderTest.java | 98 +++++++++++++++++++ 1 file changed, 98 insertions(+) create mode 100644 src/test/java/com/yapp/artie/domain/user/adapter/out/authentication/JwtDecoderTest.java diff --git a/src/test/java/com/yapp/artie/domain/user/adapter/out/authentication/JwtDecoderTest.java b/src/test/java/com/yapp/artie/domain/user/adapter/out/authentication/JwtDecoderTest.java new file mode 100644 index 00000000..3ab6ed7f --- /dev/null +++ b/src/test/java/com/yapp/artie/domain/user/adapter/out/authentication/JwtDecoderTest.java @@ -0,0 +1,98 @@ +package com.yapp.artie.domain.user.adapter.out.authentication; + +import static org.assertj.core.api.Assertions.assertThatThrownBy; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.ArgumentMatchers.isNull; +import static org.mockito.BDDMockito.then; +import static org.mockito.Mockito.doThrow; + +import com.google.firebase.ErrorCode; +import com.google.firebase.auth.AbstractFirebaseAuth; +import com.google.firebase.auth.AuthErrorCode; +import com.google.firebase.auth.FirebaseAuthException; +import com.yapp.artie.global.exception.authentication.ExpiredTokenException; +import com.yapp.artie.global.exception.authentication.NotExistValidTokenException; +import com.yapp.artie.global.exception.authentication.RevokedTokenException; +import org.junit.jupiter.api.Test; +import org.mockito.Mockito; + +class JwtDecoderTest { + + private final AbstractFirebaseAuth firebaseAuth = Mockito.mock(AbstractFirebaseAuth.class); + private final JwtDecoder jwtDecoder = new JwtDecoder(firebaseAuth); + + @Test + void decode_firebase에_토큰_검증_요청을한다() throws Exception { + jwtDecoder.decode("token"); + then(firebaseAuth) + .should() + .verifyIdToken(eq("token")); + } + + @Test + void decode_토큰이_null인_경우_예외를_발생한다() throws Exception { + givenFirebaseAuthAcceptNull(); + assertThatThrownBy(() -> { + jwtDecoder.decode(null); + }).isInstanceOf(NotExistValidTokenException.class); + } + + @Test + void decode_토큰이_빈_문자열인_경우_예외를_발생한다() throws Exception { + givenFirebaseAuthAcceptEmptyString(); + assertThatThrownBy(() -> { + jwtDecoder.decode(""); + }).isInstanceOf(NotExistValidTokenException.class); + } + + @Test + void decode_토큰이_만료된_경우_예외를_발생한다() throws Exception { + givenExpiredToken(); + assertThatThrownBy(() -> { + jwtDecoder.decode("expired token"); + }).isInstanceOf(ExpiredTokenException.class); + } + + @Test + void decode_토큰이_취소된_경우_예외를_발생한다() throws Exception { + givenRevokedToken(); + assertThatThrownBy(() -> { + jwtDecoder.decode("revoked token"); + }).isInstanceOf(RevokedTokenException.class); + } + + private void givenFirebaseAuthAcceptNull() throws Exception { + doThrow(IllegalArgumentException.class) + .when(firebaseAuth) + .verifyIdToken(isNull()); + } + + private void givenFirebaseAuthAcceptEmptyString() throws Exception { + doThrow(IllegalArgumentException.class) + .when(firebaseAuth) + .verifyIdToken(eq("")); + } + + private void givenExpiredToken() throws Exception { + doThrow(new FirebaseAuthException( + ErrorCode.INVALID_ARGUMENT, + "token is expired!", + null, + null, + AuthErrorCode.EXPIRED_ID_TOKEN)) + .when(firebaseAuth) + .verifyIdToken(any()); + } + + private void givenRevokedToken() throws Exception { + doThrow(new FirebaseAuthException( + ErrorCode.INVALID_ARGUMENT, + "token has been revoked!", + null, + null, + AuthErrorCode.REVOKED_ID_TOKEN)) + .when(firebaseAuth) + .verifyIdToken(any()); + } +} \ No newline at end of file From b7609e7ae8fbbca93c5d6557768519b00b9b0137 Mon Sep 17 00:00:00 2001 From: leesky Date: Mon, 3 Apr 2023 02:01:25 +0900 Subject: [PATCH 086/141] =?UTF-8?q?test=20:=20Authentication=20Adapter=20?= =?UTF-8?q?=EB=8B=A8=EC=9C=84=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EC=9E=91?= =?UTF-8?q?=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../FirebaseAuthenticationAdapterTest.java | 77 +++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 src/test/java/com/yapp/artie/domain/user/adapter/out/authentication/FirebaseAuthenticationAdapterTest.java diff --git a/src/test/java/com/yapp/artie/domain/user/adapter/out/authentication/FirebaseAuthenticationAdapterTest.java b/src/test/java/com/yapp/artie/domain/user/adapter/out/authentication/FirebaseAuthenticationAdapterTest.java new file mode 100644 index 00000000..7f9338a1 --- /dev/null +++ b/src/test/java/com/yapp/artie/domain/user/adapter/out/authentication/FirebaseAuthenticationAdapterTest.java @@ -0,0 +1,77 @@ +package com.yapp.artie.domain.user.adapter.out.authentication; + +import static com.yapp.artie.common.UserTestData.defaultUser; +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.BDDMockito.given; +import static org.mockito.BDDMockito.then; + +import com.yapp.artie.domain.user.domain.ArtieToken; +import com.yapp.artie.domain.user.domain.User; +import com.yapp.artie.global.exception.authentication.NotExistValidTokenException; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; +import org.mockito.Mockito; + +class FirebaseAuthenticationAdapterTest { + + private final JwtDecoder jwtDecoder = Mockito.mock(JwtDecoder.class); + private final FirebaseUserRemover firebaseUserRemover = Mockito.mock(FirebaseUserRemover.class); + private final TokenGenerator tokenGenerator = Mockito.mock(TokenGenerator.class); + private final FirebaseAuthenticationAdapter adapterUnderTest = + new FirebaseAuthenticationAdapter(firebaseUserRemover, jwtDecoder, tokenGenerator); + + @Test + void parseToken_헤더가_null인_경우_예외를_발생한다() { + assertThatThrownBy(() -> { + adapterUnderTest.parseToken(null); + }).isInstanceOf(NotExistValidTokenException.class); + } + + @Test + void parseToken_헤더가_Bearer_로_시작하지_않는_경우_예외를_발생한다() { + assertThatThrownBy(() -> { + adapterUnderTest.parseToken("Drink Beer"); + }).isInstanceOf(NotExistValidTokenException.class); + } + + @ParameterizedTest(name = "[{index}] Authorization 헤더가 {0}인 경우") + @ValueSource(strings = {"Bearer", "Bearer ", " Bearer", " Bearer", "Bearer "}) + void parseToken_헤더가_Bearer만_포함하는_경우_예외를_발생한다(String header) { + assertThatThrownBy(() -> { + adapterUnderTest.parseToken(header); + }).isInstanceOf(NotExistValidTokenException.class); + } + + @Test + void parseToken_유효한_Bearer_토큰이라면_새로운_사용자_인증_토큰을_반환한다() { + User user = defaultUser() + .withUid("uid") + .withName("tomcat") + .withProfileImage("sample.com") + .build(); + + givenArtieTokenByReference(user); + ArtieToken actual = adapterUnderTest.parseToken("Bearer valid token"); + + assertThat(actual.getUid()).isEqualTo("uid"); + assertThat(actual.getName()).isEqualTo("tomcat"); + assertThat(actual.getPicture()).isEqualTo("sample.com"); + } + + @Test + public void delete_Remover에게_삭제_요청을_한다() { + adapterUnderTest.delete("uid"); + then(firebaseUserRemover) + .should() + .remove(eq("uid")); + } + + private void givenArtieTokenByReference(User user) { + given(tokenGenerator.generateDomainToken(any())) + .willReturn(new ArtieToken(user.getUid(), user.getName(), user.getProfileImage())); + } +} \ No newline at end of file From 0e04f8edeb258f9023242db902854ad147ad4ee6 Mon Sep 17 00:00:00 2001 From: leesky Date: Mon, 3 Apr 2023 02:02:11 +0900 Subject: [PATCH 087/141] =?UTF-8?q?chore=20:=20import=EB=AC=B8=20=EC=B5=9C?= =?UTF-8?q?=EC=A0=81=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../artie/domain/user/adapter/out/authentication/JwtDecoder.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/JwtDecoder.java b/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/JwtDecoder.java index a69a0b6d..e7119dde 100644 --- a/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/JwtDecoder.java +++ b/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/JwtDecoder.java @@ -1,7 +1,6 @@ package com.yapp.artie.domain.user.adapter.out.authentication; import com.google.firebase.auth.AbstractFirebaseAuth; -import com.google.firebase.auth.FirebaseAuth; import com.google.firebase.auth.FirebaseAuthException; import com.google.firebase.auth.FirebaseToken; import com.yapp.artie.global.exception.authentication.ExpiredTokenException; From 749cf8e770142fdb3b09fb0302a1715a619af934 Mon Sep 17 00:00:00 2001 From: leesky Date: Mon, 3 Apr 2023 02:37:33 +0900 Subject: [PATCH 088/141] =?UTF-8?q?refactor=20:=20exception=20=ED=8C=A8?= =?UTF-8?q?=ED=82=A4=EC=A7=80=20=EC=9C=84=EC=B9=98=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../user/adapter/out/persistence/UserPersistenceAdapter.java | 2 +- .../port}/exception/UserAlreadyExistException.java | 2 +- .../{ => application/port}/exception/UserNotFoundException.java | 2 +- .../domain/user/application/service/RegisterUserService.java | 2 +- .../yapp/artie/domain/user/deprecated/UserJpaEntityLoader.java | 2 +- .../adapter/out/persistence/UserPersistenceAdapterTest.java | 2 +- .../domain/user/application/service/GetUserServiceTest.java | 2 +- .../user/application/service/GetUserThumbnailServiceTest.java | 2 +- .../user/application/service/RegisterUserServiceTest.java | 2 +- .../domain/user/application/service/RenameUserServiceTest.java | 2 +- .../user/application/service/UserWithdrawalServiceTest.java | 2 +- 11 files changed, 11 insertions(+), 11 deletions(-) rename src/main/java/com/yapp/artie/domain/user/{ => application/port}/exception/UserAlreadyExistException.java (81%) rename src/main/java/com/yapp/artie/domain/user/{ => application/port}/exception/UserNotFoundException.java (80%) diff --git a/src/main/java/com/yapp/artie/domain/user/adapter/out/persistence/UserPersistenceAdapter.java b/src/main/java/com/yapp/artie/domain/user/adapter/out/persistence/UserPersistenceAdapter.java index e45759d0..adfe3def 100644 --- a/src/main/java/com/yapp/artie/domain/user/adapter/out/persistence/UserPersistenceAdapter.java +++ b/src/main/java/com/yapp/artie/domain/user/adapter/out/persistence/UserPersistenceAdapter.java @@ -5,7 +5,7 @@ import com.yapp.artie.domain.user.application.port.out.SaveUserPort; import com.yapp.artie.domain.user.application.port.out.UpdateUserStatePort; import com.yapp.artie.domain.user.domain.User; -import com.yapp.artie.domain.user.exception.UserNotFoundException; +import com.yapp.artie.domain.user.application.port.exception.UserNotFoundException; import com.yapp.artie.global.annotation.PersistenceAdapter; import lombok.RequiredArgsConstructor; diff --git a/src/main/java/com/yapp/artie/domain/user/exception/UserAlreadyExistException.java b/src/main/java/com/yapp/artie/domain/user/application/port/exception/UserAlreadyExistException.java similarity index 81% rename from src/main/java/com/yapp/artie/domain/user/exception/UserAlreadyExistException.java rename to src/main/java/com/yapp/artie/domain/user/application/port/exception/UserAlreadyExistException.java index 0752d023..b908e0bc 100644 --- a/src/main/java/com/yapp/artie/domain/user/exception/UserAlreadyExistException.java +++ b/src/main/java/com/yapp/artie/domain/user/application/port/exception/UserAlreadyExistException.java @@ -1,4 +1,4 @@ -package com.yapp.artie.domain.user.exception; +package com.yapp.artie.domain.user.application.port.exception; import com.yapp.artie.global.exception.common.BusinessException; import com.yapp.artie.global.exception.response.ErrorCode; diff --git a/src/main/java/com/yapp/artie/domain/user/exception/UserNotFoundException.java b/src/main/java/com/yapp/artie/domain/user/application/port/exception/UserNotFoundException.java similarity index 80% rename from src/main/java/com/yapp/artie/domain/user/exception/UserNotFoundException.java rename to src/main/java/com/yapp/artie/domain/user/application/port/exception/UserNotFoundException.java index 02ebb788..32295962 100644 --- a/src/main/java/com/yapp/artie/domain/user/exception/UserNotFoundException.java +++ b/src/main/java/com/yapp/artie/domain/user/application/port/exception/UserNotFoundException.java @@ -1,4 +1,4 @@ -package com.yapp.artie.domain.user.exception; +package com.yapp.artie.domain.user.application.port.exception; import com.yapp.artie.global.exception.common.BusinessException; diff --git a/src/main/java/com/yapp/artie/domain/user/application/service/RegisterUserService.java b/src/main/java/com/yapp/artie/domain/user/application/service/RegisterUserService.java index 5c6c0943..2b8cb94f 100644 --- a/src/main/java/com/yapp/artie/domain/user/application/service/RegisterUserService.java +++ b/src/main/java/com/yapp/artie/domain/user/application/service/RegisterUserService.java @@ -5,7 +5,7 @@ import com.yapp.artie.domain.user.application.port.out.SaveUserPort; import com.yapp.artie.domain.user.domain.User; import com.yapp.artie.domain.user.dto.response.CreateUserResponseDto; -import com.yapp.artie.domain.user.exception.UserNotFoundException; +import com.yapp.artie.domain.user.application.port.exception.UserNotFoundException; import com.yapp.artie.global.annotation.UseCase; import lombok.RequiredArgsConstructor; import org.springframework.transaction.annotation.Transactional; diff --git a/src/main/java/com/yapp/artie/domain/user/deprecated/UserJpaEntityLoader.java b/src/main/java/com/yapp/artie/domain/user/deprecated/UserJpaEntityLoader.java index 3d10b3af..0de9609f 100644 --- a/src/main/java/com/yapp/artie/domain/user/deprecated/UserJpaEntityLoader.java +++ b/src/main/java/com/yapp/artie/domain/user/deprecated/UserJpaEntityLoader.java @@ -2,7 +2,7 @@ import com.yapp.artie.domain.user.adapter.out.persistence.UserJpaEntity; import com.yapp.artie.domain.user.adapter.out.persistence.UserRepository; -import com.yapp.artie.domain.user.exception.UserNotFoundException; +import com.yapp.artie.domain.user.application.port.exception.UserNotFoundException; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; diff --git a/src/test/java/com/yapp/artie/domain/user/adapter/out/persistence/UserPersistenceAdapterTest.java b/src/test/java/com/yapp/artie/domain/user/adapter/out/persistence/UserPersistenceAdapterTest.java index ecaecd96..f5a633e3 100644 --- a/src/test/java/com/yapp/artie/domain/user/adapter/out/persistence/UserPersistenceAdapterTest.java +++ b/src/test/java/com/yapp/artie/domain/user/adapter/out/persistence/UserPersistenceAdapterTest.java @@ -5,7 +5,7 @@ import static org.assertj.core.api.Assertions.assertThatThrownBy; import com.yapp.artie.domain.user.domain.User; -import com.yapp.artie.domain.user.exception.UserNotFoundException; +import com.yapp.artie.domain.user.application.port.exception.UserNotFoundException; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabase; diff --git a/src/test/java/com/yapp/artie/domain/user/application/service/GetUserServiceTest.java b/src/test/java/com/yapp/artie/domain/user/application/service/GetUserServiceTest.java index 57d40a15..9553b54d 100644 --- a/src/test/java/com/yapp/artie/domain/user/application/service/GetUserServiceTest.java +++ b/src/test/java/com/yapp/artie/domain/user/application/service/GetUserServiceTest.java @@ -8,7 +8,7 @@ import com.yapp.artie.domain.user.application.port.out.LoadUserPort; import com.yapp.artie.domain.user.domain.User; -import com.yapp.artie.domain.user.exception.UserNotFoundException; +import com.yapp.artie.domain.user.application.port.exception.UserNotFoundException; import org.junit.jupiter.api.Test; import org.mockito.Mockito; diff --git a/src/test/java/com/yapp/artie/domain/user/application/service/GetUserThumbnailServiceTest.java b/src/test/java/com/yapp/artie/domain/user/application/service/GetUserThumbnailServiceTest.java index 7262fe05..0ddd8caa 100644 --- a/src/test/java/com/yapp/artie/domain/user/application/service/GetUserThumbnailServiceTest.java +++ b/src/test/java/com/yapp/artie/domain/user/application/service/GetUserThumbnailServiceTest.java @@ -10,7 +10,7 @@ import com.yapp.artie.domain.user.application.port.out.LoadUserPort; import com.yapp.artie.domain.user.domain.User; import com.yapp.artie.domain.user.dto.response.UserThumbnailResponseDto; -import com.yapp.artie.domain.user.exception.UserNotFoundException; +import com.yapp.artie.domain.user.application.port.exception.UserNotFoundException; import org.junit.jupiter.api.Test; import org.mockito.Mockito; diff --git a/src/test/java/com/yapp/artie/domain/user/application/service/RegisterUserServiceTest.java b/src/test/java/com/yapp/artie/domain/user/application/service/RegisterUserServiceTest.java index 702b15d4..40324e1f 100644 --- a/src/test/java/com/yapp/artie/domain/user/application/service/RegisterUserServiceTest.java +++ b/src/test/java/com/yapp/artie/domain/user/application/service/RegisterUserServiceTest.java @@ -10,7 +10,7 @@ import com.yapp.artie.domain.user.application.port.out.LoadUserPort; import com.yapp.artie.domain.user.application.port.out.SaveUserPort; import com.yapp.artie.domain.user.dto.response.CreateUserResponseDto; -import com.yapp.artie.domain.user.exception.UserNotFoundException; +import com.yapp.artie.domain.user.application.port.exception.UserNotFoundException; import org.junit.jupiter.api.Test; import org.mockito.Mockito; diff --git a/src/test/java/com/yapp/artie/domain/user/application/service/RenameUserServiceTest.java b/src/test/java/com/yapp/artie/domain/user/application/service/RenameUserServiceTest.java index e2192aca..2ce3239d 100644 --- a/src/test/java/com/yapp/artie/domain/user/application/service/RenameUserServiceTest.java +++ b/src/test/java/com/yapp/artie/domain/user/application/service/RenameUserServiceTest.java @@ -9,7 +9,7 @@ import com.yapp.artie.domain.user.application.port.out.LoadUserPort; import com.yapp.artie.domain.user.application.port.out.UpdateUserStatePort; import com.yapp.artie.domain.user.domain.User; -import com.yapp.artie.domain.user.exception.UserNotFoundException; +import com.yapp.artie.domain.user.application.port.exception.UserNotFoundException; import org.junit.jupiter.api.Test; import org.mockito.Mockito; diff --git a/src/test/java/com/yapp/artie/domain/user/application/service/UserWithdrawalServiceTest.java b/src/test/java/com/yapp/artie/domain/user/application/service/UserWithdrawalServiceTest.java index 08f3aba7..a1c7dc25 100644 --- a/src/test/java/com/yapp/artie/domain/user/application/service/UserWithdrawalServiceTest.java +++ b/src/test/java/com/yapp/artie/domain/user/application/service/UserWithdrawalServiceTest.java @@ -12,7 +12,7 @@ import com.yapp.artie.domain.user.application.port.out.DeleteUserPort; import com.yapp.artie.domain.user.application.port.out.LoadUserPort; import com.yapp.artie.domain.user.domain.User; -import com.yapp.artie.domain.user.exception.UserNotFoundException; +import com.yapp.artie.domain.user.application.port.exception.UserNotFoundException; import org.junit.jupiter.api.Test; import org.mockito.Mockito; From 26cb24a1765387d944dd39f40a4518e84b252844 Mon Sep 17 00:00:00 2001 From: leesky Date: Mon, 3 Apr 2023 02:38:23 +0900 Subject: [PATCH 089/141] =?UTF-8?q?chore=20:=20import=20=EB=AC=B8=20?= =?UTF-8?q?=EC=B5=9C=EC=A0=81=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../user/adapter/out/persistence/UserPersistenceAdapter.java | 2 +- .../domain/user/application/service/RegisterUserService.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/yapp/artie/domain/user/adapter/out/persistence/UserPersistenceAdapter.java b/src/main/java/com/yapp/artie/domain/user/adapter/out/persistence/UserPersistenceAdapter.java index adfe3def..601ffc1a 100644 --- a/src/main/java/com/yapp/artie/domain/user/adapter/out/persistence/UserPersistenceAdapter.java +++ b/src/main/java/com/yapp/artie/domain/user/adapter/out/persistence/UserPersistenceAdapter.java @@ -1,11 +1,11 @@ package com.yapp.artie.domain.user.adapter.out.persistence; +import com.yapp.artie.domain.user.application.port.exception.UserNotFoundException; import com.yapp.artie.domain.user.application.port.out.DeleteUserPort; import com.yapp.artie.domain.user.application.port.out.LoadUserPort; import com.yapp.artie.domain.user.application.port.out.SaveUserPort; import com.yapp.artie.domain.user.application.port.out.UpdateUserStatePort; import com.yapp.artie.domain.user.domain.User; -import com.yapp.artie.domain.user.application.port.exception.UserNotFoundException; import com.yapp.artie.global.annotation.PersistenceAdapter; import lombok.RequiredArgsConstructor; diff --git a/src/main/java/com/yapp/artie/domain/user/application/service/RegisterUserService.java b/src/main/java/com/yapp/artie/domain/user/application/service/RegisterUserService.java index 2b8cb94f..60b14e19 100644 --- a/src/main/java/com/yapp/artie/domain/user/application/service/RegisterUserService.java +++ b/src/main/java/com/yapp/artie/domain/user/application/service/RegisterUserService.java @@ -1,11 +1,11 @@ package com.yapp.artie.domain.user.application.service; +import com.yapp.artie.domain.user.application.port.exception.UserNotFoundException; import com.yapp.artie.domain.user.application.port.in.RegisterUserUseCase; import com.yapp.artie.domain.user.application.port.out.LoadUserPort; import com.yapp.artie.domain.user.application.port.out.SaveUserPort; import com.yapp.artie.domain.user.domain.User; import com.yapp.artie.domain.user.dto.response.CreateUserResponseDto; -import com.yapp.artie.domain.user.application.port.exception.UserNotFoundException; import com.yapp.artie.global.annotation.UseCase; import lombok.RequiredArgsConstructor; import org.springframework.transaction.annotation.Transactional; From 9b9b8349140ee955db21eda7ff696f6ab4e652ef Mon Sep 17 00:00:00 2001 From: leesky Date: Mon, 3 Apr 2023 02:49:30 +0900 Subject: [PATCH 090/141] =?UTF-8?q?refactor=20:=20Dto=20=EC=9D=B4=EB=A6=84?= =?UTF-8?q?,=20=EC=9C=84=EC=B9=98=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../user/adapter/in/web/GetUserThumbnailController.java | 4 ++-- .../user/adapter/in/web/RegisterUserController.java | 6 +++--- .../user/application/port/in/GetUserThumbnailQuery.java | 4 +--- .../port/in/GetUserThumbnailResponse.java} | 6 +++--- .../port/in/RegisterUserResponse.java} | 6 +++--- .../user/application/port/in/RegisterUserUseCase.java | 4 +--- .../user/application/service/GetUserThumbnailService.java | 6 +++--- .../user/application/service/RegisterUserService.java | 8 ++++---- .../out/persistence/UserPersistenceAdapterTest.java | 2 +- .../user/application/service/GetUserServiceTest.java | 2 +- .../application/service/GetUserThumbnailServiceTest.java | 6 +++--- .../user/application/service/RegisterUserServiceTest.java | 8 ++++---- .../user/application/service/RenameUserServiceTest.java | 2 +- .../application/service/UserWithdrawalServiceTest.java | 2 +- 14 files changed, 31 insertions(+), 35 deletions(-) rename src/main/java/com/yapp/artie/domain/user/{dto/response/UserThumbnailResponseDto.java => application/port/in/GetUserThumbnailResponse.java} (74%) rename src/main/java/com/yapp/artie/domain/user/{dto/response/CreateUserResponseDto.java => application/port/in/RegisterUserResponse.java} (60%) diff --git a/src/main/java/com/yapp/artie/domain/user/adapter/in/web/GetUserThumbnailController.java b/src/main/java/com/yapp/artie/domain/user/adapter/in/web/GetUserThumbnailController.java index a66afe2b..72571733 100644 --- a/src/main/java/com/yapp/artie/domain/user/adapter/in/web/GetUserThumbnailController.java +++ b/src/main/java/com/yapp/artie/domain/user/adapter/in/web/GetUserThumbnailController.java @@ -2,7 +2,7 @@ import com.yapp.artie.domain.user.adapter.out.persistence.UserJpaEntity; import com.yapp.artie.domain.user.application.port.in.GetUserThumbnailQuery; -import com.yapp.artie.domain.user.dto.response.UserThumbnailResponseDto; +import com.yapp.artie.domain.user.application.port.in.GetUserThumbnailResponse; import com.yapp.artie.global.annotation.WebAdapter; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.Content; @@ -33,7 +33,7 @@ public class GetUserThumbnailController { content = @Content(mediaType = "application/json", schema = @Schema(implementation = UserJpaEntity.class))), }) @GetMapping("/my-page") - public ResponseEntity my(Authentication authentication) { + public ResponseEntity my(Authentication authentication) { Long userId = getUserId(authentication); return ResponseEntity.ok().body(getUserThumbnailQuery.loadUserThumbnailById(userId)); diff --git a/src/main/java/com/yapp/artie/domain/user/adapter/in/web/RegisterUserController.java b/src/main/java/com/yapp/artie/domain/user/adapter/in/web/RegisterUserController.java index baf5c604..2ade992d 100644 --- a/src/main/java/com/yapp/artie/domain/user/adapter/in/web/RegisterUserController.java +++ b/src/main/java/com/yapp/artie/domain/user/adapter/in/web/RegisterUserController.java @@ -1,10 +1,10 @@ package com.yapp.artie.domain.user.adapter.in.web; +import com.yapp.artie.domain.user.application.port.in.RegisterUserResponse; import com.yapp.artie.domain.user.application.port.in.RegisterUserUseCase; import com.yapp.artie.domain.user.application.port.out.TokenParsingPort; import com.yapp.artie.domain.user.domain.ArtieToken; -import com.yapp.artie.domain.user.dto.response.CreateUserResponseDto; import com.yapp.artie.global.annotation.WebAdapter; import com.yapp.artie.global.exception.common.InvalidValueException; import io.swagger.v3.oas.annotations.Operation; @@ -35,10 +35,10 @@ public class RegisterUserController { @ApiResponse( responseCode = "201", description = "유저가 성공적으로 생성됨", - content = @Content(mediaType = "application/json", schema = @Schema(implementation = CreateUserResponseDto.class))), + content = @Content(mediaType = "application/json", schema = @Schema(implementation = RegisterUserResponse.class))), }) @PostMapping() - public ResponseEntity register( + public ResponseEntity register( HttpServletRequest request, @RequestParam("uid") String uid) { String authorization = request.getHeader("Authorization"); ArtieToken decodedToken = tokenParsingPort.parseToken(authorization); diff --git a/src/main/java/com/yapp/artie/domain/user/application/port/in/GetUserThumbnailQuery.java b/src/main/java/com/yapp/artie/domain/user/application/port/in/GetUserThumbnailQuery.java index ebc1669a..b0573255 100644 --- a/src/main/java/com/yapp/artie/domain/user/application/port/in/GetUserThumbnailQuery.java +++ b/src/main/java/com/yapp/artie/domain/user/application/port/in/GetUserThumbnailQuery.java @@ -1,8 +1,6 @@ package com.yapp.artie.domain.user.application.port.in; -import com.yapp.artie.domain.user.dto.response.UserThumbnailResponseDto; - public interface GetUserThumbnailQuery { - UserThumbnailResponseDto loadUserThumbnailById(Long id); + GetUserThumbnailResponse loadUserThumbnailById(Long id); } diff --git a/src/main/java/com/yapp/artie/domain/user/dto/response/UserThumbnailResponseDto.java b/src/main/java/com/yapp/artie/domain/user/application/port/in/GetUserThumbnailResponse.java similarity index 74% rename from src/main/java/com/yapp/artie/domain/user/dto/response/UserThumbnailResponseDto.java rename to src/main/java/com/yapp/artie/domain/user/application/port/in/GetUserThumbnailResponse.java index 71f878db..dd38855f 100644 --- a/src/main/java/com/yapp/artie/domain/user/dto/response/UserThumbnailResponseDto.java +++ b/src/main/java/com/yapp/artie/domain/user/application/port/in/GetUserThumbnailResponse.java @@ -1,4 +1,4 @@ -package com.yapp.artie.domain.user.dto.response; +package com.yapp.artie.domain.user.application.port.in; import io.swagger.v3.oas.annotations.media.Schema; import lombok.AccessLevel; @@ -8,7 +8,7 @@ @Getter @Schema(description = "마이 페이지 조회 Response") @NoArgsConstructor(access = AccessLevel.PROTECTED) -public class UserThumbnailResponseDto { +public class GetUserThumbnailResponse { @Schema(description = "사용자 이름") private String name; @@ -16,7 +16,7 @@ public class UserThumbnailResponseDto { @Schema(description = "전시 개수") private int exhibitCount; - public UserThumbnailResponseDto(String name, int exhibitCount) { + public GetUserThumbnailResponse(String name, int exhibitCount) { this.name = name; this.exhibitCount = exhibitCount; } diff --git a/src/main/java/com/yapp/artie/domain/user/dto/response/CreateUserResponseDto.java b/src/main/java/com/yapp/artie/domain/user/application/port/in/RegisterUserResponse.java similarity index 60% rename from src/main/java/com/yapp/artie/domain/user/dto/response/CreateUserResponseDto.java rename to src/main/java/com/yapp/artie/domain/user/application/port/in/RegisterUserResponse.java index f2eeb8b7..86421d08 100644 --- a/src/main/java/com/yapp/artie/domain/user/dto/response/CreateUserResponseDto.java +++ b/src/main/java/com/yapp/artie/domain/user/application/port/in/RegisterUserResponse.java @@ -1,16 +1,16 @@ -package com.yapp.artie.domain.user.dto.response; +package com.yapp.artie.domain.user.application.port.in; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Getter; @Schema(description = "회원 Response") @Getter -public class CreateUserResponseDto { +public class RegisterUserResponse { @Schema(description = "아이디") public Long id; - public CreateUserResponseDto(Long id) { + public RegisterUserResponse(Long id) { this.id = id; } } diff --git a/src/main/java/com/yapp/artie/domain/user/application/port/in/RegisterUserUseCase.java b/src/main/java/com/yapp/artie/domain/user/application/port/in/RegisterUserUseCase.java index 865f4100..b98ea7b9 100644 --- a/src/main/java/com/yapp/artie/domain/user/application/port/in/RegisterUserUseCase.java +++ b/src/main/java/com/yapp/artie/domain/user/application/port/in/RegisterUserUseCase.java @@ -1,8 +1,6 @@ package com.yapp.artie.domain.user.application.port.in; -import com.yapp.artie.domain.user.dto.response.CreateUserResponseDto; - public interface RegisterUserUseCase { - CreateUserResponseDto register(String uid, String username, String picture); + RegisterUserResponse register(String uid, String username, String picture); } diff --git a/src/main/java/com/yapp/artie/domain/user/application/service/GetUserThumbnailService.java b/src/main/java/com/yapp/artie/domain/user/application/service/GetUserThumbnailService.java index cecc9e30..89fce3cd 100644 --- a/src/main/java/com/yapp/artie/domain/user/application/service/GetUserThumbnailService.java +++ b/src/main/java/com/yapp/artie/domain/user/application/service/GetUserThumbnailService.java @@ -3,9 +3,9 @@ import com.yapp.artie.domain.archive.service.ExhibitService; import com.yapp.artie.domain.user.application.port.in.GetUserThumbnailQuery; +import com.yapp.artie.domain.user.application.port.in.GetUserThumbnailResponse; import com.yapp.artie.domain.user.application.port.out.LoadUserPort; import com.yapp.artie.domain.user.domain.User; -import com.yapp.artie.domain.user.dto.response.UserThumbnailResponseDto; import com.yapp.artie.global.annotation.UseCase; import lombok.RequiredArgsConstructor; import org.springframework.transaction.annotation.Transactional; @@ -19,9 +19,9 @@ public class GetUserThumbnailService implements GetUserThumbnailQuery { private final ExhibitService exhibitService; @Override - public UserThumbnailResponseDto loadUserThumbnailById(Long id) { + public GetUserThumbnailResponse loadUserThumbnailById(Long id) { User user = loadUserPort.loadById(id); int exhibitCount = exhibitService.getExhibitCount(user.getId()); - return new UserThumbnailResponseDto(user.getName(), exhibitCount); + return new GetUserThumbnailResponse(user.getName(), exhibitCount); } } diff --git a/src/main/java/com/yapp/artie/domain/user/application/service/RegisterUserService.java b/src/main/java/com/yapp/artie/domain/user/application/service/RegisterUserService.java index 60b14e19..9f180799 100644 --- a/src/main/java/com/yapp/artie/domain/user/application/service/RegisterUserService.java +++ b/src/main/java/com/yapp/artie/domain/user/application/service/RegisterUserService.java @@ -1,11 +1,11 @@ package com.yapp.artie.domain.user.application.service; import com.yapp.artie.domain.user.application.port.exception.UserNotFoundException; +import com.yapp.artie.domain.user.application.port.in.RegisterUserResponse; import com.yapp.artie.domain.user.application.port.in.RegisterUserUseCase; import com.yapp.artie.domain.user.application.port.out.LoadUserPort; import com.yapp.artie.domain.user.application.port.out.SaveUserPort; import com.yapp.artie.domain.user.domain.User; -import com.yapp.artie.domain.user.dto.response.CreateUserResponseDto; import com.yapp.artie.global.annotation.UseCase; import lombok.RequiredArgsConstructor; import org.springframework.transaction.annotation.Transactional; @@ -19,12 +19,12 @@ public class RegisterUserService implements RegisterUserUseCase { private final SaveUserPort saveUserPort; @Override - public CreateUserResponseDto register(final String uid, final String username, + public RegisterUserResponse register(final String uid, final String username, final String picture) { try { - return new CreateUserResponseDto(getIdIfExists(uid)); + return new RegisterUserResponse(getIdIfExists(uid)); } catch (UserNotFoundException notFoundException) { - return new CreateUserResponseDto(saveUser(User.withoutId(uid, picture, username))); + return new RegisterUserResponse(saveUser(User.withoutId(uid, picture, username))); } } diff --git a/src/test/java/com/yapp/artie/domain/user/adapter/out/persistence/UserPersistenceAdapterTest.java b/src/test/java/com/yapp/artie/domain/user/adapter/out/persistence/UserPersistenceAdapterTest.java index f5a633e3..cf16cff7 100644 --- a/src/test/java/com/yapp/artie/domain/user/adapter/out/persistence/UserPersistenceAdapterTest.java +++ b/src/test/java/com/yapp/artie/domain/user/adapter/out/persistence/UserPersistenceAdapterTest.java @@ -4,8 +4,8 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; -import com.yapp.artie.domain.user.domain.User; import com.yapp.artie.domain.user.application.port.exception.UserNotFoundException; +import com.yapp.artie.domain.user.domain.User; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabase; diff --git a/src/test/java/com/yapp/artie/domain/user/application/service/GetUserServiceTest.java b/src/test/java/com/yapp/artie/domain/user/application/service/GetUserServiceTest.java index 9553b54d..8adf1647 100644 --- a/src/test/java/com/yapp/artie/domain/user/application/service/GetUserServiceTest.java +++ b/src/test/java/com/yapp/artie/domain/user/application/service/GetUserServiceTest.java @@ -6,9 +6,9 @@ import static org.mockito.ArgumentMatchers.any; import static org.mockito.BDDMockito.given; +import com.yapp.artie.domain.user.application.port.exception.UserNotFoundException; import com.yapp.artie.domain.user.application.port.out.LoadUserPort; import com.yapp.artie.domain.user.domain.User; -import com.yapp.artie.domain.user.application.port.exception.UserNotFoundException; import org.junit.jupiter.api.Test; import org.mockito.Mockito; diff --git a/src/test/java/com/yapp/artie/domain/user/application/service/GetUserThumbnailServiceTest.java b/src/test/java/com/yapp/artie/domain/user/application/service/GetUserThumbnailServiceTest.java index 0ddd8caa..b71037f3 100644 --- a/src/test/java/com/yapp/artie/domain/user/application/service/GetUserThumbnailServiceTest.java +++ b/src/test/java/com/yapp/artie/domain/user/application/service/GetUserThumbnailServiceTest.java @@ -7,10 +7,10 @@ import static org.mockito.BDDMockito.given; import com.yapp.artie.domain.archive.service.ExhibitService; +import com.yapp.artie.domain.user.application.port.exception.UserNotFoundException; +import com.yapp.artie.domain.user.application.port.in.GetUserThumbnailResponse; import com.yapp.artie.domain.user.application.port.out.LoadUserPort; import com.yapp.artie.domain.user.domain.User; -import com.yapp.artie.domain.user.dto.response.UserThumbnailResponseDto; -import com.yapp.artie.domain.user.application.port.exception.UserNotFoundException; import org.junit.jupiter.api.Test; import org.mockito.Mockito; @@ -36,7 +36,7 @@ class GetUserThumbnailServiceTest { givenUserByReference(user); givenExhibitCountWillReturnBy(5); - UserThumbnailResponseDto userThumbnail = getUserThumbnailService.loadUserThumbnailById( + GetUserThumbnailResponse userThumbnail = getUserThumbnailService.loadUserThumbnailById( user.getId()); assertThat(userThumbnail.getExhibitCount()).isEqualTo(5); assertThat(userThumbnail.getName()).isEqualTo("tomcat"); diff --git a/src/test/java/com/yapp/artie/domain/user/application/service/RegisterUserServiceTest.java b/src/test/java/com/yapp/artie/domain/user/application/service/RegisterUserServiceTest.java index 40324e1f..92ea2258 100644 --- a/src/test/java/com/yapp/artie/domain/user/application/service/RegisterUserServiceTest.java +++ b/src/test/java/com/yapp/artie/domain/user/application/service/RegisterUserServiceTest.java @@ -7,10 +7,10 @@ import static org.mockito.BDDMockito.then; import static org.mockito.Mockito.never; +import com.yapp.artie.domain.user.application.port.exception.UserNotFoundException; +import com.yapp.artie.domain.user.application.port.in.RegisterUserResponse; import com.yapp.artie.domain.user.application.port.out.LoadUserPort; import com.yapp.artie.domain.user.application.port.out.SaveUserPort; -import com.yapp.artie.domain.user.dto.response.CreateUserResponseDto; -import com.yapp.artie.domain.user.application.port.exception.UserNotFoundException; import org.junit.jupiter.api.Test; import org.mockito.Mockito; @@ -24,7 +24,7 @@ class RegisterUserServiceTest { @Test void register_이미_등록된_사용자라면_ID를_그대로_반환한다() { givenUser(); - CreateUserResponseDto actual = registerUserService.register("1", "test", null); + RegisterUserResponse actual = registerUserService.register("1", "test", null); assertThat(actual.getId()).isEqualTo(1L); } @@ -42,7 +42,7 @@ class RegisterUserServiceTest { Long expectedId = 2L; givenUserFindWithUidWillFail(); givenSaveWillReturnId(expectedId); - CreateUserResponseDto actual = registerUserService.register("1", "test", null); + RegisterUserResponse actual = registerUserService.register("1", "test", null); assertThat(actual.getId()).isEqualTo(expectedId); then(saveUserPort) .should() diff --git a/src/test/java/com/yapp/artie/domain/user/application/service/RenameUserServiceTest.java b/src/test/java/com/yapp/artie/domain/user/application/service/RenameUserServiceTest.java index 2ce3239d..d166c4c5 100644 --- a/src/test/java/com/yapp/artie/domain/user/application/service/RenameUserServiceTest.java +++ b/src/test/java/com/yapp/artie/domain/user/application/service/RenameUserServiceTest.java @@ -6,10 +6,10 @@ import static org.mockito.ArgumentMatchers.any; import static org.mockito.BDDMockito.given; +import com.yapp.artie.domain.user.application.port.exception.UserNotFoundException; import com.yapp.artie.domain.user.application.port.out.LoadUserPort; import com.yapp.artie.domain.user.application.port.out.UpdateUserStatePort; import com.yapp.artie.domain.user.domain.User; -import com.yapp.artie.domain.user.application.port.exception.UserNotFoundException; import org.junit.jupiter.api.Test; import org.mockito.Mockito; diff --git a/src/test/java/com/yapp/artie/domain/user/application/service/UserWithdrawalServiceTest.java b/src/test/java/com/yapp/artie/domain/user/application/service/UserWithdrawalServiceTest.java index a1c7dc25..1c011f1c 100644 --- a/src/test/java/com/yapp/artie/domain/user/application/service/UserWithdrawalServiceTest.java +++ b/src/test/java/com/yapp/artie/domain/user/application/service/UserWithdrawalServiceTest.java @@ -8,11 +8,11 @@ import static org.mockito.BDDMockito.then; import com.yapp.artie.domain.archive.repository.CategoryRepository; +import com.yapp.artie.domain.user.application.port.exception.UserNotFoundException; import com.yapp.artie.domain.user.application.port.out.DeleteExternalUserPort; import com.yapp.artie.domain.user.application.port.out.DeleteUserPort; import com.yapp.artie.domain.user.application.port.out.LoadUserPort; import com.yapp.artie.domain.user.domain.User; -import com.yapp.artie.domain.user.application.port.exception.UserNotFoundException; import org.junit.jupiter.api.Test; import org.mockito.Mockito; From bc427a6a80ee9b188e9be65e2f22a1f5000e9604 Mon Sep 17 00:00:00 2001 From: leesky Date: Mon, 3 Apr 2023 02:52:06 +0900 Subject: [PATCH 091/141] =?UTF-8?q?refactor=20:=20deprecated=20=ED=8C=A8?= =?UTF-8?q?=ED=82=A4=EC=A7=80=20=EC=9D=B4=EB=8F=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../artie/domain/archive/service/ArtworkService.java | 2 +- .../artie/domain/archive/service/CategoryService.java | 2 +- .../artie/domain/archive/service/ExhibitService.java | 2 +- .../yapp/artie/domain/s3/controller/S3Controller.java | 2 +- .../user => global}/deprecated/LoadUserJpaEntityApi.java | 2 +- .../user => global}/deprecated/UserJpaEntityLoader.java | 9 +++++---- 6 files changed, 10 insertions(+), 9 deletions(-) rename src/main/java/com/yapp/artie/{domain/user => global}/deprecated/LoadUserJpaEntityApi.java (95%) rename src/main/java/com/yapp/artie/{domain/user => global}/deprecated/UserJpaEntityLoader.java (72%) diff --git a/src/main/java/com/yapp/artie/domain/archive/service/ArtworkService.java b/src/main/java/com/yapp/artie/domain/archive/service/ArtworkService.java index a904dc39..f65b9205 100644 --- a/src/main/java/com/yapp/artie/domain/archive/service/ArtworkService.java +++ b/src/main/java/com/yapp/artie/domain/archive/service/ArtworkService.java @@ -11,7 +11,7 @@ import com.yapp.artie.domain.archive.repository.ArtworkRepository; import com.yapp.artie.domain.s3.service.S3Service; import com.yapp.artie.domain.user.adapter.out.persistence.UserJpaEntity; -import com.yapp.artie.domain.user.deprecated.LoadUserJpaEntityApi; +import com.yapp.artie.global.deprecated.LoadUserJpaEntityApi; import com.yapp.artie.global.util.S3Utils; import java.util.List; import java.util.stream.Collectors; diff --git a/src/main/java/com/yapp/artie/domain/archive/service/CategoryService.java b/src/main/java/com/yapp/artie/domain/archive/service/CategoryService.java index 77d37bb7..b3c284a5 100644 --- a/src/main/java/com/yapp/artie/domain/archive/service/CategoryService.java +++ b/src/main/java/com/yapp/artie/domain/archive/service/CategoryService.java @@ -12,7 +12,7 @@ import com.yapp.artie.domain.archive.repository.CategoryRepository; import com.yapp.artie.domain.archive.repository.ExhibitRepository; import com.yapp.artie.domain.user.adapter.out.persistence.UserJpaEntity; -import com.yapp.artie.domain.user.deprecated.LoadUserJpaEntityApi; +import com.yapp.artie.global.deprecated.LoadUserJpaEntityApi; import java.util.List; import java.util.Optional; import java.util.stream.Collectors; diff --git a/src/main/java/com/yapp/artie/domain/archive/service/ExhibitService.java b/src/main/java/com/yapp/artie/domain/archive/service/ExhibitService.java index 45610fa0..e90bd25c 100644 --- a/src/main/java/com/yapp/artie/domain/archive/service/ExhibitService.java +++ b/src/main/java/com/yapp/artie/domain/archive/service/ExhibitService.java @@ -17,7 +17,7 @@ import com.yapp.artie.domain.archive.repository.ArtworkRepository; import com.yapp.artie.domain.archive.repository.ExhibitRepository; import com.yapp.artie.domain.user.adapter.out.persistence.UserJpaEntity; -import com.yapp.artie.domain.user.deprecated.LoadUserJpaEntityApi; +import com.yapp.artie.global.deprecated.LoadUserJpaEntityApi; import com.yapp.artie.global.util.DateUtils; import com.yapp.artie.global.util.S3Utils; import java.time.LocalDate; diff --git a/src/main/java/com/yapp/artie/domain/s3/controller/S3Controller.java b/src/main/java/com/yapp/artie/domain/s3/controller/S3Controller.java index 4d39c2bb..e8390914 100644 --- a/src/main/java/com/yapp/artie/domain/s3/controller/S3Controller.java +++ b/src/main/java/com/yapp/artie/domain/s3/controller/S3Controller.java @@ -4,7 +4,7 @@ import com.yapp.artie.domain.s3.dto.response.GetPresignedUrlResponseDto; import com.yapp.artie.domain.s3.dto.response.presignedUrlDataDto; import com.yapp.artie.domain.s3.service.S3Service; -import com.yapp.artie.domain.user.deprecated.LoadUserJpaEntityApi; +import com.yapp.artie.global.deprecated.LoadUserJpaEntityApi; import com.yapp.artie.global.exception.response.ErrorResponse; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; diff --git a/src/main/java/com/yapp/artie/domain/user/deprecated/LoadUserJpaEntityApi.java b/src/main/java/com/yapp/artie/global/deprecated/LoadUserJpaEntityApi.java similarity index 95% rename from src/main/java/com/yapp/artie/domain/user/deprecated/LoadUserJpaEntityApi.java rename to src/main/java/com/yapp/artie/global/deprecated/LoadUserJpaEntityApi.java index 176a34cc..83ce51c1 100644 --- a/src/main/java/com/yapp/artie/domain/user/deprecated/LoadUserJpaEntityApi.java +++ b/src/main/java/com/yapp/artie/global/deprecated/LoadUserJpaEntityApi.java @@ -1,4 +1,4 @@ -package com.yapp.artie.domain.user.deprecated; +package com.yapp.artie.global.deprecated; import com.yapp.artie.domain.user.adapter.out.persistence.UserJpaEntity; diff --git a/src/main/java/com/yapp/artie/domain/user/deprecated/UserJpaEntityLoader.java b/src/main/java/com/yapp/artie/global/deprecated/UserJpaEntityLoader.java similarity index 72% rename from src/main/java/com/yapp/artie/domain/user/deprecated/UserJpaEntityLoader.java rename to src/main/java/com/yapp/artie/global/deprecated/UserJpaEntityLoader.java index 0de9609f..a42de5ad 100644 --- a/src/main/java/com/yapp/artie/domain/user/deprecated/UserJpaEntityLoader.java +++ b/src/main/java/com/yapp/artie/global/deprecated/UserJpaEntityLoader.java @@ -1,8 +1,9 @@ -package com.yapp.artie.domain.user.deprecated; +package com.yapp.artie.global.deprecated; import com.yapp.artie.domain.user.adapter.out.persistence.UserJpaEntity; -import com.yapp.artie.domain.user.adapter.out.persistence.UserRepository; import com.yapp.artie.domain.user.application.port.exception.UserNotFoundException; +import java.util.Optional; +import javax.persistence.EntityManager; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -12,11 +13,11 @@ @RequiredArgsConstructor class UserJpaEntityLoader implements LoadUserJpaEntityApi { - private final UserRepository userRepository; + private final EntityManager em; @Override public UserJpaEntity findById(Long id) { - return userRepository.findById(id) + return Optional.ofNullable(em.find(UserJpaEntity.class, id)) .orElseThrow(UserNotFoundException::new); } } From 3f0578973ab6c92a3670830d4d67f5087988a5bc Mon Sep 17 00:00:00 2001 From: leesky Date: Mon, 3 Apr 2023 02:55:19 +0900 Subject: [PATCH 092/141] =?UTF-8?q?refactor=20:=20user=20=EB=B9=84?= =?UTF-8?q?=EC=A6=88=EB=8B=88=EC=8A=A4=20=EC=98=88=EC=99=B8=20=ED=8C=A8?= =?UTF-8?q?=ED=82=A4=EC=A7=80=20=EC=9C=84=EC=B9=98=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../user/adapter/out/persistence/UserPersistenceAdapter.java | 2 +- .../domain/user/application/service/RegisterUserService.java | 1 - .../{port/exception => service}/UserAlreadyExistException.java | 2 +- .../{port/exception => service}/UserNotFoundException.java | 2 +- .../com/yapp/artie/global/deprecated/UserJpaEntityLoader.java | 2 +- .../adapter/out/persistence/UserPersistenceAdapterTest.java | 2 +- .../domain/user/application/service/GetUserServiceTest.java | 1 - .../user/application/service/GetUserThumbnailServiceTest.java | 1 - .../user/application/service/RegisterUserServiceTest.java | 1 - .../domain/user/application/service/RenameUserServiceTest.java | 1 - .../user/application/service/UserWithdrawalServiceTest.java | 1 - 11 files changed, 5 insertions(+), 11 deletions(-) rename src/main/java/com/yapp/artie/domain/user/application/{port/exception => service}/UserAlreadyExistException.java (81%) rename src/main/java/com/yapp/artie/domain/user/application/{port/exception => service}/UserNotFoundException.java (80%) diff --git a/src/main/java/com/yapp/artie/domain/user/adapter/out/persistence/UserPersistenceAdapter.java b/src/main/java/com/yapp/artie/domain/user/adapter/out/persistence/UserPersistenceAdapter.java index 601ffc1a..ffdafc25 100644 --- a/src/main/java/com/yapp/artie/domain/user/adapter/out/persistence/UserPersistenceAdapter.java +++ b/src/main/java/com/yapp/artie/domain/user/adapter/out/persistence/UserPersistenceAdapter.java @@ -1,10 +1,10 @@ package com.yapp.artie.domain.user.adapter.out.persistence; -import com.yapp.artie.domain.user.application.port.exception.UserNotFoundException; import com.yapp.artie.domain.user.application.port.out.DeleteUserPort; import com.yapp.artie.domain.user.application.port.out.LoadUserPort; import com.yapp.artie.domain.user.application.port.out.SaveUserPort; import com.yapp.artie.domain.user.application.port.out.UpdateUserStatePort; +import com.yapp.artie.domain.user.application.service.UserNotFoundException; import com.yapp.artie.domain.user.domain.User; import com.yapp.artie.global.annotation.PersistenceAdapter; import lombok.RequiredArgsConstructor; diff --git a/src/main/java/com/yapp/artie/domain/user/application/service/RegisterUserService.java b/src/main/java/com/yapp/artie/domain/user/application/service/RegisterUserService.java index 9f180799..5e795f3a 100644 --- a/src/main/java/com/yapp/artie/domain/user/application/service/RegisterUserService.java +++ b/src/main/java/com/yapp/artie/domain/user/application/service/RegisterUserService.java @@ -1,6 +1,5 @@ package com.yapp.artie.domain.user.application.service; -import com.yapp.artie.domain.user.application.port.exception.UserNotFoundException; import com.yapp.artie.domain.user.application.port.in.RegisterUserResponse; import com.yapp.artie.domain.user.application.port.in.RegisterUserUseCase; import com.yapp.artie.domain.user.application.port.out.LoadUserPort; diff --git a/src/main/java/com/yapp/artie/domain/user/application/port/exception/UserAlreadyExistException.java b/src/main/java/com/yapp/artie/domain/user/application/service/UserAlreadyExistException.java similarity index 81% rename from src/main/java/com/yapp/artie/domain/user/application/port/exception/UserAlreadyExistException.java rename to src/main/java/com/yapp/artie/domain/user/application/service/UserAlreadyExistException.java index b908e0bc..f778fa6a 100644 --- a/src/main/java/com/yapp/artie/domain/user/application/port/exception/UserAlreadyExistException.java +++ b/src/main/java/com/yapp/artie/domain/user/application/service/UserAlreadyExistException.java @@ -1,4 +1,4 @@ -package com.yapp.artie.domain.user.application.port.exception; +package com.yapp.artie.domain.user.application.service; import com.yapp.artie.global.exception.common.BusinessException; import com.yapp.artie.global.exception.response.ErrorCode; diff --git a/src/main/java/com/yapp/artie/domain/user/application/port/exception/UserNotFoundException.java b/src/main/java/com/yapp/artie/domain/user/application/service/UserNotFoundException.java similarity index 80% rename from src/main/java/com/yapp/artie/domain/user/application/port/exception/UserNotFoundException.java rename to src/main/java/com/yapp/artie/domain/user/application/service/UserNotFoundException.java index 32295962..9e29106d 100644 --- a/src/main/java/com/yapp/artie/domain/user/application/port/exception/UserNotFoundException.java +++ b/src/main/java/com/yapp/artie/domain/user/application/service/UserNotFoundException.java @@ -1,4 +1,4 @@ -package com.yapp.artie.domain.user.application.port.exception; +package com.yapp.artie.domain.user.application.service; import com.yapp.artie.global.exception.common.BusinessException; diff --git a/src/main/java/com/yapp/artie/global/deprecated/UserJpaEntityLoader.java b/src/main/java/com/yapp/artie/global/deprecated/UserJpaEntityLoader.java index a42de5ad..6c1d5ce2 100644 --- a/src/main/java/com/yapp/artie/global/deprecated/UserJpaEntityLoader.java +++ b/src/main/java/com/yapp/artie/global/deprecated/UserJpaEntityLoader.java @@ -1,7 +1,7 @@ package com.yapp.artie.global.deprecated; import com.yapp.artie.domain.user.adapter.out.persistence.UserJpaEntity; -import com.yapp.artie.domain.user.application.port.exception.UserNotFoundException; +import com.yapp.artie.domain.user.application.service.UserNotFoundException; import java.util.Optional; import javax.persistence.EntityManager; import lombok.RequiredArgsConstructor; diff --git a/src/test/java/com/yapp/artie/domain/user/adapter/out/persistence/UserPersistenceAdapterTest.java b/src/test/java/com/yapp/artie/domain/user/adapter/out/persistence/UserPersistenceAdapterTest.java index cf16cff7..6b3c76af 100644 --- a/src/test/java/com/yapp/artie/domain/user/adapter/out/persistence/UserPersistenceAdapterTest.java +++ b/src/test/java/com/yapp/artie/domain/user/adapter/out/persistence/UserPersistenceAdapterTest.java @@ -4,7 +4,7 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; -import com.yapp.artie.domain.user.application.port.exception.UserNotFoundException; +import com.yapp.artie.domain.user.application.service.UserNotFoundException; import com.yapp.artie.domain.user.domain.User; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; diff --git a/src/test/java/com/yapp/artie/domain/user/application/service/GetUserServiceTest.java b/src/test/java/com/yapp/artie/domain/user/application/service/GetUserServiceTest.java index 8adf1647..c62c18da 100644 --- a/src/test/java/com/yapp/artie/domain/user/application/service/GetUserServiceTest.java +++ b/src/test/java/com/yapp/artie/domain/user/application/service/GetUserServiceTest.java @@ -6,7 +6,6 @@ import static org.mockito.ArgumentMatchers.any; import static org.mockito.BDDMockito.given; -import com.yapp.artie.domain.user.application.port.exception.UserNotFoundException; import com.yapp.artie.domain.user.application.port.out.LoadUserPort; import com.yapp.artie.domain.user.domain.User; import org.junit.jupiter.api.Test; diff --git a/src/test/java/com/yapp/artie/domain/user/application/service/GetUserThumbnailServiceTest.java b/src/test/java/com/yapp/artie/domain/user/application/service/GetUserThumbnailServiceTest.java index b71037f3..9abdf2ee 100644 --- a/src/test/java/com/yapp/artie/domain/user/application/service/GetUserThumbnailServiceTest.java +++ b/src/test/java/com/yapp/artie/domain/user/application/service/GetUserThumbnailServiceTest.java @@ -7,7 +7,6 @@ import static org.mockito.BDDMockito.given; import com.yapp.artie.domain.archive.service.ExhibitService; -import com.yapp.artie.domain.user.application.port.exception.UserNotFoundException; import com.yapp.artie.domain.user.application.port.in.GetUserThumbnailResponse; import com.yapp.artie.domain.user.application.port.out.LoadUserPort; import com.yapp.artie.domain.user.domain.User; diff --git a/src/test/java/com/yapp/artie/domain/user/application/service/RegisterUserServiceTest.java b/src/test/java/com/yapp/artie/domain/user/application/service/RegisterUserServiceTest.java index 92ea2258..df7d2411 100644 --- a/src/test/java/com/yapp/artie/domain/user/application/service/RegisterUserServiceTest.java +++ b/src/test/java/com/yapp/artie/domain/user/application/service/RegisterUserServiceTest.java @@ -7,7 +7,6 @@ import static org.mockito.BDDMockito.then; import static org.mockito.Mockito.never; -import com.yapp.artie.domain.user.application.port.exception.UserNotFoundException; import com.yapp.artie.domain.user.application.port.in.RegisterUserResponse; import com.yapp.artie.domain.user.application.port.out.LoadUserPort; import com.yapp.artie.domain.user.application.port.out.SaveUserPort; diff --git a/src/test/java/com/yapp/artie/domain/user/application/service/RenameUserServiceTest.java b/src/test/java/com/yapp/artie/domain/user/application/service/RenameUserServiceTest.java index d166c4c5..75d68e3a 100644 --- a/src/test/java/com/yapp/artie/domain/user/application/service/RenameUserServiceTest.java +++ b/src/test/java/com/yapp/artie/domain/user/application/service/RenameUserServiceTest.java @@ -6,7 +6,6 @@ import static org.mockito.ArgumentMatchers.any; import static org.mockito.BDDMockito.given; -import com.yapp.artie.domain.user.application.port.exception.UserNotFoundException; import com.yapp.artie.domain.user.application.port.out.LoadUserPort; import com.yapp.artie.domain.user.application.port.out.UpdateUserStatePort; import com.yapp.artie.domain.user.domain.User; diff --git a/src/test/java/com/yapp/artie/domain/user/application/service/UserWithdrawalServiceTest.java b/src/test/java/com/yapp/artie/domain/user/application/service/UserWithdrawalServiceTest.java index 1c011f1c..78460da6 100644 --- a/src/test/java/com/yapp/artie/domain/user/application/service/UserWithdrawalServiceTest.java +++ b/src/test/java/com/yapp/artie/domain/user/application/service/UserWithdrawalServiceTest.java @@ -8,7 +8,6 @@ import static org.mockito.BDDMockito.then; import com.yapp.artie.domain.archive.repository.CategoryRepository; -import com.yapp.artie.domain.user.application.port.exception.UserNotFoundException; import com.yapp.artie.domain.user.application.port.out.DeleteExternalUserPort; import com.yapp.artie.domain.user.application.port.out.DeleteUserPort; import com.yapp.artie.domain.user.application.port.out.LoadUserPort; From 6ab0c0a47b65be5ad3a8022ab31b48d1bef5faab Mon Sep 17 00:00:00 2001 From: leesky Date: Mon, 3 Apr 2023 02:59:58 +0900 Subject: [PATCH 093/141] =?UTF-8?q?refactor=20:=20firebase=20exception=20?= =?UTF-8?q?=ED=8C=A8=ED=82=A4=EC=A7=80=20=EC=9C=84=EC=B9=98=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../out/authentication/FirebaseAuthenticationAdapter.java | 2 +- .../adapter/out/authentication/FirebaseUserRemover.java | 4 ++-- .../user/adapter/out/authentication/JwtDecoder.java | 8 ++++---- .../authentication/exception}/ExpiredTokenException.java | 2 +- .../exception}/FirebaseUserNotFoundException.java | 2 +- .../exception}/InvalidFirebaseUidException.java | 2 +- .../authentication/exception}/InvalidTokenException.java | 2 +- .../exception}/NotExistValidTokenException.java | 2 +- .../authentication/exception}/RevokedTokenException.java | 2 +- .../authentication/FirebaseAuthenticationAdapterTest.java | 2 +- .../out/authentication/FirebaseUserRemoverTest.java | 4 ++-- .../user/adapter/out/authentication/JwtDecoderTest.java | 6 +++--- 12 files changed, 19 insertions(+), 19 deletions(-) rename src/main/java/com/yapp/artie/{global/exception/authentication => domain/user/adapter/out/authentication/exception}/ExpiredTokenException.java (79%) rename src/main/java/com/yapp/artie/{global/exception/authentication => domain/user/adapter/out/authentication/exception}/FirebaseUserNotFoundException.java (80%) rename src/main/java/com/yapp/artie/{global/exception/authentication => domain/user/adapter/out/authentication/exception}/InvalidFirebaseUidException.java (79%) rename src/main/java/com/yapp/artie/{global/exception/authentication => domain/user/adapter/out/authentication/exception}/InvalidTokenException.java (79%) rename src/main/java/com/yapp/artie/{global/exception/authentication => domain/user/adapter/out/authentication/exception}/NotExistValidTokenException.java (79%) rename src/main/java/com/yapp/artie/{global/exception/authentication => domain/user/adapter/out/authentication/exception}/RevokedTokenException.java (79%) diff --git a/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/FirebaseAuthenticationAdapter.java b/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/FirebaseAuthenticationAdapter.java index 904d6394..8c2a9fd7 100644 --- a/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/FirebaseAuthenticationAdapter.java +++ b/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/FirebaseAuthenticationAdapter.java @@ -1,10 +1,10 @@ package com.yapp.artie.domain.user.adapter.out.authentication; +import com.yapp.artie.domain.user.adapter.out.authentication.exception.NotExistValidTokenException; import com.yapp.artie.domain.user.application.port.out.DeleteExternalUserPort; import com.yapp.artie.domain.user.application.port.out.TokenParsingPort; import com.yapp.artie.domain.user.domain.ArtieToken; import com.yapp.artie.global.annotation.AuthenticationAdapter; -import com.yapp.artie.global.exception.authentication.NotExistValidTokenException; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; diff --git a/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/FirebaseUserRemover.java b/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/FirebaseUserRemover.java index a2714495..37a4dd23 100644 --- a/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/FirebaseUserRemover.java +++ b/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/FirebaseUserRemover.java @@ -3,8 +3,8 @@ import com.google.firebase.auth.AbstractFirebaseAuth; import com.google.firebase.auth.AuthErrorCode; import com.google.firebase.auth.FirebaseAuthException; -import com.yapp.artie.global.exception.authentication.FirebaseUserNotFoundException; -import com.yapp.artie.global.exception.authentication.InvalidFirebaseUidException; +import com.yapp.artie.domain.user.adapter.out.authentication.exception.FirebaseUserNotFoundException; +import com.yapp.artie.domain.user.adapter.out.authentication.exception.InvalidFirebaseUidException; import com.yapp.artie.global.exception.common.BusinessException; import java.util.Objects; import lombok.RequiredArgsConstructor; diff --git a/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/JwtDecoder.java b/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/JwtDecoder.java index e7119dde..a4819dff 100644 --- a/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/JwtDecoder.java +++ b/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/JwtDecoder.java @@ -3,10 +3,10 @@ import com.google.firebase.auth.AbstractFirebaseAuth; import com.google.firebase.auth.FirebaseAuthException; import com.google.firebase.auth.FirebaseToken; -import com.yapp.artie.global.exception.authentication.ExpiredTokenException; -import com.yapp.artie.global.exception.authentication.InvalidTokenException; -import com.yapp.artie.global.exception.authentication.NotExistValidTokenException; -import com.yapp.artie.global.exception.authentication.RevokedTokenException; +import com.yapp.artie.domain.user.adapter.out.authentication.exception.ExpiredTokenException; +import com.yapp.artie.domain.user.adapter.out.authentication.exception.InvalidTokenException; +import com.yapp.artie.domain.user.adapter.out.authentication.exception.NotExistValidTokenException; +import com.yapp.artie.domain.user.adapter.out.authentication.exception.RevokedTokenException; import com.yapp.artie.global.exception.common.BusinessException; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Component; diff --git a/src/main/java/com/yapp/artie/global/exception/authentication/ExpiredTokenException.java b/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/exception/ExpiredTokenException.java similarity index 79% rename from src/main/java/com/yapp/artie/global/exception/authentication/ExpiredTokenException.java rename to src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/exception/ExpiredTokenException.java index a767e37a..a78992b3 100644 --- a/src/main/java/com/yapp/artie/global/exception/authentication/ExpiredTokenException.java +++ b/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/exception/ExpiredTokenException.java @@ -1,4 +1,4 @@ -package com.yapp.artie.global.exception.authentication; +package com.yapp.artie.domain.user.adapter.out.authentication.exception; import com.yapp.artie.global.exception.common.BusinessException; import com.yapp.artie.global.exception.response.ErrorCode; diff --git a/src/main/java/com/yapp/artie/global/exception/authentication/FirebaseUserNotFoundException.java b/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/exception/FirebaseUserNotFoundException.java similarity index 80% rename from src/main/java/com/yapp/artie/global/exception/authentication/FirebaseUserNotFoundException.java rename to src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/exception/FirebaseUserNotFoundException.java index 6e599f54..7fcc97fe 100644 --- a/src/main/java/com/yapp/artie/global/exception/authentication/FirebaseUserNotFoundException.java +++ b/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/exception/FirebaseUserNotFoundException.java @@ -1,4 +1,4 @@ -package com.yapp.artie.global.exception.authentication; +package com.yapp.artie.domain.user.adapter.out.authentication.exception; import com.yapp.artie.global.exception.common.BusinessException; import com.yapp.artie.global.exception.response.ErrorCode; diff --git a/src/main/java/com/yapp/artie/global/exception/authentication/InvalidFirebaseUidException.java b/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/exception/InvalidFirebaseUidException.java similarity index 79% rename from src/main/java/com/yapp/artie/global/exception/authentication/InvalidFirebaseUidException.java rename to src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/exception/InvalidFirebaseUidException.java index 1ddc4f1e..ede0f1b4 100644 --- a/src/main/java/com/yapp/artie/global/exception/authentication/InvalidFirebaseUidException.java +++ b/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/exception/InvalidFirebaseUidException.java @@ -1,4 +1,4 @@ -package com.yapp.artie.global.exception.authentication; +package com.yapp.artie.domain.user.adapter.out.authentication.exception; import com.yapp.artie.global.exception.common.BusinessException; import com.yapp.artie.global.exception.response.ErrorCode; diff --git a/src/main/java/com/yapp/artie/global/exception/authentication/InvalidTokenException.java b/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/exception/InvalidTokenException.java similarity index 79% rename from src/main/java/com/yapp/artie/global/exception/authentication/InvalidTokenException.java rename to src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/exception/InvalidTokenException.java index 4521387d..fb4c3517 100644 --- a/src/main/java/com/yapp/artie/global/exception/authentication/InvalidTokenException.java +++ b/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/exception/InvalidTokenException.java @@ -1,4 +1,4 @@ -package com.yapp.artie.global.exception.authentication; +package com.yapp.artie.domain.user.adapter.out.authentication.exception; import com.yapp.artie.global.exception.common.BusinessException; import com.yapp.artie.global.exception.response.ErrorCode; diff --git a/src/main/java/com/yapp/artie/global/exception/authentication/NotExistValidTokenException.java b/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/exception/NotExistValidTokenException.java similarity index 79% rename from src/main/java/com/yapp/artie/global/exception/authentication/NotExistValidTokenException.java rename to src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/exception/NotExistValidTokenException.java index 792eec5a..37acabbd 100644 --- a/src/main/java/com/yapp/artie/global/exception/authentication/NotExistValidTokenException.java +++ b/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/exception/NotExistValidTokenException.java @@ -1,4 +1,4 @@ -package com.yapp.artie.global.exception.authentication; +package com.yapp.artie.domain.user.adapter.out.authentication.exception; import com.yapp.artie.global.exception.common.BusinessException; import com.yapp.artie.global.exception.response.ErrorCode; diff --git a/src/main/java/com/yapp/artie/global/exception/authentication/RevokedTokenException.java b/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/exception/RevokedTokenException.java similarity index 79% rename from src/main/java/com/yapp/artie/global/exception/authentication/RevokedTokenException.java rename to src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/exception/RevokedTokenException.java index 722c30ea..e91eef72 100644 --- a/src/main/java/com/yapp/artie/global/exception/authentication/RevokedTokenException.java +++ b/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/exception/RevokedTokenException.java @@ -1,4 +1,4 @@ -package com.yapp.artie.global.exception.authentication; +package com.yapp.artie.domain.user.adapter.out.authentication.exception; import com.yapp.artie.global.exception.common.BusinessException; import com.yapp.artie.global.exception.response.ErrorCode; diff --git a/src/test/java/com/yapp/artie/domain/user/adapter/out/authentication/FirebaseAuthenticationAdapterTest.java b/src/test/java/com/yapp/artie/domain/user/adapter/out/authentication/FirebaseAuthenticationAdapterTest.java index 7f9338a1..5a61b5ee 100644 --- a/src/test/java/com/yapp/artie/domain/user/adapter/out/authentication/FirebaseAuthenticationAdapterTest.java +++ b/src/test/java/com/yapp/artie/domain/user/adapter/out/authentication/FirebaseAuthenticationAdapterTest.java @@ -8,9 +8,9 @@ import static org.mockito.BDDMockito.given; import static org.mockito.BDDMockito.then; +import com.yapp.artie.domain.user.adapter.out.authentication.exception.NotExistValidTokenException; import com.yapp.artie.domain.user.domain.ArtieToken; import com.yapp.artie.domain.user.domain.User; -import com.yapp.artie.global.exception.authentication.NotExistValidTokenException; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; diff --git a/src/test/java/com/yapp/artie/domain/user/adapter/out/authentication/FirebaseUserRemoverTest.java b/src/test/java/com/yapp/artie/domain/user/adapter/out/authentication/FirebaseUserRemoverTest.java index 4aeaefce..9adb1a7f 100644 --- a/src/test/java/com/yapp/artie/domain/user/adapter/out/authentication/FirebaseUserRemoverTest.java +++ b/src/test/java/com/yapp/artie/domain/user/adapter/out/authentication/FirebaseUserRemoverTest.java @@ -11,8 +11,8 @@ import com.google.firebase.auth.AbstractFirebaseAuth; import com.google.firebase.auth.AuthErrorCode; import com.google.firebase.auth.FirebaseAuthException; -import com.yapp.artie.global.exception.authentication.FirebaseUserNotFoundException; -import com.yapp.artie.global.exception.authentication.InvalidFirebaseUidException; +import com.yapp.artie.domain.user.adapter.out.authentication.exception.FirebaseUserNotFoundException; +import com.yapp.artie.domain.user.adapter.out.authentication.exception.InvalidFirebaseUidException; import org.junit.jupiter.api.Test; import org.mockito.Mockito; diff --git a/src/test/java/com/yapp/artie/domain/user/adapter/out/authentication/JwtDecoderTest.java b/src/test/java/com/yapp/artie/domain/user/adapter/out/authentication/JwtDecoderTest.java index 3ab6ed7f..86389748 100644 --- a/src/test/java/com/yapp/artie/domain/user/adapter/out/authentication/JwtDecoderTest.java +++ b/src/test/java/com/yapp/artie/domain/user/adapter/out/authentication/JwtDecoderTest.java @@ -11,9 +11,9 @@ import com.google.firebase.auth.AbstractFirebaseAuth; import com.google.firebase.auth.AuthErrorCode; import com.google.firebase.auth.FirebaseAuthException; -import com.yapp.artie.global.exception.authentication.ExpiredTokenException; -import com.yapp.artie.global.exception.authentication.NotExistValidTokenException; -import com.yapp.artie.global.exception.authentication.RevokedTokenException; +import com.yapp.artie.domain.user.adapter.out.authentication.exception.ExpiredTokenException; +import com.yapp.artie.domain.user.adapter.out.authentication.exception.NotExistValidTokenException; +import com.yapp.artie.domain.user.adapter.out.authentication.exception.RevokedTokenException; import org.junit.jupiter.api.Test; import org.mockito.Mockito; From 99f0d2314f32e0a88e8830e8df4a8e5479ea512f Mon Sep 17 00:00:00 2001 From: leesky Date: Mon, 3 Apr 2023 03:01:21 +0900 Subject: [PATCH 094/141] =?UTF-8?q?refactor=20:=20configuration=20?= =?UTF-8?q?=ED=8C=A8=ED=82=A4=EC=A7=80=20=EC=A0=95=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../FirebaseInitializer.java => FirebaseConfig.java} | 4 ++-- .../java/com/yapp/artie/global/config/{aws => }/S3Config.java | 2 +- .../yapp/artie/global/config/{swagger => }/SwaggerConfig.java | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) rename src/main/java/com/yapp/artie/global/config/{firebase/FirebaseInitializer.java => FirebaseConfig.java} (93%) rename src/main/java/com/yapp/artie/global/config/{aws => }/S3Config.java (95%) rename src/main/java/com/yapp/artie/global/config/{swagger => }/SwaggerConfig.java (98%) diff --git a/src/main/java/com/yapp/artie/global/config/firebase/FirebaseInitializer.java b/src/main/java/com/yapp/artie/global/config/FirebaseConfig.java similarity index 93% rename from src/main/java/com/yapp/artie/global/config/firebase/FirebaseInitializer.java rename to src/main/java/com/yapp/artie/global/config/FirebaseConfig.java index ffe17287..3c82d32a 100644 --- a/src/main/java/com/yapp/artie/global/config/firebase/FirebaseInitializer.java +++ b/src/main/java/com/yapp/artie/global/config/FirebaseConfig.java @@ -1,4 +1,4 @@ -package com.yapp.artie.global.config.firebase; +package com.yapp.artie.global.config; import com.google.auth.oauth2.GoogleCredentials; import com.google.firebase.FirebaseApp; @@ -12,7 +12,7 @@ @Configuration @Slf4j -public class FirebaseInitializer { +public class FirebaseConfig { @Bean public FirebaseApp firebaseApp() throws IOException { diff --git a/src/main/java/com/yapp/artie/global/config/aws/S3Config.java b/src/main/java/com/yapp/artie/global/config/S3Config.java similarity index 95% rename from src/main/java/com/yapp/artie/global/config/aws/S3Config.java rename to src/main/java/com/yapp/artie/global/config/S3Config.java index 7736c70d..8139c8a8 100644 --- a/src/main/java/com/yapp/artie/global/config/aws/S3Config.java +++ b/src/main/java/com/yapp/artie/global/config/S3Config.java @@ -1,4 +1,4 @@ -package com.yapp.artie.global.config.aws; +package com.yapp.artie.global.config; import com.amazonaws.auth.AWSStaticCredentialsProvider; import com.amazonaws.auth.BasicAWSCredentials; diff --git a/src/main/java/com/yapp/artie/global/config/swagger/SwaggerConfig.java b/src/main/java/com/yapp/artie/global/config/SwaggerConfig.java similarity index 98% rename from src/main/java/com/yapp/artie/global/config/swagger/SwaggerConfig.java rename to src/main/java/com/yapp/artie/global/config/SwaggerConfig.java index 431e829c..86459b5e 100644 --- a/src/main/java/com/yapp/artie/global/config/swagger/SwaggerConfig.java +++ b/src/main/java/com/yapp/artie/global/config/SwaggerConfig.java @@ -1,4 +1,4 @@ -package com.yapp.artie.global.config.swagger; +package com.yapp.artie.global.config; import io.swagger.v3.oas.annotations.OpenAPIDefinition; import io.swagger.v3.oas.annotations.info.Info; From 4e369734b28962c8a2c12073bdabdd34f2e90a64 Mon Sep 17 00:00:00 2001 From: leesky Date: Mon, 3 Apr 2023 03:03:46 +0900 Subject: [PATCH 095/141] =?UTF-8?q?refactor=20:=20=ED=95=84=ED=84=B0=20?= =?UTF-8?q?=ED=8C=A8=ED=82=A4=EC=A7=80=20=EC=A0=95=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/yapp/artie/global/config/SecurityConfig.java | 4 ++-- .../global/{exception => filter}/GlobalExceptionHandler.java | 2 +- .../{authentication => filter}/JwtExceptionHandler.java | 2 +- .../artie/global/{authentication => filter}/JwtFilter.java | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) rename src/main/java/com/yapp/artie/global/{exception => filter}/GlobalExceptionHandler.java (99%) rename src/main/java/com/yapp/artie/global/{authentication => filter}/JwtExceptionHandler.java (97%) rename src/main/java/com/yapp/artie/global/{authentication => filter}/JwtFilter.java (97%) diff --git a/src/main/java/com/yapp/artie/global/config/SecurityConfig.java b/src/main/java/com/yapp/artie/global/config/SecurityConfig.java index 1cd5b298..9372cd70 100644 --- a/src/main/java/com/yapp/artie/global/config/SecurityConfig.java +++ b/src/main/java/com/yapp/artie/global/config/SecurityConfig.java @@ -2,8 +2,8 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.yapp.artie.domain.user.application.port.out.TokenParsingPort; -import com.yapp.artie.global.authentication.JwtExceptionHandler; -import com.yapp.artie.global.authentication.JwtFilter; +import com.yapp.artie.global.filter.JwtExceptionHandler; +import com.yapp.artie.global.filter.JwtFilter; import lombok.RequiredArgsConstructor; import org.springframework.context.annotation.Configuration; import org.springframework.http.HttpMethod; diff --git a/src/main/java/com/yapp/artie/global/exception/GlobalExceptionHandler.java b/src/main/java/com/yapp/artie/global/filter/GlobalExceptionHandler.java similarity index 99% rename from src/main/java/com/yapp/artie/global/exception/GlobalExceptionHandler.java rename to src/main/java/com/yapp/artie/global/filter/GlobalExceptionHandler.java index f6127c13..1910b4ba 100644 --- a/src/main/java/com/yapp/artie/global/exception/GlobalExceptionHandler.java +++ b/src/main/java/com/yapp/artie/global/filter/GlobalExceptionHandler.java @@ -1,4 +1,4 @@ -package com.yapp.artie.global.exception; +package com.yapp.artie.global.filter; import com.amazonaws.AmazonServiceException; import com.amazonaws.SdkClientException; diff --git a/src/main/java/com/yapp/artie/global/authentication/JwtExceptionHandler.java b/src/main/java/com/yapp/artie/global/filter/JwtExceptionHandler.java similarity index 97% rename from src/main/java/com/yapp/artie/global/authentication/JwtExceptionHandler.java rename to src/main/java/com/yapp/artie/global/filter/JwtExceptionHandler.java index 9004df24..c5c59775 100644 --- a/src/main/java/com/yapp/artie/global/authentication/JwtExceptionHandler.java +++ b/src/main/java/com/yapp/artie/global/filter/JwtExceptionHandler.java @@ -1,4 +1,4 @@ -package com.yapp.artie.global.authentication; +package com.yapp.artie.global.filter; import com.fasterxml.jackson.databind.ObjectMapper; import com.yapp.artie.global.exception.common.BusinessException; diff --git a/src/main/java/com/yapp/artie/global/authentication/JwtFilter.java b/src/main/java/com/yapp/artie/global/filter/JwtFilter.java similarity index 97% rename from src/main/java/com/yapp/artie/global/authentication/JwtFilter.java rename to src/main/java/com/yapp/artie/global/filter/JwtFilter.java index 911911a1..0e18cfd4 100644 --- a/src/main/java/com/yapp/artie/global/authentication/JwtFilter.java +++ b/src/main/java/com/yapp/artie/global/filter/JwtFilter.java @@ -1,4 +1,4 @@ -package com.yapp.artie.global.authentication; +package com.yapp.artie.global.filter; import com.yapp.artie.domain.user.application.port.out.TokenParsingPort; import com.yapp.artie.domain.user.domain.ArtieToken; From 5a349d98ea2b5d7772a2970746949553bc0b9bcf Mon Sep 17 00:00:00 2001 From: leesky Date: Mon, 3 Apr 2023 03:07:25 +0900 Subject: [PATCH 096/141] =?UTF-8?q?refactor=20:=20common=20=ED=8C=A8?= =?UTF-8?q?=ED=82=A4=EC=A7=80=20=EC=A0=95=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../artie/domain/archive/controller/ArtworkController.java | 2 +- .../artie/domain/archive/controller/ExhibitController.java | 2 +- .../yapp/artie/domain/archive/domain/artwork/Artwork.java | 2 +- .../yapp/artie/domain/archive/domain/category/Category.java | 2 +- .../yapp/artie/domain/archive/domain/exhibit/Exhibit.java | 2 +- .../domain/archive/exception/ArtworkNotFoundException.java | 4 ++-- .../archive/exception/CategoryAlreadyExistException.java | 4 ++-- .../domain/archive/exception/CategoryNotFoundException.java | 4 ++-- .../exception/ChangeCategoryWrongLengthException.java | 4 ++-- .../archive/exception/ExceededCategoryCountException.java | 4 ++-- .../archive/exception/ExhibitAlreadyPublishedException.java | 4 ++-- .../domain/archive/exception/ExhibitNotFoundException.java | 4 ++-- .../archive/exception/NotOwnerOfArtworkException.java | 4 ++-- .../archive/exception/NotOwnerOfCategoryException.java | 4 ++-- .../archive/exception/NotOwnerOfExhibitException.java | 4 ++-- .../domain/notice/exception/NoticeNotFoundException.java | 4 ++-- .../com/yapp/artie/domain/question/domain/Question.java | 2 +- .../com/yapp/artie/domain/s3/controller/S3Controller.java | 2 +- .../artie/domain/user/adapter/in/web/GetUserController.java | 2 +- .../user/adapter/in/web/GetUserThumbnailController.java | 2 +- .../domain/user/adapter/in/web/RegisterUserController.java | 4 ++-- .../domain/user/adapter/in/web/RenameUserController.java | 4 ++-- .../user/adapter/in/web/UserWithdrawalController.java | 2 +- .../out/authentication/FirebaseAuthenticationAdapter.java | 2 +- .../adapter/out/authentication/FirebaseUserRemover.java | 2 +- .../domain/user/adapter/out/authentication/JwtDecoder.java | 2 +- .../out/authentication/exception/ExpiredTokenException.java | 4 ++-- .../exception/FirebaseUserNotFoundException.java | 4 ++-- .../exception/InvalidFirebaseUidException.java | 4 ++-- .../out/authentication/exception/InvalidTokenException.java | 4 ++-- .../exception/NotExistValidTokenException.java | 4 ++-- .../out/authentication/exception/RevokedTokenException.java | 4 ++-- .../domain/user/adapter/out/persistence/UserJpaEntity.java | 2 +- .../adapter/out/persistence/UserPersistenceAdapter.java | 2 +- .../user/application/service/GetUserDetailsService.java | 2 +- .../domain/user/application/service/GetUserService.java | 2 +- .../user/application/service/GetUserThumbnailService.java | 2 +- .../user/application/service/RegisterUserService.java | 2 +- .../domain/user/application/service/RenameUserService.java | 2 +- .../user/application/service/UserAlreadyExistException.java | 4 ++-- .../user/application/service/UserNotFoundException.java | 4 ++-- .../user/application/service/UserWithdrawalService.java | 2 +- .../{ => common}/annotation/AuthenticationAdapter.java | 2 +- .../global/{ => common}/annotation/PersistenceAdapter.java | 2 +- .../yapp/artie/global/{ => common}/annotation/UseCase.java | 2 +- .../artie/global/{ => common}/annotation/WebAdapter.java | 2 +- .../common => common/exception}/BusinessException.java | 4 +--- .../exception}/EntityNotFoundException.java | 4 +--- .../{exception/response => common/exception}/ErrorCode.java | 2 +- .../response => common/exception}/ErrorResponse.java | 2 +- .../common => common/exception}/InvalidValueException.java | 4 +--- .../artie/global/common/{ => persistence}/BaseEntity.java | 2 +- .../yapp/artie/global/filter/GlobalExceptionHandler.java | 6 +++--- .../com/yapp/artie/global/filter/JwtExceptionHandler.java | 4 ++-- 54 files changed, 78 insertions(+), 84 deletions(-) rename src/main/java/com/yapp/artie/global/{ => common}/annotation/AuthenticationAdapter.java (90%) rename src/main/java/com/yapp/artie/global/{ => common}/annotation/PersistenceAdapter.java (90%) rename src/main/java/com/yapp/artie/global/{ => common}/annotation/UseCase.java (90%) rename src/main/java/com/yapp/artie/global/{ => common}/annotation/WebAdapter.java (90%) rename src/main/java/com/yapp/artie/global/{exception/common => common/exception}/BusinessException.java (78%) rename src/main/java/com/yapp/artie/global/{exception/common => common/exception}/EntityNotFoundException.java (61%) rename src/main/java/com/yapp/artie/global/{exception/response => common/exception}/ErrorCode.java (98%) rename src/main/java/com/yapp/artie/global/{exception/response => common/exception}/ErrorResponse.java (98%) rename src/main/java/com/yapp/artie/global/{exception/common => common/exception}/InvalidValueException.java (69%) rename src/main/java/com/yapp/artie/global/common/{ => persistence}/BaseEntity.java (92%) diff --git a/src/main/java/com/yapp/artie/domain/archive/controller/ArtworkController.java b/src/main/java/com/yapp/artie/domain/archive/controller/ArtworkController.java index 7d1a6584..35c19d04 100644 --- a/src/main/java/com/yapp/artie/domain/archive/controller/ArtworkController.java +++ b/src/main/java/com/yapp/artie/domain/archive/controller/ArtworkController.java @@ -10,7 +10,7 @@ import com.yapp.artie.domain.archive.dto.artwork.CreateArtworkResponseDto; import com.yapp.artie.domain.archive.dto.artwork.UpdateArtworkRequestDto; import com.yapp.artie.domain.archive.service.ArtworkService; -import com.yapp.artie.global.exception.response.ErrorResponse; +import com.yapp.artie.global.common.exception.ErrorResponse; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.enums.ParameterIn; diff --git a/src/main/java/com/yapp/artie/domain/archive/controller/ExhibitController.java b/src/main/java/com/yapp/artie/domain/archive/controller/ExhibitController.java index 5442fdd8..cd6c5a9b 100644 --- a/src/main/java/com/yapp/artie/domain/archive/controller/ExhibitController.java +++ b/src/main/java/com/yapp/artie/domain/archive/controller/ExhibitController.java @@ -13,7 +13,7 @@ import com.yapp.artie.domain.archive.dto.exhibit.PostInfoDto; import com.yapp.artie.domain.archive.dto.exhibit.UpdateExhibitRequestDto; import com.yapp.artie.domain.archive.service.ExhibitService; -import com.yapp.artie.global.exception.response.ErrorResponse; +import com.yapp.artie.global.common.exception.ErrorResponse; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.enums.ParameterIn; diff --git a/src/main/java/com/yapp/artie/domain/archive/domain/artwork/Artwork.java b/src/main/java/com/yapp/artie/domain/archive/domain/artwork/Artwork.java index 3b33e972..4b5634ec 100644 --- a/src/main/java/com/yapp/artie/domain/archive/domain/artwork/Artwork.java +++ b/src/main/java/com/yapp/artie/domain/archive/domain/artwork/Artwork.java @@ -2,7 +2,7 @@ import com.yapp.artie.domain.archive.domain.exhibit.Exhibit; import com.yapp.artie.domain.archive.domain.tag.Tag; -import com.yapp.artie.global.common.BaseEntity; +import com.yapp.artie.global.common.persistence.BaseEntity; import java.util.ArrayList; import java.util.List; import javax.persistence.CascadeType; diff --git a/src/main/java/com/yapp/artie/domain/archive/domain/category/Category.java b/src/main/java/com/yapp/artie/domain/archive/domain/category/Category.java index 1d373665..f91d057d 100644 --- a/src/main/java/com/yapp/artie/domain/archive/domain/category/Category.java +++ b/src/main/java/com/yapp/artie/domain/archive/domain/category/Category.java @@ -2,7 +2,7 @@ import com.yapp.artie.domain.archive.domain.exhibit.Exhibit; import com.yapp.artie.domain.user.adapter.out.persistence.UserJpaEntity; -import com.yapp.artie.global.common.BaseEntity; +import com.yapp.artie.global.common.persistence.BaseEntity; import java.util.ArrayList; import java.util.List; import javax.persistence.CascadeType; diff --git a/src/main/java/com/yapp/artie/domain/archive/domain/exhibit/Exhibit.java b/src/main/java/com/yapp/artie/domain/archive/domain/exhibit/Exhibit.java index 07755e7c..b23de535 100644 --- a/src/main/java/com/yapp/artie/domain/archive/domain/exhibit/Exhibit.java +++ b/src/main/java/com/yapp/artie/domain/archive/domain/exhibit/Exhibit.java @@ -4,7 +4,7 @@ import com.yapp.artie.domain.archive.domain.artwork.Artwork; import com.yapp.artie.domain.archive.domain.category.Category; import com.yapp.artie.domain.user.adapter.out.persistence.UserJpaEntity; -import com.yapp.artie.global.common.BaseEntity; +import com.yapp.artie.global.common.persistence.BaseEntity; import java.time.LocalDate; import java.util.ArrayList; import java.util.List; diff --git a/src/main/java/com/yapp/artie/domain/archive/exception/ArtworkNotFoundException.java b/src/main/java/com/yapp/artie/domain/archive/exception/ArtworkNotFoundException.java index 9ac3858f..b264c2ba 100644 --- a/src/main/java/com/yapp/artie/domain/archive/exception/ArtworkNotFoundException.java +++ b/src/main/java/com/yapp/artie/domain/archive/exception/ArtworkNotFoundException.java @@ -1,8 +1,8 @@ package com.yapp.artie.domain.archive.exception; -import com.yapp.artie.global.exception.common.BusinessException; -import com.yapp.artie.global.exception.response.ErrorCode; +import com.yapp.artie.global.common.exception.BusinessException; +import com.yapp.artie.global.common.exception.ErrorCode; public class ArtworkNotFoundException extends BusinessException { diff --git a/src/main/java/com/yapp/artie/domain/archive/exception/CategoryAlreadyExistException.java b/src/main/java/com/yapp/artie/domain/archive/exception/CategoryAlreadyExistException.java index 4a2e3666..a6a1a886 100644 --- a/src/main/java/com/yapp/artie/domain/archive/exception/CategoryAlreadyExistException.java +++ b/src/main/java/com/yapp/artie/domain/archive/exception/CategoryAlreadyExistException.java @@ -1,7 +1,7 @@ package com.yapp.artie.domain.archive.exception; -import com.yapp.artie.global.exception.common.BusinessException; -import com.yapp.artie.global.exception.response.ErrorCode; +import com.yapp.artie.global.common.exception.BusinessException; +import com.yapp.artie.global.common.exception.ErrorCode; public class CategoryAlreadyExistException extends BusinessException { diff --git a/src/main/java/com/yapp/artie/domain/archive/exception/CategoryNotFoundException.java b/src/main/java/com/yapp/artie/domain/archive/exception/CategoryNotFoundException.java index bcefb9c4..8989ccc8 100644 --- a/src/main/java/com/yapp/artie/domain/archive/exception/CategoryNotFoundException.java +++ b/src/main/java/com/yapp/artie/domain/archive/exception/CategoryNotFoundException.java @@ -1,7 +1,7 @@ package com.yapp.artie.domain.archive.exception; -import com.yapp.artie.global.exception.common.BusinessException; -import com.yapp.artie.global.exception.response.ErrorCode; +import com.yapp.artie.global.common.exception.BusinessException; +import com.yapp.artie.global.common.exception.ErrorCode; public class CategoryNotFoundException extends BusinessException { diff --git a/src/main/java/com/yapp/artie/domain/archive/exception/ChangeCategoryWrongLengthException.java b/src/main/java/com/yapp/artie/domain/archive/exception/ChangeCategoryWrongLengthException.java index 8dc597a6..8dbc7ad6 100644 --- a/src/main/java/com/yapp/artie/domain/archive/exception/ChangeCategoryWrongLengthException.java +++ b/src/main/java/com/yapp/artie/domain/archive/exception/ChangeCategoryWrongLengthException.java @@ -1,7 +1,7 @@ package com.yapp.artie.domain.archive.exception; -import com.yapp.artie.global.exception.common.BusinessException; -import com.yapp.artie.global.exception.response.ErrorCode; +import com.yapp.artie.global.common.exception.BusinessException; +import com.yapp.artie.global.common.exception.ErrorCode; public class ChangeCategoryWrongLengthException extends BusinessException { diff --git a/src/main/java/com/yapp/artie/domain/archive/exception/ExceededCategoryCountException.java b/src/main/java/com/yapp/artie/domain/archive/exception/ExceededCategoryCountException.java index dab2d47f..d6fa631b 100644 --- a/src/main/java/com/yapp/artie/domain/archive/exception/ExceededCategoryCountException.java +++ b/src/main/java/com/yapp/artie/domain/archive/exception/ExceededCategoryCountException.java @@ -1,7 +1,7 @@ package com.yapp.artie.domain.archive.exception; -import com.yapp.artie.global.exception.common.BusinessException; -import com.yapp.artie.global.exception.response.ErrorCode; +import com.yapp.artie.global.common.exception.BusinessException; +import com.yapp.artie.global.common.exception.ErrorCode; public class ExceededCategoryCountException extends BusinessException { diff --git a/src/main/java/com/yapp/artie/domain/archive/exception/ExhibitAlreadyPublishedException.java b/src/main/java/com/yapp/artie/domain/archive/exception/ExhibitAlreadyPublishedException.java index f2a520e7..eb61e0e5 100644 --- a/src/main/java/com/yapp/artie/domain/archive/exception/ExhibitAlreadyPublishedException.java +++ b/src/main/java/com/yapp/artie/domain/archive/exception/ExhibitAlreadyPublishedException.java @@ -1,7 +1,7 @@ package com.yapp.artie.domain.archive.exception; -import com.yapp.artie.global.exception.common.BusinessException; -import com.yapp.artie.global.exception.response.ErrorCode; +import com.yapp.artie.global.common.exception.BusinessException; +import com.yapp.artie.global.common.exception.ErrorCode; public class ExhibitAlreadyPublishedException extends BusinessException { diff --git a/src/main/java/com/yapp/artie/domain/archive/exception/ExhibitNotFoundException.java b/src/main/java/com/yapp/artie/domain/archive/exception/ExhibitNotFoundException.java index e622f82a..42ea1b81 100644 --- a/src/main/java/com/yapp/artie/domain/archive/exception/ExhibitNotFoundException.java +++ b/src/main/java/com/yapp/artie/domain/archive/exception/ExhibitNotFoundException.java @@ -1,8 +1,8 @@ package com.yapp.artie.domain.archive.exception; -import com.yapp.artie.global.exception.common.BusinessException; -import com.yapp.artie.global.exception.response.ErrorCode; +import com.yapp.artie.global.common.exception.BusinessException; +import com.yapp.artie.global.common.exception.ErrorCode; public class ExhibitNotFoundException extends BusinessException { diff --git a/src/main/java/com/yapp/artie/domain/archive/exception/NotOwnerOfArtworkException.java b/src/main/java/com/yapp/artie/domain/archive/exception/NotOwnerOfArtworkException.java index 18753fc5..899d6277 100644 --- a/src/main/java/com/yapp/artie/domain/archive/exception/NotOwnerOfArtworkException.java +++ b/src/main/java/com/yapp/artie/domain/archive/exception/NotOwnerOfArtworkException.java @@ -1,7 +1,7 @@ package com.yapp.artie.domain.archive.exception; -import com.yapp.artie.global.exception.common.BusinessException; -import com.yapp.artie.global.exception.response.ErrorCode; +import com.yapp.artie.global.common.exception.BusinessException; +import com.yapp.artie.global.common.exception.ErrorCode; public class NotOwnerOfArtworkException extends BusinessException { diff --git a/src/main/java/com/yapp/artie/domain/archive/exception/NotOwnerOfCategoryException.java b/src/main/java/com/yapp/artie/domain/archive/exception/NotOwnerOfCategoryException.java index 12fd4501..39d48551 100644 --- a/src/main/java/com/yapp/artie/domain/archive/exception/NotOwnerOfCategoryException.java +++ b/src/main/java/com/yapp/artie/domain/archive/exception/NotOwnerOfCategoryException.java @@ -1,7 +1,7 @@ package com.yapp.artie.domain.archive.exception; -import com.yapp.artie.global.exception.common.BusinessException; -import com.yapp.artie.global.exception.response.ErrorCode; +import com.yapp.artie.global.common.exception.BusinessException; +import com.yapp.artie.global.common.exception.ErrorCode; public class NotOwnerOfCategoryException extends BusinessException { diff --git a/src/main/java/com/yapp/artie/domain/archive/exception/NotOwnerOfExhibitException.java b/src/main/java/com/yapp/artie/domain/archive/exception/NotOwnerOfExhibitException.java index 3d2fa3a6..8c0286cc 100644 --- a/src/main/java/com/yapp/artie/domain/archive/exception/NotOwnerOfExhibitException.java +++ b/src/main/java/com/yapp/artie/domain/archive/exception/NotOwnerOfExhibitException.java @@ -1,7 +1,7 @@ package com.yapp.artie.domain.archive.exception; -import com.yapp.artie.global.exception.common.BusinessException; -import com.yapp.artie.global.exception.response.ErrorCode; +import com.yapp.artie.global.common.exception.BusinessException; +import com.yapp.artie.global.common.exception.ErrorCode; public class NotOwnerOfExhibitException extends BusinessException { diff --git a/src/main/java/com/yapp/artie/domain/notice/exception/NoticeNotFoundException.java b/src/main/java/com/yapp/artie/domain/notice/exception/NoticeNotFoundException.java index 2478ad83..d7b5263e 100644 --- a/src/main/java/com/yapp/artie/domain/notice/exception/NoticeNotFoundException.java +++ b/src/main/java/com/yapp/artie/domain/notice/exception/NoticeNotFoundException.java @@ -1,7 +1,7 @@ package com.yapp.artie.domain.notice.exception; -import com.yapp.artie.global.exception.common.BusinessException; -import com.yapp.artie.global.exception.response.ErrorCode; +import com.yapp.artie.global.common.exception.BusinessException; +import com.yapp.artie.global.common.exception.ErrorCode; public class NoticeNotFoundException extends BusinessException { diff --git a/src/main/java/com/yapp/artie/domain/question/domain/Question.java b/src/main/java/com/yapp/artie/domain/question/domain/Question.java index 63271222..210a5a70 100644 --- a/src/main/java/com/yapp/artie/domain/question/domain/Question.java +++ b/src/main/java/com/yapp/artie/domain/question/domain/Question.java @@ -1,7 +1,7 @@ package com.yapp.artie.domain.question.domain; import com.yapp.artie.domain.user.adapter.out.persistence.UserJpaEntity; -import com.yapp.artie.global.common.BaseEntity; +import com.yapp.artie.global.common.persistence.BaseEntity; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.FetchType; diff --git a/src/main/java/com/yapp/artie/domain/s3/controller/S3Controller.java b/src/main/java/com/yapp/artie/domain/s3/controller/S3Controller.java index e8390914..bb09e98d 100644 --- a/src/main/java/com/yapp/artie/domain/s3/controller/S3Controller.java +++ b/src/main/java/com/yapp/artie/domain/s3/controller/S3Controller.java @@ -4,8 +4,8 @@ import com.yapp.artie.domain.s3.dto.response.GetPresignedUrlResponseDto; import com.yapp.artie.domain.s3.dto.response.presignedUrlDataDto; import com.yapp.artie.domain.s3.service.S3Service; +import com.yapp.artie.global.common.exception.ErrorResponse; import com.yapp.artie.global.deprecated.LoadUserJpaEntityApi; -import com.yapp.artie.global.exception.response.ErrorResponse; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.enums.ParameterIn; diff --git a/src/main/java/com/yapp/artie/domain/user/adapter/in/web/GetUserController.java b/src/main/java/com/yapp/artie/domain/user/adapter/in/web/GetUserController.java index e6bf02f5..d80490e4 100644 --- a/src/main/java/com/yapp/artie/domain/user/adapter/in/web/GetUserController.java +++ b/src/main/java/com/yapp/artie/domain/user/adapter/in/web/GetUserController.java @@ -2,7 +2,7 @@ import com.yapp.artie.domain.user.application.port.in.GetUserQuery; import com.yapp.artie.domain.user.domain.User; -import com.yapp.artie.global.annotation.WebAdapter; +import com.yapp.artie.global.common.annotation.WebAdapter; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.Content; import io.swagger.v3.oas.annotations.media.Schema; diff --git a/src/main/java/com/yapp/artie/domain/user/adapter/in/web/GetUserThumbnailController.java b/src/main/java/com/yapp/artie/domain/user/adapter/in/web/GetUserThumbnailController.java index 72571733..4645c13a 100644 --- a/src/main/java/com/yapp/artie/domain/user/adapter/in/web/GetUserThumbnailController.java +++ b/src/main/java/com/yapp/artie/domain/user/adapter/in/web/GetUserThumbnailController.java @@ -3,7 +3,7 @@ import com.yapp.artie.domain.user.adapter.out.persistence.UserJpaEntity; import com.yapp.artie.domain.user.application.port.in.GetUserThumbnailQuery; import com.yapp.artie.domain.user.application.port.in.GetUserThumbnailResponse; -import com.yapp.artie.global.annotation.WebAdapter; +import com.yapp.artie.global.common.annotation.WebAdapter; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.Content; import io.swagger.v3.oas.annotations.media.Schema; diff --git a/src/main/java/com/yapp/artie/domain/user/adapter/in/web/RegisterUserController.java b/src/main/java/com/yapp/artie/domain/user/adapter/in/web/RegisterUserController.java index 2ade992d..2caa5505 100644 --- a/src/main/java/com/yapp/artie/domain/user/adapter/in/web/RegisterUserController.java +++ b/src/main/java/com/yapp/artie/domain/user/adapter/in/web/RegisterUserController.java @@ -5,8 +5,8 @@ import com.yapp.artie.domain.user.application.port.in.RegisterUserUseCase; import com.yapp.artie.domain.user.application.port.out.TokenParsingPort; import com.yapp.artie.domain.user.domain.ArtieToken; -import com.yapp.artie.global.annotation.WebAdapter; -import com.yapp.artie.global.exception.common.InvalidValueException; +import com.yapp.artie.global.common.annotation.WebAdapter; +import com.yapp.artie.global.common.exception.InvalidValueException; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.Content; import io.swagger.v3.oas.annotations.media.Schema; diff --git a/src/main/java/com/yapp/artie/domain/user/adapter/in/web/RenameUserController.java b/src/main/java/com/yapp/artie/domain/user/adapter/in/web/RenameUserController.java index 85a6b52d..1494f795 100644 --- a/src/main/java/com/yapp/artie/domain/user/adapter/in/web/RenameUserController.java +++ b/src/main/java/com/yapp/artie/domain/user/adapter/in/web/RenameUserController.java @@ -1,8 +1,8 @@ package com.yapp.artie.domain.user.adapter.in.web; import com.yapp.artie.domain.user.application.port.in.RenameUserUseCase; -import com.yapp.artie.global.annotation.WebAdapter; -import com.yapp.artie.global.exception.response.ErrorResponse; +import com.yapp.artie.global.common.annotation.WebAdapter; +import com.yapp.artie.global.common.exception.ErrorResponse; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.enums.ParameterIn; diff --git a/src/main/java/com/yapp/artie/domain/user/adapter/in/web/UserWithdrawalController.java b/src/main/java/com/yapp/artie/domain/user/adapter/in/web/UserWithdrawalController.java index edd1ddc0..d670e19d 100644 --- a/src/main/java/com/yapp/artie/domain/user/adapter/in/web/UserWithdrawalController.java +++ b/src/main/java/com/yapp/artie/domain/user/adapter/in/web/UserWithdrawalController.java @@ -1,7 +1,7 @@ package com.yapp.artie.domain.user.adapter.in.web; import com.yapp.artie.domain.user.application.port.in.UserWithdrawalUseCase; -import com.yapp.artie.global.annotation.WebAdapter; +import com.yapp.artie.global.common.annotation.WebAdapter; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.Content; import io.swagger.v3.oas.annotations.media.Schema; diff --git a/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/FirebaseAuthenticationAdapter.java b/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/FirebaseAuthenticationAdapter.java index 8c2a9fd7..4537ec64 100644 --- a/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/FirebaseAuthenticationAdapter.java +++ b/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/FirebaseAuthenticationAdapter.java @@ -4,7 +4,7 @@ import com.yapp.artie.domain.user.application.port.out.DeleteExternalUserPort; import com.yapp.artie.domain.user.application.port.out.TokenParsingPort; import com.yapp.artie.domain.user.domain.ArtieToken; -import com.yapp.artie.global.annotation.AuthenticationAdapter; +import com.yapp.artie.global.common.annotation.AuthenticationAdapter; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; diff --git a/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/FirebaseUserRemover.java b/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/FirebaseUserRemover.java index 37a4dd23..1d5728c8 100644 --- a/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/FirebaseUserRemover.java +++ b/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/FirebaseUserRemover.java @@ -5,7 +5,7 @@ import com.google.firebase.auth.FirebaseAuthException; import com.yapp.artie.domain.user.adapter.out.authentication.exception.FirebaseUserNotFoundException; import com.yapp.artie.domain.user.adapter.out.authentication.exception.InvalidFirebaseUidException; -import com.yapp.artie.global.exception.common.BusinessException; +import com.yapp.artie.global.common.exception.BusinessException; import java.util.Objects; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Component; diff --git a/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/JwtDecoder.java b/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/JwtDecoder.java index a4819dff..8e61dcac 100644 --- a/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/JwtDecoder.java +++ b/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/JwtDecoder.java @@ -7,7 +7,7 @@ import com.yapp.artie.domain.user.adapter.out.authentication.exception.InvalidTokenException; import com.yapp.artie.domain.user.adapter.out.authentication.exception.NotExistValidTokenException; import com.yapp.artie.domain.user.adapter.out.authentication.exception.RevokedTokenException; -import com.yapp.artie.global.exception.common.BusinessException; +import com.yapp.artie.global.common.exception.BusinessException; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Component; diff --git a/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/exception/ExpiredTokenException.java b/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/exception/ExpiredTokenException.java index a78992b3..7db113f8 100644 --- a/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/exception/ExpiredTokenException.java +++ b/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/exception/ExpiredTokenException.java @@ -1,7 +1,7 @@ package com.yapp.artie.domain.user.adapter.out.authentication.exception; -import com.yapp.artie.global.exception.common.BusinessException; -import com.yapp.artie.global.exception.response.ErrorCode; +import com.yapp.artie.global.common.exception.BusinessException; +import com.yapp.artie.global.common.exception.ErrorCode; public class ExpiredTokenException extends BusinessException { diff --git a/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/exception/FirebaseUserNotFoundException.java b/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/exception/FirebaseUserNotFoundException.java index 7fcc97fe..08fc8761 100644 --- a/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/exception/FirebaseUserNotFoundException.java +++ b/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/exception/FirebaseUserNotFoundException.java @@ -1,7 +1,7 @@ package com.yapp.artie.domain.user.adapter.out.authentication.exception; -import com.yapp.artie.global.exception.common.BusinessException; -import com.yapp.artie.global.exception.response.ErrorCode; +import com.yapp.artie.global.common.exception.BusinessException; +import com.yapp.artie.global.common.exception.ErrorCode; public class FirebaseUserNotFoundException extends BusinessException { diff --git a/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/exception/InvalidFirebaseUidException.java b/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/exception/InvalidFirebaseUidException.java index ede0f1b4..89e2c388 100644 --- a/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/exception/InvalidFirebaseUidException.java +++ b/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/exception/InvalidFirebaseUidException.java @@ -1,7 +1,7 @@ package com.yapp.artie.domain.user.adapter.out.authentication.exception; -import com.yapp.artie.global.exception.common.BusinessException; -import com.yapp.artie.global.exception.response.ErrorCode; +import com.yapp.artie.global.common.exception.BusinessException; +import com.yapp.artie.global.common.exception.ErrorCode; public class InvalidFirebaseUidException extends BusinessException { diff --git a/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/exception/InvalidTokenException.java b/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/exception/InvalidTokenException.java index fb4c3517..c41689ca 100644 --- a/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/exception/InvalidTokenException.java +++ b/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/exception/InvalidTokenException.java @@ -1,7 +1,7 @@ package com.yapp.artie.domain.user.adapter.out.authentication.exception; -import com.yapp.artie.global.exception.common.BusinessException; -import com.yapp.artie.global.exception.response.ErrorCode; +import com.yapp.artie.global.common.exception.BusinessException; +import com.yapp.artie.global.common.exception.ErrorCode; public class InvalidTokenException extends BusinessException { diff --git a/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/exception/NotExistValidTokenException.java b/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/exception/NotExistValidTokenException.java index 37acabbd..ac50007e 100644 --- a/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/exception/NotExistValidTokenException.java +++ b/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/exception/NotExistValidTokenException.java @@ -1,7 +1,7 @@ package com.yapp.artie.domain.user.adapter.out.authentication.exception; -import com.yapp.artie.global.exception.common.BusinessException; -import com.yapp.artie.global.exception.response.ErrorCode; +import com.yapp.artie.global.common.exception.BusinessException; +import com.yapp.artie.global.common.exception.ErrorCode; public class NotExistValidTokenException extends BusinessException { diff --git a/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/exception/RevokedTokenException.java b/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/exception/RevokedTokenException.java index e91eef72..471b7423 100644 --- a/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/exception/RevokedTokenException.java +++ b/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/exception/RevokedTokenException.java @@ -1,7 +1,7 @@ package com.yapp.artie.domain.user.adapter.out.authentication.exception; -import com.yapp.artie.global.exception.common.BusinessException; -import com.yapp.artie.global.exception.response.ErrorCode; +import com.yapp.artie.global.common.exception.BusinessException; +import com.yapp.artie.global.common.exception.ErrorCode; public class RevokedTokenException extends BusinessException { diff --git a/src/main/java/com/yapp/artie/domain/user/adapter/out/persistence/UserJpaEntity.java b/src/main/java/com/yapp/artie/domain/user/adapter/out/persistence/UserJpaEntity.java index 7592bd1a..6150d85b 100644 --- a/src/main/java/com/yapp/artie/domain/user/adapter/out/persistence/UserJpaEntity.java +++ b/src/main/java/com/yapp/artie/domain/user/adapter/out/persistence/UserJpaEntity.java @@ -1,6 +1,6 @@ package com.yapp.artie.domain.user.adapter.out.persistence; -import com.yapp.artie.global.common.BaseEntity; +import com.yapp.artie.global.common.persistence.BaseEntity; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; diff --git a/src/main/java/com/yapp/artie/domain/user/adapter/out/persistence/UserPersistenceAdapter.java b/src/main/java/com/yapp/artie/domain/user/adapter/out/persistence/UserPersistenceAdapter.java index ffdafc25..f2686971 100644 --- a/src/main/java/com/yapp/artie/domain/user/adapter/out/persistence/UserPersistenceAdapter.java +++ b/src/main/java/com/yapp/artie/domain/user/adapter/out/persistence/UserPersistenceAdapter.java @@ -6,7 +6,7 @@ import com.yapp.artie.domain.user.application.port.out.UpdateUserStatePort; import com.yapp.artie.domain.user.application.service.UserNotFoundException; import com.yapp.artie.domain.user.domain.User; -import com.yapp.artie.global.annotation.PersistenceAdapter; +import com.yapp.artie.global.common.annotation.PersistenceAdapter; import lombok.RequiredArgsConstructor; @PersistenceAdapter diff --git a/src/main/java/com/yapp/artie/domain/user/application/service/GetUserDetailsService.java b/src/main/java/com/yapp/artie/domain/user/application/service/GetUserDetailsService.java index 511f8d11..002aa77e 100644 --- a/src/main/java/com/yapp/artie/domain/user/application/service/GetUserDetailsService.java +++ b/src/main/java/com/yapp/artie/domain/user/application/service/GetUserDetailsService.java @@ -5,7 +5,7 @@ import com.yapp.artie.domain.user.application.port.in.GetUserDetailsQuery; import com.yapp.artie.domain.user.application.port.out.LoadUserPort; import com.yapp.artie.domain.user.domain.User; -import com.yapp.artie.global.annotation.UseCase; +import com.yapp.artie.global.common.annotation.UseCase; import lombok.RequiredArgsConstructor; import org.springframework.security.core.userdetails.UserDetails; import org.springframework.transaction.annotation.Transactional; diff --git a/src/main/java/com/yapp/artie/domain/user/application/service/GetUserService.java b/src/main/java/com/yapp/artie/domain/user/application/service/GetUserService.java index 16d918f8..450939a5 100644 --- a/src/main/java/com/yapp/artie/domain/user/application/service/GetUserService.java +++ b/src/main/java/com/yapp/artie/domain/user/application/service/GetUserService.java @@ -3,7 +3,7 @@ import com.yapp.artie.domain.user.application.port.in.GetUserQuery; import com.yapp.artie.domain.user.application.port.out.LoadUserPort; import com.yapp.artie.domain.user.domain.User; -import com.yapp.artie.global.annotation.UseCase; +import com.yapp.artie.global.common.annotation.UseCase; import lombok.RequiredArgsConstructor; import org.springframework.transaction.annotation.Transactional; diff --git a/src/main/java/com/yapp/artie/domain/user/application/service/GetUserThumbnailService.java b/src/main/java/com/yapp/artie/domain/user/application/service/GetUserThumbnailService.java index 89fce3cd..bf1e2c71 100644 --- a/src/main/java/com/yapp/artie/domain/user/application/service/GetUserThumbnailService.java +++ b/src/main/java/com/yapp/artie/domain/user/application/service/GetUserThumbnailService.java @@ -6,7 +6,7 @@ import com.yapp.artie.domain.user.application.port.in.GetUserThumbnailResponse; import com.yapp.artie.domain.user.application.port.out.LoadUserPort; import com.yapp.artie.domain.user.domain.User; -import com.yapp.artie.global.annotation.UseCase; +import com.yapp.artie.global.common.annotation.UseCase; import lombok.RequiredArgsConstructor; import org.springframework.transaction.annotation.Transactional; diff --git a/src/main/java/com/yapp/artie/domain/user/application/service/RegisterUserService.java b/src/main/java/com/yapp/artie/domain/user/application/service/RegisterUserService.java index 5e795f3a..bc9db3a8 100644 --- a/src/main/java/com/yapp/artie/domain/user/application/service/RegisterUserService.java +++ b/src/main/java/com/yapp/artie/domain/user/application/service/RegisterUserService.java @@ -5,7 +5,7 @@ import com.yapp.artie.domain.user.application.port.out.LoadUserPort; import com.yapp.artie.domain.user.application.port.out.SaveUserPort; import com.yapp.artie.domain.user.domain.User; -import com.yapp.artie.global.annotation.UseCase; +import com.yapp.artie.global.common.annotation.UseCase; import lombok.RequiredArgsConstructor; import org.springframework.transaction.annotation.Transactional; diff --git a/src/main/java/com/yapp/artie/domain/user/application/service/RenameUserService.java b/src/main/java/com/yapp/artie/domain/user/application/service/RenameUserService.java index a4cdbaa3..c097862b 100644 --- a/src/main/java/com/yapp/artie/domain/user/application/service/RenameUserService.java +++ b/src/main/java/com/yapp/artie/domain/user/application/service/RenameUserService.java @@ -4,7 +4,7 @@ import com.yapp.artie.domain.user.application.port.out.LoadUserPort; import com.yapp.artie.domain.user.application.port.out.UpdateUserStatePort; import com.yapp.artie.domain.user.domain.User; -import com.yapp.artie.global.annotation.UseCase; +import com.yapp.artie.global.common.annotation.UseCase; import lombok.RequiredArgsConstructor; import org.springframework.transaction.annotation.Transactional; diff --git a/src/main/java/com/yapp/artie/domain/user/application/service/UserAlreadyExistException.java b/src/main/java/com/yapp/artie/domain/user/application/service/UserAlreadyExistException.java index f778fa6a..df9e1a4b 100644 --- a/src/main/java/com/yapp/artie/domain/user/application/service/UserAlreadyExistException.java +++ b/src/main/java/com/yapp/artie/domain/user/application/service/UserAlreadyExistException.java @@ -1,7 +1,7 @@ package com.yapp.artie.domain.user.application.service; -import com.yapp.artie.global.exception.common.BusinessException; -import com.yapp.artie.global.exception.response.ErrorCode; +import com.yapp.artie.global.common.exception.BusinessException; +import com.yapp.artie.global.common.exception.ErrorCode; public class UserAlreadyExistException extends BusinessException { diff --git a/src/main/java/com/yapp/artie/domain/user/application/service/UserNotFoundException.java b/src/main/java/com/yapp/artie/domain/user/application/service/UserNotFoundException.java index 9e29106d..6cf76ef2 100644 --- a/src/main/java/com/yapp/artie/domain/user/application/service/UserNotFoundException.java +++ b/src/main/java/com/yapp/artie/domain/user/application/service/UserNotFoundException.java @@ -1,8 +1,8 @@ package com.yapp.artie.domain.user.application.service; -import com.yapp.artie.global.exception.common.BusinessException; -import com.yapp.artie.global.exception.response.ErrorCode; +import com.yapp.artie.global.common.exception.BusinessException; +import com.yapp.artie.global.common.exception.ErrorCode; public class UserNotFoundException extends BusinessException { diff --git a/src/main/java/com/yapp/artie/domain/user/application/service/UserWithdrawalService.java b/src/main/java/com/yapp/artie/domain/user/application/service/UserWithdrawalService.java index f33c25f5..ef15242e 100644 --- a/src/main/java/com/yapp/artie/domain/user/application/service/UserWithdrawalService.java +++ b/src/main/java/com/yapp/artie/domain/user/application/service/UserWithdrawalService.java @@ -7,7 +7,7 @@ import com.yapp.artie.domain.user.application.port.out.DeleteUserPort; import com.yapp.artie.domain.user.application.port.out.LoadUserPort; import com.yapp.artie.domain.user.domain.User; -import com.yapp.artie.global.annotation.UseCase; +import com.yapp.artie.global.common.annotation.UseCase; import lombok.RequiredArgsConstructor; import org.springframework.transaction.annotation.Transactional; diff --git a/src/main/java/com/yapp/artie/global/annotation/AuthenticationAdapter.java b/src/main/java/com/yapp/artie/global/common/annotation/AuthenticationAdapter.java similarity index 90% rename from src/main/java/com/yapp/artie/global/annotation/AuthenticationAdapter.java rename to src/main/java/com/yapp/artie/global/common/annotation/AuthenticationAdapter.java index 6a5b9feb..66f2140b 100644 --- a/src/main/java/com/yapp/artie/global/annotation/AuthenticationAdapter.java +++ b/src/main/java/com/yapp/artie/global/common/annotation/AuthenticationAdapter.java @@ -1,4 +1,4 @@ -package com.yapp.artie.global.annotation; +package com.yapp.artie.global.common.annotation; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; diff --git a/src/main/java/com/yapp/artie/global/annotation/PersistenceAdapter.java b/src/main/java/com/yapp/artie/global/common/annotation/PersistenceAdapter.java similarity index 90% rename from src/main/java/com/yapp/artie/global/annotation/PersistenceAdapter.java rename to src/main/java/com/yapp/artie/global/common/annotation/PersistenceAdapter.java index eb272aaf..689fded0 100644 --- a/src/main/java/com/yapp/artie/global/annotation/PersistenceAdapter.java +++ b/src/main/java/com/yapp/artie/global/common/annotation/PersistenceAdapter.java @@ -1,4 +1,4 @@ -package com.yapp.artie.global.annotation; +package com.yapp.artie.global.common.annotation; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; diff --git a/src/main/java/com/yapp/artie/global/annotation/UseCase.java b/src/main/java/com/yapp/artie/global/common/annotation/UseCase.java similarity index 90% rename from src/main/java/com/yapp/artie/global/annotation/UseCase.java rename to src/main/java/com/yapp/artie/global/common/annotation/UseCase.java index 21683550..5c8e5e7e 100644 --- a/src/main/java/com/yapp/artie/global/annotation/UseCase.java +++ b/src/main/java/com/yapp/artie/global/common/annotation/UseCase.java @@ -1,4 +1,4 @@ -package com.yapp.artie.global.annotation; +package com.yapp.artie.global.common.annotation; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; diff --git a/src/main/java/com/yapp/artie/global/annotation/WebAdapter.java b/src/main/java/com/yapp/artie/global/common/annotation/WebAdapter.java similarity index 90% rename from src/main/java/com/yapp/artie/global/annotation/WebAdapter.java rename to src/main/java/com/yapp/artie/global/common/annotation/WebAdapter.java index eb684c61..d4d38c77 100644 --- a/src/main/java/com/yapp/artie/global/annotation/WebAdapter.java +++ b/src/main/java/com/yapp/artie/global/common/annotation/WebAdapter.java @@ -1,4 +1,4 @@ -package com.yapp.artie.global.annotation; +package com.yapp.artie.global.common.annotation; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; diff --git a/src/main/java/com/yapp/artie/global/exception/common/BusinessException.java b/src/main/java/com/yapp/artie/global/common/exception/BusinessException.java similarity index 78% rename from src/main/java/com/yapp/artie/global/exception/common/BusinessException.java rename to src/main/java/com/yapp/artie/global/common/exception/BusinessException.java index 1d673f83..855efdc6 100644 --- a/src/main/java/com/yapp/artie/global/exception/common/BusinessException.java +++ b/src/main/java/com/yapp/artie/global/common/exception/BusinessException.java @@ -1,6 +1,4 @@ -package com.yapp.artie.global.exception.common; - -import com.yapp.artie.global.exception.response.ErrorCode; +package com.yapp.artie.global.common.exception; public class BusinessException extends RuntimeException { diff --git a/src/main/java/com/yapp/artie/global/exception/common/EntityNotFoundException.java b/src/main/java/com/yapp/artie/global/common/exception/EntityNotFoundException.java similarity index 61% rename from src/main/java/com/yapp/artie/global/exception/common/EntityNotFoundException.java rename to src/main/java/com/yapp/artie/global/common/exception/EntityNotFoundException.java index 5123eea8..45e64075 100644 --- a/src/main/java/com/yapp/artie/global/exception/common/EntityNotFoundException.java +++ b/src/main/java/com/yapp/artie/global/common/exception/EntityNotFoundException.java @@ -1,6 +1,4 @@ -package com.yapp.artie.global.exception.common; - -import com.yapp.artie.global.exception.response.ErrorCode; +package com.yapp.artie.global.common.exception; public class EntityNotFoundException extends BusinessException { diff --git a/src/main/java/com/yapp/artie/global/exception/response/ErrorCode.java b/src/main/java/com/yapp/artie/global/common/exception/ErrorCode.java similarity index 98% rename from src/main/java/com/yapp/artie/global/exception/response/ErrorCode.java rename to src/main/java/com/yapp/artie/global/common/exception/ErrorCode.java index b466f4f9..0c798cd3 100644 --- a/src/main/java/com/yapp/artie/global/exception/response/ErrorCode.java +++ b/src/main/java/com/yapp/artie/global/common/exception/ErrorCode.java @@ -1,4 +1,4 @@ -package com.yapp.artie.global.exception.response; +package com.yapp.artie.global.common.exception; import com.fasterxml.jackson.annotation.JsonFormat; import lombok.Getter; diff --git a/src/main/java/com/yapp/artie/global/exception/response/ErrorResponse.java b/src/main/java/com/yapp/artie/global/common/exception/ErrorResponse.java similarity index 98% rename from src/main/java/com/yapp/artie/global/exception/response/ErrorResponse.java rename to src/main/java/com/yapp/artie/global/common/exception/ErrorResponse.java index 25d3ce4f..b0d19b56 100644 --- a/src/main/java/com/yapp/artie/global/exception/response/ErrorResponse.java +++ b/src/main/java/com/yapp/artie/global/common/exception/ErrorResponse.java @@ -1,4 +1,4 @@ -package com.yapp.artie.global.exception.response; +package com.yapp.artie.global.common.exception; import com.fasterxml.jackson.databind.exc.InvalidFormatException; import java.util.ArrayList; diff --git a/src/main/java/com/yapp/artie/global/exception/common/InvalidValueException.java b/src/main/java/com/yapp/artie/global/common/exception/InvalidValueException.java similarity index 69% rename from src/main/java/com/yapp/artie/global/exception/common/InvalidValueException.java rename to src/main/java/com/yapp/artie/global/common/exception/InvalidValueException.java index c495efdb..c839fc84 100644 --- a/src/main/java/com/yapp/artie/global/exception/common/InvalidValueException.java +++ b/src/main/java/com/yapp/artie/global/common/exception/InvalidValueException.java @@ -1,6 +1,4 @@ -package com.yapp.artie.global.exception.common; - -import com.yapp.artie.global.exception.response.ErrorCode; +package com.yapp.artie.global.common.exception; public class InvalidValueException extends BusinessException { diff --git a/src/main/java/com/yapp/artie/global/common/BaseEntity.java b/src/main/java/com/yapp/artie/global/common/persistence/BaseEntity.java similarity index 92% rename from src/main/java/com/yapp/artie/global/common/BaseEntity.java rename to src/main/java/com/yapp/artie/global/common/persistence/BaseEntity.java index a9e8d835..55cda30e 100644 --- a/src/main/java/com/yapp/artie/global/common/BaseEntity.java +++ b/src/main/java/com/yapp/artie/global/common/persistence/BaseEntity.java @@ -1,4 +1,4 @@ -package com.yapp.artie.global.common; +package com.yapp.artie.global.common.persistence; import java.time.LocalDateTime; import javax.persistence.Column; diff --git a/src/main/java/com/yapp/artie/global/filter/GlobalExceptionHandler.java b/src/main/java/com/yapp/artie/global/filter/GlobalExceptionHandler.java index 1910b4ba..08c46dde 100644 --- a/src/main/java/com/yapp/artie/global/filter/GlobalExceptionHandler.java +++ b/src/main/java/com/yapp/artie/global/filter/GlobalExceptionHandler.java @@ -3,9 +3,9 @@ import com.amazonaws.AmazonServiceException; import com.amazonaws.SdkClientException; import com.fasterxml.jackson.databind.exc.InvalidFormatException; -import com.yapp.artie.global.exception.common.BusinessException; -import com.yapp.artie.global.exception.response.ErrorCode; -import com.yapp.artie.global.exception.response.ErrorResponse; +import com.yapp.artie.global.common.exception.BusinessException; +import com.yapp.artie.global.common.exception.ErrorCode; +import com.yapp.artie.global.common.exception.ErrorResponse; import java.nio.file.AccessDeniedException; import lombok.extern.slf4j.Slf4j; import org.springframework.http.HttpStatus; diff --git a/src/main/java/com/yapp/artie/global/filter/JwtExceptionHandler.java b/src/main/java/com/yapp/artie/global/filter/JwtExceptionHandler.java index c5c59775..95781fd7 100644 --- a/src/main/java/com/yapp/artie/global/filter/JwtExceptionHandler.java +++ b/src/main/java/com/yapp/artie/global/filter/JwtExceptionHandler.java @@ -1,8 +1,8 @@ package com.yapp.artie.global.filter; import com.fasterxml.jackson.databind.ObjectMapper; -import com.yapp.artie.global.exception.common.BusinessException; -import com.yapp.artie.global.exception.response.ErrorResponse; +import com.yapp.artie.global.common.exception.BusinessException; +import com.yapp.artie.global.common.exception.ErrorResponse; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.FilterChain; From 12ddb1df866f0bd821ba95efa438db1e1b37dbea Mon Sep 17 00:00:00 2001 From: leesky Date: Mon, 3 Apr 2023 03:22:18 +0900 Subject: [PATCH 097/141] =?UTF-8?q?refactor=20:=20=ED=8C=A8=ED=82=A4?= =?UTF-8?q?=EC=A7=80=20=EA=B0=80=EC=8B=9C=EC=84=B1=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../{exception => }/ExpiredTokenException.java | 4 ++-- .../authentication/FirebaseAuthenticationAdapter.java | 3 +-- .../{exception => }/FirebaseUserNotFoundException.java | 4 ++-- .../adapter/out/authentication/FirebaseUserRemover.java | 4 +--- .../{exception => }/InvalidFirebaseUidException.java | 4 ++-- .../{exception => }/InvalidTokenException.java | 4 ++-- .../user/adapter/out/authentication/JwtDecoder.java | 9 +-------- .../{exception => }/NotExistValidTokenException.java | 4 ++-- .../{exception => }/RevokedTokenException.java | 4 ++-- .../user/adapter/out/authentication/TokenGenerator.java | 2 +- .../FirebaseAuthenticationAdapterTest.java | 1 - .../out/authentication/FirebaseUserRemoverTest.java | 2 -- .../user/adapter/out/authentication/JwtDecoderTest.java | 3 --- 13 files changed, 16 insertions(+), 32 deletions(-) rename src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/{exception => }/ExpiredTokenException.java (61%) rename src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/{exception => }/FirebaseUserNotFoundException.java (60%) rename src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/{exception => }/InvalidFirebaseUidException.java (60%) rename src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/{exception => }/InvalidTokenException.java (60%) rename src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/{exception => }/NotExistValidTokenException.java (60%) rename src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/{exception => }/RevokedTokenException.java (60%) diff --git a/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/exception/ExpiredTokenException.java b/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/ExpiredTokenException.java similarity index 61% rename from src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/exception/ExpiredTokenException.java rename to src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/ExpiredTokenException.java index 7db113f8..3772860c 100644 --- a/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/exception/ExpiredTokenException.java +++ b/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/ExpiredTokenException.java @@ -1,9 +1,9 @@ -package com.yapp.artie.domain.user.adapter.out.authentication.exception; +package com.yapp.artie.domain.user.adapter.out.authentication; import com.yapp.artie.global.common.exception.BusinessException; import com.yapp.artie.global.common.exception.ErrorCode; -public class ExpiredTokenException extends BusinessException { +class ExpiredTokenException extends BusinessException { public ExpiredTokenException() { super(ErrorCode.FIREBASE_ACCESS_TOKEN_EXPIRED); diff --git a/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/FirebaseAuthenticationAdapter.java b/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/FirebaseAuthenticationAdapter.java index 4537ec64..0ce7cf26 100644 --- a/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/FirebaseAuthenticationAdapter.java +++ b/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/FirebaseAuthenticationAdapter.java @@ -1,6 +1,5 @@ package com.yapp.artie.domain.user.adapter.out.authentication; -import com.yapp.artie.domain.user.adapter.out.authentication.exception.NotExistValidTokenException; import com.yapp.artie.domain.user.application.port.out.DeleteExternalUserPort; import com.yapp.artie.domain.user.application.port.out.TokenParsingPort; import com.yapp.artie.domain.user.domain.ArtieToken; @@ -11,7 +10,7 @@ @Slf4j @AuthenticationAdapter @RequiredArgsConstructor -public class FirebaseAuthenticationAdapter implements DeleteExternalUserPort, TokenParsingPort { +class FirebaseAuthenticationAdapter implements DeleteExternalUserPort, TokenParsingPort { private final FirebaseUserRemover firebaseUserRemover; private final JwtDecoder decoder; diff --git a/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/exception/FirebaseUserNotFoundException.java b/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/FirebaseUserNotFoundException.java similarity index 60% rename from src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/exception/FirebaseUserNotFoundException.java rename to src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/FirebaseUserNotFoundException.java index 08fc8761..bc896922 100644 --- a/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/exception/FirebaseUserNotFoundException.java +++ b/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/FirebaseUserNotFoundException.java @@ -1,9 +1,9 @@ -package com.yapp.artie.domain.user.adapter.out.authentication.exception; +package com.yapp.artie.domain.user.adapter.out.authentication; import com.yapp.artie.global.common.exception.BusinessException; import com.yapp.artie.global.common.exception.ErrorCode; -public class FirebaseUserNotFoundException extends BusinessException { +class FirebaseUserNotFoundException extends BusinessException { public FirebaseUserNotFoundException() { super(ErrorCode.FIREBASE_NOT_FOUND_USER); diff --git a/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/FirebaseUserRemover.java b/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/FirebaseUserRemover.java index 1d5728c8..cb76ca43 100644 --- a/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/FirebaseUserRemover.java +++ b/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/FirebaseUserRemover.java @@ -3,8 +3,6 @@ import com.google.firebase.auth.AbstractFirebaseAuth; import com.google.firebase.auth.AuthErrorCode; import com.google.firebase.auth.FirebaseAuthException; -import com.yapp.artie.domain.user.adapter.out.authentication.exception.FirebaseUserNotFoundException; -import com.yapp.artie.domain.user.adapter.out.authentication.exception.InvalidFirebaseUidException; import com.yapp.artie.global.common.exception.BusinessException; import java.util.Objects; import lombok.RequiredArgsConstructor; @@ -12,7 +10,7 @@ @Component @RequiredArgsConstructor -public class FirebaseUserRemover { +class FirebaseUserRemover { private final AbstractFirebaseAuth firebaseAuth; diff --git a/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/exception/InvalidFirebaseUidException.java b/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/InvalidFirebaseUidException.java similarity index 60% rename from src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/exception/InvalidFirebaseUidException.java rename to src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/InvalidFirebaseUidException.java index 89e2c388..2f96a20c 100644 --- a/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/exception/InvalidFirebaseUidException.java +++ b/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/InvalidFirebaseUidException.java @@ -1,9 +1,9 @@ -package com.yapp.artie.domain.user.adapter.out.authentication.exception; +package com.yapp.artie.domain.user.adapter.out.authentication; import com.yapp.artie.global.common.exception.BusinessException; import com.yapp.artie.global.common.exception.ErrorCode; -public class InvalidFirebaseUidException extends BusinessException { +class InvalidFirebaseUidException extends BusinessException { public InvalidFirebaseUidException() { super(ErrorCode.FIREBASE_INVALID_UID); diff --git a/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/exception/InvalidTokenException.java b/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/InvalidTokenException.java similarity index 60% rename from src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/exception/InvalidTokenException.java rename to src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/InvalidTokenException.java index c41689ca..750fba20 100644 --- a/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/exception/InvalidTokenException.java +++ b/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/InvalidTokenException.java @@ -1,9 +1,9 @@ -package com.yapp.artie.domain.user.adapter.out.authentication.exception; +package com.yapp.artie.domain.user.adapter.out.authentication; import com.yapp.artie.global.common.exception.BusinessException; import com.yapp.artie.global.common.exception.ErrorCode; -public class InvalidTokenException extends BusinessException { +class InvalidTokenException extends BusinessException { public InvalidTokenException() { super(ErrorCode.FIREBASE_INVALID_TOKEN); diff --git a/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/JwtDecoder.java b/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/JwtDecoder.java index 8e61dcac..fd4c74d6 100644 --- a/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/JwtDecoder.java +++ b/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/JwtDecoder.java @@ -3,17 +3,13 @@ import com.google.firebase.auth.AbstractFirebaseAuth; import com.google.firebase.auth.FirebaseAuthException; import com.google.firebase.auth.FirebaseToken; -import com.yapp.artie.domain.user.adapter.out.authentication.exception.ExpiredTokenException; -import com.yapp.artie.domain.user.adapter.out.authentication.exception.InvalidTokenException; -import com.yapp.artie.domain.user.adapter.out.authentication.exception.NotExistValidTokenException; -import com.yapp.artie.domain.user.adapter.out.authentication.exception.RevokedTokenException; import com.yapp.artie.global.common.exception.BusinessException; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Component; @Component @RequiredArgsConstructor -public class JwtDecoder { +class JwtDecoder { private final AbstractFirebaseAuth firebaseAuth; @@ -21,11 +17,8 @@ public FirebaseToken decode(String token) { try { return firebaseAuth.verifyIdToken(token); } catch (IllegalArgumentException e) { - // If the token is null, empty, - // or if the FirebaseApp instance does not have a project ID associated with it. throw new NotExistValidTokenException(); } catch (FirebaseAuthException e) { - // If an error occurs while parsing or validating the token. throw processAuthException(e); } } diff --git a/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/exception/NotExistValidTokenException.java b/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/NotExistValidTokenException.java similarity index 60% rename from src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/exception/NotExistValidTokenException.java rename to src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/NotExistValidTokenException.java index ac50007e..e88fcb96 100644 --- a/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/exception/NotExistValidTokenException.java +++ b/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/NotExistValidTokenException.java @@ -1,9 +1,9 @@ -package com.yapp.artie.domain.user.adapter.out.authentication.exception; +package com.yapp.artie.domain.user.adapter.out.authentication; import com.yapp.artie.global.common.exception.BusinessException; import com.yapp.artie.global.common.exception.ErrorCode; -public class NotExistValidTokenException extends BusinessException { +class NotExistValidTokenException extends BusinessException { public NotExistValidTokenException() { super(ErrorCode.FIREBASE_TOKEN_NOT_EXISTS); diff --git a/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/exception/RevokedTokenException.java b/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/RevokedTokenException.java similarity index 60% rename from src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/exception/RevokedTokenException.java rename to src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/RevokedTokenException.java index 471b7423..df5bc5be 100644 --- a/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/exception/RevokedTokenException.java +++ b/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/RevokedTokenException.java @@ -1,9 +1,9 @@ -package com.yapp.artie.domain.user.adapter.out.authentication.exception; +package com.yapp.artie.domain.user.adapter.out.authentication; import com.yapp.artie.global.common.exception.BusinessException; import com.yapp.artie.global.common.exception.ErrorCode; -public class RevokedTokenException extends BusinessException { +class RevokedTokenException extends BusinessException { public RevokedTokenException() { super(ErrorCode.FIREBASE_REVOKED_TOKEN); diff --git a/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/TokenGenerator.java b/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/TokenGenerator.java index bb36aea4..31ecf7c1 100644 --- a/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/TokenGenerator.java +++ b/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/TokenGenerator.java @@ -5,7 +5,7 @@ import org.springframework.stereotype.Component; @Component -public class TokenGenerator { +class TokenGenerator { ArtieToken generateDomainToken(FirebaseToken firebaseToken) { return new ArtieToken(firebaseToken.getUid(), firebaseToken.getName(), diff --git a/src/test/java/com/yapp/artie/domain/user/adapter/out/authentication/FirebaseAuthenticationAdapterTest.java b/src/test/java/com/yapp/artie/domain/user/adapter/out/authentication/FirebaseAuthenticationAdapterTest.java index 5a61b5ee..a6b8ff7a 100644 --- a/src/test/java/com/yapp/artie/domain/user/adapter/out/authentication/FirebaseAuthenticationAdapterTest.java +++ b/src/test/java/com/yapp/artie/domain/user/adapter/out/authentication/FirebaseAuthenticationAdapterTest.java @@ -8,7 +8,6 @@ import static org.mockito.BDDMockito.given; import static org.mockito.BDDMockito.then; -import com.yapp.artie.domain.user.adapter.out.authentication.exception.NotExistValidTokenException; import com.yapp.artie.domain.user.domain.ArtieToken; import com.yapp.artie.domain.user.domain.User; import org.junit.jupiter.api.Test; diff --git a/src/test/java/com/yapp/artie/domain/user/adapter/out/authentication/FirebaseUserRemoverTest.java b/src/test/java/com/yapp/artie/domain/user/adapter/out/authentication/FirebaseUserRemoverTest.java index 9adb1a7f..54bd9788 100644 --- a/src/test/java/com/yapp/artie/domain/user/adapter/out/authentication/FirebaseUserRemoverTest.java +++ b/src/test/java/com/yapp/artie/domain/user/adapter/out/authentication/FirebaseUserRemoverTest.java @@ -11,8 +11,6 @@ import com.google.firebase.auth.AbstractFirebaseAuth; import com.google.firebase.auth.AuthErrorCode; import com.google.firebase.auth.FirebaseAuthException; -import com.yapp.artie.domain.user.adapter.out.authentication.exception.FirebaseUserNotFoundException; -import com.yapp.artie.domain.user.adapter.out.authentication.exception.InvalidFirebaseUidException; import org.junit.jupiter.api.Test; import org.mockito.Mockito; diff --git a/src/test/java/com/yapp/artie/domain/user/adapter/out/authentication/JwtDecoderTest.java b/src/test/java/com/yapp/artie/domain/user/adapter/out/authentication/JwtDecoderTest.java index 86389748..b62c4b76 100644 --- a/src/test/java/com/yapp/artie/domain/user/adapter/out/authentication/JwtDecoderTest.java +++ b/src/test/java/com/yapp/artie/domain/user/adapter/out/authentication/JwtDecoderTest.java @@ -11,9 +11,6 @@ import com.google.firebase.auth.AbstractFirebaseAuth; import com.google.firebase.auth.AuthErrorCode; import com.google.firebase.auth.FirebaseAuthException; -import com.yapp.artie.domain.user.adapter.out.authentication.exception.ExpiredTokenException; -import com.yapp.artie.domain.user.adapter.out.authentication.exception.NotExistValidTokenException; -import com.yapp.artie.domain.user.adapter.out.authentication.exception.RevokedTokenException; import org.junit.jupiter.api.Test; import org.mockito.Mockito; From 1225e908156c420f1a4118233eedda6dfce4d3ab Mon Sep 17 00:00:00 2001 From: leesky Date: Mon, 3 Apr 2023 03:26:38 +0900 Subject: [PATCH 098/141] =?UTF-8?q?test=20:=20=ED=86=A0=ED=81=B0=20?= =?UTF-8?q?=ED=83=80=EC=9E=85=20=EC=A0=9C=EA=B1=B0=20=EB=A1=9C=EC=A7=81=20?= =?UTF-8?q?=EA=B2=80=EC=A6=9D=20=EB=8B=A8=EC=9C=84=20=ED=85=8C=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../FirebaseAuthenticationAdapterTest.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/test/java/com/yapp/artie/domain/user/adapter/out/authentication/FirebaseAuthenticationAdapterTest.java b/src/test/java/com/yapp/artie/domain/user/adapter/out/authentication/FirebaseAuthenticationAdapterTest.java index a6b8ff7a..442a83ae 100644 --- a/src/test/java/com/yapp/artie/domain/user/adapter/out/authentication/FirebaseAuthenticationAdapterTest.java +++ b/src/test/java/com/yapp/artie/domain/user/adapter/out/authentication/FirebaseAuthenticationAdapterTest.java @@ -61,6 +61,15 @@ class FirebaseAuthenticationAdapterTest { assertThat(actual.getPicture()).isEqualTo("sample.com"); } + @Test + public void parseToken_토큰이_들어오면_토큰의_타입을_제거해서_decoder에게_전달한다() throws Exception { + String header = "Bearer tomcat"; + adapterUnderTest.parseToken(header); + then(jwtDecoder) + .should() + .decode(eq("tomcat")); + } + @Test public void delete_Remover에게_삭제_요청을_한다() { adapterUnderTest.delete("uid"); From 1bf08e0c52091c721d385b47b6dc7e8564edd9e4 Mon Sep 17 00:00:00 2001 From: leesky Date: Mon, 3 Apr 2023 03:28:54 +0900 Subject: [PATCH 099/141] =?UTF-8?q?refactor=20:=20web=20=EC=96=B4=EB=8C=91?= =?UTF-8?q?=ED=84=B0=20=EA=B0=80=EC=8B=9C=EC=84=B1=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../artie/domain/user/adapter/in/web/GetUserController.java | 2 +- .../domain/user/adapter/in/web/GetUserThumbnailController.java | 2 +- .../domain/user/adapter/in/web/RegisterUserController.java | 2 +- .../artie/domain/user/adapter/in/web/RenameUserController.java | 2 +- .../domain/user/adapter/in/web/UserWithdrawalController.java | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/yapp/artie/domain/user/adapter/in/web/GetUserController.java b/src/main/java/com/yapp/artie/domain/user/adapter/in/web/GetUserController.java index d80490e4..b5ccc51e 100644 --- a/src/main/java/com/yapp/artie/domain/user/adapter/in/web/GetUserController.java +++ b/src/main/java/com/yapp/artie/domain/user/adapter/in/web/GetUserController.java @@ -20,7 +20,7 @@ @RestController @RequestMapping("/user") @RequiredArgsConstructor -public class GetUserController { +class GetUserController { private final GetUserQuery getUserQuery; diff --git a/src/main/java/com/yapp/artie/domain/user/adapter/in/web/GetUserThumbnailController.java b/src/main/java/com/yapp/artie/domain/user/adapter/in/web/GetUserThumbnailController.java index 4645c13a..5eabf276 100644 --- a/src/main/java/com/yapp/artie/domain/user/adapter/in/web/GetUserThumbnailController.java +++ b/src/main/java/com/yapp/artie/domain/user/adapter/in/web/GetUserThumbnailController.java @@ -21,7 +21,7 @@ @RestController @RequestMapping("/user") @RequiredArgsConstructor -public class GetUserThumbnailController { +class GetUserThumbnailController { private final GetUserThumbnailQuery getUserThumbnailQuery; diff --git a/src/main/java/com/yapp/artie/domain/user/adapter/in/web/RegisterUserController.java b/src/main/java/com/yapp/artie/domain/user/adapter/in/web/RegisterUserController.java index 2caa5505..c742dee7 100644 --- a/src/main/java/com/yapp/artie/domain/user/adapter/in/web/RegisterUserController.java +++ b/src/main/java/com/yapp/artie/domain/user/adapter/in/web/RegisterUserController.java @@ -25,7 +25,7 @@ @RestController @RequestMapping("/user") @RequiredArgsConstructor -public class RegisterUserController { +class RegisterUserController { private final TokenParsingPort tokenParsingPort; private final RegisterUserUseCase registerUserUseCase; diff --git a/src/main/java/com/yapp/artie/domain/user/adapter/in/web/RenameUserController.java b/src/main/java/com/yapp/artie/domain/user/adapter/in/web/RenameUserController.java index 1494f795..81460908 100644 --- a/src/main/java/com/yapp/artie/domain/user/adapter/in/web/RenameUserController.java +++ b/src/main/java/com/yapp/artie/domain/user/adapter/in/web/RenameUserController.java @@ -26,7 +26,7 @@ @RestController @RequestMapping("/user") @RequiredArgsConstructor -public class RenameUserController { +class RenameUserController { private final RenameUserUseCase renameUserUseCase; diff --git a/src/main/java/com/yapp/artie/domain/user/adapter/in/web/UserWithdrawalController.java b/src/main/java/com/yapp/artie/domain/user/adapter/in/web/UserWithdrawalController.java index d670e19d..29df60c1 100644 --- a/src/main/java/com/yapp/artie/domain/user/adapter/in/web/UserWithdrawalController.java +++ b/src/main/java/com/yapp/artie/domain/user/adapter/in/web/UserWithdrawalController.java @@ -20,7 +20,7 @@ @RestController @RequestMapping("/user") @RequiredArgsConstructor -public class UserWithdrawalController { +class UserWithdrawalController { private final UserWithdrawalUseCase userWithdrawalUseCase; From 83279cda21ba1173a33d50d62bf02349937ab35c Mon Sep 17 00:00:00 2001 From: leesky Date: Mon, 3 Apr 2023 03:29:52 +0900 Subject: [PATCH 100/141] =?UTF-8?q?refactor=20:=20UserMapper=20=EA=B0=80?= =?UTF-8?q?=EC=8B=9C=EC=84=B1=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../artie/domain/user/adapter/out/persistence/UserMapper.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/yapp/artie/domain/user/adapter/out/persistence/UserMapper.java b/src/main/java/com/yapp/artie/domain/user/adapter/out/persistence/UserMapper.java index 76c69a0e..ac61668f 100644 --- a/src/main/java/com/yapp/artie/domain/user/adapter/out/persistence/UserMapper.java +++ b/src/main/java/com/yapp/artie/domain/user/adapter/out/persistence/UserMapper.java @@ -4,7 +4,7 @@ import org.springframework.stereotype.Component; @Component -public class UserMapper { +class UserMapper { User mapToDomainEntity(UserJpaEntity user) { return User.withId(user.getId(), From 3bf8323eeb4b994bbaf83d5b0e9fceb13d5a50c8 Mon Sep 17 00:00:00 2001 From: leesky Date: Mon, 3 Apr 2023 03:31:16 +0900 Subject: [PATCH 101/141] =?UTF-8?q?refactor=20:=20usecase=20=EA=B0=80?= =?UTF-8?q?=EC=8B=9C=EC=84=B1=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/user/application/service/GetUserDetailsService.java | 2 +- .../artie/domain/user/application/service/GetUserService.java | 2 +- .../user/application/service/GetUserThumbnailService.java | 2 +- .../domain/user/application/service/RegisterUserService.java | 2 +- .../domain/user/application/service/RenameUserService.java | 2 +- .../domain/user/application/service/UserWithdrawalService.java | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/yapp/artie/domain/user/application/service/GetUserDetailsService.java b/src/main/java/com/yapp/artie/domain/user/application/service/GetUserDetailsService.java index 002aa77e..46083596 100644 --- a/src/main/java/com/yapp/artie/domain/user/application/service/GetUserDetailsService.java +++ b/src/main/java/com/yapp/artie/domain/user/application/service/GetUserDetailsService.java @@ -13,7 +13,7 @@ @UseCase @Transactional(readOnly = true) @RequiredArgsConstructor -public class GetUserDetailsService implements GetUserDetailsQuery { +class GetUserDetailsService implements GetUserDetailsQuery { private final LoadUserPort loadUserPort; diff --git a/src/main/java/com/yapp/artie/domain/user/application/service/GetUserService.java b/src/main/java/com/yapp/artie/domain/user/application/service/GetUserService.java index 450939a5..85b6b3c5 100644 --- a/src/main/java/com/yapp/artie/domain/user/application/service/GetUserService.java +++ b/src/main/java/com/yapp/artie/domain/user/application/service/GetUserService.java @@ -10,7 +10,7 @@ @UseCase @Transactional(readOnly = true) @RequiredArgsConstructor -public class GetUserService implements GetUserQuery { +class GetUserService implements GetUserQuery { private final LoadUserPort loadUserPort; diff --git a/src/main/java/com/yapp/artie/domain/user/application/service/GetUserThumbnailService.java b/src/main/java/com/yapp/artie/domain/user/application/service/GetUserThumbnailService.java index bf1e2c71..6f78fea6 100644 --- a/src/main/java/com/yapp/artie/domain/user/application/service/GetUserThumbnailService.java +++ b/src/main/java/com/yapp/artie/domain/user/application/service/GetUserThumbnailService.java @@ -13,7 +13,7 @@ @UseCase @Transactional(readOnly = true) @RequiredArgsConstructor -public class GetUserThumbnailService implements GetUserThumbnailQuery { +class GetUserThumbnailService implements GetUserThumbnailQuery { private final LoadUserPort loadUserPort; private final ExhibitService exhibitService; diff --git a/src/main/java/com/yapp/artie/domain/user/application/service/RegisterUserService.java b/src/main/java/com/yapp/artie/domain/user/application/service/RegisterUserService.java index bc9db3a8..d04d6935 100644 --- a/src/main/java/com/yapp/artie/domain/user/application/service/RegisterUserService.java +++ b/src/main/java/com/yapp/artie/domain/user/application/service/RegisterUserService.java @@ -12,7 +12,7 @@ @UseCase @Transactional @RequiredArgsConstructor -public class RegisterUserService implements RegisterUserUseCase { +class RegisterUserService implements RegisterUserUseCase { private final LoadUserPort loadUserPort; private final SaveUserPort saveUserPort; diff --git a/src/main/java/com/yapp/artie/domain/user/application/service/RenameUserService.java b/src/main/java/com/yapp/artie/domain/user/application/service/RenameUserService.java index c097862b..d2e253a3 100644 --- a/src/main/java/com/yapp/artie/domain/user/application/service/RenameUserService.java +++ b/src/main/java/com/yapp/artie/domain/user/application/service/RenameUserService.java @@ -11,7 +11,7 @@ @UseCase @Transactional @RequiredArgsConstructor -public class RenameUserService implements RenameUserUseCase { +class RenameUserService implements RenameUserUseCase { private final LoadUserPort loadUserPort; private final UpdateUserStatePort updateUserStatePort; diff --git a/src/main/java/com/yapp/artie/domain/user/application/service/UserWithdrawalService.java b/src/main/java/com/yapp/artie/domain/user/application/service/UserWithdrawalService.java index ef15242e..3fd423c5 100644 --- a/src/main/java/com/yapp/artie/domain/user/application/service/UserWithdrawalService.java +++ b/src/main/java/com/yapp/artie/domain/user/application/service/UserWithdrawalService.java @@ -14,7 +14,7 @@ @UseCase @Transactional @RequiredArgsConstructor -public class UserWithdrawalService implements UserWithdrawalUseCase { +class UserWithdrawalService implements UserWithdrawalUseCase { private final DeleteExternalUserPort deleteExternalUserPort; private final CategoryRepository categoryRepository; From e713c4cb6f8abe4ab85f401fb17279cde618315c Mon Sep 17 00:00:00 2001 From: leesky Date: Mon, 3 Apr 2023 03:34:14 +0900 Subject: [PATCH 102/141] =?UTF-8?q?refactor=20:=20userTest=EC=9D=98=20?= =?UTF-8?q?=ED=85=8C=EC=8A=A4=ED=8A=B8=EC=9A=A9=20=EB=8D=B0=EC=9D=B4?= =?UTF-8?q?=ED=84=B0=EB=A5=BC=20=EC=9C=A0=EC=9D=BC=ED=95=98=EA=B2=8C=20?= =?UTF-8?q?=EC=82=AC=EC=9A=A9=ED=95=98=EB=8A=94=20=ED=81=B4=EB=9E=98?= =?UTF-8?q?=EC=8A=A4=EB=A1=9C=20=EC=9D=B4=EB=8F=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/archive/repository/CategoryRepositoryTest.java | 7 +++++-- .../java/com/yapp/artie/domain/user/domain/UserTest.java | 7 +------ 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/src/test/java/com/yapp/artie/domain/archive/repository/CategoryRepositoryTest.java b/src/test/java/com/yapp/artie/domain/archive/repository/CategoryRepositoryTest.java index 12e89ec9..9aacff4a 100644 --- a/src/test/java/com/yapp/artie/domain/archive/repository/CategoryRepositoryTest.java +++ b/src/test/java/com/yapp/artie/domain/archive/repository/CategoryRepositoryTest.java @@ -8,7 +8,6 @@ import com.yapp.artie.domain.archive.domain.tag.Tag; import com.yapp.artie.domain.user.adapter.out.persistence.UserJpaEntity; import com.yapp.artie.domain.user.adapter.out.persistence.UserRepository; -import com.yapp.artie.domain.user.domain.UserTest; import java.time.LocalDate; import javax.persistence.EntityManager; import org.junit.jupiter.api.DisplayName; @@ -22,6 +21,10 @@ @AutoConfigureTestDatabase(replace = Replace.NONE) public class CategoryRepositoryTest { + public static final UserJpaEntity TEST_SAVED_USER = UserJpaEntity.create(1L, "test-uid", + "test-name", + "test-profile"); + @Autowired EntityManager em; @@ -43,7 +46,7 @@ public class CategoryRepositoryTest { @Test @DisplayName("유저 기반 카테고리 삭제 - 카테고리가 삭제되면 해당하는 전시, 작품, 태그도 삭제되어야합니다") void deleteAllByUser() { - UserJpaEntity user = userRepository.save(UserTest.TEST_SAVED_USER); + UserJpaEntity user = userRepository.save(TEST_SAVED_USER); Category category = categoryRepository.save(Category.create(user, "category-name", 1)); Exhibit exhibit = exhibitRepository.save( Exhibit.create("exhibit-name", LocalDate.now(), category, user, "exhibit-link")); diff --git a/src/test/java/com/yapp/artie/domain/user/domain/UserTest.java b/src/test/java/com/yapp/artie/domain/user/domain/UserTest.java index 8e7b2347..09355e1c 100644 --- a/src/test/java/com/yapp/artie/domain/user/domain/UserTest.java +++ b/src/test/java/com/yapp/artie/domain/user/domain/UserTest.java @@ -3,14 +3,9 @@ import static com.yapp.artie.common.UserTestData.defaultUser; import static org.assertj.core.api.Assertions.assertThat; -import com.yapp.artie.domain.user.adapter.out.persistence.UserJpaEntity; import org.junit.jupiter.api.Test; -public class UserTest { - - public static final UserJpaEntity TEST_SAVED_USER = UserJpaEntity.create(1L, "test-uid", - "test-name", - "test-profile"); +class UserTest { @Test void rename_사용자_이름을_변경한다() { From 28f9f67253f091516ce92c0289ddff1687046a9b Mon Sep 17 00:00:00 2001 From: leesky Date: Tue, 4 Apr 2023 02:21:04 +0900 Subject: [PATCH 103/141] =?UTF-8?q?fix=20:=20final=20=ED=82=A4=EC=9B=8C?= =?UTF-8?q?=EB=93=9C=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/user/application/service/RegisterUserService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/yapp/artie/domain/user/application/service/RegisterUserService.java b/src/main/java/com/yapp/artie/domain/user/application/service/RegisterUserService.java index d04d6935..5bafaa08 100644 --- a/src/main/java/com/yapp/artie/domain/user/application/service/RegisterUserService.java +++ b/src/main/java/com/yapp/artie/domain/user/application/service/RegisterUserService.java @@ -18,7 +18,7 @@ class RegisterUserService implements RegisterUserUseCase { private final SaveUserPort saveUserPort; @Override - public RegisterUserResponse register(final String uid, final String username, + public RegisterUserResponse register(String uid, String username, final String picture) { try { return new RegisterUserResponse(getIdIfExists(uid)); From 379c1d1d0ce90ca9f718683391faf5c87c60306b Mon Sep 17 00:00:00 2001 From: akalswl14 Date: Mon, 17 Apr 2023 12:07:50 +0900 Subject: [PATCH 104/141] =?UTF-8?q?fix=20:=20userId=EC=97=90=20=EB=94=B0?= =?UTF-8?q?=EB=9D=BC=20s3=EC=9D=B4=EB=AF=B8=EC=A7=80=20=EC=A0=80=EC=9E=A5?= =?UTF-8?q?=20=EA=B2=BD=EB=A1=9C=20=EC=84=A4=EC=A0=95=EB=90=98=EB=8F=84?= =?UTF-8?q?=EB=A1=9D=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/yapp/artie/domain/s3/controller/S3Controller.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/java/com/yapp/artie/domain/s3/controller/S3Controller.java b/src/main/java/com/yapp/artie/domain/s3/controller/S3Controller.java index bb09e98d..cc537522 100644 --- a/src/main/java/com/yapp/artie/domain/s3/controller/S3Controller.java +++ b/src/main/java/com/yapp/artie/domain/s3/controller/S3Controller.java @@ -60,8 +60,7 @@ public ResponseEntity generateArtworkPresignedUrl( Authentication authentication, @RequestBody @Valid GetPresignedUrlRequestDto getPresignedUrlRequestDto, @Parameter(name = "id", description = "전시 ID", in = ParameterIn.QUERY) @Valid @RequestParam(required = true, value = "id") Long postId) { - // Long userId = Long.parseLong(authentication.getName()); - Long userId = 1L; + Long userId = Long.parseLong(authentication.getName()); userService.findById(userId); AtomicInteger index = new AtomicInteger(1); From be0960e490e4109e3ee9704f2e8184e8d4b55db0 Mon Sep 17 00:00:00 2001 From: leesky Date: Wed, 19 Apr 2023 04:03:36 +0900 Subject: [PATCH 105/141] =?UTF-8?q?refactor=20:=20userNotFoundException=20?= =?UTF-8?q?=ED=8C=A8=ED=82=A4=EC=A7=80=20=EC=9C=84=EC=B9=98=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../user/adapter/out/persistence/UserPersistenceAdapter.java | 2 +- .../domain/user/application/service/RegisterUserService.java | 1 + .../{application/service => domain}/UserNotFoundException.java | 2 +- .../com/yapp/artie/global/deprecated/UserJpaEntityLoader.java | 2 +- .../adapter/out/persistence/UserPersistenceAdapterTest.java | 2 +- .../domain/user/application/service/GetUserServiceTest.java | 1 + .../user/application/service/GetUserThumbnailServiceTest.java | 1 + .../user/application/service/RegisterUserServiceTest.java | 1 + .../domain/user/application/service/RenameUserServiceTest.java | 1 + .../user/application/service/UserWithdrawalServiceTest.java | 1 + 10 files changed, 10 insertions(+), 4 deletions(-) rename src/main/java/com/yapp/artie/domain/user/{application/service => domain}/UserNotFoundException.java (82%) diff --git a/src/main/java/com/yapp/artie/domain/user/adapter/out/persistence/UserPersistenceAdapter.java b/src/main/java/com/yapp/artie/domain/user/adapter/out/persistence/UserPersistenceAdapter.java index f2686971..7f53aed6 100644 --- a/src/main/java/com/yapp/artie/domain/user/adapter/out/persistence/UserPersistenceAdapter.java +++ b/src/main/java/com/yapp/artie/domain/user/adapter/out/persistence/UserPersistenceAdapter.java @@ -4,8 +4,8 @@ import com.yapp.artie.domain.user.application.port.out.LoadUserPort; import com.yapp.artie.domain.user.application.port.out.SaveUserPort; import com.yapp.artie.domain.user.application.port.out.UpdateUserStatePort; -import com.yapp.artie.domain.user.application.service.UserNotFoundException; import com.yapp.artie.domain.user.domain.User; +import com.yapp.artie.domain.user.domain.UserNotFoundException; import com.yapp.artie.global.common.annotation.PersistenceAdapter; import lombok.RequiredArgsConstructor; diff --git a/src/main/java/com/yapp/artie/domain/user/application/service/RegisterUserService.java b/src/main/java/com/yapp/artie/domain/user/application/service/RegisterUserService.java index 5bafaa08..013809b2 100644 --- a/src/main/java/com/yapp/artie/domain/user/application/service/RegisterUserService.java +++ b/src/main/java/com/yapp/artie/domain/user/application/service/RegisterUserService.java @@ -5,6 +5,7 @@ import com.yapp.artie.domain.user.application.port.out.LoadUserPort; import com.yapp.artie.domain.user.application.port.out.SaveUserPort; import com.yapp.artie.domain.user.domain.User; +import com.yapp.artie.domain.user.domain.UserNotFoundException; import com.yapp.artie.global.common.annotation.UseCase; import lombok.RequiredArgsConstructor; import org.springframework.transaction.annotation.Transactional; diff --git a/src/main/java/com/yapp/artie/domain/user/application/service/UserNotFoundException.java b/src/main/java/com/yapp/artie/domain/user/domain/UserNotFoundException.java similarity index 82% rename from src/main/java/com/yapp/artie/domain/user/application/service/UserNotFoundException.java rename to src/main/java/com/yapp/artie/domain/user/domain/UserNotFoundException.java index 6cf76ef2..7175e7d3 100644 --- a/src/main/java/com/yapp/artie/domain/user/application/service/UserNotFoundException.java +++ b/src/main/java/com/yapp/artie/domain/user/domain/UserNotFoundException.java @@ -1,4 +1,4 @@ -package com.yapp.artie.domain.user.application.service; +package com.yapp.artie.domain.user.domain; import com.yapp.artie.global.common.exception.BusinessException; diff --git a/src/main/java/com/yapp/artie/global/deprecated/UserJpaEntityLoader.java b/src/main/java/com/yapp/artie/global/deprecated/UserJpaEntityLoader.java index 6c1d5ce2..be285ec1 100644 --- a/src/main/java/com/yapp/artie/global/deprecated/UserJpaEntityLoader.java +++ b/src/main/java/com/yapp/artie/global/deprecated/UserJpaEntityLoader.java @@ -1,7 +1,7 @@ package com.yapp.artie.global.deprecated; import com.yapp.artie.domain.user.adapter.out.persistence.UserJpaEntity; -import com.yapp.artie.domain.user.application.service.UserNotFoundException; +import com.yapp.artie.domain.user.domain.UserNotFoundException; import java.util.Optional; import javax.persistence.EntityManager; import lombok.RequiredArgsConstructor; diff --git a/src/test/java/com/yapp/artie/domain/user/adapter/out/persistence/UserPersistenceAdapterTest.java b/src/test/java/com/yapp/artie/domain/user/adapter/out/persistence/UserPersistenceAdapterTest.java index 6b3c76af..b15486bc 100644 --- a/src/test/java/com/yapp/artie/domain/user/adapter/out/persistence/UserPersistenceAdapterTest.java +++ b/src/test/java/com/yapp/artie/domain/user/adapter/out/persistence/UserPersistenceAdapterTest.java @@ -4,7 +4,7 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; -import com.yapp.artie.domain.user.application.service.UserNotFoundException; +import com.yapp.artie.domain.user.domain.UserNotFoundException; import com.yapp.artie.domain.user.domain.User; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; diff --git a/src/test/java/com/yapp/artie/domain/user/application/service/GetUserServiceTest.java b/src/test/java/com/yapp/artie/domain/user/application/service/GetUserServiceTest.java index c62c18da..e9d1806f 100644 --- a/src/test/java/com/yapp/artie/domain/user/application/service/GetUserServiceTest.java +++ b/src/test/java/com/yapp/artie/domain/user/application/service/GetUserServiceTest.java @@ -8,6 +8,7 @@ import com.yapp.artie.domain.user.application.port.out.LoadUserPort; import com.yapp.artie.domain.user.domain.User; +import com.yapp.artie.domain.user.domain.UserNotFoundException; import org.junit.jupiter.api.Test; import org.mockito.Mockito; diff --git a/src/test/java/com/yapp/artie/domain/user/application/service/GetUserThumbnailServiceTest.java b/src/test/java/com/yapp/artie/domain/user/application/service/GetUserThumbnailServiceTest.java index 9abdf2ee..13ce6366 100644 --- a/src/test/java/com/yapp/artie/domain/user/application/service/GetUserThumbnailServiceTest.java +++ b/src/test/java/com/yapp/artie/domain/user/application/service/GetUserThumbnailServiceTest.java @@ -10,6 +10,7 @@ import com.yapp.artie.domain.user.application.port.in.GetUserThumbnailResponse; import com.yapp.artie.domain.user.application.port.out.LoadUserPort; import com.yapp.artie.domain.user.domain.User; +import com.yapp.artie.domain.user.domain.UserNotFoundException; import org.junit.jupiter.api.Test; import org.mockito.Mockito; diff --git a/src/test/java/com/yapp/artie/domain/user/application/service/RegisterUserServiceTest.java b/src/test/java/com/yapp/artie/domain/user/application/service/RegisterUserServiceTest.java index df7d2411..9fdbd01c 100644 --- a/src/test/java/com/yapp/artie/domain/user/application/service/RegisterUserServiceTest.java +++ b/src/test/java/com/yapp/artie/domain/user/application/service/RegisterUserServiceTest.java @@ -10,6 +10,7 @@ import com.yapp.artie.domain.user.application.port.in.RegisterUserResponse; import com.yapp.artie.domain.user.application.port.out.LoadUserPort; import com.yapp.artie.domain.user.application.port.out.SaveUserPort; +import com.yapp.artie.domain.user.domain.UserNotFoundException; import org.junit.jupiter.api.Test; import org.mockito.Mockito; diff --git a/src/test/java/com/yapp/artie/domain/user/application/service/RenameUserServiceTest.java b/src/test/java/com/yapp/artie/domain/user/application/service/RenameUserServiceTest.java index 75d68e3a..4d5120cd 100644 --- a/src/test/java/com/yapp/artie/domain/user/application/service/RenameUserServiceTest.java +++ b/src/test/java/com/yapp/artie/domain/user/application/service/RenameUserServiceTest.java @@ -9,6 +9,7 @@ import com.yapp.artie.domain.user.application.port.out.LoadUserPort; import com.yapp.artie.domain.user.application.port.out.UpdateUserStatePort; import com.yapp.artie.domain.user.domain.User; +import com.yapp.artie.domain.user.domain.UserNotFoundException; import org.junit.jupiter.api.Test; import org.mockito.Mockito; diff --git a/src/test/java/com/yapp/artie/domain/user/application/service/UserWithdrawalServiceTest.java b/src/test/java/com/yapp/artie/domain/user/application/service/UserWithdrawalServiceTest.java index 78460da6..f80207b3 100644 --- a/src/test/java/com/yapp/artie/domain/user/application/service/UserWithdrawalServiceTest.java +++ b/src/test/java/com/yapp/artie/domain/user/application/service/UserWithdrawalServiceTest.java @@ -12,6 +12,7 @@ import com.yapp.artie.domain.user.application.port.out.DeleteUserPort; import com.yapp.artie.domain.user.application.port.out.LoadUserPort; import com.yapp.artie.domain.user.domain.User; +import com.yapp.artie.domain.user.domain.UserNotFoundException; import org.junit.jupiter.api.Test; import org.mockito.Mockito; From b005e0f71afc5af2216107e3017238f1be22ab9f Mon Sep 17 00:00:00 2001 From: leesky Date: Wed, 19 Apr 2023 04:06:58 +0900 Subject: [PATCH 106/141] =?UTF-8?q?chore=20:=20=EB=B6=88=ED=95=84=EC=9A=94?= =?UTF-8?q?=ED=95=9C=20println=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../artie/domain/user/adapter/in/web/RenameUserController.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/com/yapp/artie/domain/user/adapter/in/web/RenameUserController.java b/src/main/java/com/yapp/artie/domain/user/adapter/in/web/RenameUserController.java index 81460908..f4335f3a 100644 --- a/src/main/java/com/yapp/artie/domain/user/adapter/in/web/RenameUserController.java +++ b/src/main/java/com/yapp/artie/domain/user/adapter/in/web/RenameUserController.java @@ -53,7 +53,6 @@ class RenameUserController { public ResponseEntity rename(Authentication authentication, @Parameter(name = "name", description = "변경할 닉네임", in = ParameterIn.QUERY) @Valid @RequestParam("name") String name) { - System.out.println(authentication); Long userId = getUserId(authentication); renameUserUseCase.rename(userId, name); return ResponseEntity.noContent().build(); From 7e7822f452356f74abefc019bc14f0c26182a95a Mon Sep 17 00:00:00 2001 From: leesky Date: Wed, 19 Apr 2023 04:51:08 +0900 Subject: [PATCH 107/141] =?UTF-8?q?refactor=20:=20given=20=EC=A4=91?= =?UTF-8?q?=EB=B3=B5=20=EC=BD=94=EB=93=9C=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../yapp/artie/common/BaseUserUnitTest.java | 52 +++++++++++++++++++ .../service/GetUserDetailsServiceTest.java | 13 +---- .../service/GetUserServiceTest.java | 18 +------ .../service/GetUserThumbnailServiceTest.java | 15 +----- .../service/RegisterUserServiceTest.java | 30 ++--------- .../service/RenameUserServiceTest.java | 17 +----- .../service/UserWithdrawalServiceTest.java | 22 +------- 7 files changed, 66 insertions(+), 101 deletions(-) create mode 100644 src/test/java/com/yapp/artie/common/BaseUserUnitTest.java diff --git a/src/test/java/com/yapp/artie/common/BaseUserUnitTest.java b/src/test/java/com/yapp/artie/common/BaseUserUnitTest.java new file mode 100644 index 00000000..47c416f5 --- /dev/null +++ b/src/test/java/com/yapp/artie/common/BaseUserUnitTest.java @@ -0,0 +1,52 @@ +package com.yapp.artie.common; + +import static com.yapp.artie.common.UserTestData.defaultUser; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.BDDMockito.given; + +import com.yapp.artie.domain.user.application.port.out.LoadUserPort; +import com.yapp.artie.domain.user.application.port.out.SaveUserPort; +import com.yapp.artie.domain.user.domain.User; +import com.yapp.artie.domain.user.domain.UserNotFoundException; +import org.mockito.Mockito; + +abstract public class BaseUserUnitTest { + + protected final LoadUserPort loadUserPort = Mockito.mock(LoadUserPort.class); + protected final SaveUserPort saveUserPort = Mockito.mock(SaveUserPort.class); + + protected void givenUser() { + given(loadUserPort.loadById(any())) + .willReturn(defaultUser().build()); + } + + protected void givenUserFindWillFail() { + given(loadUserPort.loadById(any())) + .willThrow(UserNotFoundException.class); + } + + protected void givenUserByReference(User user) { + given(loadUserPort.loadById(any())) + .willReturn(user); + } + + protected void givenUserByReferenceWithUid(User user) { + given(loadUserPort.loadByUid(any())) + .willReturn(user); + } + + protected void givenSaveWillReturnId(Long id) { + given(saveUserPort.save(any())) + .willReturn(id); + } + + protected void givenUserFindWithUid() { + given(loadUserPort.loadByUid(any())) + .willReturn(defaultUser().build()); + } + + protected void givenUserFindWithUidWillFail() { + given(loadUserPort.loadByUid(any())) + .willThrow(UserNotFoundException.class); + } +} diff --git a/src/test/java/com/yapp/artie/domain/user/application/service/GetUserDetailsServiceTest.java b/src/test/java/com/yapp/artie/domain/user/application/service/GetUserDetailsServiceTest.java index 739d3403..f266ca23 100644 --- a/src/test/java/com/yapp/artie/domain/user/application/service/GetUserDetailsServiceTest.java +++ b/src/test/java/com/yapp/artie/domain/user/application/service/GetUserDetailsServiceTest.java @@ -2,18 +2,14 @@ import static com.yapp.artie.common.UserTestData.defaultUser; import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.BDDMockito.given; -import com.yapp.artie.domain.user.application.port.out.LoadUserPort; +import com.yapp.artie.common.BaseUserUnitTest; import com.yapp.artie.domain.user.domain.User; import org.junit.jupiter.api.Test; -import org.mockito.Mockito; import org.springframework.security.core.userdetails.UserDetails; -class GetUserDetailsServiceTest { +class GetUserDetailsServiceTest extends BaseUserUnitTest { - private final LoadUserPort loadUserPort = Mockito.mock(LoadUserPort.class); private final GetUserDetailsService getUserDetailsService = new GetUserDetailsService( loadUserPort); @@ -32,9 +28,4 @@ class GetUserDetailsServiceTest { UserDetails actual = getUserDetailsService.loadUserByUsername(user.getUid()); assertThat(actual.getPassword()).isEqualTo(user.getUid()); } - - private void givenUserByReferenceWithUid(User user) { - given(loadUserPort.loadByUid(any())) - .willReturn(user); - } } \ No newline at end of file diff --git a/src/test/java/com/yapp/artie/domain/user/application/service/GetUserServiceTest.java b/src/test/java/com/yapp/artie/domain/user/application/service/GetUserServiceTest.java index e9d1806f..83f78713 100644 --- a/src/test/java/com/yapp/artie/domain/user/application/service/GetUserServiceTest.java +++ b/src/test/java/com/yapp/artie/domain/user/application/service/GetUserServiceTest.java @@ -3,18 +3,14 @@ import static com.yapp.artie.common.UserTestData.defaultUser; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.BDDMockito.given; -import com.yapp.artie.domain.user.application.port.out.LoadUserPort; +import com.yapp.artie.common.BaseUserUnitTest; import com.yapp.artie.domain.user.domain.User; import com.yapp.artie.domain.user.domain.UserNotFoundException; import org.junit.jupiter.api.Test; -import org.mockito.Mockito; -class GetUserServiceTest { +class GetUserServiceTest extends BaseUserUnitTest { - private final LoadUserPort loadUserPort = Mockito.mock(LoadUserPort.class); private final GetUserService getUserService = new GetUserService(loadUserPort); @Test @@ -31,14 +27,4 @@ class GetUserServiceTest { User actual = getUserService.loadUserById(1L); assertThat(actual.getId()).isEqualTo(user.getId()); } - - private void givenUserByReference(User user) { - given(loadUserPort.loadById(any())) - .willReturn(user); - } - - private void givenUserFindWillFail() { - given(loadUserPort.loadById(any())) - .willThrow(UserNotFoundException.class); - } } \ No newline at end of file diff --git a/src/test/java/com/yapp/artie/domain/user/application/service/GetUserThumbnailServiceTest.java b/src/test/java/com/yapp/artie/domain/user/application/service/GetUserThumbnailServiceTest.java index 13ce6366..08684909 100644 --- a/src/test/java/com/yapp/artie/domain/user/application/service/GetUserThumbnailServiceTest.java +++ b/src/test/java/com/yapp/artie/domain/user/application/service/GetUserThumbnailServiceTest.java @@ -6,17 +6,16 @@ import static org.mockito.ArgumentMatchers.any; import static org.mockito.BDDMockito.given; +import com.yapp.artie.common.BaseUserUnitTest; import com.yapp.artie.domain.archive.service.ExhibitService; import com.yapp.artie.domain.user.application.port.in.GetUserThumbnailResponse; -import com.yapp.artie.domain.user.application.port.out.LoadUserPort; import com.yapp.artie.domain.user.domain.User; import com.yapp.artie.domain.user.domain.UserNotFoundException; import org.junit.jupiter.api.Test; import org.mockito.Mockito; -class GetUserThumbnailServiceTest { +class GetUserThumbnailServiceTest extends BaseUserUnitTest { - private final LoadUserPort loadUserPort = Mockito.mock(LoadUserPort.class); private final ExhibitService exhibitService = Mockito.mock(ExhibitService.class); private final GetUserThumbnailService getUserThumbnailService = new GetUserThumbnailService( loadUserPort, exhibitService); @@ -46,14 +45,4 @@ private void givenExhibitCountWillReturnBy(int count) { given(exhibitService.getExhibitCount(any())) .willReturn(count); } - - private void givenUserByReference(User user) { - given(loadUserPort.loadById(any())) - .willReturn(user); - } - - private void givenUserFindWillFail() { - given(loadUserPort.loadById(any())) - .willThrow(UserNotFoundException.class); - } } \ No newline at end of file diff --git a/src/test/java/com/yapp/artie/domain/user/application/service/RegisterUserServiceTest.java b/src/test/java/com/yapp/artie/domain/user/application/service/RegisterUserServiceTest.java index 9fdbd01c..7a03419c 100644 --- a/src/test/java/com/yapp/artie/domain/user/application/service/RegisterUserServiceTest.java +++ b/src/test/java/com/yapp/artie/domain/user/application/service/RegisterUserServiceTest.java @@ -1,36 +1,29 @@ package com.yapp.artie.domain.user.application.service; -import static com.yapp.artie.common.UserTestData.defaultUser; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.ArgumentMatchers.any; -import static org.mockito.BDDMockito.given; import static org.mockito.BDDMockito.then; import static org.mockito.Mockito.never; +import com.yapp.artie.common.BaseUserUnitTest; import com.yapp.artie.domain.user.application.port.in.RegisterUserResponse; -import com.yapp.artie.domain.user.application.port.out.LoadUserPort; -import com.yapp.artie.domain.user.application.port.out.SaveUserPort; -import com.yapp.artie.domain.user.domain.UserNotFoundException; import org.junit.jupiter.api.Test; -import org.mockito.Mockito; -class RegisterUserServiceTest { +class RegisterUserServiceTest extends BaseUserUnitTest { - private final LoadUserPort loadUserPort = Mockito.mock(LoadUserPort.class); - private final SaveUserPort saveUserPort = Mockito.mock(SaveUserPort.class); private final RegisterUserService registerUserService = new RegisterUserService(loadUserPort, saveUserPort); @Test void register_이미_등록된_사용자라면_ID를_그대로_반환한다() { - givenUser(); + givenUserFindWithUid(); RegisterUserResponse actual = registerUserService.register("1", "test", null); assertThat(actual.getId()).isEqualTo(1L); } @Test void register_이미_등록된_사용자라면_저장소에_저장하지_않는다() { - givenUser(); + givenUserFindWithUid(); registerUserService.register("1", "test", null); then(saveUserPort) .should(never()) @@ -48,19 +41,4 @@ class RegisterUserServiceTest { .should() .save(any()); } - - private void givenUser() { - given(loadUserPort.loadByUid(any())) - .willReturn(defaultUser().build()); - } - - private void givenSaveWillReturnId(Long id) { - given(saveUserPort.save(any())) - .willReturn(id); - } - - private void givenUserFindWithUidWillFail() { - given(loadUserPort.loadByUid(any())) - .willThrow(UserNotFoundException.class); - } } \ No newline at end of file diff --git a/src/test/java/com/yapp/artie/domain/user/application/service/RenameUserServiceTest.java b/src/test/java/com/yapp/artie/domain/user/application/service/RenameUserServiceTest.java index 4d5120cd..5ba38da5 100644 --- a/src/test/java/com/yapp/artie/domain/user/application/service/RenameUserServiceTest.java +++ b/src/test/java/com/yapp/artie/domain/user/application/service/RenameUserServiceTest.java @@ -3,20 +3,17 @@ import static com.yapp.artie.common.UserTestData.defaultUser; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.BDDMockito.given; -import com.yapp.artie.domain.user.application.port.out.LoadUserPort; +import com.yapp.artie.common.BaseUserUnitTest; import com.yapp.artie.domain.user.application.port.out.UpdateUserStatePort; import com.yapp.artie.domain.user.domain.User; import com.yapp.artie.domain.user.domain.UserNotFoundException; import org.junit.jupiter.api.Test; import org.mockito.Mockito; -class RenameUserServiceTest { +class RenameUserServiceTest extends BaseUserUnitTest { private final UpdateUserStatePort updateUserStatePort = Mockito.mock(UpdateUserStatePort.class); - private final LoadUserPort loadUserPort = Mockito.mock(LoadUserPort.class); private final RenameUserService renameUserService = new RenameUserService(loadUserPort, updateUserStatePort); @@ -42,14 +39,4 @@ class RenameUserServiceTest { assertThat(user.getName()).isEqualTo(expectedName); assertThat(user.getName()).isNotEqualTo(beforeName); } - - private void givenUserByReference(User user) { - given(loadUserPort.loadById(any())) - .willReturn(user); - } - - private void givenUserFindWillFail() { - given(loadUserPort.loadById(any())) - .willThrow(UserNotFoundException.class); - } } \ No newline at end of file diff --git a/src/test/java/com/yapp/artie/domain/user/application/service/UserWithdrawalServiceTest.java b/src/test/java/com/yapp/artie/domain/user/application/service/UserWithdrawalServiceTest.java index f80207b3..8414c76e 100644 --- a/src/test/java/com/yapp/artie/domain/user/application/service/UserWithdrawalServiceTest.java +++ b/src/test/java/com/yapp/artie/domain/user/application/service/UserWithdrawalServiceTest.java @@ -4,26 +4,23 @@ import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.BDDMockito.given; import static org.mockito.BDDMockito.then; +import com.yapp.artie.common.BaseUserUnitTest; import com.yapp.artie.domain.archive.repository.CategoryRepository; import com.yapp.artie.domain.user.application.port.out.DeleteExternalUserPort; import com.yapp.artie.domain.user.application.port.out.DeleteUserPort; -import com.yapp.artie.domain.user.application.port.out.LoadUserPort; import com.yapp.artie.domain.user.domain.User; import com.yapp.artie.domain.user.domain.UserNotFoundException; import org.junit.jupiter.api.Test; import org.mockito.Mockito; -class UserWithdrawalServiceTest { +class UserWithdrawalServiceTest extends BaseUserUnitTest { private final CategoryRepository categoryRepository = Mockito.mock(CategoryRepository.class); private final DeleteExternalUserPort deleteExternalUserPort = Mockito.mock( DeleteExternalUserPort.class); - private final LoadUserPort loadUserPort = Mockito.mock(LoadUserPort.class); private final DeleteUserPort deleteUserPort = Mockito.mock(DeleteUserPort.class); - private final UserWithdrawalService userWithdrawalService = new UserWithdrawalService( deleteExternalUserPort, categoryRepository, loadUserPort, deleteUserPort); @@ -61,19 +58,4 @@ class UserWithdrawalServiceTest { .should() .delete(eq(user)); } - - private void givenUserByReference(User user) { - given(loadUserPort.loadById(any())) - .willReturn(user); - } - - private void givenUser() { - given(loadUserPort.loadById(any())) - .willReturn(defaultUser().build()); - } - - private void givenUserFindWillFail() { - given(loadUserPort.loadById(any())) - .willThrow(UserNotFoundException.class); - } } \ No newline at end of file From 1bbc640e9eabc60a9cdcfcd1605a5be58adcf7fa Mon Sep 17 00:00:00 2001 From: leesky Date: Wed, 19 Apr 2023 04:59:43 +0900 Subject: [PATCH 108/141] =?UTF-8?q?chore=20:=20import=20=EB=AC=B8=20?= =?UTF-8?q?=EC=B5=9C=EC=A0=81=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../adapter/out/persistence/UserPersistenceAdapterTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/com/yapp/artie/domain/user/adapter/out/persistence/UserPersistenceAdapterTest.java b/src/test/java/com/yapp/artie/domain/user/adapter/out/persistence/UserPersistenceAdapterTest.java index b15486bc..09af96d6 100644 --- a/src/test/java/com/yapp/artie/domain/user/adapter/out/persistence/UserPersistenceAdapterTest.java +++ b/src/test/java/com/yapp/artie/domain/user/adapter/out/persistence/UserPersistenceAdapterTest.java @@ -4,8 +4,8 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; -import com.yapp.artie.domain.user.domain.UserNotFoundException; import com.yapp.artie.domain.user.domain.User; +import com.yapp.artie.domain.user.domain.UserNotFoundException; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabase; From 5197b81df0fd0639c78ca0076c275697c80bf711 Mon Sep 17 00:00:00 2001 From: leesky Date: Wed, 19 Apr 2023 05:00:06 +0900 Subject: [PATCH 109/141] =?UTF-8?q?chore=20:=20final=20=ED=82=A4=EC=9B=8C?= =?UTF-8?q?=EB=93=9C=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/user/application/service/RegisterUserService.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/yapp/artie/domain/user/application/service/RegisterUserService.java b/src/main/java/com/yapp/artie/domain/user/application/service/RegisterUserService.java index 013809b2..1f0a8408 100644 --- a/src/main/java/com/yapp/artie/domain/user/application/service/RegisterUserService.java +++ b/src/main/java/com/yapp/artie/domain/user/application/service/RegisterUserService.java @@ -28,11 +28,11 @@ public RegisterUserResponse register(String uid, String username, } } - private Long saveUser(final User user) { + private Long saveUser(User user) { return saveUserPort.save(user); } - private Long getIdIfExists(final String uid) { + private Long getIdIfExists(String uid) { return loadUserPort.loadByUid(uid).getId(); } } \ No newline at end of file From 8a74d1cf6245aa6cd94e9ca40926338647f42155 Mon Sep 17 00:00:00 2001 From: akalswl14 Date: Wed, 19 Apr 2023 16:57:19 +0900 Subject: [PATCH 110/141] =?UTF-8?q?Revert=20"fix=20:=20userId=EC=97=90=20?= =?UTF-8?q?=EB=94=B0=EB=9D=BC=20s3=EC=9D=B4=EB=AF=B8=EC=A7=80=20=EC=A0=80?= =?UTF-8?q?=EC=9E=A5=20=EA=B2=BD=EB=A1=9C=20=EC=84=A4=EC=A0=95=EB=90=98?= =?UTF-8?q?=EB=8F=84=EB=A1=9D=20=EC=88=98=EC=A0=95"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit 379c1d1d0ce90ca9f718683391faf5c87c60306b. --- .../java/com/yapp/artie/domain/s3/controller/S3Controller.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/yapp/artie/domain/s3/controller/S3Controller.java b/src/main/java/com/yapp/artie/domain/s3/controller/S3Controller.java index cc537522..bb09e98d 100644 --- a/src/main/java/com/yapp/artie/domain/s3/controller/S3Controller.java +++ b/src/main/java/com/yapp/artie/domain/s3/controller/S3Controller.java @@ -60,7 +60,8 @@ public ResponseEntity generateArtworkPresignedUrl( Authentication authentication, @RequestBody @Valid GetPresignedUrlRequestDto getPresignedUrlRequestDto, @Parameter(name = "id", description = "전시 ID", in = ParameterIn.QUERY) @Valid @RequestParam(required = true, value = "id") Long postId) { - Long userId = Long.parseLong(authentication.getName()); + // Long userId = Long.parseLong(authentication.getName()); + Long userId = 1L; userService.findById(userId); AtomicInteger index = new AtomicInteger(1); From 7e7b740b4dcb4b0359aef055f268975064e746c8 Mon Sep 17 00:00:00 2001 From: leesky Date: Wed, 19 Apr 2023 21:03:26 +0900 Subject: [PATCH 111/141] =?UTF-8?q?fix=20:=20=ED=8E=98=EC=9D=B4=EC=A7=80?= =?UTF-8?q?=EB=84=A4=EC=9D=B4=EC=85=98=20=EC=B9=B4=EC=9A=B4=ED=8A=B8=20?= =?UTF-8?q?=EC=BF=BC=EB=A6=AC=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../artie/domain/archive/repository/ExhibitRepository.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/yapp/artie/domain/archive/repository/ExhibitRepository.java b/src/main/java/com/yapp/artie/domain/archive/repository/ExhibitRepository.java index 49476417..42bded1c 100644 --- a/src/main/java/com/yapp/artie/domain/archive/repository/ExhibitRepository.java +++ b/src/main/java/com/yapp/artie/domain/archive/repository/ExhibitRepository.java @@ -43,7 +43,7 @@ public interface ExhibitRepository extends JpaRepository { + "where e.user = :user " + "and e.category = :category " + "and e.publication.isPublished = true", - countQuery = "select count(e.id) from Exhibit e" + countQuery = "select count(e.id) from Exhibit e where e.publication.isPublished = true" ) Page findExhibitByCategoryAsPage(Pageable pageable, @Param("user") UserJpaEntity user, @Param("category") Category category); @@ -52,7 +52,7 @@ Page findExhibitByCategoryAsPage(Pageable pageable, @Param("user") User value = "select e from Exhibit e " + "where e.user = :user " + "and e.publication.isPublished = true", - countQuery = "select count(e.id) from Exhibit e" + countQuery = "select count(e.id) from Exhibit e where e.publication.isPublished = true" ) Page findExhibitAsPage(Pageable pageable, @Param("user") UserJpaEntity user); From 11d81a5fa3cf3a907d7d4f3c296f363f8580a2d9 Mon Sep 17 00:00:00 2001 From: akalswl14 Date: Thu, 20 Apr 2023 15:52:45 +0900 Subject: [PATCH 112/141] =?UTF-8?q?:recycle:=20refactor:=20=EC=BB=A8?= =?UTF-8?q?=ED=8A=B8=EB=A1=A4=EB=9F=AC=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../in/web/GetNoticeDetailController.java | 36 +++++++++++++++++++ .../in/web/GetNoticeListController.java} | 23 +++--------- 2 files changed, 41 insertions(+), 18 deletions(-) create mode 100644 src/main/java/com/yapp/artie/domain/notice/adapter/in/web/GetNoticeDetailController.java rename src/main/java/com/yapp/artie/domain/notice/{controller/NoticeController.java => adapter/in/web/GetNoticeListController.java} (57%) diff --git a/src/main/java/com/yapp/artie/domain/notice/adapter/in/web/GetNoticeDetailController.java b/src/main/java/com/yapp/artie/domain/notice/adapter/in/web/GetNoticeDetailController.java new file mode 100644 index 00000000..b9f285d8 --- /dev/null +++ b/src/main/java/com/yapp/artie/domain/notice/adapter/in/web/GetNoticeDetailController.java @@ -0,0 +1,36 @@ +package com.yapp.artie.domain.notice.adapter.in.web; + + +import com.yapp.artie.domain.notice.application.port.in.GetNoticeDetailResponse; +import com.yapp.artie.domain.notice.service.NoticeService; +import io.swagger.v3.oas.annotations.Operation; +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.responses.ApiResponses; +import lombok.RequiredArgsConstructor; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RequestMapping("/notice") +@RequiredArgsConstructor +@RestController +public class GetNoticeDetailController { + + private final NoticeService noticeService; + + @Operation(summary = "공지사항 상세 조회", description = "특정 공지사항 상세를 조회") + @ApiResponses(value = { + @ApiResponse( + responseCode = "200", + description = "공지사항 상세가 성공적으로 조회됨", + content = @Content(mediaType = "application/json", schema = @Schema(implementation = GetNoticeDetailResponse.class))), + }) + @GetMapping("/{id}") + public ResponseEntity getNoticeDetail(@PathVariable("id") Long id) { + return ResponseEntity.ok(noticeService.notice(id)); + } +} diff --git a/src/main/java/com/yapp/artie/domain/notice/controller/NoticeController.java b/src/main/java/com/yapp/artie/domain/notice/adapter/in/web/GetNoticeListController.java similarity index 57% rename from src/main/java/com/yapp/artie/domain/notice/controller/NoticeController.java rename to src/main/java/com/yapp/artie/domain/notice/adapter/in/web/GetNoticeListController.java index e4f162aa..4f1f80b6 100644 --- a/src/main/java/com/yapp/artie/domain/notice/controller/NoticeController.java +++ b/src/main/java/com/yapp/artie/domain/notice/adapter/in/web/GetNoticeListController.java @@ -1,7 +1,7 @@ -package com.yapp.artie.domain.notice.controller; +package com.yapp.artie.domain.notice.adapter.in.web; -import com.yapp.artie.domain.notice.dto.NoticeDetailInfo; +import com.yapp.artie.domain.notice.application.port.in.GetNoticeDetailResponse; import com.yapp.artie.domain.notice.service.NoticeService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.ArraySchema; @@ -13,14 +13,13 @@ import lombok.RequiredArgsConstructor; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RequestMapping("/notice") @RequiredArgsConstructor @RestController -public class NoticeController { +public class GetNoticeListController { private final NoticeService noticeService; @@ -29,22 +28,10 @@ public class NoticeController { @ApiResponse( responseCode = "200", description = "공지사항 목록이 성공적으로 조회됨", - content = @Content(mediaType = "application/json", array = @ArraySchema(schema = @Schema(implementation = NoticeDetailInfo.class)))), + content = @Content(mediaType = "application/json", array = @ArraySchema(schema = @Schema(implementation = GetNoticeDetailResponse.class)))), }) @GetMapping() - public ResponseEntity> getNotices() { + public ResponseEntity> getNotices() { return ResponseEntity.ok(noticeService.notices()); } - - @Operation(summary = "공지사항 상세 조회", description = "특정 공지사항 상세를 조회") - @ApiResponses(value = { - @ApiResponse( - responseCode = "200", - description = "공지사항 상세가 성공적으로 조회됨", - content = @Content(mediaType = "application/json", schema = @Schema(implementation = NoticeDetailInfo.class))), - }) - @GetMapping("/{id}") - public ResponseEntity getNoticeDetail(@PathVariable("id") Long id) { - return ResponseEntity.ok(noticeService.notice(id)); - } } From 60ac2d9e0e377a69d194b5fe7675ba54aa505cef Mon Sep 17 00:00:00 2001 From: akalswl14 Date: Thu, 20 Apr 2023 15:53:15 +0900 Subject: [PATCH 113/141] =?UTF-8?q?:recycle:=20refactor:=20Dto=20=EB=84=A4?= =?UTF-8?q?=EC=9D=B4=EB=B0=8D=20=EB=B3=80=EA=B2=BD,=20=EC=83=9D=EC=84=B1?= =?UTF-8?q?=EC=9E=90=20=EA=B0=9C=EC=84=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../port/in/GetNoticeDetailResponse.java | 26 +++++++++++++++ .../domain/notice/dto/NoticeDetailInfo.java | 32 ------------------- .../notice/repository/NoticeRepository.java | 6 ++-- .../domain/notice/service/NoticeService.java | 8 ++--- .../notice/service/NoticeServiceTest.java | 6 ++-- 5 files changed, 36 insertions(+), 42 deletions(-) create mode 100644 src/main/java/com/yapp/artie/domain/notice/application/port/in/GetNoticeDetailResponse.java delete mode 100644 src/main/java/com/yapp/artie/domain/notice/dto/NoticeDetailInfo.java diff --git a/src/main/java/com/yapp/artie/domain/notice/application/port/in/GetNoticeDetailResponse.java b/src/main/java/com/yapp/artie/domain/notice/application/port/in/GetNoticeDetailResponse.java new file mode 100644 index 00000000..3cc3e16d --- /dev/null +++ b/src/main/java/com/yapp/artie/domain/notice/application/port/in/GetNoticeDetailResponse.java @@ -0,0 +1,26 @@ +package com.yapp.artie.domain.notice.application.port.in; + +import io.swagger.v3.oas.annotations.media.Schema; +import java.time.LocalDateTime; +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@Schema(description = "공지사항 상세 Response") +@AllArgsConstructor +public class GetNoticeDetailResponse { + + @Schema(description = "공지사항 아이디") + private final Long id; + + @Schema(description = "공지일") + private final LocalDateTime date; + + @Schema(description = "공지사항 제목") + private final String title; + + @Schema(description = "공지 내용") + private String contents; +} + + diff --git a/src/main/java/com/yapp/artie/domain/notice/dto/NoticeDetailInfo.java b/src/main/java/com/yapp/artie/domain/notice/dto/NoticeDetailInfo.java deleted file mode 100644 index e054535f..00000000 --- a/src/main/java/com/yapp/artie/domain/notice/dto/NoticeDetailInfo.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.yapp.artie.domain.notice.dto; - -import io.swagger.v3.oas.annotations.media.Schema; -import java.time.LocalDateTime; -import lombok.AccessLevel; -import lombok.Getter; -import lombok.NoArgsConstructor; - -@Getter -@Schema(description = "공지사항 상세 Response") -@NoArgsConstructor(access = AccessLevel.PROTECTED) -public class NoticeDetailInfo { - - @Schema(description = "공지사항 아이디") - private Long id; - - @Schema(description = "공지일") - private LocalDateTime date; - - @Schema(description = "공지사항 제목") - private String title; - - @Schema(description = "공지 내용") - private String contents; - - public NoticeDetailInfo(Long id, LocalDateTime date, String title, String contents) { - this.id = id; - this.date = date; - this.title = title; - this.contents = contents; - } -} diff --git a/src/main/java/com/yapp/artie/domain/notice/repository/NoticeRepository.java b/src/main/java/com/yapp/artie/domain/notice/repository/NoticeRepository.java index 27f8dea2..3e21bf57 100644 --- a/src/main/java/com/yapp/artie/domain/notice/repository/NoticeRepository.java +++ b/src/main/java/com/yapp/artie/domain/notice/repository/NoticeRepository.java @@ -1,7 +1,7 @@ package com.yapp.artie.domain.notice.repository; +import com.yapp.artie.domain.notice.application.port.in.GetNoticeDetailResponse; import com.yapp.artie.domain.notice.domain.Notice; -import com.yapp.artie.domain.notice.dto.NoticeDetailInfo; import java.util.List; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; @@ -10,6 +10,6 @@ @Repository public interface NoticeRepository extends JpaRepository { - @Query("select new com.yapp.artie.domain.notice.dto.NoticeDetailInfo(n.id, n.createdAt, n.title, n.contents) from Notice n") - List findNoticeDto(); + @Query("select new com.yapp.artie.domain.notice.dto.GetNoticeDetailResponse(n.id, n.createdAt, n.title, n.contents) from Notice n") + List findNoticeDto(); } diff --git a/src/main/java/com/yapp/artie/domain/notice/service/NoticeService.java b/src/main/java/com/yapp/artie/domain/notice/service/NoticeService.java index 84d82719..62515903 100644 --- a/src/main/java/com/yapp/artie/domain/notice/service/NoticeService.java +++ b/src/main/java/com/yapp/artie/domain/notice/service/NoticeService.java @@ -1,7 +1,7 @@ package com.yapp.artie.domain.notice.service; +import com.yapp.artie.domain.notice.application.port.in.GetNoticeDetailResponse; import com.yapp.artie.domain.notice.domain.Notice; -import com.yapp.artie.domain.notice.dto.NoticeDetailInfo; import com.yapp.artie.domain.notice.exception.NoticeNotFoundException; import com.yapp.artie.domain.notice.repository.NoticeRepository; import java.util.List; @@ -16,13 +16,13 @@ public class NoticeService { private final NoticeRepository noticeRepository; - public List notices() { + public List notices() { return noticeRepository.findNoticeDto(); } - public NoticeDetailInfo notice(Long id) { + public GetNoticeDetailResponse notice(Long id) { Notice notice = noticeRepository.findById(id).orElseThrow(NoticeNotFoundException::new); - return new NoticeDetailInfo( + return new GetNoticeDetailResponse( notice.getId(), notice.getCreatedAt(), notice.getTitle(), diff --git a/src/test/java/com/yapp/artie/domain/notice/service/NoticeServiceTest.java b/src/test/java/com/yapp/artie/domain/notice/service/NoticeServiceTest.java index 708eae63..25e9e2c3 100644 --- a/src/test/java/com/yapp/artie/domain/notice/service/NoticeServiceTest.java +++ b/src/test/java/com/yapp/artie/domain/notice/service/NoticeServiceTest.java @@ -4,8 +4,8 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; +import com.yapp.artie.domain.notice.application.port.in.GetNoticeDetailResponse; import com.yapp.artie.domain.notice.domain.Notice; -import com.yapp.artie.domain.notice.dto.NoticeDetailInfo; import com.yapp.artie.domain.notice.exception.NoticeNotFoundException; import java.util.List; import javax.persistence.EntityManager; @@ -30,7 +30,7 @@ class NoticeServiceTest { Notice notice = Notice.create("test " + i, "sample data"); em.persist(notice); } - List notices = noticeService.notices(); + List notices = noticeService.notices(); assertThat(notices.size()).isEqualTo(4); } @@ -39,7 +39,7 @@ class NoticeServiceTest { String expectedContents = "sample data"; Notice notice = Notice.create("test1", expectedContents); em.persist(notice); - NoticeDetailInfo detail = noticeService.notice(notice.getId()); + GetNoticeDetailResponse detail = noticeService.notice(notice.getId()); assertThat(detail.getContents()).isEqualTo(expectedContents); } From 72e3c17a597bd3dc28bdd9eba72376ce676060a3 Mon Sep 17 00:00:00 2001 From: akalswl14 Date: Thu, 20 Apr 2023 16:26:46 +0900 Subject: [PATCH 114/141] =?UTF-8?q?:recycle:=20refactor:=20=EA=B0=81=20?= =?UTF-8?q?=EC=84=9C=EB=B9=84=EC=8A=A4=20=EB=B6=84=EB=A6=AC=20=EB=B0=8F=20?= =?UTF-8?q?Inbound=20Port=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../application/port/in/GetNoticeDetailQuery.java | 6 ++++++ .../application/port/in/GetNoticeListQuery.java | 8 ++++++++ .../service/GetNoticeDetailService.java | 14 ++++++++++++++ .../application/service/GetNoticeListService.java | 15 +++++++++++++++ 4 files changed, 43 insertions(+) create mode 100644 src/main/java/com/yapp/artie/domain/notice/application/port/in/GetNoticeDetailQuery.java create mode 100644 src/main/java/com/yapp/artie/domain/notice/application/port/in/GetNoticeListQuery.java create mode 100644 src/main/java/com/yapp/artie/domain/notice/application/service/GetNoticeDetailService.java create mode 100644 src/main/java/com/yapp/artie/domain/notice/application/service/GetNoticeListService.java diff --git a/src/main/java/com/yapp/artie/domain/notice/application/port/in/GetNoticeDetailQuery.java b/src/main/java/com/yapp/artie/domain/notice/application/port/in/GetNoticeDetailQuery.java new file mode 100644 index 00000000..d3ad9199 --- /dev/null +++ b/src/main/java/com/yapp/artie/domain/notice/application/port/in/GetNoticeDetailQuery.java @@ -0,0 +1,6 @@ +package com.yapp.artie.domain.notice.application.port.in; + +public interface GetNoticeDetailQuery { + + GetNoticeDetailResponse loadNoticeDetail(Long id); +} diff --git a/src/main/java/com/yapp/artie/domain/notice/application/port/in/GetNoticeListQuery.java b/src/main/java/com/yapp/artie/domain/notice/application/port/in/GetNoticeListQuery.java new file mode 100644 index 00000000..d831430c --- /dev/null +++ b/src/main/java/com/yapp/artie/domain/notice/application/port/in/GetNoticeListQuery.java @@ -0,0 +1,8 @@ +package com.yapp.artie.domain.notice.application.port.in; + +import java.util.List; + +public interface GetNoticeListQuery { + + List loadNoticeList(); +} diff --git a/src/main/java/com/yapp/artie/domain/notice/application/service/GetNoticeDetailService.java b/src/main/java/com/yapp/artie/domain/notice/application/service/GetNoticeDetailService.java new file mode 100644 index 00000000..a9f32c0d --- /dev/null +++ b/src/main/java/com/yapp/artie/domain/notice/application/service/GetNoticeDetailService.java @@ -0,0 +1,14 @@ +package com.yapp.artie.domain.notice.application.service; + +import com.yapp.artie.domain.notice.application.port.in.GetNoticeDetailQuery; +import com.yapp.artie.domain.notice.application.port.in.GetNoticeDetailResponse; +import com.yapp.artie.global.common.annotation.UseCase; + +@UseCase +public class GetNoticeDetailService implements GetNoticeDetailQuery { + + @Override + public GetNoticeDetailResponse loadNoticeDetail(Long id) { + return null; + } +} diff --git a/src/main/java/com/yapp/artie/domain/notice/application/service/GetNoticeListService.java b/src/main/java/com/yapp/artie/domain/notice/application/service/GetNoticeListService.java new file mode 100644 index 00000000..31fb12f1 --- /dev/null +++ b/src/main/java/com/yapp/artie/domain/notice/application/service/GetNoticeListService.java @@ -0,0 +1,15 @@ +package com.yapp.artie.domain.notice.application.service; + +import com.yapp.artie.domain.notice.application.port.in.GetNoticeDetailResponse; +import com.yapp.artie.domain.notice.application.port.in.GetNoticeListQuery; +import com.yapp.artie.global.common.annotation.UseCase; +import java.util.List; + +@UseCase +public class GetNoticeListService implements GetNoticeListQuery { + + @Override + public List loadNoticeList() { + return null; + } +} From 27b036302526491e6540f39e8e3c2e5801693c0b Mon Sep 17 00:00:00 2001 From: akalswl14 Date: Thu, 20 Apr 2023 16:40:16 +0900 Subject: [PATCH 115/141] =?UTF-8?q?:recycle:=20refactor:=20Notice=20Outbou?= =?UTF-8?q?nd=20Port,=20Persistence=20Adapter=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../persistence/NoticePersistenceAdapter.java | 20 +++++++++++++++++++ .../application/port/out/LoadNoticePort.java | 11 ++++++++++ 2 files changed, 31 insertions(+) create mode 100644 src/main/java/com/yapp/artie/domain/notice/adapter/out/persistence/NoticePersistenceAdapter.java create mode 100644 src/main/java/com/yapp/artie/domain/notice/application/port/out/LoadNoticePort.java diff --git a/src/main/java/com/yapp/artie/domain/notice/adapter/out/persistence/NoticePersistenceAdapter.java b/src/main/java/com/yapp/artie/domain/notice/adapter/out/persistence/NoticePersistenceAdapter.java new file mode 100644 index 00000000..14922dbc --- /dev/null +++ b/src/main/java/com/yapp/artie/domain/notice/adapter/out/persistence/NoticePersistenceAdapter.java @@ -0,0 +1,20 @@ +package com.yapp.artie.domain.notice.adapter.out.persistence; + +import com.yapp.artie.domain.notice.application.port.out.LoadNoticePort; +import com.yapp.artie.domain.notice.domain.Notice; +import com.yapp.artie.global.common.annotation.PersistenceAdapter; +import java.util.List; + +@PersistenceAdapter +public class NoticePersistenceAdapter implements LoadNoticePort { + + @Override + return null; + public List loadNoticeList() { + } + + @Override + return null; + public Optional loadNoticeDetail(Long id) { + } +} diff --git a/src/main/java/com/yapp/artie/domain/notice/application/port/out/LoadNoticePort.java b/src/main/java/com/yapp/artie/domain/notice/application/port/out/LoadNoticePort.java new file mode 100644 index 00000000..838d0955 --- /dev/null +++ b/src/main/java/com/yapp/artie/domain/notice/application/port/out/LoadNoticePort.java @@ -0,0 +1,11 @@ +package com.yapp.artie.domain.notice.application.port.out; + +import com.yapp.artie.domain.notice.application.port.in.GetNoticeDetailResponse; +import java.util.List; + +public interface LoadNoticePort { + + List loadNoticeList(); + + GetNoticeDetailResponse loadNoticeDetail(Long id); +} From 62ad32ed4e98c1b6796bef1f6c1731cfecb04ddd Mon Sep 17 00:00:00 2001 From: akalswl14 Date: Thu, 20 Apr 2023 16:57:16 +0900 Subject: [PATCH 116/141] =?UTF-8?q?:recycle:=20refactor:=20Repository=20?= =?UTF-8?q?=EC=9D=B4=EB=8F=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../out/persistence}/NoticeRepository.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) rename src/main/java/com/yapp/artie/domain/notice/{repository => adapter/out/persistence}/NoticeRepository.java (68%) diff --git a/src/main/java/com/yapp/artie/domain/notice/repository/NoticeRepository.java b/src/main/java/com/yapp/artie/domain/notice/adapter/out/persistence/NoticeRepository.java similarity index 68% rename from src/main/java/com/yapp/artie/domain/notice/repository/NoticeRepository.java rename to src/main/java/com/yapp/artie/domain/notice/adapter/out/persistence/NoticeRepository.java index 3e21bf57..bb316f01 100644 --- a/src/main/java/com/yapp/artie/domain/notice/repository/NoticeRepository.java +++ b/src/main/java/com/yapp/artie/domain/notice/adapter/out/persistence/NoticeRepository.java @@ -1,4 +1,4 @@ -package com.yapp.artie.domain.notice.repository; +package com.yapp.artie.domain.notice.adapter.out.persistence; import com.yapp.artie.domain.notice.application.port.in.GetNoticeDetailResponse; import com.yapp.artie.domain.notice.domain.Notice; @@ -10,6 +10,6 @@ @Repository public interface NoticeRepository extends JpaRepository { - @Query("select new com.yapp.artie.domain.notice.dto.GetNoticeDetailResponse(n.id, n.createdAt, n.title, n.contents) from Notice n") + @Query("select new com.yapp.artie.domain.notice.application.port.in.GetNoticeDetailResponse(n.id, n.createdAt, n.title, n.contents) from Notice n") List findNoticeDto(); } From a20506227a0ca80742f34fb97eafc013b231b99f Mon Sep 17 00:00:00 2001 From: akalswl14 Date: Thu, 20 Apr 2023 16:58:03 +0900 Subject: [PATCH 117/141] =?UTF-8?q?:recycle:=20refactor:=20=ED=95=84?= =?UTF-8?q?=EC=9A=94=EC=97=86=EB=8A=94=20=EB=A9=94=EC=86=8C=EB=93=9C=20?= =?UTF-8?q?=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../notice/adapter/out/persistence/NoticeRepository.java | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/main/java/com/yapp/artie/domain/notice/adapter/out/persistence/NoticeRepository.java b/src/main/java/com/yapp/artie/domain/notice/adapter/out/persistence/NoticeRepository.java index bb316f01..f790ad16 100644 --- a/src/main/java/com/yapp/artie/domain/notice/adapter/out/persistence/NoticeRepository.java +++ b/src/main/java/com/yapp/artie/domain/notice/adapter/out/persistence/NoticeRepository.java @@ -1,15 +1,10 @@ package com.yapp.artie.domain.notice.adapter.out.persistence; -import com.yapp.artie.domain.notice.application.port.in.GetNoticeDetailResponse; import com.yapp.artie.domain.notice.domain.Notice; -import java.util.List; import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.data.jpa.repository.Query; import org.springframework.stereotype.Repository; @Repository public interface NoticeRepository extends JpaRepository { - @Query("select new com.yapp.artie.domain.notice.application.port.in.GetNoticeDetailResponse(n.id, n.createdAt, n.title, n.contents) from Notice n") - List findNoticeDto(); } From 058082a916a8cec14f485b1a2bf3fdac48a6c268 Mon Sep 17 00:00:00 2001 From: akalswl14 Date: Thu, 20 Apr 2023 16:59:21 +0900 Subject: [PATCH 118/141] =?UTF-8?q?:recycle:=20refactor:=20Repository?= =?UTF-8?q?=EB=A5=BC=20=EC=82=AC=EC=9A=A9=ED=95=B4=EC=84=9C=20=EB=A9=94?= =?UTF-8?q?=EC=86=8C=EB=93=9C=20=EB=A1=9C=EC=A7=81=20=EA=B5=AC=ED=98=84,?= =?UTF-8?q?=20=EB=A6=AC=ED=84=B4=20=ED=83=80=EC=9E=85=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../out/persistence/NoticePersistenceAdapter.java | 9 +++++++-- .../notice/application/port/out/LoadNoticePort.java | 7 ++++--- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/yapp/artie/domain/notice/adapter/out/persistence/NoticePersistenceAdapter.java b/src/main/java/com/yapp/artie/domain/notice/adapter/out/persistence/NoticePersistenceAdapter.java index 14922dbc..6d91cfbb 100644 --- a/src/main/java/com/yapp/artie/domain/notice/adapter/out/persistence/NoticePersistenceAdapter.java +++ b/src/main/java/com/yapp/artie/domain/notice/adapter/out/persistence/NoticePersistenceAdapter.java @@ -4,17 +4,22 @@ import com.yapp.artie.domain.notice.domain.Notice; import com.yapp.artie.global.common.annotation.PersistenceAdapter; import java.util.List; +import java.util.Optional; +import lombok.AllArgsConstructor; @PersistenceAdapter +@AllArgsConstructor public class NoticePersistenceAdapter implements LoadNoticePort { + final NoticeRepository noticeRepository; + @Override - return null; public List loadNoticeList() { + return noticeRepository.findAll(); } @Override - return null; public Optional loadNoticeDetail(Long id) { + return noticeRepository.findById(id); } } diff --git a/src/main/java/com/yapp/artie/domain/notice/application/port/out/LoadNoticePort.java b/src/main/java/com/yapp/artie/domain/notice/application/port/out/LoadNoticePort.java index 838d0955..65cbbf69 100644 --- a/src/main/java/com/yapp/artie/domain/notice/application/port/out/LoadNoticePort.java +++ b/src/main/java/com/yapp/artie/domain/notice/application/port/out/LoadNoticePort.java @@ -1,11 +1,12 @@ package com.yapp.artie.domain.notice.application.port.out; -import com.yapp.artie.domain.notice.application.port.in.GetNoticeDetailResponse; +import com.yapp.artie.domain.notice.domain.Notice; import java.util.List; +import java.util.Optional; public interface LoadNoticePort { - List loadNoticeList(); + List loadNoticeList(); - GetNoticeDetailResponse loadNoticeDetail(Long id); + Optional loadNoticeDetail(Long id); } From 9918cb9dc8ee18279145d0f521c962c89ae369ac Mon Sep 17 00:00:00 2001 From: akalswl14 Date: Thu, 20 Apr 2023 16:59:41 +0900 Subject: [PATCH 119/141] =?UTF-8?q?:recycle:=20refactor:=20=EA=B0=81=20?= =?UTF-8?q?=EC=84=9C=EB=B9=84=EC=8A=A4=EC=97=90=EC=84=9C=20=ED=8F=AC?= =?UTF-8?q?=ED=8A=B8=EB=A5=BC=20=EC=82=AC=EC=9A=A9=ED=95=98=EC=97=AC=20?= =?UTF-8?q?=EB=A1=9C=EC=A7=81=EC=9D=84=20=EA=B5=AC=EC=84=B1=ED=95=98?= =?UTF-8?q?=EB=8F=84=EB=A1=9D=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/GetNoticeDetailService.java | 15 ++++++++++++++- .../application/service/GetNoticeListService.java | 15 ++++++++++++++- 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/yapp/artie/domain/notice/application/service/GetNoticeDetailService.java b/src/main/java/com/yapp/artie/domain/notice/application/service/GetNoticeDetailService.java index a9f32c0d..00bdeefb 100644 --- a/src/main/java/com/yapp/artie/domain/notice/application/service/GetNoticeDetailService.java +++ b/src/main/java/com/yapp/artie/domain/notice/application/service/GetNoticeDetailService.java @@ -2,13 +2,26 @@ import com.yapp.artie.domain.notice.application.port.in.GetNoticeDetailQuery; import com.yapp.artie.domain.notice.application.port.in.GetNoticeDetailResponse; +import com.yapp.artie.domain.notice.application.port.out.LoadNoticePort; +import com.yapp.artie.domain.notice.domain.Notice; +import com.yapp.artie.domain.notice.exception.NoticeNotFoundException; import com.yapp.artie.global.common.annotation.UseCase; +import lombok.AllArgsConstructor; @UseCase +@AllArgsConstructor public class GetNoticeDetailService implements GetNoticeDetailQuery { + final LoadNoticePort loadNoticePort; + @Override public GetNoticeDetailResponse loadNoticeDetail(Long id) { - return null; + Notice notice = loadNoticePort.loadNoticeDetail(id).orElseThrow(NoticeNotFoundException::new); + return new GetNoticeDetailResponse( + notice.getId(), + notice.getCreatedAt(), + notice.getTitle(), + notice.getContents() + ); } } diff --git a/src/main/java/com/yapp/artie/domain/notice/application/service/GetNoticeListService.java b/src/main/java/com/yapp/artie/domain/notice/application/service/GetNoticeListService.java index 31fb12f1..e88031f8 100644 --- a/src/main/java/com/yapp/artie/domain/notice/application/service/GetNoticeListService.java +++ b/src/main/java/com/yapp/artie/domain/notice/application/service/GetNoticeListService.java @@ -2,14 +2,27 @@ import com.yapp.artie.domain.notice.application.port.in.GetNoticeDetailResponse; import com.yapp.artie.domain.notice.application.port.in.GetNoticeListQuery; +import com.yapp.artie.domain.notice.application.port.out.LoadNoticePort; import com.yapp.artie.global.common.annotation.UseCase; import java.util.List; +import java.util.stream.Collectors; +import lombok.AllArgsConstructor; @UseCase +@AllArgsConstructor public class GetNoticeListService implements GetNoticeListQuery { + final LoadNoticePort loadNoticePort; + @Override public List loadNoticeList() { - return null; + return loadNoticePort.loadNoticeList().stream() + .map(eachNotice -> + new GetNoticeDetailResponse( + eachNotice.getId(), + eachNotice.getCreatedAt(), + eachNotice.getTitle(), + eachNotice.getContents() + )).collect(Collectors.toList()); } } From baca62fc01c92687fedfc5230cbf8d907ac96f0b Mon Sep 17 00:00:00 2001 From: akalswl14 Date: Thu, 20 Apr 2023 17:02:59 +0900 Subject: [PATCH 120/141] =?UTF-8?q?:recycle:=20refactor:=20=EC=BB=A8?= =?UTF-8?q?=ED=8A=B8=EB=A1=A4=EB=9F=AC=EA=B0=80=20UseCase=20=EC=9D=B8?= =?UTF-8?q?=ED=84=B0=ED=8E=98=EC=9D=B4=EC=8A=A4=EB=A5=BC=20=EC=82=AC?= =?UTF-8?q?=EC=9A=A9=ED=95=98=EB=8F=84=EB=A1=9D=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../notice/adapter/in/web/GetNoticeDetailController.java | 6 +++--- .../notice/adapter/in/web/GetNoticeListController.java | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/yapp/artie/domain/notice/adapter/in/web/GetNoticeDetailController.java b/src/main/java/com/yapp/artie/domain/notice/adapter/in/web/GetNoticeDetailController.java index b9f285d8..5eb00d44 100644 --- a/src/main/java/com/yapp/artie/domain/notice/adapter/in/web/GetNoticeDetailController.java +++ b/src/main/java/com/yapp/artie/domain/notice/adapter/in/web/GetNoticeDetailController.java @@ -1,8 +1,8 @@ package com.yapp.artie.domain.notice.adapter.in.web; +import com.yapp.artie.domain.notice.application.port.in.GetNoticeDetailQuery; import com.yapp.artie.domain.notice.application.port.in.GetNoticeDetailResponse; -import com.yapp.artie.domain.notice.service.NoticeService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.Content; import io.swagger.v3.oas.annotations.media.Schema; @@ -20,7 +20,7 @@ @RestController public class GetNoticeDetailController { - private final NoticeService noticeService; + private final GetNoticeDetailQuery getNoticeDetailQuery; @Operation(summary = "공지사항 상세 조회", description = "특정 공지사항 상세를 조회") @ApiResponses(value = { @@ -31,6 +31,6 @@ public class GetNoticeDetailController { }) @GetMapping("/{id}") public ResponseEntity getNoticeDetail(@PathVariable("id") Long id) { - return ResponseEntity.ok(noticeService.notice(id)); + return ResponseEntity.ok(getNoticeDetailQuery.loadNoticeDetail(id)); } } diff --git a/src/main/java/com/yapp/artie/domain/notice/adapter/in/web/GetNoticeListController.java b/src/main/java/com/yapp/artie/domain/notice/adapter/in/web/GetNoticeListController.java index 4f1f80b6..ae55cad3 100644 --- a/src/main/java/com/yapp/artie/domain/notice/adapter/in/web/GetNoticeListController.java +++ b/src/main/java/com/yapp/artie/domain/notice/adapter/in/web/GetNoticeListController.java @@ -2,7 +2,7 @@ import com.yapp.artie.domain.notice.application.port.in.GetNoticeDetailResponse; -import com.yapp.artie.domain.notice.service.NoticeService; +import com.yapp.artie.domain.notice.application.port.in.GetNoticeListQuery; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.ArraySchema; import io.swagger.v3.oas.annotations.media.Content; @@ -21,7 +21,7 @@ @RestController public class GetNoticeListController { - private final NoticeService noticeService; + private final GetNoticeListQuery getNoticeListQuery; @Operation(summary = "공지사항 목록 조회", description = "공지사항 목록을 조회") @ApiResponses(value = { @@ -32,6 +32,6 @@ public class GetNoticeListController { }) @GetMapping() public ResponseEntity> getNotices() { - return ResponseEntity.ok(noticeService.notices()); + return ResponseEntity.ok(getNoticeListQuery.loadNoticeList()); } } From abdc7914db64d764345e104e5a6ab0032afd13d7 Mon Sep 17 00:00:00 2001 From: akalswl14 Date: Thu, 20 Apr 2023 17:03:03 +0900 Subject: [PATCH 121/141] =?UTF-8?q?:recycle:=20refactor:=20=EC=84=9C?= =?UTF-8?q?=EB=B9=84=EC=8A=A4=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/notice/service/NoticeService.java | 32 ------------------- 1 file changed, 32 deletions(-) delete mode 100644 src/main/java/com/yapp/artie/domain/notice/service/NoticeService.java diff --git a/src/main/java/com/yapp/artie/domain/notice/service/NoticeService.java b/src/main/java/com/yapp/artie/domain/notice/service/NoticeService.java deleted file mode 100644 index 62515903..00000000 --- a/src/main/java/com/yapp/artie/domain/notice/service/NoticeService.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.yapp.artie.domain.notice.service; - -import com.yapp.artie.domain.notice.application.port.in.GetNoticeDetailResponse; -import com.yapp.artie.domain.notice.domain.Notice; -import com.yapp.artie.domain.notice.exception.NoticeNotFoundException; -import com.yapp.artie.domain.notice.repository.NoticeRepository; -import java.util.List; -import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -@Service -@Transactional(readOnly = true) -@RequiredArgsConstructor -public class NoticeService { - - private final NoticeRepository noticeRepository; - - public List notices() { - return noticeRepository.findNoticeDto(); - } - - public GetNoticeDetailResponse notice(Long id) { - Notice notice = noticeRepository.findById(id).orElseThrow(NoticeNotFoundException::new); - return new GetNoticeDetailResponse( - notice.getId(), - notice.getCreatedAt(), - notice.getTitle(), - notice.getContents() - ); - } -} From eadbedc57bb19a642c645c225bb9c14411b92b53 Mon Sep 17 00:00:00 2001 From: akalswl14 Date: Thu, 20 Apr 2023 17:05:36 +0900 Subject: [PATCH 122/141] =?UTF-8?q?:recycle:=20refactor:=20=EB=8F=84?= =?UTF-8?q?=EB=A9=94=EC=9D=B8=20=EB=AA=A8=EB=8D=B8=EC=97=90=20=EA=B4=80?= =?UTF-8?q?=ED=95=9C=20=EC=98=88=EC=99=B8=EB=8A=94=20=EB=8F=84=EB=A9=94?= =?UTF-8?q?=EC=9D=B8=20=ED=8C=A8=ED=82=A4=EC=A7=80=EB=A1=9C=20=EB=B6=84?= =?UTF-8?q?=EB=A5=98=ED=95=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../notice/application/service/GetNoticeDetailService.java | 2 +- .../notice/{exception => domain}/NoticeNotFoundException.java | 2 +- .../com/yapp/artie/domain/notice/service/NoticeServiceTest.java | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) rename src/main/java/com/yapp/artie/domain/notice/{exception => domain}/NoticeNotFoundException.java (85%) diff --git a/src/main/java/com/yapp/artie/domain/notice/application/service/GetNoticeDetailService.java b/src/main/java/com/yapp/artie/domain/notice/application/service/GetNoticeDetailService.java index 00bdeefb..05358943 100644 --- a/src/main/java/com/yapp/artie/domain/notice/application/service/GetNoticeDetailService.java +++ b/src/main/java/com/yapp/artie/domain/notice/application/service/GetNoticeDetailService.java @@ -4,7 +4,7 @@ import com.yapp.artie.domain.notice.application.port.in.GetNoticeDetailResponse; import com.yapp.artie.domain.notice.application.port.out.LoadNoticePort; import com.yapp.artie.domain.notice.domain.Notice; -import com.yapp.artie.domain.notice.exception.NoticeNotFoundException; +import com.yapp.artie.domain.notice.domain.NoticeNotFoundException; import com.yapp.artie.global.common.annotation.UseCase; import lombok.AllArgsConstructor; diff --git a/src/main/java/com/yapp/artie/domain/notice/exception/NoticeNotFoundException.java b/src/main/java/com/yapp/artie/domain/notice/domain/NoticeNotFoundException.java similarity index 85% rename from src/main/java/com/yapp/artie/domain/notice/exception/NoticeNotFoundException.java rename to src/main/java/com/yapp/artie/domain/notice/domain/NoticeNotFoundException.java index d7b5263e..4bb7531b 100644 --- a/src/main/java/com/yapp/artie/domain/notice/exception/NoticeNotFoundException.java +++ b/src/main/java/com/yapp/artie/domain/notice/domain/NoticeNotFoundException.java @@ -1,4 +1,4 @@ -package com.yapp.artie.domain.notice.exception; +package com.yapp.artie.domain.notice.domain; import com.yapp.artie.global.common.exception.BusinessException; import com.yapp.artie.global.common.exception.ErrorCode; diff --git a/src/test/java/com/yapp/artie/domain/notice/service/NoticeServiceTest.java b/src/test/java/com/yapp/artie/domain/notice/service/NoticeServiceTest.java index 25e9e2c3..e2031a12 100644 --- a/src/test/java/com/yapp/artie/domain/notice/service/NoticeServiceTest.java +++ b/src/test/java/com/yapp/artie/domain/notice/service/NoticeServiceTest.java @@ -6,7 +6,7 @@ import com.yapp.artie.domain.notice.application.port.in.GetNoticeDetailResponse; import com.yapp.artie.domain.notice.domain.Notice; -import com.yapp.artie.domain.notice.exception.NoticeNotFoundException; +import com.yapp.artie.domain.notice.domain.NoticeNotFoundException; import java.util.List; import javax.persistence.EntityManager; import org.junit.jupiter.api.Test; From 72f8eee2f8dab21575c6f580759a45f673908984 Mon Sep 17 00:00:00 2001 From: akalswl14 Date: Thu, 20 Apr 2023 19:22:57 +0900 Subject: [PATCH 123/141] =?UTF-8?q?:recycle:=20refactor:=20Notice=20?= =?UTF-8?q?=EC=83=81=EC=84=B8=20=EC=A1=B0=ED=9A=8C=EC=8B=9C,=20Port=20?= =?UTF-8?q?=EB=8B=A8=EA=B3=84=EC=97=90=EC=84=9C=20=EC=98=88=EC=99=B8?= =?UTF-8?q?=EB=A5=BC=20=EB=8D=98=EC=A7=80=EB=8F=84=EB=A1=9D=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../adapter/out/persistence/NoticePersistenceAdapter.java | 6 +++--- .../domain/notice/application/port/out/LoadNoticePort.java | 3 +-- .../notice/application/service/GetNoticeDetailService.java | 3 +-- 3 files changed, 5 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/yapp/artie/domain/notice/adapter/out/persistence/NoticePersistenceAdapter.java b/src/main/java/com/yapp/artie/domain/notice/adapter/out/persistence/NoticePersistenceAdapter.java index 6d91cfbb..4b35258d 100644 --- a/src/main/java/com/yapp/artie/domain/notice/adapter/out/persistence/NoticePersistenceAdapter.java +++ b/src/main/java/com/yapp/artie/domain/notice/adapter/out/persistence/NoticePersistenceAdapter.java @@ -2,9 +2,9 @@ import com.yapp.artie.domain.notice.application.port.out.LoadNoticePort; import com.yapp.artie.domain.notice.domain.Notice; +import com.yapp.artie.domain.notice.domain.NoticeNotFoundException; import com.yapp.artie.global.common.annotation.PersistenceAdapter; import java.util.List; -import java.util.Optional; import lombok.AllArgsConstructor; @PersistenceAdapter @@ -19,7 +19,7 @@ public List loadNoticeList() { } @Override - public Optional loadNoticeDetail(Long id) { - return noticeRepository.findById(id); + public Notice loadNoticeDetail(Long id) { + return noticeRepository.findById(id).orElseThrow(NoticeNotFoundException::new); } } diff --git a/src/main/java/com/yapp/artie/domain/notice/application/port/out/LoadNoticePort.java b/src/main/java/com/yapp/artie/domain/notice/application/port/out/LoadNoticePort.java index 65cbbf69..9fa7adc4 100644 --- a/src/main/java/com/yapp/artie/domain/notice/application/port/out/LoadNoticePort.java +++ b/src/main/java/com/yapp/artie/domain/notice/application/port/out/LoadNoticePort.java @@ -2,11 +2,10 @@ import com.yapp.artie.domain.notice.domain.Notice; import java.util.List; -import java.util.Optional; public interface LoadNoticePort { List loadNoticeList(); - Optional loadNoticeDetail(Long id); + Notice loadNoticeDetail(Long id); } diff --git a/src/main/java/com/yapp/artie/domain/notice/application/service/GetNoticeDetailService.java b/src/main/java/com/yapp/artie/domain/notice/application/service/GetNoticeDetailService.java index 05358943..c6712fa4 100644 --- a/src/main/java/com/yapp/artie/domain/notice/application/service/GetNoticeDetailService.java +++ b/src/main/java/com/yapp/artie/domain/notice/application/service/GetNoticeDetailService.java @@ -4,7 +4,6 @@ import com.yapp.artie.domain.notice.application.port.in.GetNoticeDetailResponse; import com.yapp.artie.domain.notice.application.port.out.LoadNoticePort; import com.yapp.artie.domain.notice.domain.Notice; -import com.yapp.artie.domain.notice.domain.NoticeNotFoundException; import com.yapp.artie.global.common.annotation.UseCase; import lombok.AllArgsConstructor; @@ -16,7 +15,7 @@ public class GetNoticeDetailService implements GetNoticeDetailQuery { @Override public GetNoticeDetailResponse loadNoticeDetail(Long id) { - Notice notice = loadNoticePort.loadNoticeDetail(id).orElseThrow(NoticeNotFoundException::new); + Notice notice = loadNoticePort.loadNoticeDetail(id); return new GetNoticeDetailResponse( notice.getId(), notice.getCreatedAt(), From 48b86352a518466aff6cbbca51f15122e9f06437 Mon Sep 17 00:00:00 2001 From: akalswl14 Date: Thu, 20 Apr 2023 19:26:39 +0900 Subject: [PATCH 124/141] =?UTF-8?q?:recycle:=20refactor:=20Notice=20Contro?= =?UTF-8?q?ller=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../in/web/GetNoticeDetailControllerTest.java | 32 +++++++++++++++++++ .../in/web/GetNoticeListControllerTest.java | 31 ++++++++++++++++++ 2 files changed, 63 insertions(+) create mode 100644 src/test/java/com/yapp/artie/domain/notice/adapter/in/web/GetNoticeDetailControllerTest.java create mode 100644 src/test/java/com/yapp/artie/domain/notice/adapter/in/web/GetNoticeListControllerTest.java diff --git a/src/test/java/com/yapp/artie/domain/notice/adapter/in/web/GetNoticeDetailControllerTest.java b/src/test/java/com/yapp/artie/domain/notice/adapter/in/web/GetNoticeDetailControllerTest.java new file mode 100644 index 00000000..8089d1a7 --- /dev/null +++ b/src/test/java/com/yapp/artie/domain/notice/adapter/in/web/GetNoticeDetailControllerTest.java @@ -0,0 +1,32 @@ +package com.yapp.artie.domain.notice.adapter.in.web; + +import static com.yapp.artie.common.UserTestData.defaultUser; +import static org.mockito.BDDMockito.then; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +import com.yapp.artie.common.BaseControllerIntegrationTest; +import com.yapp.artie.domain.notice.application.port.in.GetNoticeDetailQuery; +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.http.MediaType; + +@WebMvcTest(controllers = GetNoticeDetailController.class) +class GetNoticeDetailControllerTest extends BaseControllerIntegrationTest { + + @MockBean + private GetNoticeDetailQuery getNoticeDetailQuery; + + @Test + void getNoticeDetail() throws Exception { + givenUserByReference(defaultUser().build()); + Long noticeId = 1L; + + mvc.perform(get("/notice/{noticeId}", noticeId).accept(MediaType.APPLICATION_JSON) + .header("Authorization", "sample")) + .andExpect(status().isOk()); + + then(getNoticeDetailQuery).should().loadNoticeDetail(noticeId); + } +} \ No newline at end of file diff --git a/src/test/java/com/yapp/artie/domain/notice/adapter/in/web/GetNoticeListControllerTest.java b/src/test/java/com/yapp/artie/domain/notice/adapter/in/web/GetNoticeListControllerTest.java new file mode 100644 index 00000000..1ce307d3 --- /dev/null +++ b/src/test/java/com/yapp/artie/domain/notice/adapter/in/web/GetNoticeListControllerTest.java @@ -0,0 +1,31 @@ +package com.yapp.artie.domain.notice.adapter.in.web; + +import static com.yapp.artie.common.UserTestData.defaultUser; +import static org.mockito.BDDMockito.then; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +import com.yapp.artie.common.BaseControllerIntegrationTest; +import com.yapp.artie.domain.notice.application.port.in.GetNoticeListQuery; +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.http.MediaType; + +@WebMvcTest(controllers = GetNoticeListController.class) +class GetNoticeListControllerTest extends BaseControllerIntegrationTest { + + @MockBean + private GetNoticeListQuery getNoticeListQuery; + + @Test + void getNotices() throws Exception { + givenUserByReference(defaultUser().build()); + + mvc.perform(get("/notice").accept(MediaType.APPLICATION_JSON) + .header("Authorization", "sample")) + .andExpect(status().isOk()); + + then(getNoticeListQuery).should().loadNoticeList(); + } +} \ No newline at end of file From cf7ad149c1ed02cb0e96ffda6ce9275da2873d8b Mon Sep 17 00:00:00 2001 From: akalswl14 Date: Thu, 20 Apr 2023 19:35:02 +0900 Subject: [PATCH 125/141] =?UTF-8?q?:recycle:=20refactor:=20Notice=20Adapte?= =?UTF-8?q?r=20Test=EB=A5=BC=20=EC=9C=84=ED=95=9C=20SQL=20=ED=8C=8C?= =?UTF-8?q?=EC=9D=BC=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../out/persistence/NoticePersistenceAdapterTest.sql | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 src/test/resources/com/yapp/artie/domain/notice/adapter/out/persistence/NoticePersistenceAdapterTest.sql diff --git a/src/test/resources/com/yapp/artie/domain/notice/adapter/out/persistence/NoticePersistenceAdapterTest.sql b/src/test/resources/com/yapp/artie/domain/notice/adapter/out/persistence/NoticePersistenceAdapterTest.sql new file mode 100644 index 00000000..b1557e47 --- /dev/null +++ b/src/test/resources/com/yapp/artie/domain/notice/adapter/out/persistence/NoticePersistenceAdapterTest.sql @@ -0,0 +1,12 @@ +INSERT INTO `notice` (id, contents, created_at, title) +VALUES (1, '아르티가 업데이트 되었어요~ 1', '2023-04-01 10:58:50', '공지사항 제목1'); +INSERT INTO `notice` (id, contents, created_at, title) +VALUES (2, '아르티가 업데이트 되었어요~ 2', '2023-04-02 12:58:50', '공지사항 제목2'); +INSERT INTO `notice` (id, contents, created_at, title) +VALUES (3, '아르티가 업데이트 되었어요~ 3', '2023-04-03 15:58:50', '공지사항 제목3'); +INSERT INTO `notice` (id, contents, created_at, title) +VALUES (4, '아르티가 업데이트 되었어요~ 4', '2023-04-04 19:58:50', '공지사항 제목4'); +INSERT INTO `notice` (id, contents, created_at, title) +VALUES (5, '아르티가 업데이트 되었어요~ 5', '2023-04-05 08:58:50', '공지사항 제목5'); +INSERT INTO `notice` (id, contents, created_at, title) +VALUES (6, '아르티가 업데이트 되었어요~ 6', '2023-04-20 20:58:50', '공지사항 제목6'); \ No newline at end of file From 9e114fa81006beb37eceb5274365a6c2d24b2d24 Mon Sep 17 00:00:00 2001 From: akalswl14 Date: Thu, 20 Apr 2023 19:35:06 +0900 Subject: [PATCH 126/141] =?UTF-8?q?:recycle:=20refactor:=20Notice=20Adapte?= =?UTF-8?q?r=20Test=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../NoticePersistenceAdapterTest.java | 60 +++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 src/test/java/com/yapp/artie/domain/notice/adapter/out/persistence/NoticePersistenceAdapterTest.java diff --git a/src/test/java/com/yapp/artie/domain/notice/adapter/out/persistence/NoticePersistenceAdapterTest.java b/src/test/java/com/yapp/artie/domain/notice/adapter/out/persistence/NoticePersistenceAdapterTest.java new file mode 100644 index 00000000..243ee70e --- /dev/null +++ b/src/test/java/com/yapp/artie/domain/notice/adapter/out/persistence/NoticePersistenceAdapterTest.java @@ -0,0 +1,60 @@ +package com.yapp.artie.domain.notice.adapter.out.persistence; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; + +import com.yapp.artie.domain.notice.domain.Notice; +import com.yapp.artie.domain.notice.domain.NoticeNotFoundException; +import java.util.List; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabase; +import org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabase.Replace; +import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; +import org.springframework.context.annotation.Import; +import org.springframework.test.context.jdbc.Sql; + +@DataJpaTest +@Import({NoticePersistenceAdapter.class}) +@AutoConfigureTestDatabase(replace = Replace.NONE) +class NoticePersistenceAdapterTest { + + @Autowired + NoticePersistenceAdapter noticePersistenceAdapter; + + @Autowired + NoticeRepository noticeRepository; + + @Test + @Sql("NoticePersistenceAdapterTest.sql") + void loadNoticeList_모든_공지_조회() { + List notices = noticePersistenceAdapter.loadNoticeList(); + + assertThat(notices.size()).isEqualTo(6); + assertThat(notices.get(0).getId()).isEqualTo(1L); + } + + @Test + void loadNoticeList_공지가_없을_경우_빈_리스트를_반환한다() { + List notices = noticePersistenceAdapter.loadNoticeList(); + + assertThat(notices.size()).isEqualTo(0); + } + + + @Test + @Sql("NoticePersistenceAdapterTest.sql") + void loadNoticeDetail_공지_ID를_이용해서_공지_세부_내용을_조회한다() { + Notice notice = noticePersistenceAdapter.loadNoticeDetail(1L); + + assertThat(notice.getId()).isEqualTo(1L); + } + + @Test + void loadNoticeDetail_공지_ID를_찾지_못한_경우_예외를_발생한다() { + assertThatThrownBy(() -> { + noticePersistenceAdapter.loadNoticeDetail(1L); + }).isInstanceOf( + NoticeNotFoundException.class); + } +} \ No newline at end of file From 43f91248da42406788d5eb7de746c61c8bccfed4 Mon Sep 17 00:00:00 2001 From: akalswl14 Date: Thu, 20 Apr 2023 20:07:27 +0900 Subject: [PATCH 127/141] =?UTF-8?q?:recycle:=20refactor:=20=EC=84=9C?= =?UTF-8?q?=EB=B9=84=EC=8A=A4=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/GetNoticeDetailServiceTest.java | 50 +++++++++++++++++++ .../service/GetNoticeListServiceTest.java | 45 +++++++++++++++++ 2 files changed, 95 insertions(+) create mode 100644 src/test/java/com/yapp/artie/domain/notice/application/service/GetNoticeDetailServiceTest.java create mode 100644 src/test/java/com/yapp/artie/domain/notice/application/service/GetNoticeListServiceTest.java diff --git a/src/test/java/com/yapp/artie/domain/notice/application/service/GetNoticeDetailServiceTest.java b/src/test/java/com/yapp/artie/domain/notice/application/service/GetNoticeDetailServiceTest.java new file mode 100644 index 00000000..72bedae5 --- /dev/null +++ b/src/test/java/com/yapp/artie/domain/notice/application/service/GetNoticeDetailServiceTest.java @@ -0,0 +1,50 @@ +package com.yapp.artie.domain.notice.application.service; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.BDDMockito.given; + +import com.yapp.artie.domain.notice.application.port.in.GetNoticeDetailResponse; +import com.yapp.artie.domain.notice.application.port.out.LoadNoticePort; +import com.yapp.artie.domain.notice.domain.Notice; +import com.yapp.artie.domain.notice.domain.NoticeNotFoundException; +import org.junit.jupiter.api.Test; +import org.mockito.Mockito; + +class GetNoticeDetailServiceTest { + + private final LoadNoticePort loadNoticePort = Mockito.mock(LoadNoticePort.class); + private final GetNoticeDetailService getNoticeDetailService = new GetNoticeDetailService( + loadNoticePort); + + @Test + void loadNoticeDetail_공지_ID를_이용해서_공지_세부_내용을_조회한다() { + Notice notice = Notice.create("공지 제목 1", "공지 내용 1"); + givenNotice(notice); + + GetNoticeDetailResponse noticeDetailResponse = getNoticeDetailService.loadNoticeDetail( + notice.getId()); + + assertThat(noticeDetailResponse.getId()).isEqualTo(notice.getId()); + } + + @Test + void loadNoticeDetail_공지_ID를_찾지_못한_경우_예외를_발생한다() { + givenNoticeByIdWillFail(); + + assertThatThrownBy(() -> getNoticeDetailService.loadNoticeDetail(1L)).isInstanceOf( + NoticeNotFoundException.class); + } + + private void givenNotice(Notice notice) { + given(loadNoticePort.loadNoticeDetail(any())) + .willReturn(notice); + + } + + private void givenNoticeByIdWillFail() { + given(loadNoticePort.loadNoticeDetail(any())) + .willThrow(NoticeNotFoundException.class); + } +} \ No newline at end of file diff --git a/src/test/java/com/yapp/artie/domain/notice/application/service/GetNoticeListServiceTest.java b/src/test/java/com/yapp/artie/domain/notice/application/service/GetNoticeListServiceTest.java new file mode 100644 index 00000000..92791558 --- /dev/null +++ b/src/test/java/com/yapp/artie/domain/notice/application/service/GetNoticeListServiceTest.java @@ -0,0 +1,45 @@ +package com.yapp.artie.domain.notice.application.service; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.BDDMockito.given; + +import com.yapp.artie.domain.notice.application.port.in.GetNoticeDetailResponse; +import com.yapp.artie.domain.notice.application.port.out.LoadNoticePort; +import com.yapp.artie.domain.notice.domain.Notice; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import org.junit.jupiter.api.Test; +import org.mockito.Mockito; + +class GetNoticeListServiceTest { + + private final LoadNoticePort loadNoticePort = Mockito.mock(LoadNoticePort.class); + private final GetNoticeListService getNoticeListService = new GetNoticeListService( + loadNoticePort); + + @Test + void loadNoticeList_모든_공지_조회() { + List notices = Arrays.asList(Notice.create("공지 제목 1", "공지 내용 1"), + Notice.create("공지 제목 2", null)); + givenNoticeList(notices); + + List getNoticeDetailResponses = getNoticeListService.loadNoticeList(); + + assertThat(getNoticeDetailResponses.size()).isEqualTo(2); + assertThat(getNoticeDetailResponses.get(0).getTitle()).isEqualTo("공지 제목 1"); + } + + @Test + void loadNoticeList_공지가_없을_경우_빈_리스트를_반환한다() { + givenNoticeList(new ArrayList<>()); + + List noticeDetailResponses = getNoticeListService.loadNoticeList(); + + assertThat(noticeDetailResponses.size()).isEqualTo(0); + } + + private void givenNoticeList(List notices) { + given(loadNoticePort.loadNoticeList()).willReturn(notices); + } +} \ No newline at end of file From 6c18624513c93e76f84e9f6c3f3c000b09a36de2 Mon Sep 17 00:00:00 2001 From: akalswl14 Date: Thu, 20 Apr 2023 20:09:12 +0900 Subject: [PATCH 128/141] =?UTF-8?q?:recycle:=20refactor:=20=EA=B8=B0?= =?UTF-8?q?=EC=A1=B4=20=EC=84=9C=EB=B9=84=EC=8A=A4=20=ED=85=8C=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../notice/service/NoticeServiceTest.java | 55 ------------------- 1 file changed, 55 deletions(-) delete mode 100644 src/test/java/com/yapp/artie/domain/notice/service/NoticeServiceTest.java diff --git a/src/test/java/com/yapp/artie/domain/notice/service/NoticeServiceTest.java b/src/test/java/com/yapp/artie/domain/notice/service/NoticeServiceTest.java deleted file mode 100644 index e2031a12..00000000 --- a/src/test/java/com/yapp/artie/domain/notice/service/NoticeServiceTest.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.yapp.artie.domain.notice.service; - - -import static org.assertj.core.api.Assertions.assertThat; -import static org.assertj.core.api.Assertions.assertThatThrownBy; - -import com.yapp.artie.domain.notice.application.port.in.GetNoticeDetailResponse; -import com.yapp.artie.domain.notice.domain.Notice; -import com.yapp.artie.domain.notice.domain.NoticeNotFoundException; -import java.util.List; -import javax.persistence.EntityManager; -import org.junit.jupiter.api.Test; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.transaction.annotation.Transactional; - -@Transactional -@SpringBootTest -class NoticeServiceTest { - - @Autowired - EntityManager em; - - @Autowired - NoticeService noticeService; - - @Test - public void notices_공지사항_목록을_조회한다() throws Exception { - for (int i = 0; i < 4; i++) { - Notice notice = Notice.create("test " + i, "sample data"); - em.persist(notice); - } - List notices = noticeService.notices(); - assertThat(notices.size()).isEqualTo(4); - } - - @Test - public void notice_공지사항_상세를_조회한다() throws Exception { - String expectedContents = "sample data"; - Notice notice = Notice.create("test1", expectedContents); - em.persist(notice); - GetNoticeDetailResponse detail = noticeService.notice(notice.getId()); - assertThat(detail.getContents()).isEqualTo(expectedContents); - } - - @Test - public void notice_존재하지_않는_공지사항을_조회_시도할_경우_예외를_발생() throws Exception { - String expectedContents = "sample data"; - Notice notice = Notice.create("test1", expectedContents); - em.persist(notice); - assertThatThrownBy(() -> { - noticeService.notice(22L); - }).isInstanceOf(NoticeNotFoundException.class); - } -} \ No newline at end of file From cc8bf05c970b295e1b5e3fd3d65c321f7a690a7e Mon Sep 17 00:00:00 2001 From: Haneul Lee Date: Thu, 20 Apr 2023 21:21:07 +0900 Subject: [PATCH 129/141] =?UTF-8?q?Revert=20"=EC=A0=84=EC=8B=9C=20?= =?UTF-8?q?=ED=8E=98=EC=9D=B4=EC=A7=80=EB=84=A4=EC=9D=B4=EC=85=98=20?= =?UTF-8?q?=EC=B9=B4=EC=9A=B4=ED=8A=B8=20=EC=BF=BC=EB=A6=AC=20=EC=88=98?= =?UTF-8?q?=EC=A0=95"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../artie/domain/archive/repository/ExhibitRepository.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/yapp/artie/domain/archive/repository/ExhibitRepository.java b/src/main/java/com/yapp/artie/domain/archive/repository/ExhibitRepository.java index 42bded1c..49476417 100644 --- a/src/main/java/com/yapp/artie/domain/archive/repository/ExhibitRepository.java +++ b/src/main/java/com/yapp/artie/domain/archive/repository/ExhibitRepository.java @@ -43,7 +43,7 @@ public interface ExhibitRepository extends JpaRepository { + "where e.user = :user " + "and e.category = :category " + "and e.publication.isPublished = true", - countQuery = "select count(e.id) from Exhibit e where e.publication.isPublished = true" + countQuery = "select count(e.id) from Exhibit e" ) Page findExhibitByCategoryAsPage(Pageable pageable, @Param("user") UserJpaEntity user, @Param("category") Category category); @@ -52,7 +52,7 @@ Page findExhibitByCategoryAsPage(Pageable pageable, @Param("user") User value = "select e from Exhibit e " + "where e.user = :user " + "and e.publication.isPublished = true", - countQuery = "select count(e.id) from Exhibit e where e.publication.isPublished = true" + countQuery = "select count(e.id) from Exhibit e" ) Page findExhibitAsPage(Pageable pageable, @Param("user") UserJpaEntity user); From 3155a5c3dae1293b25d62b96aa61c09e9618cae7 Mon Sep 17 00:00:00 2001 From: leesky Date: Thu, 20 Apr 2023 21:32:18 +0900 Subject: [PATCH 130/141] =?UTF-8?q?fix=20:=20=ED=8E=98=EC=9D=B4=EC=A7=80?= =?UTF-8?q?=EB=84=A4=EC=9D=B4=EC=85=98=20=EC=B9=B4=EC=9A=B4=ED=8A=B8=20?= =?UTF-8?q?=EC=BF=BC=EB=A6=AC=20=EB=88=84=EB=9D=BD=20=ED=95=84=EB=93=9C=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 --- .../domain/archive/repository/ExhibitRepository.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/yapp/artie/domain/archive/repository/ExhibitRepository.java b/src/main/java/com/yapp/artie/domain/archive/repository/ExhibitRepository.java index 49476417..a4b57c02 100644 --- a/src/main/java/com/yapp/artie/domain/archive/repository/ExhibitRepository.java +++ b/src/main/java/com/yapp/artie/domain/archive/repository/ExhibitRepository.java @@ -43,7 +43,9 @@ public interface ExhibitRepository extends JpaRepository { + "where e.user = :user " + "and e.category = :category " + "and e.publication.isPublished = true", - countQuery = "select count(e.id) from Exhibit e" + countQuery = "select count(e.id) from Exhibit e " + + "where e.publication.isPublished = true " + + "and e.category = :category" ) Page findExhibitByCategoryAsPage(Pageable pageable, @Param("user") UserJpaEntity user, @Param("category") Category category); @@ -52,7 +54,9 @@ Page findExhibitByCategoryAsPage(Pageable pageable, @Param("user") User value = "select e from Exhibit e " + "where e.user = :user " + "and e.publication.isPublished = true", - countQuery = "select count(e.id) from Exhibit e" + countQuery = "select count(e.id) from Exhibit e " + + "where e.publication.isPublished = true " + + "and e.user = :user" ) Page findExhibitAsPage(Pageable pageable, @Param("user") UserJpaEntity user); From 0ee24e65f8ec5c1df29fa45f313c1a3947348073 Mon Sep 17 00:00:00 2001 From: akalswl14 Date: Fri, 21 Apr 2023 10:15:36 +0900 Subject: [PATCH 131/141] =?UTF-8?q?:recycle:=20refactor:=20=EC=A0=91?= =?UTF-8?q?=EA=B7=BC=20=EC=A0=9C=EC=96=B4=EC=9E=90=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/notice/adapter/in/web/GetNoticeDetailController.java | 2 +- .../domain/notice/adapter/in/web/GetNoticeListController.java | 2 +- .../adapter/out/persistence/NoticePersistenceAdapter.java | 2 +- .../domain/notice/adapter/out/persistence/NoticeRepository.java | 2 +- .../notice/application/service/GetNoticeDetailService.java | 2 +- .../domain/notice/application/service/GetNoticeListService.java | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/yapp/artie/domain/notice/adapter/in/web/GetNoticeDetailController.java b/src/main/java/com/yapp/artie/domain/notice/adapter/in/web/GetNoticeDetailController.java index 5eb00d44..9e8b6cae 100644 --- a/src/main/java/com/yapp/artie/domain/notice/adapter/in/web/GetNoticeDetailController.java +++ b/src/main/java/com/yapp/artie/domain/notice/adapter/in/web/GetNoticeDetailController.java @@ -18,7 +18,7 @@ @RequestMapping("/notice") @RequiredArgsConstructor @RestController -public class GetNoticeDetailController { +class GetNoticeDetailController { private final GetNoticeDetailQuery getNoticeDetailQuery; diff --git a/src/main/java/com/yapp/artie/domain/notice/adapter/in/web/GetNoticeListController.java b/src/main/java/com/yapp/artie/domain/notice/adapter/in/web/GetNoticeListController.java index ae55cad3..87934d19 100644 --- a/src/main/java/com/yapp/artie/domain/notice/adapter/in/web/GetNoticeListController.java +++ b/src/main/java/com/yapp/artie/domain/notice/adapter/in/web/GetNoticeListController.java @@ -19,7 +19,7 @@ @RequestMapping("/notice") @RequiredArgsConstructor @RestController -public class GetNoticeListController { +class GetNoticeListController { private final GetNoticeListQuery getNoticeListQuery; diff --git a/src/main/java/com/yapp/artie/domain/notice/adapter/out/persistence/NoticePersistenceAdapter.java b/src/main/java/com/yapp/artie/domain/notice/adapter/out/persistence/NoticePersistenceAdapter.java index 4b35258d..bad03057 100644 --- a/src/main/java/com/yapp/artie/domain/notice/adapter/out/persistence/NoticePersistenceAdapter.java +++ b/src/main/java/com/yapp/artie/domain/notice/adapter/out/persistence/NoticePersistenceAdapter.java @@ -9,7 +9,7 @@ @PersistenceAdapter @AllArgsConstructor -public class NoticePersistenceAdapter implements LoadNoticePort { +class NoticePersistenceAdapter implements LoadNoticePort { final NoticeRepository noticeRepository; diff --git a/src/main/java/com/yapp/artie/domain/notice/adapter/out/persistence/NoticeRepository.java b/src/main/java/com/yapp/artie/domain/notice/adapter/out/persistence/NoticeRepository.java index f790ad16..d21293e6 100644 --- a/src/main/java/com/yapp/artie/domain/notice/adapter/out/persistence/NoticeRepository.java +++ b/src/main/java/com/yapp/artie/domain/notice/adapter/out/persistence/NoticeRepository.java @@ -5,6 +5,6 @@ import org.springframework.stereotype.Repository; @Repository -public interface NoticeRepository extends JpaRepository { +interface NoticeRepository extends JpaRepository { } diff --git a/src/main/java/com/yapp/artie/domain/notice/application/service/GetNoticeDetailService.java b/src/main/java/com/yapp/artie/domain/notice/application/service/GetNoticeDetailService.java index c6712fa4..aea62094 100644 --- a/src/main/java/com/yapp/artie/domain/notice/application/service/GetNoticeDetailService.java +++ b/src/main/java/com/yapp/artie/domain/notice/application/service/GetNoticeDetailService.java @@ -9,7 +9,7 @@ @UseCase @AllArgsConstructor -public class GetNoticeDetailService implements GetNoticeDetailQuery { +class GetNoticeDetailService implements GetNoticeDetailQuery { final LoadNoticePort loadNoticePort; diff --git a/src/main/java/com/yapp/artie/domain/notice/application/service/GetNoticeListService.java b/src/main/java/com/yapp/artie/domain/notice/application/service/GetNoticeListService.java index e88031f8..146f520d 100644 --- a/src/main/java/com/yapp/artie/domain/notice/application/service/GetNoticeListService.java +++ b/src/main/java/com/yapp/artie/domain/notice/application/service/GetNoticeListService.java @@ -10,7 +10,7 @@ @UseCase @AllArgsConstructor -public class GetNoticeListService implements GetNoticeListQuery { +class GetNoticeListService implements GetNoticeListQuery { final LoadNoticePort loadNoticePort; From 63e2e5bffeb9f3c9f4f2510b90d5b54a16e618d3 Mon Sep 17 00:00:00 2001 From: akalswl14 Date: Sat, 22 Apr 2023 02:17:54 +0900 Subject: [PATCH 132/141] =?UTF-8?q?:recycle:=20refactor:=20Controller?= =?UTF-8?q?=EC=97=90=20@WebAdapter=20=EC=96=B4=EB=85=B8=ED=85=8C=EC=9D=B4?= =?UTF-8?q?=EC=85=98=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/notice/adapter/in/web/GetNoticeDetailController.java | 2 ++ .../domain/notice/adapter/in/web/GetNoticeListController.java | 2 ++ 2 files changed, 4 insertions(+) diff --git a/src/main/java/com/yapp/artie/domain/notice/adapter/in/web/GetNoticeDetailController.java b/src/main/java/com/yapp/artie/domain/notice/adapter/in/web/GetNoticeDetailController.java index 9e8b6cae..8a144f05 100644 --- a/src/main/java/com/yapp/artie/domain/notice/adapter/in/web/GetNoticeDetailController.java +++ b/src/main/java/com/yapp/artie/domain/notice/adapter/in/web/GetNoticeDetailController.java @@ -3,6 +3,7 @@ import com.yapp.artie.domain.notice.application.port.in.GetNoticeDetailQuery; import com.yapp.artie.domain.notice.application.port.in.GetNoticeDetailResponse; +import com.yapp.artie.global.common.annotation.WebAdapter; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.Content; import io.swagger.v3.oas.annotations.media.Schema; @@ -15,6 +16,7 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +@WebAdapter @RequestMapping("/notice") @RequiredArgsConstructor @RestController diff --git a/src/main/java/com/yapp/artie/domain/notice/adapter/in/web/GetNoticeListController.java b/src/main/java/com/yapp/artie/domain/notice/adapter/in/web/GetNoticeListController.java index 87934d19..674d3f8e 100644 --- a/src/main/java/com/yapp/artie/domain/notice/adapter/in/web/GetNoticeListController.java +++ b/src/main/java/com/yapp/artie/domain/notice/adapter/in/web/GetNoticeListController.java @@ -3,6 +3,7 @@ import com.yapp.artie.domain.notice.application.port.in.GetNoticeDetailResponse; import com.yapp.artie.domain.notice.application.port.in.GetNoticeListQuery; +import com.yapp.artie.global.common.annotation.WebAdapter; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.ArraySchema; import io.swagger.v3.oas.annotations.media.Content; @@ -16,6 +17,7 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +@WebAdapter @RequestMapping("/notice") @RequiredArgsConstructor @RestController From a57e734c20988f7acf9da0cece8a381f73701e3b Mon Sep 17 00:00:00 2001 From: akalswl14 Date: Sat, 22 Apr 2023 16:33:30 +0900 Subject: [PATCH 133/141] =?UTF-8?q?:recycle:=20refactor:=20=EC=A0=91?= =?UTF-8?q?=EA=B7=BC=20=EC=A0=9C=EC=96=B4=EC=9E=90=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../adapter/out/persistence/NoticePersistenceAdapter.java | 2 +- .../notice/application/service/GetNoticeDetailService.java | 2 +- .../domain/notice/application/service/GetNoticeListService.java | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/yapp/artie/domain/notice/adapter/out/persistence/NoticePersistenceAdapter.java b/src/main/java/com/yapp/artie/domain/notice/adapter/out/persistence/NoticePersistenceAdapter.java index bad03057..9e1fea2a 100644 --- a/src/main/java/com/yapp/artie/domain/notice/adapter/out/persistence/NoticePersistenceAdapter.java +++ b/src/main/java/com/yapp/artie/domain/notice/adapter/out/persistence/NoticePersistenceAdapter.java @@ -11,7 +11,7 @@ @AllArgsConstructor class NoticePersistenceAdapter implements LoadNoticePort { - final NoticeRepository noticeRepository; + private final NoticeRepository noticeRepository; @Override public List loadNoticeList() { diff --git a/src/main/java/com/yapp/artie/domain/notice/application/service/GetNoticeDetailService.java b/src/main/java/com/yapp/artie/domain/notice/application/service/GetNoticeDetailService.java index aea62094..16031c6e 100644 --- a/src/main/java/com/yapp/artie/domain/notice/application/service/GetNoticeDetailService.java +++ b/src/main/java/com/yapp/artie/domain/notice/application/service/GetNoticeDetailService.java @@ -11,7 +11,7 @@ @AllArgsConstructor class GetNoticeDetailService implements GetNoticeDetailQuery { - final LoadNoticePort loadNoticePort; + private final LoadNoticePort loadNoticePort; @Override public GetNoticeDetailResponse loadNoticeDetail(Long id) { diff --git a/src/main/java/com/yapp/artie/domain/notice/application/service/GetNoticeListService.java b/src/main/java/com/yapp/artie/domain/notice/application/service/GetNoticeListService.java index 146f520d..908c7013 100644 --- a/src/main/java/com/yapp/artie/domain/notice/application/service/GetNoticeListService.java +++ b/src/main/java/com/yapp/artie/domain/notice/application/service/GetNoticeListService.java @@ -12,7 +12,7 @@ @AllArgsConstructor class GetNoticeListService implements GetNoticeListQuery { - final LoadNoticePort loadNoticePort; + private final LoadNoticePort loadNoticePort; @Override public List loadNoticeList() { From eafd3e3f2f543f78b80253b7de93f330c4295fe1 Mon Sep 17 00:00:00 2001 From: akalswl14 Date: Sat, 22 Apr 2023 16:35:40 +0900 Subject: [PATCH 134/141] =?UTF-8?q?:recycle:=20refactor:=20=EB=B6=88?= =?UTF-8?q?=ED=95=84=EC=9A=94=ED=95=9C=20=EA=B3=B5=EB=B0=B1=20=EC=A0=9C?= =?UTF-8?q?=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../notice/application/service/GetNoticeDetailServiceTest.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/test/java/com/yapp/artie/domain/notice/application/service/GetNoticeDetailServiceTest.java b/src/test/java/com/yapp/artie/domain/notice/application/service/GetNoticeDetailServiceTest.java index 72bedae5..0173a114 100644 --- a/src/test/java/com/yapp/artie/domain/notice/application/service/GetNoticeDetailServiceTest.java +++ b/src/test/java/com/yapp/artie/domain/notice/application/service/GetNoticeDetailServiceTest.java @@ -40,7 +40,6 @@ class GetNoticeDetailServiceTest { private void givenNotice(Notice notice) { given(loadNoticePort.loadNoticeDetail(any())) .willReturn(notice); - } private void givenNoticeByIdWillFail() { From 55804c555ff19ebaa376479be027dd709b3f6569 Mon Sep 17 00:00:00 2001 From: akalswl14 Date: Sat, 22 Apr 2023 16:59:11 +0900 Subject: [PATCH 135/141] =?UTF-8?q?:art:=20refactor:=20WebAdapter=20?= =?UTF-8?q?=EC=BB=A4=EC=8A=A4=ED=85=80=20=EC=96=B4=EB=85=B8=ED=85=8C?= =?UTF-8?q?=EC=9D=B4=EC=85=98=EC=9D=B4=20RestController=EC=97=AD=ED=95=A0?= =?UTF-8?q?=EC=9D=84=20=ED=95=98=EB=8F=84=EB=A1=9D=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../notice/adapter/in/web/GetNoticeDetailController.java | 2 -- .../notice/adapter/in/web/GetNoticeListController.java | 2 -- .../domain/user/adapter/in/web/GetUserController.java | 2 -- .../user/adapter/in/web/GetUserThumbnailController.java | 2 -- .../domain/user/adapter/in/web/RegisterUserController.java | 2 -- .../domain/user/adapter/in/web/RenameUserController.java | 2 -- .../user/adapter/in/web/UserWithdrawalController.java | 2 -- .../yapp/artie/global/common/annotation/WebAdapter.java | 7 ++++--- 8 files changed, 4 insertions(+), 17 deletions(-) diff --git a/src/main/java/com/yapp/artie/domain/notice/adapter/in/web/GetNoticeDetailController.java b/src/main/java/com/yapp/artie/domain/notice/adapter/in/web/GetNoticeDetailController.java index 8a144f05..8048c59c 100644 --- a/src/main/java/com/yapp/artie/domain/notice/adapter/in/web/GetNoticeDetailController.java +++ b/src/main/java/com/yapp/artie/domain/notice/adapter/in/web/GetNoticeDetailController.java @@ -14,12 +14,10 @@ import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; @WebAdapter @RequestMapping("/notice") @RequiredArgsConstructor -@RestController class GetNoticeDetailController { private final GetNoticeDetailQuery getNoticeDetailQuery; diff --git a/src/main/java/com/yapp/artie/domain/notice/adapter/in/web/GetNoticeListController.java b/src/main/java/com/yapp/artie/domain/notice/adapter/in/web/GetNoticeListController.java index 674d3f8e..b9078e8e 100644 --- a/src/main/java/com/yapp/artie/domain/notice/adapter/in/web/GetNoticeListController.java +++ b/src/main/java/com/yapp/artie/domain/notice/adapter/in/web/GetNoticeListController.java @@ -15,12 +15,10 @@ 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; @WebAdapter @RequestMapping("/notice") @RequiredArgsConstructor -@RestController class GetNoticeListController { private final GetNoticeListQuery getNoticeListQuery; diff --git a/src/main/java/com/yapp/artie/domain/user/adapter/in/web/GetUserController.java b/src/main/java/com/yapp/artie/domain/user/adapter/in/web/GetUserController.java index b5ccc51e..a82519f1 100644 --- a/src/main/java/com/yapp/artie/domain/user/adapter/in/web/GetUserController.java +++ b/src/main/java/com/yapp/artie/domain/user/adapter/in/web/GetUserController.java @@ -14,10 +14,8 @@ import org.springframework.security.core.Authentication; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; @WebAdapter -@RestController @RequestMapping("/user") @RequiredArgsConstructor class GetUserController { diff --git a/src/main/java/com/yapp/artie/domain/user/adapter/in/web/GetUserThumbnailController.java b/src/main/java/com/yapp/artie/domain/user/adapter/in/web/GetUserThumbnailController.java index 5eabf276..fbacfbba 100644 --- a/src/main/java/com/yapp/artie/domain/user/adapter/in/web/GetUserThumbnailController.java +++ b/src/main/java/com/yapp/artie/domain/user/adapter/in/web/GetUserThumbnailController.java @@ -15,10 +15,8 @@ import org.springframework.security.core.Authentication; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; @WebAdapter -@RestController @RequestMapping("/user") @RequiredArgsConstructor class GetUserThumbnailController { diff --git a/src/main/java/com/yapp/artie/domain/user/adapter/in/web/RegisterUserController.java b/src/main/java/com/yapp/artie/domain/user/adapter/in/web/RegisterUserController.java index c742dee7..39cffaf2 100644 --- a/src/main/java/com/yapp/artie/domain/user/adapter/in/web/RegisterUserController.java +++ b/src/main/java/com/yapp/artie/domain/user/adapter/in/web/RegisterUserController.java @@ -19,10 +19,8 @@ import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; @WebAdapter -@RestController @RequestMapping("/user") @RequiredArgsConstructor class RegisterUserController { diff --git a/src/main/java/com/yapp/artie/domain/user/adapter/in/web/RenameUserController.java b/src/main/java/com/yapp/artie/domain/user/adapter/in/web/RenameUserController.java index f4335f3a..a0389ad9 100644 --- a/src/main/java/com/yapp/artie/domain/user/adapter/in/web/RenameUserController.java +++ b/src/main/java/com/yapp/artie/domain/user/adapter/in/web/RenameUserController.java @@ -19,11 +19,9 @@ import org.springframework.web.bind.annotation.PatchMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; @WebAdapter -@RestController @RequestMapping("/user") @RequiredArgsConstructor class RenameUserController { diff --git a/src/main/java/com/yapp/artie/domain/user/adapter/in/web/UserWithdrawalController.java b/src/main/java/com/yapp/artie/domain/user/adapter/in/web/UserWithdrawalController.java index 29df60c1..f622ad05 100644 --- a/src/main/java/com/yapp/artie/domain/user/adapter/in/web/UserWithdrawalController.java +++ b/src/main/java/com/yapp/artie/domain/user/adapter/in/web/UserWithdrawalController.java @@ -14,10 +14,8 @@ import org.springframework.security.core.Authentication; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; @WebAdapter -@RestController @RequestMapping("/user") @RequiredArgsConstructor class UserWithdrawalController { diff --git a/src/main/java/com/yapp/artie/global/common/annotation/WebAdapter.java b/src/main/java/com/yapp/artie/global/common/annotation/WebAdapter.java index d4d38c77..f9560fb0 100644 --- a/src/main/java/com/yapp/artie/global/common/annotation/WebAdapter.java +++ b/src/main/java/com/yapp/artie/global/common/annotation/WebAdapter.java @@ -5,13 +5,14 @@ import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; import org.springframework.core.annotation.AliasFor; -import org.springframework.stereotype.Component; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RestController; @Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) -@Component +@RestController public @interface WebAdapter { - @AliasFor(annotation = Component.class) + @AliasFor(annotation = Controller.class) String value() default ""; } From e3b6755f242be365a3ce617c34ebd2c3e5229f47 Mon Sep 17 00:00:00 2001 From: akalswl14 Date: Mon, 24 Apr 2023 13:01:03 +0900 Subject: [PATCH 136/141] =?UTF-8?q?:recycle:=20refactor:=20=EB=B6=88?= =?UTF-8?q?=ED=95=84=EC=9A=94=ED=95=9C=20@Respository=20=EC=96=B4=EB=85=B8?= =?UTF-8?q?=ED=85=8C=EC=9D=B4=EC=85=98=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit JPA Repository는 자동으로 빈이 등록되므로, @Respository 어노테이션을 제거함 --- .../domain/notice/adapter/out/persistence/NoticeRepository.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/main/java/com/yapp/artie/domain/notice/adapter/out/persistence/NoticeRepository.java b/src/main/java/com/yapp/artie/domain/notice/adapter/out/persistence/NoticeRepository.java index d21293e6..4fe51e9f 100644 --- a/src/main/java/com/yapp/artie/domain/notice/adapter/out/persistence/NoticeRepository.java +++ b/src/main/java/com/yapp/artie/domain/notice/adapter/out/persistence/NoticeRepository.java @@ -2,9 +2,7 @@ import com.yapp.artie.domain.notice.domain.Notice; import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; -@Repository interface NoticeRepository extends JpaRepository { } From ad0c4f05ffa086d3f813fbfd3bc70ee726ab21e4 Mon Sep 17 00:00:00 2001 From: akalswl14 Date: Mon, 24 Apr 2023 13:06:00 +0900 Subject: [PATCH 137/141] =?UTF-8?q?:recycle:=20refactor:=20=EC=9D=BD?= =?UTF-8?q?=EA=B8=B0=20=EC=A0=84=EC=9A=A9=20=EA=B3=B5=EC=A7=80=20=EC=A1=B0?= =?UTF-8?q?=ED=9A=8C=20=EC=84=9C=EB=B9=84=EC=8A=A4=EC=97=90=20@Transaction?= =?UTF-8?q?al(readOnly=20=3D=20true)=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../notice/application/service/GetNoticeDetailService.java | 2 ++ .../domain/notice/application/service/GetNoticeListService.java | 2 ++ 2 files changed, 4 insertions(+) diff --git a/src/main/java/com/yapp/artie/domain/notice/application/service/GetNoticeDetailService.java b/src/main/java/com/yapp/artie/domain/notice/application/service/GetNoticeDetailService.java index 16031c6e..03f72511 100644 --- a/src/main/java/com/yapp/artie/domain/notice/application/service/GetNoticeDetailService.java +++ b/src/main/java/com/yapp/artie/domain/notice/application/service/GetNoticeDetailService.java @@ -6,8 +6,10 @@ import com.yapp.artie.domain.notice.domain.Notice; import com.yapp.artie.global.common.annotation.UseCase; import lombok.AllArgsConstructor; +import org.springframework.transaction.annotation.Transactional; @UseCase +@Transactional(readOnly = true) @AllArgsConstructor class GetNoticeDetailService implements GetNoticeDetailQuery { diff --git a/src/main/java/com/yapp/artie/domain/notice/application/service/GetNoticeListService.java b/src/main/java/com/yapp/artie/domain/notice/application/service/GetNoticeListService.java index 908c7013..023bff0a 100644 --- a/src/main/java/com/yapp/artie/domain/notice/application/service/GetNoticeListService.java +++ b/src/main/java/com/yapp/artie/domain/notice/application/service/GetNoticeListService.java @@ -7,8 +7,10 @@ import java.util.List; import java.util.stream.Collectors; import lombok.AllArgsConstructor; +import org.springframework.transaction.annotation.Transactional; @UseCase +@Transactional(readOnly = true) @AllArgsConstructor class GetNoticeListService implements GetNoticeListQuery { From e4f59f990a7d4354cd812a4f11d4544406ea9f56 Mon Sep 17 00:00:00 2001 From: akalswl14 Date: Mon, 24 Apr 2023 13:40:42 +0900 Subject: [PATCH 138/141] =?UTF-8?q?:recycle:=20refactor:=20Validation=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 --- src/main/java/com/yapp/artie/domain/notice/domain/Notice.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/com/yapp/artie/domain/notice/domain/Notice.java b/src/main/java/com/yapp/artie/domain/notice/domain/Notice.java index f8f1b525..d7d8a914 100644 --- a/src/main/java/com/yapp/artie/domain/notice/domain/Notice.java +++ b/src/main/java/com/yapp/artie/domain/notice/domain/Notice.java @@ -6,6 +6,8 @@ import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; import lombok.AccessLevel; import lombok.Getter; import lombok.NoArgsConstructor; @@ -20,12 +22,14 @@ public class Notice { @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; + @NotBlank @Column(nullable = false) private String title; @Column(columnDefinition = "text") private String contents; + @NotNull @Column(nullable = false, updatable = false) @CreatedDate private LocalDateTime createdAt; From 730f9790d1444a482a1f708b9f58daddd713c292 Mon Sep 17 00:00:00 2001 From: akalswl14 Date: Wed, 26 Apr 2023 18:39:43 +0900 Subject: [PATCH 139/141] =?UTF-8?q?:sparkles:=20feature:=20=ED=85=8C?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=20=EC=9C=A0=EC=A0=80=20=ED=86=A0=ED=81=B0=20?= =?UTF-8?q?=EB=B0=9C=EA=B8=89=20API=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../in/web/GetTestUserTokenController.java | 34 ++++++++++++++++++ .../FirebaseAuthenticationAdapter.java | 10 +++++- .../FirebaseTokenGenerator.java | 35 +++++++++++++++++++ .../port/in/GetTestUserTokenQuery.java | 6 ++++ .../port/in/GetTestUserTokenResponse.java | 14 ++++++++ .../port/out/GenerateTestTokenPort.java | 6 ++++ .../service/GetTestUserTokenService.java | 23 ++++++++++++ 7 files changed, 127 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/yapp/artie/domain/user/adapter/in/web/GetTestUserTokenController.java create mode 100644 src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/FirebaseTokenGenerator.java create mode 100644 src/main/java/com/yapp/artie/domain/user/application/port/in/GetTestUserTokenQuery.java create mode 100644 src/main/java/com/yapp/artie/domain/user/application/port/in/GetTestUserTokenResponse.java create mode 100644 src/main/java/com/yapp/artie/domain/user/application/port/out/GenerateTestTokenPort.java create mode 100644 src/main/java/com/yapp/artie/domain/user/application/service/GetTestUserTokenService.java diff --git a/src/main/java/com/yapp/artie/domain/user/adapter/in/web/GetTestUserTokenController.java b/src/main/java/com/yapp/artie/domain/user/adapter/in/web/GetTestUserTokenController.java new file mode 100644 index 00000000..c50c1fd5 --- /dev/null +++ b/src/main/java/com/yapp/artie/domain/user/adapter/in/web/GetTestUserTokenController.java @@ -0,0 +1,34 @@ +package com.yapp.artie.domain.user.adapter.in.web; + +import com.yapp.artie.domain.user.application.port.in.GetTestUserTokenQuery; +import com.yapp.artie.domain.user.application.port.in.GetTestUserTokenResponse; +import com.yapp.artie.global.common.annotation.WebAdapter; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.responses.ApiResponses; +import lombok.RequiredArgsConstructor; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; + +// TODO: 추후 서비스 QA 기간 종료된 이후, 개발 서버에만 공개하거나, 삭제해야함 +@WebAdapter +@RequestMapping("/user") +@RequiredArgsConstructor +class GetTestUserTokenController { + + private final GetTestUserTokenQuery getTestUserTokenQuery; + + @Operation(summary = "테스트 유저 토큰 발급 API", description = "테스트 유저에 대한 Firebase Custom Token을 발급하여 반환함") + @ApiResponses(value = { + @ApiResponse( + responseCode = "200", + description = "테스트 유저에 대한 Firebase Custom Token을 성공적으로 발급하여 반환함") + }) + @GetMapping("/test/token") + public ResponseEntity getTestUserToken() { + Long userId = 1L; + String token = getTestUserTokenQuery.loadTestUserToken(userId); + return ResponseEntity.ok().body(new GetTestUserTokenResponse(token)); + } +} diff --git a/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/FirebaseAuthenticationAdapter.java b/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/FirebaseAuthenticationAdapter.java index 0ce7cf26..92d6cce0 100644 --- a/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/FirebaseAuthenticationAdapter.java +++ b/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/FirebaseAuthenticationAdapter.java @@ -1,6 +1,7 @@ package com.yapp.artie.domain.user.adapter.out.authentication; import com.yapp.artie.domain.user.application.port.out.DeleteExternalUserPort; +import com.yapp.artie.domain.user.application.port.out.GenerateTestTokenPort; import com.yapp.artie.domain.user.application.port.out.TokenParsingPort; import com.yapp.artie.domain.user.domain.ArtieToken; import com.yapp.artie.global.common.annotation.AuthenticationAdapter; @@ -10,11 +11,13 @@ @Slf4j @AuthenticationAdapter @RequiredArgsConstructor -class FirebaseAuthenticationAdapter implements DeleteExternalUserPort, TokenParsingPort { +class FirebaseAuthenticationAdapter implements DeleteExternalUserPort, TokenParsingPort, + GenerateTestTokenPort { private final FirebaseUserRemover firebaseUserRemover; private final JwtDecoder decoder; private final TokenGenerator tokenGenerator; + private final FirebaseTokenGenerator firebaseTokenGenerator; @Override public ArtieToken parseToken(String header) { @@ -42,4 +45,9 @@ private String refineHeaderAsToken(String header) { return header; } + + @Override + public String generateTestToken(String uid) { + return firebaseTokenGenerator.generate(uid); + } } diff --git a/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/FirebaseTokenGenerator.java b/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/FirebaseTokenGenerator.java new file mode 100644 index 00000000..3f20b405 --- /dev/null +++ b/src/main/java/com/yapp/artie/domain/user/adapter/out/authentication/FirebaseTokenGenerator.java @@ -0,0 +1,35 @@ +package com.yapp.artie.domain.user.adapter.out.authentication; + +import com.google.firebase.auth.AbstractFirebaseAuth; +import com.google.firebase.auth.AuthErrorCode; +import com.google.firebase.auth.FirebaseAuthException; +import com.yapp.artie.global.common.exception.BusinessException; +import java.util.Objects; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; + +@Component +@RequiredArgsConstructor +class FirebaseTokenGenerator { + + private final AbstractFirebaseAuth firebaseAuth; + + public String generate(String uid) { + try { + return firebaseAuth.createCustomToken(uid); + } catch (IllegalArgumentException e) { + throw new InvalidFirebaseUidException(); + } catch (FirebaseAuthException e) { + throw processRemoveException(e); + } + } + + private BusinessException processRemoveException(FirebaseAuthException e) { + if (Objects.requireNonNull(e.getAuthErrorCode()) == AuthErrorCode.USER_NOT_FOUND) { + return new FirebaseUserNotFoundException(); + } + + return new InvalidFirebaseUidException(); + } +} + diff --git a/src/main/java/com/yapp/artie/domain/user/application/port/in/GetTestUserTokenQuery.java b/src/main/java/com/yapp/artie/domain/user/application/port/in/GetTestUserTokenQuery.java new file mode 100644 index 00000000..2960bd99 --- /dev/null +++ b/src/main/java/com/yapp/artie/domain/user/application/port/in/GetTestUserTokenQuery.java @@ -0,0 +1,6 @@ +package com.yapp.artie.domain.user.application.port.in; + +public interface GetTestUserTokenQuery { + + String loadTestUserToken(Long userId); +} diff --git a/src/main/java/com/yapp/artie/domain/user/application/port/in/GetTestUserTokenResponse.java b/src/main/java/com/yapp/artie/domain/user/application/port/in/GetTestUserTokenResponse.java new file mode 100644 index 00000000..1bc6f47b --- /dev/null +++ b/src/main/java/com/yapp/artie/domain/user/application/port/in/GetTestUserTokenResponse.java @@ -0,0 +1,14 @@ +package com.yapp.artie.domain.user.application.port.in; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +@Getter +@Schema(description = "테스트 유저 토큰 발급 Response") +@RequiredArgsConstructor +public class GetTestUserTokenResponse { + + @Schema(description = "테스트 유저 토큰") + private final String token; +} \ No newline at end of file diff --git a/src/main/java/com/yapp/artie/domain/user/application/port/out/GenerateTestTokenPort.java b/src/main/java/com/yapp/artie/domain/user/application/port/out/GenerateTestTokenPort.java new file mode 100644 index 00000000..8a494af4 --- /dev/null +++ b/src/main/java/com/yapp/artie/domain/user/application/port/out/GenerateTestTokenPort.java @@ -0,0 +1,6 @@ +package com.yapp.artie.domain.user.application.port.out; + +public interface GenerateTestTokenPort { + + String generateTestToken(String uid); +} diff --git a/src/main/java/com/yapp/artie/domain/user/application/service/GetTestUserTokenService.java b/src/main/java/com/yapp/artie/domain/user/application/service/GetTestUserTokenService.java new file mode 100644 index 00000000..883de48e --- /dev/null +++ b/src/main/java/com/yapp/artie/domain/user/application/service/GetTestUserTokenService.java @@ -0,0 +1,23 @@ +package com.yapp.artie.domain.user.application.service; + +import com.yapp.artie.domain.user.application.port.in.GetTestUserTokenQuery; +import com.yapp.artie.domain.user.application.port.out.GenerateTestTokenPort; +import com.yapp.artie.domain.user.application.port.out.LoadUserPort; +import com.yapp.artie.global.common.annotation.UseCase; +import lombok.RequiredArgsConstructor; +import org.springframework.transaction.annotation.Transactional; + +@UseCase +@Transactional(readOnly = true) +@RequiredArgsConstructor +class GetTestUserTokenService implements GetTestUserTokenQuery { + + private final LoadUserPort loadUserPort; + private final GenerateTestTokenPort generateTestTokenPort; + + @Override + public String loadTestUserToken(Long userId) { + String uid = loadUserPort.loadById(userId).getUid(); + return generateTestTokenPort.generateTestToken(uid); + } +} From 281f609ec5c9475ead327d9d780caf711e68d4aa Mon Sep 17 00:00:00 2001 From: akalswl14 Date: Wed, 26 Apr 2023 18:40:00 +0900 Subject: [PATCH 140/141] =?UTF-8?q?:sparkles:=20feature:=20=ED=85=8C?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=20=EC=9C=A0=EC=A0=80=20=ED=86=A0=ED=81=B0=20?= =?UTF-8?q?=EB=B0=9C=EA=B8=89=20API=EB=8A=94=20authentication=20=EC=B2=98?= =?UTF-8?q?=EB=A6=AC=20=ED=95=98=EC=A7=80=20=EC=95=8A=EC=9D=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/yapp/artie/global/config/SecurityConfig.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/yapp/artie/global/config/SecurityConfig.java b/src/main/java/com/yapp/artie/global/config/SecurityConfig.java index 9372cd70..7842d933 100644 --- a/src/main/java/com/yapp/artie/global/config/SecurityConfig.java +++ b/src/main/java/com/yapp/artie/global/config/SecurityConfig.java @@ -51,6 +51,7 @@ public void configure(WebSecurity web) throws Exception { .antMatchers("/") .antMatchers("/swagger-ui/**") .antMatchers("/v3/api-docs/**") - .antMatchers("/resources/**"); + .antMatchers("/resources/**") + .antMatchers("/user/test/token"); } } \ No newline at end of file From 9d941974aa3bbea5ae60b79b56209762af5663a8 Mon Sep 17 00:00:00 2001 From: akalswl14 Date: Wed, 26 Apr 2023 18:40:15 +0900 Subject: [PATCH 141/141] =?UTF-8?q?:sparkles:=20feature:=20=ED=85=8C?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=20=EC=9C=A0=EC=A0=80=20=ED=86=A0=ED=81=B0=20?= =?UTF-8?q?=EB=B0=9C=EA=B8=89=20API=20=ED=85=8C=EC=8A=A4=ED=8A=B8=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 --- .../web/GetTestUserTokenControllerTest.java | 33 +++++++++++++++ .../FirebaseAuthenticationAdapterTest.java | 11 ++++- .../service/GetTestUserTokenServiceTest.java | 40 +++++++++++++++++++ 3 files changed, 83 insertions(+), 1 deletion(-) create mode 100644 src/test/java/com/yapp/artie/domain/user/adapter/in/web/GetTestUserTokenControllerTest.java create mode 100644 src/test/java/com/yapp/artie/domain/user/application/service/GetTestUserTokenServiceTest.java diff --git a/src/test/java/com/yapp/artie/domain/user/adapter/in/web/GetTestUserTokenControllerTest.java b/src/test/java/com/yapp/artie/domain/user/adapter/in/web/GetTestUserTokenControllerTest.java new file mode 100644 index 00000000..20d4fd12 --- /dev/null +++ b/src/test/java/com/yapp/artie/domain/user/adapter/in/web/GetTestUserTokenControllerTest.java @@ -0,0 +1,33 @@ +package com.yapp.artie.domain.user.adapter.in.web; + +import static com.yapp.artie.common.UserTestData.defaultUser; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.BDDMockito.then; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +import com.yapp.artie.common.BaseControllerIntegrationTest; +import com.yapp.artie.domain.user.application.port.in.GetTestUserTokenQuery; +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; +import org.springframework.boot.test.mock.mockito.MockBean; + +@WebMvcTest(controllers = GetTestUserTokenController.class) +class GetTestUserTokenControllerTest extends BaseControllerIntegrationTest { + + @MockBean + private GetTestUserTokenQuery getTestUserTokenQuery; + + @Test + void testGetTestUserTokenQuery() throws Exception { + givenUserByReference(defaultUser().withId(1L).build()); + + mvc.perform(get("/user/test/token") + .header("Content-Type", "application/json") + ) + .andExpect(status().isOk()); + + then(getTestUserTokenQuery).should() + .loadTestUserToken(eq(1L)); + } +} \ No newline at end of file diff --git a/src/test/java/com/yapp/artie/domain/user/adapter/out/authentication/FirebaseAuthenticationAdapterTest.java b/src/test/java/com/yapp/artie/domain/user/adapter/out/authentication/FirebaseAuthenticationAdapterTest.java index 442a83ae..fea07790 100644 --- a/src/test/java/com/yapp/artie/domain/user/adapter/out/authentication/FirebaseAuthenticationAdapterTest.java +++ b/src/test/java/com/yapp/artie/domain/user/adapter/out/authentication/FirebaseAuthenticationAdapterTest.java @@ -20,8 +20,11 @@ class FirebaseAuthenticationAdapterTest { private final JwtDecoder jwtDecoder = Mockito.mock(JwtDecoder.class); private final FirebaseUserRemover firebaseUserRemover = Mockito.mock(FirebaseUserRemover.class); private final TokenGenerator tokenGenerator = Mockito.mock(TokenGenerator.class); + private final FirebaseTokenGenerator firebaseTokenGenerator = Mockito.mock( + FirebaseTokenGenerator.class); private final FirebaseAuthenticationAdapter adapterUnderTest = - new FirebaseAuthenticationAdapter(firebaseUserRemover, jwtDecoder, tokenGenerator); + new FirebaseAuthenticationAdapter(firebaseUserRemover, jwtDecoder, tokenGenerator, + firebaseTokenGenerator); @Test void parseToken_헤더가_null인_경우_예외를_발생한다() { @@ -78,6 +81,12 @@ class FirebaseAuthenticationAdapterTest { .remove(eq("uid")); } + @Test + public void generateTestToken_주어진_uid를_가지는_테스트유저의_FirebaseCustomToken발급을_요청한다() { + adapterUnderTest.generateTestToken("uid"); + then(firebaseTokenGenerator).should().generate("uid"); + } + private void givenArtieTokenByReference(User user) { given(tokenGenerator.generateDomainToken(any())) .willReturn(new ArtieToken(user.getUid(), user.getName(), user.getProfileImage())); diff --git a/src/test/java/com/yapp/artie/domain/user/application/service/GetTestUserTokenServiceTest.java b/src/test/java/com/yapp/artie/domain/user/application/service/GetTestUserTokenServiceTest.java new file mode 100644 index 00000000..ae93a8ca --- /dev/null +++ b/src/test/java/com/yapp/artie/domain/user/application/service/GetTestUserTokenServiceTest.java @@ -0,0 +1,40 @@ +package com.yapp.artie.domain.user.application.service; + +import static com.yapp.artie.common.UserTestData.defaultUser; +import static org.assertj.core.api.Assertions.assertThatThrownBy; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.BDDMockito.then; + +import com.yapp.artie.common.BaseUserUnitTest; +import com.yapp.artie.domain.user.application.port.out.GenerateTestTokenPort; +import com.yapp.artie.domain.user.domain.User; +import com.yapp.artie.domain.user.domain.UserNotFoundException; +import org.junit.jupiter.api.Test; +import org.mockito.Mockito; + +class GetTestUserTokenServiceTest extends BaseUserUnitTest { + + private final GenerateTestTokenPort generateTestTokenPort = Mockito.mock( + GenerateTestTokenPort.class); + + private final GetTestUserTokenService getTestUserTokenService = new GetTestUserTokenService( + loadUserPort, generateTestTokenPort); + + @Test + void loadTestUserToken_사용자를_찾을_수_없으면_예외를_발생한다() { + givenUserFindWillFail(); + assertThatThrownBy(() -> getTestUserTokenService.loadTestUserToken(1L)) + .isInstanceOf(UserNotFoundException.class); + } + + @Test + void loadTestUserToken_사용자를_조회하여_토큰을_발급한다() { + User user = defaultUser().build(); + givenUserByReference(user); + + getTestUserTokenService.loadTestUserToken(1L); + then(generateTestTokenPort) + .should() + .generateTestToken(eq(user.getUid())); + } +} \ No newline at end of file