From 00be6f2542177d0a1ef63b2f6238c61a43fe9126 Mon Sep 17 00:00:00 2001 From: coco3x Date: Wed, 25 Dec 2024 06:47:35 +0900 Subject: [PATCH 01/32] =?UTF-8?q?update(domain):=20device=EC=97=90=20?= =?UTF-8?q?=EC=9D=B4=EB=A6=84=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/whoz_in/domain/device/model/Device.java | 11 +++++++---- .../command/device/application/DeviceAdd.java | 4 +++- .../command/device/application/DeviceAddHandler.java | 2 +- .../command/member/presentation/MemberController.java | 2 +- 4 files changed, 12 insertions(+), 7 deletions(-) diff --git a/modules/domain/src/main/java/com/whoz_in/domain/device/model/Device.java b/modules/domain/src/main/java/com/whoz_in/domain/device/model/Device.java index 319110c0..f29fe51c 100644 --- a/modules/domain/src/main/java/com/whoz_in/domain/device/model/Device.java +++ b/modules/domain/src/main/java/com/whoz_in/domain/device/model/Device.java @@ -15,23 +15,26 @@ public final class Device extends AggregateRoot { private Long memberId; private MacAddress mac; private IpAddress ip; + private String name; - public static Device create(Long memberId, MacAddress mac, IpAddress ip){ + public static Device create(Long memberId, MacAddress mac, IpAddress ip, String name){ Device device = Device.builder() .memberId(memberId) .mac(mac) .ip(ip) + .name(name) .build(); device.register(new DeviceCreated()); return device; } - public static Device load(Long deviceId, Long memberId, String macAddress, String ipAddress){ + public static Device load(Long deviceId, Long memberId, String mac, String ip, String name){ return Device.builder() .deviceId(deviceId) .memberId(memberId) - .mac(MacAddress.load(macAddress)) - .ip(IpAddress.load(ipAddress)) + .mac(MacAddress.load(mac)) + .ip(IpAddress.load(ip)) + .name(name) .build(); } } diff --git a/modules/main-api/src/main/java/com/whoz_in/main_api/command/device/application/DeviceAdd.java b/modules/main-api/src/main/java/com/whoz_in/main_api/command/device/application/DeviceAdd.java index 286610d8..baeb2d48 100644 --- a/modules/main-api/src/main/java/com/whoz_in/main_api/command/device/application/DeviceAdd.java +++ b/modules/main-api/src/main/java/com/whoz_in/main_api/command/device/application/DeviceAdd.java @@ -9,9 +9,11 @@ public final class DeviceAdd implements Command { private final MacAddress macAddress; private final IpAddress ipAddress; + private final String deviceName; - public DeviceAdd(String macAddress, String ipAddress) { + public DeviceAdd(String macAddress, String ipAddress, String deviceName) { this.macAddress = MacAddress.create(macAddress); this.ipAddress = IpAddress.create(ipAddress); + this.deviceName = deviceName; } } diff --git a/modules/main-api/src/main/java/com/whoz_in/main_api/command/device/application/DeviceAddHandler.java b/modules/main-api/src/main/java/com/whoz_in/main_api/command/device/application/DeviceAddHandler.java index ec08049e..2f7155d7 100644 --- a/modules/main-api/src/main/java/com/whoz_in/main_api/command/device/application/DeviceAddHandler.java +++ b/modules/main-api/src/main/java/com/whoz_in/main_api/command/device/application/DeviceAddHandler.java @@ -19,7 +19,7 @@ public class DeviceAddHandler extends CommandHandler { @Override public void handle(DeviceAdd command) { Device device = Device.create( - requesterInfo.getUserId(), command.getMacAddress(), command.getIpAddress()); + requesterInfo.getUserId(), command.getMacAddress(), command.getIpAddress(), command.getDeviceName()); repository.save(device); eventBus.publish(device.pullDomainEvents()); } diff --git a/modules/main-api/src/main/java/com/whoz_in/main_api/command/member/presentation/MemberController.java b/modules/main-api/src/main/java/com/whoz_in/main_api/command/member/presentation/MemberController.java index 6ab90d08..e74b22a7 100644 --- a/modules/main-api/src/main/java/com/whoz_in/main_api/command/member/presentation/MemberController.java +++ b/modules/main-api/src/main/java/com/whoz_in/main_api/command/member/presentation/MemberController.java @@ -27,7 +27,7 @@ public String getClientIp(HttpServletRequest request) { result.append("X-Real-IP: ").append(xRealIp).append("\n"); result.append("RemoteAddr: ").append(remoteAddr).append("\n"); - dispatch(new DeviceAdd("11:11:11:11:11:11", "111.111.111.111")); + dispatch(new DeviceAdd("11:11:11:11:11:11", "111.111.111.111", "zz")); return result.toString(); } } From ccdd4aba0da3eb5751d8703c7f22e68b14d86d58 Mon Sep 17 00:00:00 2001 From: coco3x Date: Wed, 25 Dec 2024 06:58:04 +0900 Subject: [PATCH 02/32] =?UTF-8?q?style(domain):=20=EC=95=A0=EA=B7=B8?= =?UTF-8?q?=EB=A6=AC=EA=B1=B0=ED=8A=B8=20=EC=8B=9D=EB=B3=84=EC=9E=90?= =?UTF-8?q?=EB=A5=BC=20id=EB=A1=9C=20=EB=91=A0=EC=9C=BC=EB=A1=9C=EC=8D=A8?= =?UTF-8?q?=20=EB=8B=A4=EB=A5=B8=20=EC=8B=9D=EB=B3=84=EC=9E=90=EB=A1=9C?= =?UTF-8?q?=EB=B6=80=ED=84=B0=20=EA=B5=AC=EB=B6=84=ED=95=98=EA=B8=B0=20?= =?UTF-8?q?=EC=89=BD=EA=B2=8C=20=ED=95=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/whoz_in/domain/device/model/Device.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/modules/domain/src/main/java/com/whoz_in/domain/device/model/Device.java b/modules/domain/src/main/java/com/whoz_in/domain/device/model/Device.java index f29fe51c..800a6d1b 100644 --- a/modules/domain/src/main/java/com/whoz_in/domain/device/model/Device.java +++ b/modules/domain/src/main/java/com/whoz_in/domain/device/model/Device.java @@ -11,7 +11,7 @@ @Builder(access = AccessLevel.PRIVATE) @AllArgsConstructor(access = AccessLevel.PRIVATE) public final class Device extends AggregateRoot { - private Long deviceId; + private Long id; private Long memberId; private MacAddress mac; private IpAddress ip; @@ -28,9 +28,9 @@ public static Device create(Long memberId, MacAddress mac, IpAddress ip, String return device; } - public static Device load(Long deviceId, Long memberId, String mac, String ip, String name){ + public static Device load(Long id, Long memberId, String mac, String ip, String name){ return Device.builder() - .deviceId(deviceId) + .id(id) .memberId(memberId) .mac(MacAddress.load(mac)) .ip(IpAddress.load(ip)) From e53e7e7f22918b4d024d73c2d735bb2e9d029836 Mon Sep 17 00:00:00 2001 From: coco3x Date: Thu, 26 Dec 2024 00:47:15 +0900 Subject: [PATCH 03/32] =?UTF-8?q?feat(domain):=20nullable=20=EB=A7=88?= =?UTF-8?q?=EC=BB=A4=20=EC=96=B4=EB=85=B8=ED=85=8C=EC=9D=B4=EC=85=98=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/whoz_in/domain/shared/Nullable.java | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 modules/domain/src/main/java/com/whoz_in/domain/shared/Nullable.java diff --git a/modules/domain/src/main/java/com/whoz_in/domain/shared/Nullable.java b/modules/domain/src/main/java/com/whoz_in/domain/shared/Nullable.java new file mode 100644 index 00000000..f990e67a --- /dev/null +++ b/modules/domain/src/main/java/com/whoz_in/domain/shared/Nullable.java @@ -0,0 +1,4 @@ +package com.whoz_in.domain.shared; + +//null일 수 있는 값을 나타내는 마커 어노테이션 +public @interface Nullable {} From 0da84f414d7cd1433792a2e4822122e219c8eddb Mon Sep 17 00:00:00 2001 From: coco3x Date: Fri, 27 Dec 2024 02:59:05 +0900 Subject: [PATCH 04/32] =?UTF-8?q?feat:=20Member=20=EB=8F=84=EB=A9=94?= =?UTF-8?q?=EC=9D=B8=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/whoz_in/domain/member/Member.java | 7 -- .../domain/member/MemberRepository.java | 2 + .../InvalidAuthCredentialsException.java | 10 +++ .../LoginIdPolicyViolationException.java | 10 +++ .../exception/NotAuthMemberException.java | 9 +++ .../exception/NotOAuthMemberException.java | 10 +++ .../PasswordPolicyViolationException.java | 10 +++ .../exception/WrongPasswordException.java | 10 +++ .../domain/member/model/AuthCredentials.java | 57 +++++++++++++++ .../whoz_in/domain/member/model/Member.java | 70 +++++++++++++++++++ .../whoz_in/domain/member/model/MemberId.java | 9 +++ .../domain/member/model/OAuthCredentials.java | 21 ++++++ .../whoz_in/domain/member/model/Position.java | 9 +++ .../domain/member/model/SocialProvider.java | 5 ++ .../member/service/MemberIdGenerator.java | 9 +++ .../member/service/PasswordEncoder.java | 5 ++ .../domain_jpa/member/MemberJpaAdapter.java | 2 +- 17 files changed, 247 insertions(+), 8 deletions(-) delete mode 100644 modules/domain/src/main/java/com/whoz_in/domain/member/Member.java create mode 100644 modules/domain/src/main/java/com/whoz_in/domain/member/exception/InvalidAuthCredentialsException.java create mode 100644 modules/domain/src/main/java/com/whoz_in/domain/member/exception/LoginIdPolicyViolationException.java create mode 100644 modules/domain/src/main/java/com/whoz_in/domain/member/exception/NotAuthMemberException.java create mode 100644 modules/domain/src/main/java/com/whoz_in/domain/member/exception/NotOAuthMemberException.java create mode 100644 modules/domain/src/main/java/com/whoz_in/domain/member/exception/PasswordPolicyViolationException.java create mode 100644 modules/domain/src/main/java/com/whoz_in/domain/member/exception/WrongPasswordException.java create mode 100644 modules/domain/src/main/java/com/whoz_in/domain/member/model/AuthCredentials.java create mode 100644 modules/domain/src/main/java/com/whoz_in/domain/member/model/Member.java create mode 100644 modules/domain/src/main/java/com/whoz_in/domain/member/model/MemberId.java create mode 100644 modules/domain/src/main/java/com/whoz_in/domain/member/model/OAuthCredentials.java create mode 100644 modules/domain/src/main/java/com/whoz_in/domain/member/model/Position.java create mode 100644 modules/domain/src/main/java/com/whoz_in/domain/member/model/SocialProvider.java create mode 100644 modules/domain/src/main/java/com/whoz_in/domain/member/service/MemberIdGenerator.java create mode 100644 modules/domain/src/main/java/com/whoz_in/domain/member/service/PasswordEncoder.java diff --git a/modules/domain/src/main/java/com/whoz_in/domain/member/Member.java b/modules/domain/src/main/java/com/whoz_in/domain/member/Member.java deleted file mode 100644 index 39aa7d57..00000000 --- a/modules/domain/src/main/java/com/whoz_in/domain/member/Member.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.whoz_in.domain.member; - -import com.whoz_in.domain.shared.AggregateRoot; - -public final class Member extends AggregateRoot { - -} diff --git a/modules/domain/src/main/java/com/whoz_in/domain/member/MemberRepository.java b/modules/domain/src/main/java/com/whoz_in/domain/member/MemberRepository.java index 70b0701e..ac1d5031 100644 --- a/modules/domain/src/main/java/com/whoz_in/domain/member/MemberRepository.java +++ b/modules/domain/src/main/java/com/whoz_in/domain/member/MemberRepository.java @@ -1,5 +1,7 @@ package com.whoz_in.domain.member; +import com.whoz_in.domain.member.model.Member; + public interface MemberRepository { void save(Member member); } diff --git a/modules/domain/src/main/java/com/whoz_in/domain/member/exception/InvalidAuthCredentialsException.java b/modules/domain/src/main/java/com/whoz_in/domain/member/exception/InvalidAuthCredentialsException.java new file mode 100644 index 00000000..8b3f1f53 --- /dev/null +++ b/modules/domain/src/main/java/com/whoz_in/domain/member/exception/InvalidAuthCredentialsException.java @@ -0,0 +1,10 @@ +package com.whoz_in.domain.member.exception; + +import com.whoz_in.domain.shared.BusinessException; + +public class InvalidAuthCredentialsException extends BusinessException { + + public InvalidAuthCredentialsException() { + super("2003", "아이디 혹은 비밀번호가 틀렸습니다."); + } +} diff --git a/modules/domain/src/main/java/com/whoz_in/domain/member/exception/LoginIdPolicyViolationException.java b/modules/domain/src/main/java/com/whoz_in/domain/member/exception/LoginIdPolicyViolationException.java new file mode 100644 index 00000000..a74f7a93 --- /dev/null +++ b/modules/domain/src/main/java/com/whoz_in/domain/member/exception/LoginIdPolicyViolationException.java @@ -0,0 +1,10 @@ +package com.whoz_in.domain.member.exception; + +import com.whoz_in.domain.shared.BusinessException; + +public class LoginIdPolicyViolationException extends BusinessException { + + public LoginIdPolicyViolationException() { + super("2001", "아이디는 알파벳 소문자, 숫자로 6자리 이상 16자리 이하여야 합니다."); + } +} diff --git a/modules/domain/src/main/java/com/whoz_in/domain/member/exception/NotAuthMemberException.java b/modules/domain/src/main/java/com/whoz_in/domain/member/exception/NotAuthMemberException.java new file mode 100644 index 00000000..b68d7749 --- /dev/null +++ b/modules/domain/src/main/java/com/whoz_in/domain/member/exception/NotAuthMemberException.java @@ -0,0 +1,9 @@ +package com.whoz_in.domain.member.exception; + +import com.whoz_in.domain.shared.BusinessException; + +public class NotAuthMemberException extends BusinessException { + public NotAuthMemberException() { + super("2006", "일반 로그인 정보가 없는 회원입니다."); + } +} diff --git a/modules/domain/src/main/java/com/whoz_in/domain/member/exception/NotOAuthMemberException.java b/modules/domain/src/main/java/com/whoz_in/domain/member/exception/NotOAuthMemberException.java new file mode 100644 index 00000000..7ae1af21 --- /dev/null +++ b/modules/domain/src/main/java/com/whoz_in/domain/member/exception/NotOAuthMemberException.java @@ -0,0 +1,10 @@ +package com.whoz_in.domain.member.exception; + +import com.whoz_in.domain.shared.BusinessException; + +public class NotOAuthMemberException extends BusinessException { + + public NotOAuthMemberException() { + super("2007", "소셜 로그인 정보가 없는 회원입니다."); + } +} diff --git a/modules/domain/src/main/java/com/whoz_in/domain/member/exception/PasswordPolicyViolationException.java b/modules/domain/src/main/java/com/whoz_in/domain/member/exception/PasswordPolicyViolationException.java new file mode 100644 index 00000000..60253229 --- /dev/null +++ b/modules/domain/src/main/java/com/whoz_in/domain/member/exception/PasswordPolicyViolationException.java @@ -0,0 +1,10 @@ +package com.whoz_in.domain.member.exception; + +import com.whoz_in.domain.shared.BusinessException; + +public class PasswordPolicyViolationException extends BusinessException { + + public PasswordPolicyViolationException() { + super("2002", "비밀번호는 알파벳 소문자, 숫자로 6자리 이상 16자리 이하여야 합니다."); + } +} diff --git a/modules/domain/src/main/java/com/whoz_in/domain/member/exception/WrongPasswordException.java b/modules/domain/src/main/java/com/whoz_in/domain/member/exception/WrongPasswordException.java new file mode 100644 index 00000000..48cc17eb --- /dev/null +++ b/modules/domain/src/main/java/com/whoz_in/domain/member/exception/WrongPasswordException.java @@ -0,0 +1,10 @@ +package com.whoz_in.domain.member.exception; + +import com.whoz_in.domain.shared.BusinessException; + +public class WrongPasswordException extends BusinessException { + + public WrongPasswordException() { + super("2005", "틀린 비밀번호입니다."); + } +} diff --git a/modules/domain/src/main/java/com/whoz_in/domain/member/model/AuthCredentials.java b/modules/domain/src/main/java/com/whoz_in/domain/member/model/AuthCredentials.java new file mode 100644 index 00000000..86840dd7 --- /dev/null +++ b/modules/domain/src/main/java/com/whoz_in/domain/member/model/AuthCredentials.java @@ -0,0 +1,57 @@ +package com.whoz_in.domain.member.model; + +import com.whoz_in.domain.member.exception.InvalidAuthCredentialsException; +import com.whoz_in.domain.member.exception.LoginIdPolicyViolationException; +import com.whoz_in.domain.member.exception.PasswordPolicyViolationException; +import com.whoz_in.domain.member.exception.WrongPasswordException; +import com.whoz_in.domain.member.service.PasswordEncoder; +import java.util.regex.Pattern; +import lombok.AccessLevel; +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +//일반 로그인 정보 +@Getter +@EqualsAndHashCode +@RequiredArgsConstructor(access = AccessLevel.PRIVATE) +public final class AuthCredentials { + private static final String LOGIN_ID_REGEX = "^(?=.*[a-z])(?=.*\\d)[a-zA-Z\\d]{6,16}$"; + private static final String PASSWORD_REGEX = "^(?=.*[a-z])(?=.*\\d)[a-zA-Z\\d]{6,16}$"; + private final String loginId; + private final String encodedPassword; + + public static AuthCredentials create(String loginId, String rawPassword, PasswordEncoder passwordEncoder){ + //아이디가 정책에 맞는지 확인 + if (!Pattern.matches(LOGIN_ID_REGEX, loginId)) + throw new LoginIdPolicyViolationException(); + //비밀번호가 정책에 맞는지 확인 + if (!Pattern.matches(PASSWORD_REGEX, rawPassword)) + throw new PasswordPolicyViolationException(); + return new AuthCredentials(loginId, passwordEncoder.encode(rawPassword)); + } + + static AuthCredentials load(String loginId, String encodedPassword){ + if (loginId == null || encodedPassword == null) + throw new IllegalStateException("no login id or encoded password"); + return new AuthCredentials(loginId, encodedPassword); + } + + //아이디와 비밀번호가 맞는지 확인 + public boolean validate(String loginId, String rawPassword, PasswordEncoder passwordEncoder){ + if (!this.loginId.equals(loginId) || !this.encodedPassword.equals(passwordEncoder.encode(rawPassword))) + throw new InvalidAuthCredentialsException(); + return false; + } + + AuthCredentials changePassword(String rawOldPassword, String rawNewPassword, PasswordEncoder passwordEncoder){ + String encodedOldPassword = passwordEncoder.encode(rawOldPassword); + //기존 비밀번호가 같은지 확인 + if (!encodedPassword.equals(encodedOldPassword)) + throw new WrongPasswordException(); + //새로운 비밀번호가 정책에 맞는지 확인 + if (!Pattern.matches(PASSWORD_REGEX, rawNewPassword)) + throw new PasswordPolicyViolationException(); + return new AuthCredentials(this.loginId, passwordEncoder.encode(rawNewPassword)); + } +} diff --git a/modules/domain/src/main/java/com/whoz_in/domain/member/model/Member.java b/modules/domain/src/main/java/com/whoz_in/domain/member/model/Member.java new file mode 100644 index 00000000..1710855d --- /dev/null +++ b/modules/domain/src/main/java/com/whoz_in/domain/member/model/Member.java @@ -0,0 +1,70 @@ +package com.whoz_in.domain.member.model; + +import com.whoz_in.domain.member.exception.NotAuthMemberException; +import com.whoz_in.domain.member.service.PasswordEncoder; +import com.whoz_in.domain.shared.AggregateRoot; +import com.whoz_in.domain.shared.Nullable; +import java.util.Optional; +import lombok.AccessLevel; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; + +@Builder(access = AccessLevel.PRIVATE) +@AllArgsConstructor(access = AccessLevel.PRIVATE) +public final class Member extends AggregateRoot { + @Getter private final MemberId id; + @Getter private final String name; //실명 + @Getter private final Position mainPosition; + @Getter private final int generation; //기수 + @Nullable private AuthCredentials authCredentials; + @Nullable private OAuthCredentials oAuthCredentials; + + public Optional getAuthCredentials(){ + return Optional.ofNullable(authCredentials); + } + public Optional getOAuthCredentials(){ + return Optional.ofNullable(oAuthCredentials); + } + + public void changePassword(String rawOldPassword, String rawNewPassword, PasswordEncoder passwordEncoder){ + if (authCredentials == null) + throw new NotAuthMemberException(); + this.authCredentials = this.authCredentials.changePassword(rawOldPassword, rawNewPassword, passwordEncoder); + } + + //일반 회원가입 + public static Member create(String name, Position mainPosition, int generation, AuthCredentials authCredentials){ + return create(name, mainPosition, generation, authCredentials, null); + } + //소셜 회원가입 + public static Member create(String name, Position mainPosition, int generation, OAuthCredentials oAuthCredentials){ + return create(name, mainPosition, generation, null, oAuthCredentials); + } + + private static Member create(String name, Position mainPosition, int generation, + AuthCredentials authCredentials, OAuthCredentials oAuthCredentials){ + if (authCredentials == null && oAuthCredentials == null) + throw new IllegalStateException("no auth and oauth"); + return builder() + .id(new MemberId()) + .name(name) + .mainPosition(mainPosition) + .generation(generation) + .authCredentials(authCredentials) + .oAuthCredentials(oAuthCredentials) + .build(); + } + + public static Member load(MemberId id, String name, Position mainPosition, int generation, + AuthCredentials authCredentials, OAuthCredentials oAuthCredentials){ + return builder() + .id(id) + .name(name) + .mainPosition(mainPosition) + .generation(generation) + .authCredentials(authCredentials) + .oAuthCredentials(oAuthCredentials) + .build(); + } +} diff --git a/modules/domain/src/main/java/com/whoz_in/domain/member/model/MemberId.java b/modules/domain/src/main/java/com/whoz_in/domain/member/model/MemberId.java new file mode 100644 index 00000000..22482924 --- /dev/null +++ b/modules/domain/src/main/java/com/whoz_in/domain/member/model/MemberId.java @@ -0,0 +1,9 @@ +package com.whoz_in.domain.member.model; + +import java.util.UUID; + +public record MemberId(UUID id) { + public MemberId() { + this(UUID.randomUUID()); + } +} diff --git a/modules/domain/src/main/java/com/whoz_in/domain/member/model/OAuthCredentials.java b/modules/domain/src/main/java/com/whoz_in/domain/member/model/OAuthCredentials.java new file mode 100644 index 00000000..febc06ce --- /dev/null +++ b/modules/domain/src/main/java/com/whoz_in/domain/member/model/OAuthCredentials.java @@ -0,0 +1,21 @@ +package com.whoz_in.domain.member.model; + +import lombok.AccessLevel; +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +//소셜 로그인 정보 +@Getter +@EqualsAndHashCode +@RequiredArgsConstructor(access = AccessLevel.PRIVATE) +public final class OAuthCredentials { + private final SocialProvider socialProvider; + private final String socialId; + + static OAuthCredentials load(SocialProvider socialProvider, String socialId){ + if (socialProvider == null || socialId == null) + throw new IllegalStateException("no social provider or social id"); + return new OAuthCredentials(socialProvider, socialId); + } +} diff --git a/modules/domain/src/main/java/com/whoz_in/domain/member/model/Position.java b/modules/domain/src/main/java/com/whoz_in/domain/member/model/Position.java new file mode 100644 index 00000000..10733bdc --- /dev/null +++ b/modules/domain/src/main/java/com/whoz_in/domain/member/model/Position.java @@ -0,0 +1,9 @@ +package com.whoz_in.domain.member.model; + +public enum Position { + AI, + BE, + DE, + FE, + PM +} diff --git a/modules/domain/src/main/java/com/whoz_in/domain/member/model/SocialProvider.java b/modules/domain/src/main/java/com/whoz_in/domain/member/model/SocialProvider.java new file mode 100644 index 00000000..eb25fef9 --- /dev/null +++ b/modules/domain/src/main/java/com/whoz_in/domain/member/model/SocialProvider.java @@ -0,0 +1,5 @@ +package com.whoz_in.domain.member.model; + +public enum SocialProvider { + KAKAO +} diff --git a/modules/domain/src/main/java/com/whoz_in/domain/member/service/MemberIdGenerator.java b/modules/domain/src/main/java/com/whoz_in/domain/member/service/MemberIdGenerator.java new file mode 100644 index 00000000..b622a408 --- /dev/null +++ b/modules/domain/src/main/java/com/whoz_in/domain/member/service/MemberIdGenerator.java @@ -0,0 +1,9 @@ +//package com.whoz_in.domain.member.service; +// +//import com.whoz_in.domain.member.model.MemberId; + + +//TODO: db의 힘을 빌려야 할거 같을 때 +//public interface MemberIdGenerator{ +// MemberId next(); +//} diff --git a/modules/domain/src/main/java/com/whoz_in/domain/member/service/PasswordEncoder.java b/modules/domain/src/main/java/com/whoz_in/domain/member/service/PasswordEncoder.java new file mode 100644 index 00000000..6e0308be --- /dev/null +++ b/modules/domain/src/main/java/com/whoz_in/domain/member/service/PasswordEncoder.java @@ -0,0 +1,5 @@ +package com.whoz_in.domain.member.service; + +public interface PasswordEncoder { + String encode(String plainText); +} diff --git a/modules/infrastructure/domain-jpa/src/main/java/com/whoz_in/domain_jpa/member/MemberJpaAdapter.java b/modules/infrastructure/domain-jpa/src/main/java/com/whoz_in/domain_jpa/member/MemberJpaAdapter.java index 80e021c8..c4ca01bc 100644 --- a/modules/infrastructure/domain-jpa/src/main/java/com/whoz_in/domain_jpa/member/MemberJpaAdapter.java +++ b/modules/infrastructure/domain-jpa/src/main/java/com/whoz_in/domain_jpa/member/MemberJpaAdapter.java @@ -1,7 +1,7 @@ package com.whoz_in.domain_jpa.member; -import com.whoz_in.domain.member.Member; import com.whoz_in.domain.member.MemberRepository; +import com.whoz_in.domain.member.model.Member; import org.springframework.stereotype.Repository; @Repository From 521efde8c59fc6397f76dcc556bf6fe070229dc9 Mon Sep 17 00:00:00 2001 From: coco3x Date: Fri, 27 Dec 2024 03:24:16 +0900 Subject: [PATCH 05/32] =?UTF-8?q?depend:=20=EC=8A=A4=ED=94=84=EB=A7=81=20?= =?UTF-8?q?=EC=8B=9C=ED=81=90=EB=A6=AC=ED=8B=B0=20=EC=B6=94=EA=B0=80=20?= =?UTF-8?q?=EB=B0=8F=20=EA=B8=B0=EB=B3=B8=20SecurityFilterChain=20?= =?UTF-8?q?=EB=B9=84=ED=99=9C=EC=84=B1=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/main-api/build.gradle | 2 +- .../main_api/config/SecurityConfig.java | 23 +++++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) create mode 100644 modules/main-api/src/main/java/com/whoz_in/main_api/config/SecurityConfig.java diff --git a/modules/main-api/build.gradle b/modules/main-api/build.gradle index 57e6b2c8..e5886ced 100644 --- a/modules/main-api/build.gradle +++ b/modules/main-api/build.gradle @@ -10,7 +10,7 @@ jar.enabled = true dependencies { implementation 'org.springframework.boot:spring-boot-starter' implementation 'org.springframework.boot:spring-boot-starter-web' -// implementation 'org.springframework.boot:spring-boot-starter-security' + implementation 'org.springframework.boot:spring-boot-starter-security' //transaction implementation 'org.springframework:spring-tx' diff --git a/modules/main-api/src/main/java/com/whoz_in/main_api/config/SecurityConfig.java b/modules/main-api/src/main/java/com/whoz_in/main_api/config/SecurityConfig.java new file mode 100644 index 00000000..49bab255 --- /dev/null +++ b/modules/main-api/src/main/java/com/whoz_in/main_api/config/SecurityConfig.java @@ -0,0 +1,23 @@ +package com.whoz_in.main_api.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.security.config.annotation.web.builders.HttpSecurity; +import org.springframework.security.web.SecurityFilterChain; + +@Configuration +public class SecurityConfig { + + @Bean + public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { + http + .csrf().disable() // CSRF 보호 비활성화 (선택 사항) + .authorizeHttpRequests(auth -> auth + .anyRequest().permitAll() // 모든 요청 허용 + ) + .httpBasic().disable(); // 기본 인증 비활성화 (선택 사항) + + return http.build(); + } +} + From ebfce016c0ea8ff2c814055bcce9819b4d01a3f4 Mon Sep 17 00:00:00 2001 From: coco3x Date: Fri, 27 Dec 2024 03:25:39 +0900 Subject: [PATCH 06/32] =?UTF-8?q?fix:=20BusinessException=EC=97=90?= =?UTF-8?q?=EC=84=9C=20super=20=EC=83=9D=EC=84=B1=EC=9E=90=20=ED=98=B8?= =?UTF-8?q?=EC=B6=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/whoz_in/domain/shared/BusinessException.java | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/modules/domain/src/main/java/com/whoz_in/domain/shared/BusinessException.java b/modules/domain/src/main/java/com/whoz_in/domain/shared/BusinessException.java index 56c30137..f2f1947e 100644 --- a/modules/domain/src/main/java/com/whoz_in/domain/shared/BusinessException.java +++ b/modules/domain/src/main/java/com/whoz_in/domain/shared/BusinessException.java @@ -1,13 +1,14 @@ package com.whoz_in.domain.shared; -import lombok.AccessLevel; import lombok.Getter; -import lombok.RequiredArgsConstructor; //비즈니스 내에서 발생하는 예외이므로 HttpStatus는 담지 않습니다. @Getter -@RequiredArgsConstructor(access = AccessLevel.PROTECTED) public abstract class BusinessException extends RuntimeException{ private final String errorCode; - private final String errorMessage; + + protected BusinessException(String errorCode, String errorMessage) { + super(errorMessage); + this.errorCode = errorCode; + } } From 41bfe4f045e2fb6de1cc2d5dee399c020bcafb14 Mon Sep 17 00:00:00 2001 From: coco3x Date: Fri, 27 Dec 2024 03:26:59 +0900 Subject: [PATCH 07/32] =?UTF-8?q?feat(main-api):=20domain=20=EB=AA=A8?= =?UTF-8?q?=EB=93=88=EC=9D=98=20PasswordEncoder=20=EC=9D=B8=ED=84=B0?= =?UTF-8?q?=ED=8E=98=EC=9D=B4=EC=8A=A4=20=EA=B5=AC=ED=98=84=EC=B2=B4=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/SpringSecurityPasswordEncoder.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 modules/main-api/src/main/java/com/whoz_in/main_api/domain/SpringSecurityPasswordEncoder.java diff --git a/modules/main-api/src/main/java/com/whoz_in/main_api/domain/SpringSecurityPasswordEncoder.java b/modules/main-api/src/main/java/com/whoz_in/main_api/domain/SpringSecurityPasswordEncoder.java new file mode 100644 index 00000000..04c8b240 --- /dev/null +++ b/modules/main-api/src/main/java/com/whoz_in/main_api/domain/SpringSecurityPasswordEncoder.java @@ -0,0 +1,14 @@ +package com.whoz_in.main_api.domain; + +import com.whoz_in.domain.member.service.PasswordEncoder; +import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; +import org.springframework.stereotype.Component; + +@Component +public class SpringSecurityPasswordEncoder implements PasswordEncoder { + private final BCryptPasswordEncoder encoder = new BCryptPasswordEncoder(); + @Override + public String encode(String plainText) { + return encoder.encode(plainText); + } +} From 97df4e52bf473b513464dd284b625e960eb35aa2 Mon Sep 17 00:00:00 2001 From: coco3x Date: Fri, 27 Dec 2024 03:28:02 +0900 Subject: [PATCH 08/32] =?UTF-8?q?feat(main-api):=20=ED=9A=8C=EC=9B=90?= =?UTF-8?q?=EA=B0=80=EC=9E=85=20api=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../member/application/MemberSignUp.java | 12 +++++++ .../application/MemberSignUpHandler.java | 27 ++++++++++++++++ .../member/presentation/MemberController.java | 31 +++++++------------ 3 files changed, 51 insertions(+), 19 deletions(-) create mode 100644 modules/main-api/src/main/java/com/whoz_in/main_api/command/member/application/MemberSignUp.java create mode 100644 modules/main-api/src/main/java/com/whoz_in/main_api/command/member/application/MemberSignUpHandler.java diff --git a/modules/main-api/src/main/java/com/whoz_in/main_api/command/member/application/MemberSignUp.java b/modules/main-api/src/main/java/com/whoz_in/main_api/command/member/application/MemberSignUp.java new file mode 100644 index 00000000..a99687db --- /dev/null +++ b/modules/main-api/src/main/java/com/whoz_in/main_api/command/member/application/MemberSignUp.java @@ -0,0 +1,12 @@ +package com.whoz_in.main_api.command.member.application; + +import com.whoz_in.domain.member.model.Position; +import com.whoz_in.main_api.shared.application.command.Command; + +public record MemberSignUp( + String loginId, + String password, + String name, + Position position, + Integer generation +) implements Command {} diff --git a/modules/main-api/src/main/java/com/whoz_in/main_api/command/member/application/MemberSignUpHandler.java b/modules/main-api/src/main/java/com/whoz_in/main_api/command/member/application/MemberSignUpHandler.java new file mode 100644 index 00000000..744972a9 --- /dev/null +++ b/modules/main-api/src/main/java/com/whoz_in/main_api/command/member/application/MemberSignUpHandler.java @@ -0,0 +1,27 @@ +package com.whoz_in.main_api.command.member.application; + +import com.whoz_in.domain.member.MemberRepository; +import com.whoz_in.domain.member.model.AuthCredentials; +import com.whoz_in.domain.member.model.Member; +import com.whoz_in.domain.member.service.PasswordEncoder; +import com.whoz_in.main_api.shared.application.Handler; +import com.whoz_in.main_api.shared.application.command.CommandHandler; +import lombok.RequiredArgsConstructor; +import org.springframework.transaction.annotation.Transactional; + +@Handler +@RequiredArgsConstructor +public class MemberSignUpHandler extends CommandHandler { + private final MemberRepository repository; + private final PasswordEncoder encoder; + + @Transactional + @Override + public void handle(MemberSignUp cmd) { + Member member = Member.create( + cmd.name(), cmd.position(), cmd.generation(), + AuthCredentials.create(cmd.loginId(), cmd.password(), encoder) + ); + repository.save(member); + } +} diff --git a/modules/main-api/src/main/java/com/whoz_in/main_api/command/member/presentation/MemberController.java b/modules/main-api/src/main/java/com/whoz_in/main_api/command/member/presentation/MemberController.java index e74b22a7..d06a47a0 100644 --- a/modules/main-api/src/main/java/com/whoz_in/main_api/command/member/presentation/MemberController.java +++ b/modules/main-api/src/main/java/com/whoz_in/main_api/command/member/presentation/MemberController.java @@ -1,11 +1,15 @@ package com.whoz_in.main_api.command.member.presentation; -import com.whoz_in.main_api.command.device.application.DeviceAdd; -import com.whoz_in.main_api.shared.presentation.CommandQueryController; +import com.whoz_in.main_api.command.member.application.MemberSignUp; import com.whoz_in.main_api.shared.application.command.CommandBus; import com.whoz_in.main_api.shared.application.query.QueryBus; -import jakarta.servlet.http.HttpServletRequest; -import org.springframework.web.bind.annotation.GetMapping; +import com.whoz_in.main_api.shared.presentation.CommandQueryController; +import com.whoz_in.main_api.shared.presentation.response.ResponseEntityGenerator; +import com.whoz_in.main_api.shared.presentation.response.SuccessBody; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; @RestController @@ -13,21 +17,10 @@ public class MemberController extends CommandQueryController { public MemberController(CommandBus commandBus, QueryBus queryBus) { super(commandBus,queryBus); } - @GetMapping("/ip") - public String getClientIp(HttpServletRequest request) { - String xForwardedFor = request.getHeader("X-Forwarded-For"); - String httpXForwardedFor = request.getHeader("HTTP-X-Forwarded-For"); - String httpXForwardedFor2 = request.getHeader("HTTP_X_Forwarded_For"); - String xRealIp = request.getHeader("X-Real-IP"); - String remoteAddr = request.getRemoteAddr(); - StringBuilder result = new StringBuilder(); - result.append("X-Forwarded-For: ").append(xForwardedFor).append("\n"); - result.append("HTTP-X-Forwarded-For: ").append(httpXForwardedFor).append("\n"); - result.append("HTTP-X-Forwarded-For2: ").append(httpXForwardedFor2).append("\n"); - result.append("X-Real-IP: ").append(xRealIp).append("\n"); - result.append("RemoteAddr: ").append(remoteAddr).append("\n"); - dispatch(new DeviceAdd("11:11:11:11:11:11", "111.111.111.111", "zz")); - return result.toString(); + @PostMapping("/api/v1/signup") + public ResponseEntity> signup(@RequestBody MemberSignUp request){ + dispatch(request); + return ResponseEntityGenerator.success( "회원가입 완료", HttpStatus.CREATED); } } From dbb49060504eda0e935e5e82a4b7383f6e468b66 Mon Sep 17 00:00:00 2001 From: coco3x Date: Fri, 27 Dec 2024 16:45:40 +0900 Subject: [PATCH 09/32] =?UTF-8?q?feat(domain-jpa):=20JpaEntity=20<->=20dom?= =?UTF-8?q?ain=20=EB=AA=A8=EB=8D=B8=20=EB=B3=80=ED=99=98=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/whoz_in/domain_jpa/shared/BaseConverter.java | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 modules/infrastructure/domain-jpa/src/main/java/com/whoz_in/domain_jpa/shared/BaseConverter.java diff --git a/modules/infrastructure/domain-jpa/src/main/java/com/whoz_in/domain_jpa/shared/BaseConverter.java b/modules/infrastructure/domain-jpa/src/main/java/com/whoz_in/domain_jpa/shared/BaseConverter.java new file mode 100644 index 00000000..7069813c --- /dev/null +++ b/modules/infrastructure/domain-jpa/src/main/java/com/whoz_in/domain_jpa/shared/BaseConverter.java @@ -0,0 +1,10 @@ +package com.whoz_in.domain_jpa.shared; + +import com.whoz_in.domain.shared.AggregateRoot; + +//domain 모델(AggregateRoot)과 domain-jpa 모델(JpaEntity) 간 상호변환 기능을 담당한다. +//domain-jpa의 Converter이므로 JpaEntity를 기준으로 메서드명을 작명하였다. +public abstract class BaseConverter { + public abstract T from(R r); + public abstract R to(T t); +} From 8e15d1727379b191f3fde6e9cd3918b62395f025 Mon Sep 17 00:00:00 2001 From: coco3x Date: Fri, 27 Dec 2024 20:03:33 +0900 Subject: [PATCH 10/32] =?UTF-8?q?feat(domain):=20Member=EC=97=90=20?= =?UTF-8?q?=EC=83=81=ED=83=9C=20=EB=A9=94=EC=84=B8=EC=A7=80=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 --- .../whoz_in/domain/member/model/Member.java | 22 ++++++++++++------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/modules/domain/src/main/java/com/whoz_in/domain/member/model/Member.java b/modules/domain/src/main/java/com/whoz_in/domain/member/model/Member.java index 1710855d..1c9489bc 100644 --- a/modules/domain/src/main/java/com/whoz_in/domain/member/model/Member.java +++ b/modules/domain/src/main/java/com/whoz_in/domain/member/model/Member.java @@ -17,6 +17,7 @@ public final class Member extends AggregateRoot { @Getter private final String name; //실명 @Getter private final Position mainPosition; @Getter private final int generation; //기수 + @Getter private String statusMessage; //상태 메세지 @Nullable private AuthCredentials authCredentials; @Nullable private OAuthCredentials oAuthCredentials; @@ -27,12 +28,6 @@ public Optional getOAuthCredentials(){ return Optional.ofNullable(oAuthCredentials); } - public void changePassword(String rawOldPassword, String rawNewPassword, PasswordEncoder passwordEncoder){ - if (authCredentials == null) - throw new NotAuthMemberException(); - this.authCredentials = this.authCredentials.changePassword(rawOldPassword, rawNewPassword, passwordEncoder); - } - //일반 회원가입 public static Member create(String name, Position mainPosition, int generation, AuthCredentials authCredentials){ return create(name, mainPosition, generation, authCredentials, null); @@ -41,7 +36,6 @@ public static Member create(String name, Position mainPosition, int generation, public static Member create(String name, Position mainPosition, int generation, OAuthCredentials oAuthCredentials){ return create(name, mainPosition, generation, null, oAuthCredentials); } - private static Member create(String name, Position mainPosition, int generation, AuthCredentials authCredentials, OAuthCredentials oAuthCredentials){ if (authCredentials == null && oAuthCredentials == null) @@ -51,20 +45,32 @@ private static Member create(String name, Position mainPosition, int generation, .name(name) .mainPosition(mainPosition) .generation(generation) + .statusMessage("") .authCredentials(authCredentials) .oAuthCredentials(oAuthCredentials) .build(); } - public static Member load(MemberId id, String name, Position mainPosition, int generation, + public static Member load(MemberId id, String name, Position mainPosition, int generation, String statusMessage, AuthCredentials authCredentials, OAuthCredentials oAuthCredentials){ return builder() .id(id) .name(name) .mainPosition(mainPosition) .generation(generation) + .statusMessage(statusMessage) .authCredentials(authCredentials) .oAuthCredentials(oAuthCredentials) .build(); } + + public void changePassword(String rawOldPassword, String rawNewPassword, PasswordEncoder passwordEncoder){ + if (authCredentials == null) + throw new NotAuthMemberException(); + this.authCredentials = this.authCredentials.changePassword(rawOldPassword, rawNewPassword, passwordEncoder); + } + + public void changeStatusMessage(String newStatusMessage){ + this.statusMessage = newStatusMessage; + } } From 60f66d73c5d3b15986e607c845e8208aaed21bb6 Mon Sep 17 00:00:00 2001 From: coco3x Date: Fri, 27 Dec 2024 20:06:27 +0900 Subject: [PATCH 11/32] =?UTF-8?q?fix(domain-jpa):=20domain=EC=9D=98=20Posi?= =?UTF-8?q?tion=20=EC=B0=B8=EC=A1=B0=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 --- .../java/com/whoz_in/domain_jpa/shared/enums/Position.java | 5 ----- 1 file changed, 5 deletions(-) delete mode 100644 modules/infrastructure/domain-jpa/src/main/java/com/whoz_in/domain_jpa/shared/enums/Position.java diff --git a/modules/infrastructure/domain-jpa/src/main/java/com/whoz_in/domain_jpa/shared/enums/Position.java b/modules/infrastructure/domain-jpa/src/main/java/com/whoz_in/domain_jpa/shared/enums/Position.java deleted file mode 100644 index 48de2c3c..00000000 --- a/modules/infrastructure/domain-jpa/src/main/java/com/whoz_in/domain_jpa/shared/enums/Position.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.whoz_in.domain_jpa.shared.enums; - -public enum Position { - BE, AI, FE, DE, PM, GAME -} From 58693d51a4b6eb9f28ab69f240107eb09ed31a6d Mon Sep 17 00:00:00 2001 From: coco3x Date: Fri, 27 Dec 2024 20:07:03 +0900 Subject: [PATCH 12/32] =?UTF-8?q?fix(domain):=20Position=20-=20game=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 --- .../main/java/com/whoz_in/domain/member/model/Position.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/modules/domain/src/main/java/com/whoz_in/domain/member/model/Position.java b/modules/domain/src/main/java/com/whoz_in/domain/member/model/Position.java index 10733bdc..ea19a6af 100644 --- a/modules/domain/src/main/java/com/whoz_in/domain/member/model/Position.java +++ b/modules/domain/src/main/java/com/whoz_in/domain/member/model/Position.java @@ -5,5 +5,6 @@ public enum Position { BE, DE, FE, - PM + PM, + GAME } From de87e205649139ea90057d79a1aab88519993e62 Mon Sep 17 00:00:00 2001 From: coco3x Date: Fri, 27 Dec 2024 20:10:47 +0900 Subject: [PATCH 13/32] =?UTF-8?q?update(domain):=20MemberId=20-=20toString?= =?UTF-8?q?()=20=EC=98=A4=EB=B2=84=EB=9D=BC=EC=9D=B4=EB=93=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/whoz_in/domain/member/model/MemberId.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/modules/domain/src/main/java/com/whoz_in/domain/member/model/MemberId.java b/modules/domain/src/main/java/com/whoz_in/domain/member/model/MemberId.java index 22482924..e522eb9f 100644 --- a/modules/domain/src/main/java/com/whoz_in/domain/member/model/MemberId.java +++ b/modules/domain/src/main/java/com/whoz_in/domain/member/model/MemberId.java @@ -6,4 +6,9 @@ public record MemberId(UUID id) { public MemberId() { this(UUID.randomUUID()); } + + @Override + public String toString() { + return id.toString(); + } } From 9176824be9ca64a9ad2e176ad8784bffa60096aa Mon Sep 17 00:00:00 2001 From: coco3x Date: Fri, 27 Dec 2024 21:04:33 +0900 Subject: [PATCH 14/32] =?UTF-8?q?delete(domain-jpa):=20Auth=20=EC=97=94?= =?UTF-8?q?=ED=8B=B0=ED=8B=B0=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../whoz_in/domain_jpa/member/AuthEntity.java | 39 ------------------- .../domain_jpa/member/AuthJpaRepository.java | 7 ---- 2 files changed, 46 deletions(-) delete mode 100644 modules/infrastructure/domain-jpa/src/main/java/com/whoz_in/domain_jpa/member/AuthEntity.java delete mode 100644 modules/infrastructure/domain-jpa/src/main/java/com/whoz_in/domain_jpa/member/AuthJpaRepository.java diff --git a/modules/infrastructure/domain-jpa/src/main/java/com/whoz_in/domain_jpa/member/AuthEntity.java b/modules/infrastructure/domain-jpa/src/main/java/com/whoz_in/domain_jpa/member/AuthEntity.java deleted file mode 100644 index bea04602..00000000 --- a/modules/infrastructure/domain-jpa/src/main/java/com/whoz_in/domain_jpa/member/AuthEntity.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.whoz_in.domain_jpa.member; - -import com.whoz_in.domain_jpa.shared.BaseEntity; -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.GenerationType; -import jakarta.persistence.Id; -import jakarta.persistence.JoinColumn; -import jakarta.persistence.OneToOne; -import lombok.Getter; - -@Getter -@Entity -public class AuthEntity extends BaseEntity { - - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - private Long id; - - @OneToOne - @JoinColumn(name = "member_id") - private MemberEntity memberEntity; - - @Column(name = "login_id", nullable = false) - private String loginId; - - @Column(name = "password", nullable = false) - private String password; - - protected AuthEntity() { } - - public AuthEntity(MemberEntity memberEntity, String loginId, String password) { - this.memberEntity = memberEntity; - this.loginId = loginId; - this.password = password; - } - -} diff --git a/modules/infrastructure/domain-jpa/src/main/java/com/whoz_in/domain_jpa/member/AuthJpaRepository.java b/modules/infrastructure/domain-jpa/src/main/java/com/whoz_in/domain_jpa/member/AuthJpaRepository.java deleted file mode 100644 index 526fb9cf..00000000 --- a/modules/infrastructure/domain-jpa/src/main/java/com/whoz_in/domain_jpa/member/AuthJpaRepository.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.whoz_in.domain_jpa.member; - -import org.springframework.data.jpa.repository.JpaRepository; - -public interface AuthJpaRepository extends JpaRepository { - -} From 5f482b7336a08d337b83549925690632b771f7e3 Mon Sep 17 00:00:00 2001 From: coco3x Date: Fri, 27 Dec 2024 21:06:43 +0900 Subject: [PATCH 15/32] =?UTF-8?q?feat(domain-jpa):=20EntityManagerFactory?= =?UTF-8?q?=EC=97=90=EC=84=9C=20naming=20strategy=EB=A5=BC=20=EC=84=A4?= =?UTF-8?q?=EC=A0=95=ED=95=A0=20=EC=88=98=20=EC=9E=88=EB=8F=84=EB=A1=9D=20?= =?UTF-8?q?=ED=95=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/whoz_in/domain_jpa/config/DataSourceConfig.java | 2 ++ .../domain-jpa/src/main/resources/application-domain-jpa.yml | 1 + 2 files changed, 3 insertions(+) diff --git a/modules/infrastructure/domain-jpa/src/main/java/com/whoz_in/domain_jpa/config/DataSourceConfig.java b/modules/infrastructure/domain-jpa/src/main/java/com/whoz_in/domain_jpa/config/DataSourceConfig.java index 8a859e02..1054a75f 100644 --- a/modules/infrastructure/domain-jpa/src/main/java/com/whoz_in/domain_jpa/config/DataSourceConfig.java +++ b/modules/infrastructure/domain-jpa/src/main/java/com/whoz_in/domain_jpa/config/DataSourceConfig.java @@ -42,6 +42,7 @@ public static class DataSourceProperties { @Setter public static class HibernateProperties { private String ddlAuto; + private String physicalNamingStrategy; private boolean formatSql; private boolean showSql; } @@ -86,6 +87,7 @@ public LocalContainerEntityManagerFactoryBean domainJpaEntityManagerFactory( .properties( Map.of( "hibernate.hbm2ddl.auto", hibernateProperties.ddlAuto, + "hibernate.physical_naming_strategy", hibernateProperties.physicalNamingStrategy, "hibernate.show_sql", hibernateProperties.showSql, "hibernate.format_sql", hibernateProperties.formatSql ) diff --git a/modules/infrastructure/domain-jpa/src/main/resources/application-domain-jpa.yml b/modules/infrastructure/domain-jpa/src/main/resources/application-domain-jpa.yml index cd1c0244..b0c1de88 100644 --- a/modules/infrastructure/domain-jpa/src/main/resources/application-domain-jpa.yml +++ b/modules/infrastructure/domain-jpa/src/main/resources/application-domain-jpa.yml @@ -12,6 +12,7 @@ domain-jpa: driver-class-name: ${DB_DRIVER_CLASS} hibernate: ddl-auto: validate + physical-naming-strategy: org.hibernate.boot.model.naming.CamelCaseToUnderscoresNamingStrategy show_sql: false logging: From 1af93b153b3069692bb9f0c09e9d9a916b4e1b2e Mon Sep 17 00:00:00 2001 From: coco3x Date: Fri, 27 Dec 2024 21:08:21 +0900 Subject: [PATCH 16/32] =?UTF-8?q?update(domain):=20Credential=20-=20load()?= =?UTF-8?q?=EB=A5=BC=20public=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 --- .../java/com/whoz_in/domain/member/model/AuthCredentials.java | 2 +- .../java/com/whoz_in/domain/member/model/OAuthCredentials.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/domain/src/main/java/com/whoz_in/domain/member/model/AuthCredentials.java b/modules/domain/src/main/java/com/whoz_in/domain/member/model/AuthCredentials.java index 86840dd7..19797674 100644 --- a/modules/domain/src/main/java/com/whoz_in/domain/member/model/AuthCredentials.java +++ b/modules/domain/src/main/java/com/whoz_in/domain/member/model/AuthCredentials.java @@ -31,7 +31,7 @@ public static AuthCredentials create(String loginId, String rawPassword, Passwor return new AuthCredentials(loginId, passwordEncoder.encode(rawPassword)); } - static AuthCredentials load(String loginId, String encodedPassword){ + public static AuthCredentials load(String loginId, String encodedPassword){ if (loginId == null || encodedPassword == null) throw new IllegalStateException("no login id or encoded password"); return new AuthCredentials(loginId, encodedPassword); diff --git a/modules/domain/src/main/java/com/whoz_in/domain/member/model/OAuthCredentials.java b/modules/domain/src/main/java/com/whoz_in/domain/member/model/OAuthCredentials.java index febc06ce..924ccea5 100644 --- a/modules/domain/src/main/java/com/whoz_in/domain/member/model/OAuthCredentials.java +++ b/modules/domain/src/main/java/com/whoz_in/domain/member/model/OAuthCredentials.java @@ -13,7 +13,7 @@ public final class OAuthCredentials { private final SocialProvider socialProvider; private final String socialId; - static OAuthCredentials load(SocialProvider socialProvider, String socialId){ + public static OAuthCredentials load(SocialProvider socialProvider, String socialId){ if (socialProvider == null || socialId == null) throw new IllegalStateException("no social provider or social id"); return new OAuthCredentials(socialProvider, socialId); From 0c341821f314f4864449c5c6f0c870980d766b04 Mon Sep 17 00:00:00 2001 From: coco3x Date: Fri, 27 Dec 2024 21:11:31 +0900 Subject: [PATCH 17/32] =?UTF-8?q?update(domain-jpa):=20domain=EC=9D=98=20M?= =?UTF-8?q?ember=EC=97=90=20=EB=A7=9E=EC=B6=B0=20MemberEntity=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 --- .../domain_jpa/member/MemberEntity.java | 66 +++++++++---------- 1 file changed, 33 insertions(+), 33 deletions(-) diff --git a/modules/infrastructure/domain-jpa/src/main/java/com/whoz_in/domain_jpa/member/MemberEntity.java b/modules/infrastructure/domain-jpa/src/main/java/com/whoz_in/domain_jpa/member/MemberEntity.java index d248ce86..134c6469 100644 --- a/modules/infrastructure/domain-jpa/src/main/java/com/whoz_in/domain_jpa/member/MemberEntity.java +++ b/modules/infrastructure/domain-jpa/src/main/java/com/whoz_in/domain_jpa/member/MemberEntity.java @@ -1,62 +1,62 @@ package com.whoz_in.domain_jpa.member; -import com.whoz_in.domain_jpa.shared.enums.Position; +import com.whoz_in.domain.member.model.Position; +import com.whoz_in.domain.member.model.SocialProvider; +import com.whoz_in.domain_jpa.shared.BaseEntity; import jakarta.persistence.Column; import jakarta.persistence.Entity; import jakarta.persistence.EnumType; import jakarta.persistence.Enumerated; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.GenerationType; import jakarta.persistence.Id; -import com.whoz_in.domain_jpa.shared.BaseEntity; +import java.util.UUID; +import lombok.AccessLevel; +import lombok.Getter; +import lombok.NoArgsConstructor; +@Getter @Entity +@NoArgsConstructor(access = AccessLevel.PROTECTED) public class MemberEntity extends BaseEntity { @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - private Long id; + private UUID id; - @Column(name = "name", nullable = false) + @Column(nullable = false) private String name; - @Column(name = "generation", nullable = false) + @Column(nullable = false) private int generation; - @Column(name = "position", nullable = false) + @Column(nullable = false) @Enumerated(EnumType.STRING) private Position position; - @Column(name = "status_message", nullable = false) + @Column(nullable = false) private String statusMessage; - public MemberEntity(String name, int generation, Position position, String statusMessage) { - this.name = name; - this.generation = generation; - this.position = position; - this.statusMessage = statusMessage; - } - - protected MemberEntity() { } - - public Long getId() { - return id; - } + @Column(unique = true) + private String loginId; - public String getName() { - return name; - } + private String password; - public int getGeneration() { - return generation; - } + @Enumerated(EnumType.STRING) + private SocialProvider socialProvider; - public Position getPosition() { - return position; - } + @Column(unique = true) + private String socialId; - public String getStatusMessage() { - return statusMessage; + public MemberEntity(UUID id, String name, int generation, Position position, String statusMessage, + String loginId, String password, + SocialProvider socialProvider, String socialId) { + this.id = id; + this.name = name; + this.generation = generation; + this.position = position; + this.statusMessage = statusMessage; + this.loginId = loginId; + this.password = password; + this.socialProvider = socialProvider; + this.socialId = socialId; } } From c9975e941e2aecf57e3f8315290e54fd45b09ca0 Mon Sep 17 00:00:00 2001 From: coco3x Date: Fri, 27 Dec 2024 21:12:06 +0900 Subject: [PATCH 18/32] =?UTF-8?q?feat(domain-jpa):=20MemberConverter=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain_jpa/member/MemberConverter.java | 44 +++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 modules/infrastructure/domain-jpa/src/main/java/com/whoz_in/domain_jpa/member/MemberConverter.java diff --git a/modules/infrastructure/domain-jpa/src/main/java/com/whoz_in/domain_jpa/member/MemberConverter.java b/modules/infrastructure/domain-jpa/src/main/java/com/whoz_in/domain_jpa/member/MemberConverter.java new file mode 100644 index 00000000..a9077fea --- /dev/null +++ b/modules/infrastructure/domain-jpa/src/main/java/com/whoz_in/domain_jpa/member/MemberConverter.java @@ -0,0 +1,44 @@ +package com.whoz_in.domain_jpa.member; + +import com.whoz_in.domain.member.model.AuthCredentials; +import com.whoz_in.domain.member.model.Member; +import com.whoz_in.domain.member.model.MemberId; +import com.whoz_in.domain.member.model.OAuthCredentials; +import com.whoz_in.domain_jpa.shared.BaseConverter; +import org.springframework.stereotype.Component; + +@Component +public class MemberConverter extends BaseConverter { + + @Override + public MemberEntity from(Member member) { + AuthCredentials auth = member.getAuthCredentials().orElse(null); + OAuthCredentials oAuth = member.getOAuthCredentials().orElse(null); + return new MemberEntity( + member.getId().id(), + member.getName(), + member.getGeneration(), + member.getMainPosition(), + member.getStatusMessage(), + auth != null ? auth.getLoginId() : null, + auth != null ? auth.getEncodedPassword() : null, + oAuth != null ? oAuth.getSocialProvider() : null, + oAuth != null ? oAuth.getSocialId() : null + ); + } + + @Override + public Member to(MemberEntity entity) { + return Member.load( + new MemberId(entity.getId()), + entity.getName(), + entity.getPosition(), + entity.getGeneration(), + entity.getStatusMessage(), + (entity.getLoginId() != null && entity.getPassword() != null) ? + AuthCredentials.load(entity.getLoginId(), entity.getPassword()) : null, + (entity.getSocialProvider() != null && entity.getSocialId() != null) ? + OAuthCredentials.load(entity.getSocialProvider(), entity.getSocialId()) : null + ); + } +} From cbea9e4c06b70acc641f8cb3a9aa3054b26fe0ee Mon Sep 17 00:00:00 2001 From: coco3x Date: Fri, 27 Dec 2024 21:12:35 +0900 Subject: [PATCH 19/32] =?UTF-8?q?feat:=20MemberRepository=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84=EC=B2=B4=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/whoz_in/domain_jpa/member/MemberJpaAdapter.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/modules/infrastructure/domain-jpa/src/main/java/com/whoz_in/domain_jpa/member/MemberJpaAdapter.java b/modules/infrastructure/domain-jpa/src/main/java/com/whoz_in/domain_jpa/member/MemberJpaAdapter.java index c4ca01bc..fa650b1d 100644 --- a/modules/infrastructure/domain-jpa/src/main/java/com/whoz_in/domain_jpa/member/MemberJpaAdapter.java +++ b/modules/infrastructure/domain-jpa/src/main/java/com/whoz_in/domain_jpa/member/MemberJpaAdapter.java @@ -2,13 +2,18 @@ import com.whoz_in.domain.member.MemberRepository; import com.whoz_in.domain.member.model.Member; +import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Repository; @Repository +@RequiredArgsConstructor public class MemberJpaAdapter implements MemberRepository { + private final MemberConverter converter; + private final MemberJpaRepository jpaRepository; @Override public void save(Member member) { - + MemberEntity memberEntity = converter.from(member); + jpaRepository.save(memberEntity); } } From 2766163570ae81f0299abd263d17464be18cb588 Mon Sep 17 00:00:00 2001 From: coco3x Date: Fri, 27 Dec 2024 21:17:40 +0900 Subject: [PATCH 20/32] =?UTF-8?q?rename(domain-jpa):=20Repository=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84=EC=B2=B4=20=EC=9D=B4=EB=A6=84=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD=20(JpaAdapter->JpaRepository)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../device/DeviceEntityRepository.java | 9 +++++++++ .../domain_jpa/device/DeviceJpaAdapter.java | 16 ---------------- .../device/DeviceJpaRepository.java | 15 +++++++++++---- ...{ManagedLog.java => ManagedLogEntity.java} | 3 +-- .../managed/ManagedLogEntityRepository.java | 17 +++++++++++++++++ .../managed/ManagedLogRepository.java | 17 ----------------- .../member/MemberEntityJpaRepository.java | 7 +++++++ .../domain_jpa/member/MemberJpaAdapter.java | 19 ------------------- .../member/MemberJpaRepository.java | 16 ++++++++++++++-- ...{MonitorLog.java => MonitorLogEntity.java} | 2 +- 10 files changed, 60 insertions(+), 61 deletions(-) create mode 100644 modules/infrastructure/domain-jpa/src/main/java/com/whoz_in/domain_jpa/device/DeviceEntityRepository.java delete mode 100644 modules/infrastructure/domain-jpa/src/main/java/com/whoz_in/domain_jpa/device/DeviceJpaAdapter.java rename modules/infrastructure/domain-jpa/src/main/java/com/whoz_in/domain_jpa/managed/{ManagedLog.java => ManagedLogEntity.java} (94%) create mode 100644 modules/infrastructure/domain-jpa/src/main/java/com/whoz_in/domain_jpa/managed/ManagedLogEntityRepository.java delete mode 100644 modules/infrastructure/domain-jpa/src/main/java/com/whoz_in/domain_jpa/managed/ManagedLogRepository.java create mode 100644 modules/infrastructure/domain-jpa/src/main/java/com/whoz_in/domain_jpa/member/MemberEntityJpaRepository.java delete mode 100644 modules/infrastructure/domain-jpa/src/main/java/com/whoz_in/domain_jpa/member/MemberJpaAdapter.java rename modules/infrastructure/domain-jpa/src/main/java/com/whoz_in/domain_jpa/monitor/{MonitorLog.java => MonitorLogEntity.java} (87%) diff --git a/modules/infrastructure/domain-jpa/src/main/java/com/whoz_in/domain_jpa/device/DeviceEntityRepository.java b/modules/infrastructure/domain-jpa/src/main/java/com/whoz_in/domain_jpa/device/DeviceEntityRepository.java new file mode 100644 index 00000000..2429c611 --- /dev/null +++ b/modules/infrastructure/domain-jpa/src/main/java/com/whoz_in/domain_jpa/device/DeviceEntityRepository.java @@ -0,0 +1,9 @@ +package com.whoz_in.domain_jpa.device; + +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface DeviceEntityRepository extends JpaRepository { + +} \ No newline at end of file diff --git a/modules/infrastructure/domain-jpa/src/main/java/com/whoz_in/domain_jpa/device/DeviceJpaAdapter.java b/modules/infrastructure/domain-jpa/src/main/java/com/whoz_in/domain_jpa/device/DeviceJpaAdapter.java deleted file mode 100644 index ea2f3bfd..00000000 --- a/modules/infrastructure/domain-jpa/src/main/java/com/whoz_in/domain_jpa/device/DeviceJpaAdapter.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.whoz_in.domain_jpa.device; - -import com.whoz_in.domain.device.DeviceRepository; -import com.whoz_in.domain.device.model.Device; -import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Repository; - -@Repository -@RequiredArgsConstructor -public class DeviceJpaAdapter implements DeviceRepository { - private final DeviceJpaRepository repository; - @Override - public void save(Device device) { - repository.save(new DeviceEntity()); - } -} diff --git a/modules/infrastructure/domain-jpa/src/main/java/com/whoz_in/domain_jpa/device/DeviceJpaRepository.java b/modules/infrastructure/domain-jpa/src/main/java/com/whoz_in/domain_jpa/device/DeviceJpaRepository.java index 296ae1f8..a4ad3b71 100644 --- a/modules/infrastructure/domain-jpa/src/main/java/com/whoz_in/domain_jpa/device/DeviceJpaRepository.java +++ b/modules/infrastructure/domain-jpa/src/main/java/com/whoz_in/domain_jpa/device/DeviceJpaRepository.java @@ -1,9 +1,16 @@ package com.whoz_in.domain_jpa.device; -import org.springframework.data.jpa.repository.JpaRepository; +import com.whoz_in.domain.device.DeviceRepository; +import com.whoz_in.domain.device.model.Device; +import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Repository; @Repository -public interface DeviceJpaRepository extends JpaRepository { - -} \ No newline at end of file +@RequiredArgsConstructor +public class DeviceJpaRepository implements DeviceRepository { + private final DeviceEntityRepository repository; + @Override + public void save(Device device) { + repository.save(new DeviceEntity()); + } +} diff --git a/modules/infrastructure/domain-jpa/src/main/java/com/whoz_in/domain_jpa/managed/ManagedLog.java b/modules/infrastructure/domain-jpa/src/main/java/com/whoz_in/domain_jpa/managed/ManagedLogEntity.java similarity index 94% rename from modules/infrastructure/domain-jpa/src/main/java/com/whoz_in/domain_jpa/managed/ManagedLog.java rename to modules/infrastructure/domain-jpa/src/main/java/com/whoz_in/domain_jpa/managed/ManagedLogEntity.java index 55941d08..aa1089bf 100644 --- a/modules/infrastructure/domain-jpa/src/main/java/com/whoz_in/domain_jpa/managed/ManagedLog.java +++ b/modules/infrastructure/domain-jpa/src/main/java/com/whoz_in/domain_jpa/managed/ManagedLogEntity.java @@ -5,7 +5,6 @@ import jakarta.persistence.Embeddable; import jakarta.persistence.EmbeddedId; import jakarta.persistence.Entity; -import jakarta.persistence.Table; import java.util.Objects; import lombok.AccessLevel; import lombok.AllArgsConstructor; @@ -18,7 +17,7 @@ @Getter @AllArgsConstructor(access = AccessLevel.PRIVATE) @NoArgsConstructor(access = AccessLevel.PROTECTED) -public class ManagedLog extends BaseEntity { +public class ManagedLogEntity extends BaseEntity { @EmbeddedId private LogId logId; diff --git a/modules/infrastructure/domain-jpa/src/main/java/com/whoz_in/domain_jpa/managed/ManagedLogEntityRepository.java b/modules/infrastructure/domain-jpa/src/main/java/com/whoz_in/domain_jpa/managed/ManagedLogEntityRepository.java new file mode 100644 index 00000000..a5098fd2 --- /dev/null +++ b/modules/infrastructure/domain-jpa/src/main/java/com/whoz_in/domain_jpa/managed/ManagedLogEntityRepository.java @@ -0,0 +1,17 @@ +package com.whoz_in.domain_jpa.managed; + +import java.util.List; +import java.util.Optional; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; + +public interface ManagedLogEntityRepository extends JpaRepository { + + @Query("SELECT log FROM ManagedLogEntity log WHERE log.logId.ip=:ip ORDER BY log.createdAt DESC LIMIT 1") + Optional findByIp(@Param("ip") String ip); + + @Query("SELECT log FROM ManagedLogEntity log WHERE log.logId.ip=:ip") + List findAllByIp(@Param("ip") String ip); + +} diff --git a/modules/infrastructure/domain-jpa/src/main/java/com/whoz_in/domain_jpa/managed/ManagedLogRepository.java b/modules/infrastructure/domain-jpa/src/main/java/com/whoz_in/domain_jpa/managed/ManagedLogRepository.java deleted file mode 100644 index 18ff956f..00000000 --- a/modules/infrastructure/domain-jpa/src/main/java/com/whoz_in/domain_jpa/managed/ManagedLogRepository.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.whoz_in.domain_jpa.managed; - -import java.util.List; -import java.util.Optional; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.data.jpa.repository.Query; -import org.springframework.data.repository.query.Param; - -public interface ManagedLogRepository extends JpaRepository { - - @Query("SELECT log FROM ManagedLog log WHERE log.logId.ip=:ip ORDER BY log.createdAt DESC LIMIT 1") - Optional findByIp(@Param("ip") String ip); - - @Query("SELECT log FROM ManagedLog log WHERE log.logId.ip=:ip") - List findAllByIp(@Param("ip") String ip); - -} diff --git a/modules/infrastructure/domain-jpa/src/main/java/com/whoz_in/domain_jpa/member/MemberEntityJpaRepository.java b/modules/infrastructure/domain-jpa/src/main/java/com/whoz_in/domain_jpa/member/MemberEntityJpaRepository.java new file mode 100644 index 00000000..5aa9758a --- /dev/null +++ b/modules/infrastructure/domain-jpa/src/main/java/com/whoz_in/domain_jpa/member/MemberEntityJpaRepository.java @@ -0,0 +1,7 @@ +package com.whoz_in.domain_jpa.member; + +import org.springframework.data.jpa.repository.JpaRepository; + +public interface MemberEntityJpaRepository extends JpaRepository { + +} diff --git a/modules/infrastructure/domain-jpa/src/main/java/com/whoz_in/domain_jpa/member/MemberJpaAdapter.java b/modules/infrastructure/domain-jpa/src/main/java/com/whoz_in/domain_jpa/member/MemberJpaAdapter.java deleted file mode 100644 index fa650b1d..00000000 --- a/modules/infrastructure/domain-jpa/src/main/java/com/whoz_in/domain_jpa/member/MemberJpaAdapter.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.whoz_in.domain_jpa.member; - -import com.whoz_in.domain.member.MemberRepository; -import com.whoz_in.domain.member.model.Member; -import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Repository; - -@Repository -@RequiredArgsConstructor -public class MemberJpaAdapter implements MemberRepository { - private final MemberConverter converter; - private final MemberJpaRepository jpaRepository; - - @Override - public void save(Member member) { - MemberEntity memberEntity = converter.from(member); - jpaRepository.save(memberEntity); - } -} diff --git a/modules/infrastructure/domain-jpa/src/main/java/com/whoz_in/domain_jpa/member/MemberJpaRepository.java b/modules/infrastructure/domain-jpa/src/main/java/com/whoz_in/domain_jpa/member/MemberJpaRepository.java index 612affe6..6ebc075b 100644 --- a/modules/infrastructure/domain-jpa/src/main/java/com/whoz_in/domain_jpa/member/MemberJpaRepository.java +++ b/modules/infrastructure/domain-jpa/src/main/java/com/whoz_in/domain_jpa/member/MemberJpaRepository.java @@ -1,7 +1,19 @@ package com.whoz_in.domain_jpa.member; -import org.springframework.data.jpa.repository.JpaRepository; +import com.whoz_in.domain.member.MemberRepository; +import com.whoz_in.domain.member.model.Member; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Repository; -public interface MemberJpaRepository extends JpaRepository { +@Repository +@RequiredArgsConstructor +public class MemberJpaRepository implements MemberRepository { + private final MemberConverter converter; + private final MemberEntityJpaRepository jpaRepository; + @Override + public void save(Member member) { + MemberEntity memberEntity = converter.from(member); + jpaRepository.save(memberEntity); + } } diff --git a/modules/infrastructure/domain-jpa/src/main/java/com/whoz_in/domain_jpa/monitor/MonitorLog.java b/modules/infrastructure/domain-jpa/src/main/java/com/whoz_in/domain_jpa/monitor/MonitorLogEntity.java similarity index 87% rename from modules/infrastructure/domain-jpa/src/main/java/com/whoz_in/domain_jpa/monitor/MonitorLog.java rename to modules/infrastructure/domain-jpa/src/main/java/com/whoz_in/domain_jpa/monitor/MonitorLogEntity.java index 5668f7fe..4ffec2de 100644 --- a/modules/infrastructure/domain-jpa/src/main/java/com/whoz_in/domain_jpa/monitor/MonitorLog.java +++ b/modules/infrastructure/domain-jpa/src/main/java/com/whoz_in/domain_jpa/monitor/MonitorLogEntity.java @@ -11,7 +11,7 @@ @Entity @AllArgsConstructor @NoArgsConstructor(access = AccessLevel.PROTECTED) -public class MonitorLog extends BaseEntity { +public class MonitorLogEntity extends BaseEntity { @Id private String mac; } From 4b9050fd3bcaae8cc003391672914b5c8894d2ee Mon Sep 17 00:00:00 2001 From: coco3x Date: Fri, 27 Dec 2024 22:16:44 +0900 Subject: [PATCH 21/32] =?UTF-8?q?feat(domain):=20loginId=EB=A1=9C=20Member?= =?UTF-8?q?=20=EC=B0=BE=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/whoz_in/domain/member/MemberRepository.java | 6 ++++++ .../domain/member/exception/NoMemberException.java | 10 ++++++++++ .../domain_jpa/member/MemberEntityJpaRepository.java | 3 ++- .../whoz_in/domain_jpa/member/MemberJpaRepository.java | 6 ++++++ 4 files changed, 24 insertions(+), 1 deletion(-) create mode 100644 modules/domain/src/main/java/com/whoz_in/domain/member/exception/NoMemberException.java diff --git a/modules/domain/src/main/java/com/whoz_in/domain/member/MemberRepository.java b/modules/domain/src/main/java/com/whoz_in/domain/member/MemberRepository.java index ac1d5031..90ffd745 100644 --- a/modules/domain/src/main/java/com/whoz_in/domain/member/MemberRepository.java +++ b/modules/domain/src/main/java/com/whoz_in/domain/member/MemberRepository.java @@ -1,7 +1,13 @@ package com.whoz_in.domain.member; +import com.whoz_in.domain.member.exception.NoMemberException; import com.whoz_in.domain.member.model.Member; +import java.util.Optional; public interface MemberRepository { void save(Member member); + Optional findByLoginId(String loginId); + default Member getByLoginId(String loginId){ + return findByLoginId(loginId).orElseThrow(NoMemberException::new); + } } diff --git a/modules/domain/src/main/java/com/whoz_in/domain/member/exception/NoMemberException.java b/modules/domain/src/main/java/com/whoz_in/domain/member/exception/NoMemberException.java new file mode 100644 index 00000000..087e9e86 --- /dev/null +++ b/modules/domain/src/main/java/com/whoz_in/domain/member/exception/NoMemberException.java @@ -0,0 +1,10 @@ +package com.whoz_in.domain.member.exception; + +import com.whoz_in.domain.shared.BusinessException; + +public class NoMemberException extends BusinessException { + + public NoMemberException() { + super("2008", "존재하지 않는 멤버입니다."); + } +} diff --git a/modules/infrastructure/domain-jpa/src/main/java/com/whoz_in/domain_jpa/member/MemberEntityJpaRepository.java b/modules/infrastructure/domain-jpa/src/main/java/com/whoz_in/domain_jpa/member/MemberEntityJpaRepository.java index 5aa9758a..ace1d6f2 100644 --- a/modules/infrastructure/domain-jpa/src/main/java/com/whoz_in/domain_jpa/member/MemberEntityJpaRepository.java +++ b/modules/infrastructure/domain-jpa/src/main/java/com/whoz_in/domain_jpa/member/MemberEntityJpaRepository.java @@ -1,7 +1,8 @@ package com.whoz_in.domain_jpa.member; +import java.util.Optional; import org.springframework.data.jpa.repository.JpaRepository; public interface MemberEntityJpaRepository extends JpaRepository { - + Optional findByLoginId(String loginId); } diff --git a/modules/infrastructure/domain-jpa/src/main/java/com/whoz_in/domain_jpa/member/MemberJpaRepository.java b/modules/infrastructure/domain-jpa/src/main/java/com/whoz_in/domain_jpa/member/MemberJpaRepository.java index 6ebc075b..4d605b73 100644 --- a/modules/infrastructure/domain-jpa/src/main/java/com/whoz_in/domain_jpa/member/MemberJpaRepository.java +++ b/modules/infrastructure/domain-jpa/src/main/java/com/whoz_in/domain_jpa/member/MemberJpaRepository.java @@ -2,6 +2,7 @@ import com.whoz_in.domain.member.MemberRepository; import com.whoz_in.domain.member.model.Member; +import java.util.Optional; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Repository; @@ -16,4 +17,9 @@ public void save(Member member) { MemberEntity memberEntity = converter.from(member); jpaRepository.save(memberEntity); } + + @Override + public Optional findByLoginId(String loginId) { + return jpaRepository.findByLoginId(loginId).map(converter::to); + } } From 928dc889e516a7f410024bf5f0ee373af573800f Mon Sep 17 00:00:00 2001 From: coco3x Date: Sat, 28 Dec 2024 00:55:02 +0900 Subject: [PATCH 22/32] =?UTF-8?q?delete:=20=ED=85=8C=EC=8A=A4=ED=8A=B8?= =?UTF-8?q?=EC=9A=A9=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 --- .../query/member/application/MemberGet.java | 8 -------- .../query/member/application/MemberGetHandler.java | 13 ------------- 2 files changed, 21 deletions(-) delete mode 100644 modules/main-api/src/main/java/com/whoz_in/main_api/query/member/application/MemberGet.java delete mode 100644 modules/main-api/src/main/java/com/whoz_in/main_api/query/member/application/MemberGetHandler.java diff --git a/modules/main-api/src/main/java/com/whoz_in/main_api/query/member/application/MemberGet.java b/modules/main-api/src/main/java/com/whoz_in/main_api/query/member/application/MemberGet.java deleted file mode 100644 index 599cd2cd..00000000 --- a/modules/main-api/src/main/java/com/whoz_in/main_api/query/member/application/MemberGet.java +++ /dev/null @@ -1,8 +0,0 @@ -package com.whoz_in.main_api.query.member.application; - - -import com.whoz_in.main_api.shared.application.query.Query; - -public class MemberGet implements Query { - -} diff --git a/modules/main-api/src/main/java/com/whoz_in/main_api/query/member/application/MemberGetHandler.java b/modules/main-api/src/main/java/com/whoz_in/main_api/query/member/application/MemberGetHandler.java deleted file mode 100644 index 48987a14..00000000 --- a/modules/main-api/src/main/java/com/whoz_in/main_api/query/member/application/MemberGetHandler.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.whoz_in.main_api.query.member.application; - - -import com.whoz_in.main_api.shared.application.Handler; -import com.whoz_in.main_api.shared.application.query.QueryHandler; - -@Handler -public class MemberGetHandler extends QueryHandler { - - @Override - public MemberResponse handle(MemberGet query) {return new MemberResponse();} - -} From f9ed4dda577a8daae1a2ea4aaac7c3715f714804 Mon Sep 17 00:00:00 2001 From: coco3x Date: Sat, 28 Dec 2024 00:56:37 +0900 Subject: [PATCH 23/32] =?UTF-8?q?feat(domain):=20Member=20=EC=95=A0?= =?UTF-8?q?=EA=B7=B8=EB=A6=AC=EA=B1=B0=ED=8A=B8=20=EC=83=9D=EC=84=B1=20?= =?UTF-8?q?=EB=B0=8F=20=EC=88=98=EC=A0=95=20=EC=8B=9C=20=EC=9D=B4=EB=B2=A4?= =?UTF-8?q?=ED=8A=B8=20=EB=93=B1=EB=A1=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/member/event/MemberCreated.java | 12 ++++++++++++ .../member/event/MemberPasswordChanged.java | 13 +++++++++++++ .../event/MemberStatusMessageChanged.java | 13 +++++++++++++ .../domain/member/model/AuthCredentials.java | 3 +-- .../com/whoz_in/domain/member/model/Member.java | 17 ++++++++++++++++- 5 files changed, 55 insertions(+), 3 deletions(-) create mode 100644 modules/domain/src/main/java/com/whoz_in/domain/member/event/MemberCreated.java create mode 100644 modules/domain/src/main/java/com/whoz_in/domain/member/event/MemberPasswordChanged.java create mode 100644 modules/domain/src/main/java/com/whoz_in/domain/member/event/MemberStatusMessageChanged.java diff --git a/modules/domain/src/main/java/com/whoz_in/domain/member/event/MemberCreated.java b/modules/domain/src/main/java/com/whoz_in/domain/member/event/MemberCreated.java new file mode 100644 index 00000000..99a6fb81 --- /dev/null +++ b/modules/domain/src/main/java/com/whoz_in/domain/member/event/MemberCreated.java @@ -0,0 +1,12 @@ +package com.whoz_in.domain.member.event; + +import com.whoz_in.domain.member.model.Member; +import com.whoz_in.domain.shared.event.DomainEvent; +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +@Getter +@RequiredArgsConstructor +public final class MemberCreated extends DomainEvent { + private final Member member; +} diff --git a/modules/domain/src/main/java/com/whoz_in/domain/member/event/MemberPasswordChanged.java b/modules/domain/src/main/java/com/whoz_in/domain/member/event/MemberPasswordChanged.java new file mode 100644 index 00000000..dcc23ee2 --- /dev/null +++ b/modules/domain/src/main/java/com/whoz_in/domain/member/event/MemberPasswordChanged.java @@ -0,0 +1,13 @@ +package com.whoz_in.domain.member.event; + +import com.whoz_in.domain.member.model.MemberId; +import com.whoz_in.domain.shared.event.DomainEvent; +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +@Getter +@RequiredArgsConstructor +public final class MemberPasswordChanged extends DomainEvent { + private final MemberId memberId; + private final String newPassword; +} diff --git a/modules/domain/src/main/java/com/whoz_in/domain/member/event/MemberStatusMessageChanged.java b/modules/domain/src/main/java/com/whoz_in/domain/member/event/MemberStatusMessageChanged.java new file mode 100644 index 00000000..2d6462f7 --- /dev/null +++ b/modules/domain/src/main/java/com/whoz_in/domain/member/event/MemberStatusMessageChanged.java @@ -0,0 +1,13 @@ +package com.whoz_in.domain.member.event; + +import com.whoz_in.domain.member.model.MemberId; +import com.whoz_in.domain.shared.event.DomainEvent; +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +@Getter +@RequiredArgsConstructor +public final class MemberStatusMessageChanged extends DomainEvent { + private final MemberId memberId; + private final String statusMessage; +} diff --git a/modules/domain/src/main/java/com/whoz_in/domain/member/model/AuthCredentials.java b/modules/domain/src/main/java/com/whoz_in/domain/member/model/AuthCredentials.java index 19797674..07aea7ab 100644 --- a/modules/domain/src/main/java/com/whoz_in/domain/member/model/AuthCredentials.java +++ b/modules/domain/src/main/java/com/whoz_in/domain/member/model/AuthCredentials.java @@ -38,10 +38,9 @@ public static AuthCredentials load(String loginId, String encodedPassword){ } //아이디와 비밀번호가 맞는지 확인 - public boolean validate(String loginId, String rawPassword, PasswordEncoder passwordEncoder){ + public void login(String loginId, String rawPassword, PasswordEncoder passwordEncoder){ if (!this.loginId.equals(loginId) || !this.encodedPassword.equals(passwordEncoder.encode(rawPassword))) throw new InvalidAuthCredentialsException(); - return false; } AuthCredentials changePassword(String rawOldPassword, String rawNewPassword, PasswordEncoder passwordEncoder){ diff --git a/modules/domain/src/main/java/com/whoz_in/domain/member/model/Member.java b/modules/domain/src/main/java/com/whoz_in/domain/member/model/Member.java index 1c9489bc..ea942959 100644 --- a/modules/domain/src/main/java/com/whoz_in/domain/member/model/Member.java +++ b/modules/domain/src/main/java/com/whoz_in/domain/member/model/Member.java @@ -1,5 +1,8 @@ package com.whoz_in.domain.member.model; +import com.whoz_in.domain.member.event.MemberCreated; +import com.whoz_in.domain.member.event.MemberPasswordChanged; +import com.whoz_in.domain.member.event.MemberStatusMessageChanged; import com.whoz_in.domain.member.exception.NotAuthMemberException; import com.whoz_in.domain.member.service.PasswordEncoder; import com.whoz_in.domain.shared.AggregateRoot; @@ -21,9 +24,11 @@ public final class Member extends AggregateRoot { @Nullable private AuthCredentials authCredentials; @Nullable private OAuthCredentials oAuthCredentials; + //일반 로그인이 아닐수도 있으므로 Optional public Optional getAuthCredentials(){ return Optional.ofNullable(authCredentials); } + //소셜 로그인이 아닐수도 있으므로 Optional public Optional getOAuthCredentials(){ return Optional.ofNullable(oAuthCredentials); } @@ -40,7 +45,7 @@ private static Member create(String name, Position mainPosition, int generation, AuthCredentials authCredentials, OAuthCredentials oAuthCredentials){ if (authCredentials == null && oAuthCredentials == null) throw new IllegalStateException("no auth and oauth"); - return builder() + Member member = builder() .id(new MemberId()) .name(name) .mainPosition(mainPosition) @@ -49,6 +54,8 @@ private static Member create(String name, Position mainPosition, int generation, .authCredentials(authCredentials) .oAuthCredentials(oAuthCredentials) .build(); + member.register(new MemberCreated(member)); + return member; } public static Member load(MemberId id, String name, Position mainPosition, int generation, String statusMessage, @@ -64,13 +71,21 @@ public static Member load(MemberId id, String name, Position mainPosition, int g .build(); } + //일반 로그인 - 실패 시 예외 + public void login(String loginId, String password, PasswordEncoder encoder){ + if (this.authCredentials == null) + throw new NotAuthMemberException(); + this.authCredentials.login(loginId, password, encoder); + } public void changePassword(String rawOldPassword, String rawNewPassword, PasswordEncoder passwordEncoder){ if (authCredentials == null) throw new NotAuthMemberException(); this.authCredentials = this.authCredentials.changePassword(rawOldPassword, rawNewPassword, passwordEncoder); + this.register(new MemberPasswordChanged(this.getId(), this.authCredentials.getEncodedPassword())); } public void changeStatusMessage(String newStatusMessage){ this.statusMessage = newStatusMessage; + this.register(new MemberStatusMessageChanged(this.getId(), this.statusMessage)); } } From 3c2a00067b8308a3e96ddae2d488fb52af0663fc Mon Sep 17 00:00:00 2001 From: coco3x Date: Sat, 28 Dec 2024 00:58:40 +0900 Subject: [PATCH 24/32] =?UTF-8?q?update(domain):=20Member=20=EB=A1=9C?= =?UTF-8?q?=EA=B7=B8=EC=9D=B8=20=EA=B8=B0=EB=8A=A5=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/whoz_in/domain/member/model/AuthCredentials.java | 6 ------ .../main/java/com/whoz_in/domain/member/model/Member.java | 6 ------ 2 files changed, 12 deletions(-) diff --git a/modules/domain/src/main/java/com/whoz_in/domain/member/model/AuthCredentials.java b/modules/domain/src/main/java/com/whoz_in/domain/member/model/AuthCredentials.java index 07aea7ab..bfddfe35 100644 --- a/modules/domain/src/main/java/com/whoz_in/domain/member/model/AuthCredentials.java +++ b/modules/domain/src/main/java/com/whoz_in/domain/member/model/AuthCredentials.java @@ -37,12 +37,6 @@ public static AuthCredentials load(String loginId, String encodedPassword){ return new AuthCredentials(loginId, encodedPassword); } - //아이디와 비밀번호가 맞는지 확인 - public void login(String loginId, String rawPassword, PasswordEncoder passwordEncoder){ - if (!this.loginId.equals(loginId) || !this.encodedPassword.equals(passwordEncoder.encode(rawPassword))) - throw new InvalidAuthCredentialsException(); - } - AuthCredentials changePassword(String rawOldPassword, String rawNewPassword, PasswordEncoder passwordEncoder){ String encodedOldPassword = passwordEncoder.encode(rawOldPassword); //기존 비밀번호가 같은지 확인 diff --git a/modules/domain/src/main/java/com/whoz_in/domain/member/model/Member.java b/modules/domain/src/main/java/com/whoz_in/domain/member/model/Member.java index ea942959..74bf0745 100644 --- a/modules/domain/src/main/java/com/whoz_in/domain/member/model/Member.java +++ b/modules/domain/src/main/java/com/whoz_in/domain/member/model/Member.java @@ -71,12 +71,6 @@ public static Member load(MemberId id, String name, Position mainPosition, int g .build(); } - //일반 로그인 - 실패 시 예외 - public void login(String loginId, String password, PasswordEncoder encoder){ - if (this.authCredentials == null) - throw new NotAuthMemberException(); - this.authCredentials.login(loginId, password, encoder); - } public void changePassword(String rawOldPassword, String rawNewPassword, PasswordEncoder passwordEncoder){ if (authCredentials == null) throw new NotAuthMemberException(); From 15cc02219327444e3a725e80ff3b820e72c98cac Mon Sep 17 00:00:00 2001 From: coco3x Date: Sat, 28 Dec 2024 01:19:14 +0900 Subject: [PATCH 25/32] =?UTF-8?q?delete:=20=ED=85=8C=EC=8A=A4=ED=8A=B8?= =?UTF-8?q?=EC=9A=A9=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 --- .../command/member/presentation/AuthController.java | 12 ------------ .../query/member/application/MemberResponse.java | 9 --------- 2 files changed, 21 deletions(-) delete mode 100644 modules/main-api/src/main/java/com/whoz_in/main_api/command/member/presentation/AuthController.java delete mode 100644 modules/main-api/src/main/java/com/whoz_in/main_api/query/member/application/MemberResponse.java diff --git a/modules/main-api/src/main/java/com/whoz_in/main_api/command/member/presentation/AuthController.java b/modules/main-api/src/main/java/com/whoz_in/main_api/command/member/presentation/AuthController.java deleted file mode 100644 index a2e03702..00000000 --- a/modules/main-api/src/main/java/com/whoz_in/main_api/command/member/presentation/AuthController.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.whoz_in.main_api.command.member.presentation; - -import com.whoz_in.main_api.shared.presentation.CommandQueryController; -import com.whoz_in.main_api.shared.application.command.CommandBus; -import com.whoz_in.main_api.shared.application.query.QueryBus; - -public class AuthController extends CommandQueryController { - public AuthController(CommandBus commandBus, QueryBus queryBus) { - super(commandBus, queryBus); - } - -} diff --git a/modules/main-api/src/main/java/com/whoz_in/main_api/query/member/application/MemberResponse.java b/modules/main-api/src/main/java/com/whoz_in/main_api/query/member/application/MemberResponse.java deleted file mode 100644 index 7eb52364..00000000 --- a/modules/main-api/src/main/java/com/whoz_in/main_api/query/member/application/MemberResponse.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.whoz_in.main_api.query.member.application; - -import com.whoz_in.main_api.shared.application.query.Response; -import lombok.Getter; - -@Getter -public final class MemberResponse implements Response { - -} From bbe2fc52073b83e87f406b47f4c3f1781216fc16 Mon Sep 17 00:00:00 2001 From: coco3x Date: Sat, 28 Dec 2024 02:15:39 +0900 Subject: [PATCH 26/32] =?UTF-8?q?fix(main-api):=20=ED=9A=8C=EC=9B=90?= =?UTF-8?q?=EA=B0=80=EC=9E=85=20=ED=95=B8=EB=93=A4=EB=9F=AC=20=EC=9D=B4?= =?UTF-8?q?=EB=B2=A4=ED=8A=B8=20=EB=B0=9C=ED=96=89=20=EB=A1=9C=EC=A7=81=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 --- .../command/member/application/MemberSignUpHandler.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/modules/main-api/src/main/java/com/whoz_in/main_api/command/member/application/MemberSignUpHandler.java b/modules/main-api/src/main/java/com/whoz_in/main_api/command/member/application/MemberSignUpHandler.java index 744972a9..347ed520 100644 --- a/modules/main-api/src/main/java/com/whoz_in/main_api/command/member/application/MemberSignUpHandler.java +++ b/modules/main-api/src/main/java/com/whoz_in/main_api/command/member/application/MemberSignUpHandler.java @@ -4,6 +4,7 @@ import com.whoz_in.domain.member.model.AuthCredentials; import com.whoz_in.domain.member.model.Member; import com.whoz_in.domain.member.service.PasswordEncoder; +import com.whoz_in.domain.shared.event.EventBus; import com.whoz_in.main_api.shared.application.Handler; import com.whoz_in.main_api.shared.application.command.CommandHandler; import lombok.RequiredArgsConstructor; @@ -14,6 +15,7 @@ public class MemberSignUpHandler extends CommandHandler { private final MemberRepository repository; private final PasswordEncoder encoder; + private final EventBus eventBus; @Transactional @Override @@ -23,5 +25,6 @@ public void handle(MemberSignUp cmd) { AuthCredentials.create(cmd.loginId(), cmd.password(), encoder) ); repository.save(member); + eventBus.publish(member.pullDomainEvents()); } } From 2c345628dc9b8d598a041108b16bfb71825962dd Mon Sep 17 00:00:00 2001 From: coco3x Date: Sat, 28 Dec 2024 02:16:17 +0900 Subject: [PATCH 27/32] =?UTF-8?q?comment:=20CommandHandler=20TODO=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 --- .../main_api/shared/application/command/CommandHandler.java | 1 + 1 file changed, 1 insertion(+) diff --git a/modules/main-api/src/main/java/com/whoz_in/main_api/shared/application/command/CommandHandler.java b/modules/main-api/src/main/java/com/whoz_in/main_api/shared/application/command/CommandHandler.java index 21992f10..667d7fd5 100644 --- a/modules/main-api/src/main/java/com/whoz_in/main_api/shared/application/command/CommandHandler.java +++ b/modules/main-api/src/main/java/com/whoz_in/main_api/shared/application/command/CommandHandler.java @@ -4,5 +4,6 @@ 우리의 새로운 서비스의 기능을 추가하고 싶을 때마다 이 핸들러와 적절한 Command를 구현하면 된다. */ public abstract class CommandHandler{ + //TODO: 결과의 메타 데이터를 가지는 CommandResult를 반환하도록 public abstract void handle(C command); } From 92df1795f19a4363ccf46209748187e943ede476 Mon Sep 17 00:00:00 2001 From: coco3x Date: Sat, 28 Dec 2024 03:01:26 +0900 Subject: [PATCH 28/32] =?UTF-8?q?feat(main-api):=20=EB=A1=9C=EA=B7=B8?= =?UTF-8?q?=EC=9D=B8=20=EC=BF=BC=EB=A6=AC=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../member/application/MemberAuthInfo.java | 10 +++++++++ .../query/member/application/MemberLogin.java | 9 ++++++++ .../application/MemberLoginHandler.java | 22 +++++++++++++++++++ .../application/MemberLoginResponse.java | 8 +++++++ .../member/application/MemberViewer.java | 8 +++++++ 5 files changed, 57 insertions(+) create mode 100644 modules/main-api/src/main/java/com/whoz_in/main_api/query/member/application/MemberAuthInfo.java create mode 100644 modules/main-api/src/main/java/com/whoz_in/main_api/query/member/application/MemberLogin.java create mode 100644 modules/main-api/src/main/java/com/whoz_in/main_api/query/member/application/MemberLoginHandler.java create mode 100644 modules/main-api/src/main/java/com/whoz_in/main_api/query/member/application/MemberLoginResponse.java create mode 100644 modules/main-api/src/main/java/com/whoz_in/main_api/query/member/application/MemberViewer.java diff --git a/modules/main-api/src/main/java/com/whoz_in/main_api/query/member/application/MemberAuthInfo.java b/modules/main-api/src/main/java/com/whoz_in/main_api/query/member/application/MemberAuthInfo.java new file mode 100644 index 00000000..96a5095f --- /dev/null +++ b/modules/main-api/src/main/java/com/whoz_in/main_api/query/member/application/MemberAuthInfo.java @@ -0,0 +1,10 @@ +package com.whoz_in.main_api.query.member.application; + +import com.whoz_in.main_api.shared.application.query.View; +import java.util.UUID; + +public record MemberAuthInfo( + UUID memberId, + String loginId, + String encodedPassword +) implements View {} diff --git a/modules/main-api/src/main/java/com/whoz_in/main_api/query/member/application/MemberLogin.java b/modules/main-api/src/main/java/com/whoz_in/main_api/query/member/application/MemberLogin.java new file mode 100644 index 00000000..9472e637 --- /dev/null +++ b/modules/main-api/src/main/java/com/whoz_in/main_api/query/member/application/MemberLogin.java @@ -0,0 +1,9 @@ +package com.whoz_in.main_api.query.member.application; + +import com.whoz_in.main_api.shared.application.query.Query; + +public record MemberLogin( + String loginId, + String password +) implements Query {} + diff --git a/modules/main-api/src/main/java/com/whoz_in/main_api/query/member/application/MemberLoginHandler.java b/modules/main-api/src/main/java/com/whoz_in/main_api/query/member/application/MemberLoginHandler.java new file mode 100644 index 00000000..9bf9fe06 --- /dev/null +++ b/modules/main-api/src/main/java/com/whoz_in/main_api/query/member/application/MemberLoginHandler.java @@ -0,0 +1,22 @@ +package com.whoz_in.main_api.query.member.application; + +import com.whoz_in.domain.member.service.PasswordEncoder; +import com.whoz_in.main_api.shared.application.Handler; +import com.whoz_in.main_api.shared.application.query.QueryHandler; +import lombok.RequiredArgsConstructor; + +@Handler +@RequiredArgsConstructor +public class MemberLoginHandler extends QueryHandler { + private final MemberViewer viewer; + private final PasswordEncoder encoder; + + @Override + public MemberLoginResponse handle(MemberLogin query) { + MemberAuthInfo authInfo = viewer.getAuthInfoByLoginId(query.loginId()).orElseThrow(); + if (!authInfo.encodedPassword().equals(encoder.encode(query.loginId()))) + //TODO: query 예외로 + throw new IllegalArgumentException("로그인에 실패했습니다."); + return new MemberLoginResponse(authInfo.memberId()); + } +} diff --git a/modules/main-api/src/main/java/com/whoz_in/main_api/query/member/application/MemberLoginResponse.java b/modules/main-api/src/main/java/com/whoz_in/main_api/query/member/application/MemberLoginResponse.java new file mode 100644 index 00000000..aa5f7879 --- /dev/null +++ b/modules/main-api/src/main/java/com/whoz_in/main_api/query/member/application/MemberLoginResponse.java @@ -0,0 +1,8 @@ +package com.whoz_in.main_api.query.member.application; + +import com.whoz_in.main_api.shared.application.query.Response; +import java.util.UUID; + +public record MemberLoginResponse( + UUID memberId +) implements Response {} diff --git a/modules/main-api/src/main/java/com/whoz_in/main_api/query/member/application/MemberViewer.java b/modules/main-api/src/main/java/com/whoz_in/main_api/query/member/application/MemberViewer.java new file mode 100644 index 00000000..ebe142f3 --- /dev/null +++ b/modules/main-api/src/main/java/com/whoz_in/main_api/query/member/application/MemberViewer.java @@ -0,0 +1,8 @@ +package com.whoz_in.main_api.query.member.application; + +import com.whoz_in.main_api.shared.application.query.Viewer; +import java.util.Optional; + +public interface MemberViewer extends Viewer { + Optional getAuthInfoByLoginId(String loginId); +} From 696d62fedf5e92ffd2bac410bcf4af053dc65c01 Mon Sep 17 00:00:00 2001 From: coco3x Date: Sat, 28 Dec 2024 03:10:13 +0900 Subject: [PATCH 29/32] =?UTF-8?q?refactor(main-api):=20shared=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 --- .../main_api/command/device/application/DeviceAdd.java | 2 +- .../command/device/application/DeviceAddHandler.java | 2 +- .../command/member/application/MemberSignUp.java | 2 +- .../member/application/MemberSignUpHandler.java | 2 +- .../command/member/presentation/MemberController.java | 4 ++-- .../shared/application}/Command.java | 2 +- .../shared/application}/CommandBus.java | 2 +- .../shared/application}/CommandHandler.java | 2 +- .../shared/application}/CommandHandlers.java | 2 +- .../shared/application}/InMemoryCommandBus.java | 2 +- .../query/device_info/application/DeviceInfo.java | 4 ++-- .../query/device_info/application/DeviceInfoGet.java | 2 +- .../device_info/application/DeviceInfoGetHandler.java | 2 +- .../device_info/application/DeviceInfoViewer.java | 2 +- .../query/device_info/application/DevicesInfo.java | 4 ++-- .../query/device_info/application/DevicesInfoGet.java | 2 +- .../device_info/application/DevicesInfoGetHandler.java | 2 +- .../presentation/DeviceQueryController.java | 4 ++-- .../query/member/application/MemberAuthInfo.java | 2 +- .../main_api/query/member/application/MemberLogin.java | 2 +- .../query/member/application/MemberLoginHandler.java | 2 +- .../query/member/application/MemberLoginResponse.java | 2 +- .../query/member/application/MemberViewer.java | 2 +- .../shared/application}/InMemoryQueryBus.java | 2 +- .../main_api/query/shared/application/Query.java | 5 +++++ .../query => query/shared/application}/QueryBus.java | 2 +- .../shared/application}/QueryHandler.java | 2 +- .../shared/application}/QueryHandlers.java | 2 +- .../main_api/query/shared/application/Response.java | 5 +++++ .../query => query/shared/application}/View.java | 2 +- .../query => query/shared/application}/Viewer.java | 4 ++-- .../main_api/shared/application/query/Query.java | 5 ----- .../main_api/shared/application/query/Response.java | 5 ----- .../shared/presentation/CommandQueryController.java | 10 +++++----- .../shared/utils/UserNotAuthenticationException.java | 1 + .../com/whoz_in/main_api/architecture/ViewerTest.java | 4 ++-- 36 files changed, 52 insertions(+), 51 deletions(-) rename modules/main-api/src/main/java/com/whoz_in/main_api/{shared/application/command => command/shared/application}/Command.java (85%) rename modules/main-api/src/main/java/com/whoz_in/main_api/{shared/application/command => command/shared/application}/CommandBus.java (75%) rename modules/main-api/src/main/java/com/whoz_in/main_api/{shared/application/command => command/shared/application}/CommandHandler.java (85%) rename modules/main-api/src/main/java/com/whoz_in/main_api/{shared/application/command => command/shared/application}/CommandHandlers.java (97%) rename modules/main-api/src/main/java/com/whoz_in/main_api/{shared/application/command => command/shared/application}/InMemoryCommandBus.java (87%) rename modules/main-api/src/main/java/com/whoz_in/main_api/{shared/application/query => query/shared/application}/InMemoryQueryBus.java (88%) create mode 100644 modules/main-api/src/main/java/com/whoz_in/main_api/query/shared/application/Query.java rename modules/main-api/src/main/java/com/whoz_in/main_api/{shared/application/query => query/shared/application}/QueryBus.java (58%) rename modules/main-api/src/main/java/com/whoz_in/main_api/{shared/application/query => query/shared/application}/QueryHandler.java (80%) rename modules/main-api/src/main/java/com/whoz_in/main_api/{shared/application/query => query/shared/application}/QueryHandlers.java (97%) create mode 100644 modules/main-api/src/main/java/com/whoz_in/main_api/query/shared/application/Response.java rename modules/main-api/src/main/java/com/whoz_in/main_api/{shared/application/query => query/shared/application}/View.java (68%) rename modules/main-api/src/main/java/com/whoz_in/main_api/{shared/application/query => query/shared/application}/Viewer.java (77%) delete mode 100644 modules/main-api/src/main/java/com/whoz_in/main_api/shared/application/query/Query.java delete mode 100644 modules/main-api/src/main/java/com/whoz_in/main_api/shared/application/query/Response.java diff --git a/modules/main-api/src/main/java/com/whoz_in/main_api/command/device/application/DeviceAdd.java b/modules/main-api/src/main/java/com/whoz_in/main_api/command/device/application/DeviceAdd.java index baeb2d48..b7705137 100644 --- a/modules/main-api/src/main/java/com/whoz_in/main_api/command/device/application/DeviceAdd.java +++ b/modules/main-api/src/main/java/com/whoz_in/main_api/command/device/application/DeviceAdd.java @@ -1,6 +1,6 @@ package com.whoz_in.main_api.command.device.application; -import com.whoz_in.main_api.shared.application.command.Command; +import com.whoz_in.main_api.command.shared.application.Command; import com.whoz_in.domain.device.model.IpAddress; import com.whoz_in.domain.device.model.MacAddress; import lombok.Getter; diff --git a/modules/main-api/src/main/java/com/whoz_in/main_api/command/device/application/DeviceAddHandler.java b/modules/main-api/src/main/java/com/whoz_in/main_api/command/device/application/DeviceAddHandler.java index 2f7155d7..4eda0cb5 100644 --- a/modules/main-api/src/main/java/com/whoz_in/main_api/command/device/application/DeviceAddHandler.java +++ b/modules/main-api/src/main/java/com/whoz_in/main_api/command/device/application/DeviceAddHandler.java @@ -1,7 +1,7 @@ package com.whoz_in.main_api.command.device.application; import com.whoz_in.main_api.shared.application.Handler; -import com.whoz_in.main_api.shared.application.command.CommandHandler; +import com.whoz_in.main_api.command.shared.application.CommandHandler; import com.whoz_in.main_api.shared.utils.RequesterInfo; import com.whoz_in.domain.device.DeviceRepository; import com.whoz_in.domain.device.model.Device; diff --git a/modules/main-api/src/main/java/com/whoz_in/main_api/command/member/application/MemberSignUp.java b/modules/main-api/src/main/java/com/whoz_in/main_api/command/member/application/MemberSignUp.java index a99687db..5226610b 100644 --- a/modules/main-api/src/main/java/com/whoz_in/main_api/command/member/application/MemberSignUp.java +++ b/modules/main-api/src/main/java/com/whoz_in/main_api/command/member/application/MemberSignUp.java @@ -1,7 +1,7 @@ package com.whoz_in.main_api.command.member.application; import com.whoz_in.domain.member.model.Position; -import com.whoz_in.main_api.shared.application.command.Command; +import com.whoz_in.main_api.command.shared.application.Command; public record MemberSignUp( String loginId, diff --git a/modules/main-api/src/main/java/com/whoz_in/main_api/command/member/application/MemberSignUpHandler.java b/modules/main-api/src/main/java/com/whoz_in/main_api/command/member/application/MemberSignUpHandler.java index 347ed520..2fa784e2 100644 --- a/modules/main-api/src/main/java/com/whoz_in/main_api/command/member/application/MemberSignUpHandler.java +++ b/modules/main-api/src/main/java/com/whoz_in/main_api/command/member/application/MemberSignUpHandler.java @@ -6,7 +6,7 @@ import com.whoz_in.domain.member.service.PasswordEncoder; import com.whoz_in.domain.shared.event.EventBus; import com.whoz_in.main_api.shared.application.Handler; -import com.whoz_in.main_api.shared.application.command.CommandHandler; +import com.whoz_in.main_api.command.shared.application.CommandHandler; import lombok.RequiredArgsConstructor; import org.springframework.transaction.annotation.Transactional; diff --git a/modules/main-api/src/main/java/com/whoz_in/main_api/command/member/presentation/MemberController.java b/modules/main-api/src/main/java/com/whoz_in/main_api/command/member/presentation/MemberController.java index d06a47a0..55dd7b02 100644 --- a/modules/main-api/src/main/java/com/whoz_in/main_api/command/member/presentation/MemberController.java +++ b/modules/main-api/src/main/java/com/whoz_in/main_api/command/member/presentation/MemberController.java @@ -1,8 +1,8 @@ package com.whoz_in.main_api.command.member.presentation; import com.whoz_in.main_api.command.member.application.MemberSignUp; -import com.whoz_in.main_api.shared.application.command.CommandBus; -import com.whoz_in.main_api.shared.application.query.QueryBus; +import com.whoz_in.main_api.command.shared.application.CommandBus; +import com.whoz_in.main_api.query.shared.application.QueryBus; import com.whoz_in.main_api.shared.presentation.CommandQueryController; import com.whoz_in.main_api.shared.presentation.response.ResponseEntityGenerator; import com.whoz_in.main_api.shared.presentation.response.SuccessBody; diff --git a/modules/main-api/src/main/java/com/whoz_in/main_api/shared/application/command/Command.java b/modules/main-api/src/main/java/com/whoz_in/main_api/command/shared/application/Command.java similarity index 85% rename from modules/main-api/src/main/java/com/whoz_in/main_api/shared/application/command/Command.java rename to modules/main-api/src/main/java/com/whoz_in/main_api/command/shared/application/Command.java index c1fc8b7b..77bb558d 100644 --- a/modules/main-api/src/main/java/com/whoz_in/main_api/shared/application/command/Command.java +++ b/modules/main-api/src/main/java/com/whoz_in/main_api/command/shared/application/Command.java @@ -1,4 +1,4 @@ -package com.whoz_in.main_api.shared.application.command; +package com.whoz_in.main_api.command.shared.application; /* userService.login(String userId) diff --git a/modules/main-api/src/main/java/com/whoz_in/main_api/shared/application/command/CommandBus.java b/modules/main-api/src/main/java/com/whoz_in/main_api/command/shared/application/CommandBus.java similarity index 75% rename from modules/main-api/src/main/java/com/whoz_in/main_api/shared/application/command/CommandBus.java rename to modules/main-api/src/main/java/com/whoz_in/main_api/command/shared/application/CommandBus.java index fba5f365..9f9809cf 100644 --- a/modules/main-api/src/main/java/com/whoz_in/main_api/shared/application/command/CommandBus.java +++ b/modules/main-api/src/main/java/com/whoz_in/main_api/command/shared/application/CommandBus.java @@ -1,4 +1,4 @@ -package com.whoz_in.main_api.shared.application.command; +package com.whoz_in.main_api.command.shared.application; /* 받은 Command에 따라 적절한 CommandHandler에게 명령을 전달하는 인터페이스이다. diff --git a/modules/main-api/src/main/java/com/whoz_in/main_api/shared/application/command/CommandHandler.java b/modules/main-api/src/main/java/com/whoz_in/main_api/command/shared/application/CommandHandler.java similarity index 85% rename from modules/main-api/src/main/java/com/whoz_in/main_api/shared/application/command/CommandHandler.java rename to modules/main-api/src/main/java/com/whoz_in/main_api/command/shared/application/CommandHandler.java index 667d7fd5..c28ee364 100644 --- a/modules/main-api/src/main/java/com/whoz_in/main_api/shared/application/command/CommandHandler.java +++ b/modules/main-api/src/main/java/com/whoz_in/main_api/command/shared/application/CommandHandler.java @@ -1,4 +1,4 @@ -package com.whoz_in.main_api.shared.application.command; +package com.whoz_in.main_api.command.shared.application; /* 우리의 새로운 서비스의 기능을 추가하고 싶을 때마다 이 핸들러와 적절한 Command를 구현하면 된다. diff --git a/modules/main-api/src/main/java/com/whoz_in/main_api/shared/application/command/CommandHandlers.java b/modules/main-api/src/main/java/com/whoz_in/main_api/command/shared/application/CommandHandlers.java similarity index 97% rename from modules/main-api/src/main/java/com/whoz_in/main_api/shared/application/command/CommandHandlers.java rename to modules/main-api/src/main/java/com/whoz_in/main_api/command/shared/application/CommandHandlers.java index 3be3911f..3e2bed71 100644 --- a/modules/main-api/src/main/java/com/whoz_in/main_api/shared/application/command/CommandHandlers.java +++ b/modules/main-api/src/main/java/com/whoz_in/main_api/command/shared/application/CommandHandlers.java @@ -1,4 +1,4 @@ -package com.whoz_in.main_api.shared.application.command; +package com.whoz_in.main_api.command.shared.application; import java.lang.reflect.ParameterizedType; import java.util.Map; diff --git a/modules/main-api/src/main/java/com/whoz_in/main_api/shared/application/command/InMemoryCommandBus.java b/modules/main-api/src/main/java/com/whoz_in/main_api/command/shared/application/InMemoryCommandBus.java similarity index 87% rename from modules/main-api/src/main/java/com/whoz_in/main_api/shared/application/command/InMemoryCommandBus.java rename to modules/main-api/src/main/java/com/whoz_in/main_api/command/shared/application/InMemoryCommandBus.java index 26d92809..d30b025a 100644 --- a/modules/main-api/src/main/java/com/whoz_in/main_api/shared/application/command/InMemoryCommandBus.java +++ b/modules/main-api/src/main/java/com/whoz_in/main_api/command/shared/application/InMemoryCommandBus.java @@ -1,4 +1,4 @@ -package com.whoz_in.main_api.shared.application.command; +package com.whoz_in.main_api.command.shared.application; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Component; diff --git a/modules/main-api/src/main/java/com/whoz_in/main_api/query/device_info/application/DeviceInfo.java b/modules/main-api/src/main/java/com/whoz_in/main_api/query/device_info/application/DeviceInfo.java index 406b5feb..a2cba594 100644 --- a/modules/main-api/src/main/java/com/whoz_in/main_api/query/device_info/application/DeviceInfo.java +++ b/modules/main-api/src/main/java/com/whoz_in/main_api/query/device_info/application/DeviceInfo.java @@ -1,7 +1,7 @@ package com.whoz_in.main_api.query.device_info.application; -import com.whoz_in.main_api.shared.application.query.Response; -import com.whoz_in.main_api.shared.application.query.View; +import com.whoz_in.main_api.query.shared.application.Response; +import com.whoz_in.main_api.query.shared.application.View; public final class DeviceInfo implements Response, View { diff --git a/modules/main-api/src/main/java/com/whoz_in/main_api/query/device_info/application/DeviceInfoGet.java b/modules/main-api/src/main/java/com/whoz_in/main_api/query/device_info/application/DeviceInfoGet.java index 40e17c70..de99b0dd 100644 --- a/modules/main-api/src/main/java/com/whoz_in/main_api/query/device_info/application/DeviceInfoGet.java +++ b/modules/main-api/src/main/java/com/whoz_in/main_api/query/device_info/application/DeviceInfoGet.java @@ -1,6 +1,6 @@ package com.whoz_in.main_api.query.device_info.application; -import com.whoz_in.main_api.shared.application.query.Query; +import com.whoz_in.main_api.query.shared.application.Query; import lombok.Getter; import lombok.RequiredArgsConstructor; diff --git a/modules/main-api/src/main/java/com/whoz_in/main_api/query/device_info/application/DeviceInfoGetHandler.java b/modules/main-api/src/main/java/com/whoz_in/main_api/query/device_info/application/DeviceInfoGetHandler.java index 4894818b..7a6308dd 100644 --- a/modules/main-api/src/main/java/com/whoz_in/main_api/query/device_info/application/DeviceInfoGetHandler.java +++ b/modules/main-api/src/main/java/com/whoz_in/main_api/query/device_info/application/DeviceInfoGetHandler.java @@ -1,7 +1,7 @@ package com.whoz_in.main_api.query.device_info.application; import com.whoz_in.main_api.shared.application.Handler; -import com.whoz_in.main_api.shared.application.query.QueryHandler; +import com.whoz_in.main_api.query.shared.application.QueryHandler; import lombok.RequiredArgsConstructor; @Handler diff --git a/modules/main-api/src/main/java/com/whoz_in/main_api/query/device_info/application/DeviceInfoViewer.java b/modules/main-api/src/main/java/com/whoz_in/main_api/query/device_info/application/DeviceInfoViewer.java index 9c961c5c..34d246cd 100644 --- a/modules/main-api/src/main/java/com/whoz_in/main_api/query/device_info/application/DeviceInfoViewer.java +++ b/modules/main-api/src/main/java/com/whoz_in/main_api/query/device_info/application/DeviceInfoViewer.java @@ -1,7 +1,7 @@ package com.whoz_in.main_api.query.device_info.application; -import com.whoz_in.main_api.shared.application.query.Viewer; +import com.whoz_in.main_api.query.shared.application.Viewer; public interface DeviceInfoViewer extends Viewer { DeviceInfo findByDeviceId(Long deviceId); diff --git a/modules/main-api/src/main/java/com/whoz_in/main_api/query/device_info/application/DevicesInfo.java b/modules/main-api/src/main/java/com/whoz_in/main_api/query/device_info/application/DevicesInfo.java index d6217087..460fcef9 100644 --- a/modules/main-api/src/main/java/com/whoz_in/main_api/query/device_info/application/DevicesInfo.java +++ b/modules/main-api/src/main/java/com/whoz_in/main_api/query/device_info/application/DevicesInfo.java @@ -1,7 +1,7 @@ package com.whoz_in.main_api.query.device_info.application; -import com.whoz_in.main_api.shared.application.query.Response; -import com.whoz_in.main_api.shared.application.query.View; +import com.whoz_in.main_api.query.shared.application.Response; +import com.whoz_in.main_api.query.shared.application.View; public final class DevicesInfo implements Response, View { diff --git a/modules/main-api/src/main/java/com/whoz_in/main_api/query/device_info/application/DevicesInfoGet.java b/modules/main-api/src/main/java/com/whoz_in/main_api/query/device_info/application/DevicesInfoGet.java index 5c71f468..1b26ce6f 100644 --- a/modules/main-api/src/main/java/com/whoz_in/main_api/query/device_info/application/DevicesInfoGet.java +++ b/modules/main-api/src/main/java/com/whoz_in/main_api/query/device_info/application/DevicesInfoGet.java @@ -1,6 +1,6 @@ package com.whoz_in.main_api.query.device_info.application; -import com.whoz_in.main_api.shared.application.query.Query; +import com.whoz_in.main_api.query.shared.application.Query; public final class DevicesInfoGet implements Query { diff --git a/modules/main-api/src/main/java/com/whoz_in/main_api/query/device_info/application/DevicesInfoGetHandler.java b/modules/main-api/src/main/java/com/whoz_in/main_api/query/device_info/application/DevicesInfoGetHandler.java index 8988d365..065befba 100644 --- a/modules/main-api/src/main/java/com/whoz_in/main_api/query/device_info/application/DevicesInfoGetHandler.java +++ b/modules/main-api/src/main/java/com/whoz_in/main_api/query/device_info/application/DevicesInfoGetHandler.java @@ -1,7 +1,7 @@ package com.whoz_in.main_api.query.device_info.application; import com.whoz_in.main_api.shared.application.Handler; -import com.whoz_in.main_api.shared.application.query.QueryHandler; +import com.whoz_in.main_api.query.shared.application.QueryHandler; import lombok.RequiredArgsConstructor; @Handler diff --git a/modules/main-api/src/main/java/com/whoz_in/main_api/query/device_info/presentation/DeviceQueryController.java b/modules/main-api/src/main/java/com/whoz_in/main_api/query/device_info/presentation/DeviceQueryController.java index b08e41f7..0b02b40f 100644 --- a/modules/main-api/src/main/java/com/whoz_in/main_api/query/device_info/presentation/DeviceQueryController.java +++ b/modules/main-api/src/main/java/com/whoz_in/main_api/query/device_info/presentation/DeviceQueryController.java @@ -1,8 +1,8 @@ package com.whoz_in.main_api.query.device_info.presentation; import com.whoz_in.main_api.query.device_info.application.DeviceInfoGet; -import com.whoz_in.main_api.shared.application.command.CommandBus; -import com.whoz_in.main_api.shared.application.query.QueryBus; +import com.whoz_in.main_api.command.shared.application.CommandBus; +import com.whoz_in.main_api.query.shared.application.QueryBus; import com.whoz_in.main_api.shared.presentation.CommandQueryController; import com.whoz_in.main_api.shared.presentation.response.CrudResponseCode; import com.whoz_in.main_api.shared.presentation.response.ResponseEntityGenerator; diff --git a/modules/main-api/src/main/java/com/whoz_in/main_api/query/member/application/MemberAuthInfo.java b/modules/main-api/src/main/java/com/whoz_in/main_api/query/member/application/MemberAuthInfo.java index 96a5095f..0609ae7f 100644 --- a/modules/main-api/src/main/java/com/whoz_in/main_api/query/member/application/MemberAuthInfo.java +++ b/modules/main-api/src/main/java/com/whoz_in/main_api/query/member/application/MemberAuthInfo.java @@ -1,6 +1,6 @@ package com.whoz_in.main_api.query.member.application; -import com.whoz_in.main_api.shared.application.query.View; +import com.whoz_in.main_api.query.shared.application.View; import java.util.UUID; public record MemberAuthInfo( diff --git a/modules/main-api/src/main/java/com/whoz_in/main_api/query/member/application/MemberLogin.java b/modules/main-api/src/main/java/com/whoz_in/main_api/query/member/application/MemberLogin.java index 9472e637..82f98d1a 100644 --- a/modules/main-api/src/main/java/com/whoz_in/main_api/query/member/application/MemberLogin.java +++ b/modules/main-api/src/main/java/com/whoz_in/main_api/query/member/application/MemberLogin.java @@ -1,6 +1,6 @@ package com.whoz_in.main_api.query.member.application; -import com.whoz_in.main_api.shared.application.query.Query; +import com.whoz_in.main_api.query.shared.application.Query; public record MemberLogin( String loginId, diff --git a/modules/main-api/src/main/java/com/whoz_in/main_api/query/member/application/MemberLoginHandler.java b/modules/main-api/src/main/java/com/whoz_in/main_api/query/member/application/MemberLoginHandler.java index 9bf9fe06..b6551e89 100644 --- a/modules/main-api/src/main/java/com/whoz_in/main_api/query/member/application/MemberLoginHandler.java +++ b/modules/main-api/src/main/java/com/whoz_in/main_api/query/member/application/MemberLoginHandler.java @@ -2,7 +2,7 @@ import com.whoz_in.domain.member.service.PasswordEncoder; import com.whoz_in.main_api.shared.application.Handler; -import com.whoz_in.main_api.shared.application.query.QueryHandler; +import com.whoz_in.main_api.query.shared.application.QueryHandler; import lombok.RequiredArgsConstructor; @Handler diff --git a/modules/main-api/src/main/java/com/whoz_in/main_api/query/member/application/MemberLoginResponse.java b/modules/main-api/src/main/java/com/whoz_in/main_api/query/member/application/MemberLoginResponse.java index aa5f7879..b205615c 100644 --- a/modules/main-api/src/main/java/com/whoz_in/main_api/query/member/application/MemberLoginResponse.java +++ b/modules/main-api/src/main/java/com/whoz_in/main_api/query/member/application/MemberLoginResponse.java @@ -1,6 +1,6 @@ package com.whoz_in.main_api.query.member.application; -import com.whoz_in.main_api.shared.application.query.Response; +import com.whoz_in.main_api.query.shared.application.Response; import java.util.UUID; public record MemberLoginResponse( diff --git a/modules/main-api/src/main/java/com/whoz_in/main_api/query/member/application/MemberViewer.java b/modules/main-api/src/main/java/com/whoz_in/main_api/query/member/application/MemberViewer.java index ebe142f3..ce4ee70a 100644 --- a/modules/main-api/src/main/java/com/whoz_in/main_api/query/member/application/MemberViewer.java +++ b/modules/main-api/src/main/java/com/whoz_in/main_api/query/member/application/MemberViewer.java @@ -1,6 +1,6 @@ package com.whoz_in.main_api.query.member.application; -import com.whoz_in.main_api.shared.application.query.Viewer; +import com.whoz_in.main_api.query.shared.application.Viewer; import java.util.Optional; public interface MemberViewer extends Viewer { diff --git a/modules/main-api/src/main/java/com/whoz_in/main_api/shared/application/query/InMemoryQueryBus.java b/modules/main-api/src/main/java/com/whoz_in/main_api/query/shared/application/InMemoryQueryBus.java similarity index 88% rename from modules/main-api/src/main/java/com/whoz_in/main_api/shared/application/query/InMemoryQueryBus.java rename to modules/main-api/src/main/java/com/whoz_in/main_api/query/shared/application/InMemoryQueryBus.java index ba09623a..67e415f2 100644 --- a/modules/main-api/src/main/java/com/whoz_in/main_api/shared/application/query/InMemoryQueryBus.java +++ b/modules/main-api/src/main/java/com/whoz_in/main_api/query/shared/application/InMemoryQueryBus.java @@ -1,4 +1,4 @@ -package com.whoz_in.main_api.shared.application.query; +package com.whoz_in.main_api.query.shared.application; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Component; diff --git a/modules/main-api/src/main/java/com/whoz_in/main_api/query/shared/application/Query.java b/modules/main-api/src/main/java/com/whoz_in/main_api/query/shared/application/Query.java new file mode 100644 index 00000000..89913f8a --- /dev/null +++ b/modules/main-api/src/main/java/com/whoz_in/main_api/query/shared/application/Query.java @@ -0,0 +1,5 @@ +package com.whoz_in.main_api.query.shared.application; + +public interface Query { + +} diff --git a/modules/main-api/src/main/java/com/whoz_in/main_api/shared/application/query/QueryBus.java b/modules/main-api/src/main/java/com/whoz_in/main_api/query/shared/application/QueryBus.java similarity index 58% rename from modules/main-api/src/main/java/com/whoz_in/main_api/shared/application/query/QueryBus.java rename to modules/main-api/src/main/java/com/whoz_in/main_api/query/shared/application/QueryBus.java index f7a3cc5f..d2c5ff98 100644 --- a/modules/main-api/src/main/java/com/whoz_in/main_api/shared/application/query/QueryBus.java +++ b/modules/main-api/src/main/java/com/whoz_in/main_api/query/shared/application/QueryBus.java @@ -1,4 +1,4 @@ -package com.whoz_in.main_api.shared.application.query; +package com.whoz_in.main_api.query.shared.application; public interface QueryBus { R ask(Query query); diff --git a/modules/main-api/src/main/java/com/whoz_in/main_api/shared/application/query/QueryHandler.java b/modules/main-api/src/main/java/com/whoz_in/main_api/query/shared/application/QueryHandler.java similarity index 80% rename from modules/main-api/src/main/java/com/whoz_in/main_api/shared/application/query/QueryHandler.java rename to modules/main-api/src/main/java/com/whoz_in/main_api/query/shared/application/QueryHandler.java index 3b2e729f..e08115c3 100644 --- a/modules/main-api/src/main/java/com/whoz_in/main_api/shared/application/query/QueryHandler.java +++ b/modules/main-api/src/main/java/com/whoz_in/main_api/query/shared/application/QueryHandler.java @@ -1,4 +1,4 @@ -package com.whoz_in.main_api.shared.application.query; +package com.whoz_in.main_api.query.shared.application; /* 형변환 없이 구현체마다 다른 Response를 제공하기 위해 제네릭을 사용했습니다. diff --git a/modules/main-api/src/main/java/com/whoz_in/main_api/shared/application/query/QueryHandlers.java b/modules/main-api/src/main/java/com/whoz_in/main_api/query/shared/application/QueryHandlers.java similarity index 97% rename from modules/main-api/src/main/java/com/whoz_in/main_api/shared/application/query/QueryHandlers.java rename to modules/main-api/src/main/java/com/whoz_in/main_api/query/shared/application/QueryHandlers.java index 19dad58d..4797f5c1 100644 --- a/modules/main-api/src/main/java/com/whoz_in/main_api/shared/application/query/QueryHandlers.java +++ b/modules/main-api/src/main/java/com/whoz_in/main_api/query/shared/application/QueryHandlers.java @@ -1,4 +1,4 @@ -package com.whoz_in.main_api.shared.application.query; +package com.whoz_in.main_api.query.shared.application; import java.lang.reflect.ParameterizedType; import java.util.Map; diff --git a/modules/main-api/src/main/java/com/whoz_in/main_api/query/shared/application/Response.java b/modules/main-api/src/main/java/com/whoz_in/main_api/query/shared/application/Response.java new file mode 100644 index 00000000..1cdf89e9 --- /dev/null +++ b/modules/main-api/src/main/java/com/whoz_in/main_api/query/shared/application/Response.java @@ -0,0 +1,5 @@ +package com.whoz_in.main_api.query.shared.application; + +public interface Response { + +} diff --git a/modules/main-api/src/main/java/com/whoz_in/main_api/shared/application/query/View.java b/modules/main-api/src/main/java/com/whoz_in/main_api/query/shared/application/View.java similarity index 68% rename from modules/main-api/src/main/java/com/whoz_in/main_api/shared/application/query/View.java rename to modules/main-api/src/main/java/com/whoz_in/main_api/query/shared/application/View.java index 270f6c6a..35f695f2 100644 --- a/modules/main-api/src/main/java/com/whoz_in/main_api/shared/application/query/View.java +++ b/modules/main-api/src/main/java/com/whoz_in/main_api/query/shared/application/View.java @@ -1,4 +1,4 @@ -package com.whoz_in.main_api.shared.application.query; +package com.whoz_in.main_api.query.shared.application; /* View는 쿼리용 데이터베이스로부터 가져올 값을 정의하는 VO다. diff --git a/modules/main-api/src/main/java/com/whoz_in/main_api/shared/application/query/Viewer.java b/modules/main-api/src/main/java/com/whoz_in/main_api/query/shared/application/Viewer.java similarity index 77% rename from modules/main-api/src/main/java/com/whoz_in/main_api/shared/application/query/Viewer.java rename to modules/main-api/src/main/java/com/whoz_in/main_api/query/shared/application/Viewer.java index ddfe07f6..cbe39d76 100644 --- a/modules/main-api/src/main/java/com/whoz_in/main_api/shared/application/query/Viewer.java +++ b/modules/main-api/src/main/java/com/whoz_in/main_api/query/shared/application/Viewer.java @@ -1,10 +1,10 @@ -package com.whoz_in.main_api.shared.application.query; +package com.whoz_in.main_api.query.shared.application; /** * 이 인터페이스를 상속한 인터페이스는 쿼리용 데이터베이스로부터 View를 가져오는 메서드를 정의한다. *

정의하는 메서드들은 무조건 View의 구현체를 반환해야 한다. *

쿼리용 데이터베이스에 접근하는 모듈은 Viewer를 상속한 인터페이스를 구현하면 된다. - * @see com.whoz_in.main_api.shared.application.query.View + * @see View */ public interface Viewer { diff --git a/modules/main-api/src/main/java/com/whoz_in/main_api/shared/application/query/Query.java b/modules/main-api/src/main/java/com/whoz_in/main_api/shared/application/query/Query.java deleted file mode 100644 index 4ed02458..00000000 --- a/modules/main-api/src/main/java/com/whoz_in/main_api/shared/application/query/Query.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.whoz_in.main_api.shared.application.query; - -public interface Query { - -} diff --git a/modules/main-api/src/main/java/com/whoz_in/main_api/shared/application/query/Response.java b/modules/main-api/src/main/java/com/whoz_in/main_api/shared/application/query/Response.java deleted file mode 100644 index fa7e629a..00000000 --- a/modules/main-api/src/main/java/com/whoz_in/main_api/shared/application/query/Response.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.whoz_in.main_api.shared.application.query; - -public interface Response { - -} diff --git a/modules/main-api/src/main/java/com/whoz_in/main_api/shared/presentation/CommandQueryController.java b/modules/main-api/src/main/java/com/whoz_in/main_api/shared/presentation/CommandQueryController.java index 286febc1..5a481d96 100644 --- a/modules/main-api/src/main/java/com/whoz_in/main_api/shared/presentation/CommandQueryController.java +++ b/modules/main-api/src/main/java/com/whoz_in/main_api/shared/presentation/CommandQueryController.java @@ -1,10 +1,10 @@ package com.whoz_in.main_api.shared.presentation; -import com.whoz_in.main_api.shared.application.command.Command; -import com.whoz_in.main_api.shared.application.command.CommandBus; -import com.whoz_in.main_api.shared.application.query.Query; -import com.whoz_in.main_api.shared.application.query.QueryBus; -import com.whoz_in.main_api.shared.application.query.Response; +import com.whoz_in.main_api.command.shared.application.Command; +import com.whoz_in.main_api.command.shared.application.CommandBus; +import com.whoz_in.main_api.query.shared.application.Query; +import com.whoz_in.main_api.query.shared.application.QueryBus; +import com.whoz_in.main_api.query.shared.application.Response; import lombok.AccessLevel; import lombok.RequiredArgsConstructor; diff --git a/modules/main-api/src/main/java/com/whoz_in/main_api/shared/utils/UserNotAuthenticationException.java b/modules/main-api/src/main/java/com/whoz_in/main_api/shared/utils/UserNotAuthenticationException.java index 0ae065eb..c72f09f3 100644 --- a/modules/main-api/src/main/java/com/whoz_in/main_api/shared/utils/UserNotAuthenticationException.java +++ b/modules/main-api/src/main/java/com/whoz_in/main_api/shared/utils/UserNotAuthenticationException.java @@ -5,6 +5,7 @@ /* 필터에서 엔드포인트마다 적절한 인증 로직을 구현하면 발생하지 않음 */ +//TODO: 리팩토링 - 패키지 위치, 상속할 exception 등 public class UserNotAuthenticationException extends BusinessException { protected UserNotAuthenticationException() { diff --git a/modules/main-api/src/test/java/com/whoz_in/main_api/architecture/ViewerTest.java b/modules/main-api/src/test/java/com/whoz_in/main_api/architecture/ViewerTest.java index 27dc48fa..60b7f0a1 100644 --- a/modules/main-api/src/test/java/com/whoz_in/main_api/architecture/ViewerTest.java +++ b/modules/main-api/src/test/java/com/whoz_in/main_api/architecture/ViewerTest.java @@ -10,8 +10,8 @@ import com.tngtech.archunit.lang.ConditionEvents; import com.tngtech.archunit.lang.SimpleConditionEvent; import com.tngtech.archunit.lang.syntax.ArchRuleDefinition; -import com.whoz_in.main_api.shared.application.query.View; -import com.whoz_in.main_api.shared.application.query.Viewer; +import com.whoz_in.main_api.query.shared.application.View; +import com.whoz_in.main_api.query.shared.application.Viewer; @AnalyzeClasses(packages = "com.whoz_in.main_api", importOptions = ImportOption.DoNotIncludeTests.class) class ViewerTest { From c6e2def26a3d54ba8a5158df26ba2ddd4a33cfb8 Mon Sep 17 00:00:00 2001 From: coco3x Date: Sat, 28 Dec 2024 03:19:46 +0900 Subject: [PATCH 30/32] =?UTF-8?q?refactor(main-api):=20CommandQueryControl?= =?UTF-8?q?ler=20=EB=B6=84=EB=A6=AC=20=EB=B0=8F=20=ED=8C=A8=ED=82=A4?= =?UTF-8?q?=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 --- .../api_query_jpa/member/MemberJpaViewer.java | 13 ++++++++++++ .../member/presentation/MemberController.java | 13 ++++++------ .../presentation/CommandController.java | 18 +++++++++++++++++ .../presentation/DeviceQueryController.java | 12 +++++------ .../shared/presentation/QueryController.java} | 10 ++-------- .../domain/SpringSecurityPasswordEncoder.java | 2 +- .../shared/presentation/ApiResponseBody.java | 5 +++++ .../{response => }/ApiResponseCode.java | 2 +- .../{response => }/CrudResponseCode.java | 2 +- .../{response => }/FailureBody.java | 2 +- .../presentation/GlobalExceptionHandler.java | 20 ------------------- .../ResponseEntityGenerator.java | 2 +- .../{response => }/SuccessBody.java | 2 +- .../response/ApiResponseBody.java | 5 ----- 14 files changed, 57 insertions(+), 51 deletions(-) create mode 100644 modules/infrastructure/api-query-jpa/src/main/java/com/whoz_in/api_query_jpa/member/MemberJpaViewer.java create mode 100644 modules/main-api/src/main/java/com/whoz_in/main_api/command/shared/presentation/CommandController.java rename modules/main-api/src/main/java/com/whoz_in/main_api/{shared/presentation/CommandQueryController.java => query/shared/presentation/QueryController.java} (80%) rename modules/main-api/src/main/java/com/whoz_in/main_api/{ => shared}/domain/SpringSecurityPasswordEncoder.java (91%) create mode 100644 modules/main-api/src/main/java/com/whoz_in/main_api/shared/presentation/ApiResponseBody.java rename modules/main-api/src/main/java/com/whoz_in/main_api/shared/presentation/{response => }/ApiResponseCode.java (70%) rename modules/main-api/src/main/java/com/whoz_in/main_api/shared/presentation/{response => }/CrudResponseCode.java (91%) rename modules/main-api/src/main/java/com/whoz_in/main_api/shared/presentation/{response => }/FailureBody.java (79%) delete mode 100644 modules/main-api/src/main/java/com/whoz_in/main_api/shared/presentation/GlobalExceptionHandler.java rename modules/main-api/src/main/java/com/whoz_in/main_api/shared/presentation/{response => }/ResponseEntityGenerator.java (95%) rename modules/main-api/src/main/java/com/whoz_in/main_api/shared/presentation/{response => }/SuccessBody.java (78%) delete mode 100644 modules/main-api/src/main/java/com/whoz_in/main_api/shared/presentation/response/ApiResponseBody.java diff --git a/modules/infrastructure/api-query-jpa/src/main/java/com/whoz_in/api_query_jpa/member/MemberJpaViewer.java b/modules/infrastructure/api-query-jpa/src/main/java/com/whoz_in/api_query_jpa/member/MemberJpaViewer.java new file mode 100644 index 00000000..1ea9ea09 --- /dev/null +++ b/modules/infrastructure/api-query-jpa/src/main/java/com/whoz_in/api_query_jpa/member/MemberJpaViewer.java @@ -0,0 +1,13 @@ +package com.whoz_in.api_query_jpa.member; + +import com.whoz_in.main_api.query.member.application.MemberAuthInfo; +import com.whoz_in.main_api.query.member.application.MemberViewer; +import java.util.Optional; + +public class MemberJpaViewer implements MemberViewer { + + @Override + public Optional getAuthInfoByLoginId(String loginId) { + return Optional.empty(); + } +} diff --git a/modules/main-api/src/main/java/com/whoz_in/main_api/command/member/presentation/MemberController.java b/modules/main-api/src/main/java/com/whoz_in/main_api/command/member/presentation/MemberController.java index 55dd7b02..0bb7d876 100644 --- a/modules/main-api/src/main/java/com/whoz_in/main_api/command/member/presentation/MemberController.java +++ b/modules/main-api/src/main/java/com/whoz_in/main_api/command/member/presentation/MemberController.java @@ -2,10 +2,11 @@ import com.whoz_in.main_api.command.member.application.MemberSignUp; import com.whoz_in.main_api.command.shared.application.CommandBus; +import com.whoz_in.main_api.command.shared.application.CommandHandler; +import com.whoz_in.main_api.command.shared.presentation.CommandController; import com.whoz_in.main_api.query.shared.application.QueryBus; -import com.whoz_in.main_api.shared.presentation.CommandQueryController; -import com.whoz_in.main_api.shared.presentation.response.ResponseEntityGenerator; -import com.whoz_in.main_api.shared.presentation.response.SuccessBody; +import com.whoz_in.main_api.shared.presentation.ResponseEntityGenerator; +import com.whoz_in.main_api.shared.presentation.SuccessBody; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.PostMapping; @@ -13,9 +14,9 @@ import org.springframework.web.bind.annotation.RestController; @RestController -public class MemberController extends CommandQueryController { - public MemberController(CommandBus commandBus, QueryBus queryBus) { - super(commandBus,queryBus); +public class MemberController extends CommandController { + public MemberController(CommandBus commandBus) { + super(commandBus); } @PostMapping("/api/v1/signup") diff --git a/modules/main-api/src/main/java/com/whoz_in/main_api/command/shared/presentation/CommandController.java b/modules/main-api/src/main/java/com/whoz_in/main_api/command/shared/presentation/CommandController.java new file mode 100644 index 00000000..c39828f7 --- /dev/null +++ b/modules/main-api/src/main/java/com/whoz_in/main_api/command/shared/presentation/CommandController.java @@ -0,0 +1,18 @@ +package com.whoz_in.main_api.command.shared.presentation; + +import com.whoz_in.main_api.command.shared.application.Command; +import com.whoz_in.main_api.command.shared.application.CommandBus; +import com.whoz_in.main_api.query.shared.application.Query; +import com.whoz_in.main_api.query.shared.application.QueryBus; +import com.whoz_in.main_api.query.shared.application.Response; +import lombok.AccessLevel; +import lombok.RequiredArgsConstructor; + +@RequiredArgsConstructor(access = AccessLevel.PROTECTED) +public abstract class CommandController { + private final CommandBus commandBus; + + protected void dispatch(Command command){ + commandBus.dispatch(command); + } +} \ No newline at end of file diff --git a/modules/main-api/src/main/java/com/whoz_in/main_api/query/device_info/presentation/DeviceQueryController.java b/modules/main-api/src/main/java/com/whoz_in/main_api/query/device_info/presentation/DeviceQueryController.java index 0b02b40f..e88a003b 100644 --- a/modules/main-api/src/main/java/com/whoz_in/main_api/query/device_info/presentation/DeviceQueryController.java +++ b/modules/main-api/src/main/java/com/whoz_in/main_api/query/device_info/presentation/DeviceQueryController.java @@ -3,18 +3,18 @@ import com.whoz_in.main_api.query.device_info.application.DeviceInfoGet; import com.whoz_in.main_api.command.shared.application.CommandBus; import com.whoz_in.main_api.query.shared.application.QueryBus; -import com.whoz_in.main_api.shared.presentation.CommandQueryController; -import com.whoz_in.main_api.shared.presentation.response.CrudResponseCode; -import com.whoz_in.main_api.shared.presentation.response.ResponseEntityGenerator; +import com.whoz_in.main_api.query.shared.presentation.QueryController; +import com.whoz_in.main_api.shared.presentation.CrudResponseCode; +import com.whoz_in.main_api.shared.presentation.ResponseEntityGenerator; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController -public class DeviceQueryController extends CommandQueryController { +public class DeviceQueryController extends QueryController { - protected DeviceQueryController(CommandBus commandBus, QueryBus queryBus) { - super(commandBus, queryBus); + public DeviceQueryController(QueryBus queryBus) { + super(queryBus); } @GetMapping("/device") diff --git a/modules/main-api/src/main/java/com/whoz_in/main_api/shared/presentation/CommandQueryController.java b/modules/main-api/src/main/java/com/whoz_in/main_api/query/shared/presentation/QueryController.java similarity index 80% rename from modules/main-api/src/main/java/com/whoz_in/main_api/shared/presentation/CommandQueryController.java rename to modules/main-api/src/main/java/com/whoz_in/main_api/query/shared/presentation/QueryController.java index 5a481d96..830f74a8 100644 --- a/modules/main-api/src/main/java/com/whoz_in/main_api/shared/presentation/CommandQueryController.java +++ b/modules/main-api/src/main/java/com/whoz_in/main_api/query/shared/presentation/QueryController.java @@ -1,4 +1,4 @@ -package com.whoz_in.main_api.shared.presentation; +package com.whoz_in.main_api.query.shared.presentation; import com.whoz_in.main_api.command.shared.application.Command; import com.whoz_in.main_api.command.shared.application.CommandBus; @@ -9,14 +9,8 @@ import lombok.RequiredArgsConstructor; @RequiredArgsConstructor(access = AccessLevel.PROTECTED) -public abstract class CommandQueryController { - private final CommandBus commandBus; +public abstract class QueryController { private final QueryBus queryBus; - - protected void dispatch(Command command){ - commandBus.dispatch(command); - } - /** *

주의

* Response는 추상 클래스가 아닌 인터페이스이기 때문에 아래와 같이 사용해도 경고만 발생하고 컴파일 에러는 발생하지 않습니다.

diff --git a/modules/main-api/src/main/java/com/whoz_in/main_api/domain/SpringSecurityPasswordEncoder.java b/modules/main-api/src/main/java/com/whoz_in/main_api/shared/domain/SpringSecurityPasswordEncoder.java similarity index 91% rename from modules/main-api/src/main/java/com/whoz_in/main_api/domain/SpringSecurityPasswordEncoder.java rename to modules/main-api/src/main/java/com/whoz_in/main_api/shared/domain/SpringSecurityPasswordEncoder.java index 04c8b240..30330f4b 100644 --- a/modules/main-api/src/main/java/com/whoz_in/main_api/domain/SpringSecurityPasswordEncoder.java +++ b/modules/main-api/src/main/java/com/whoz_in/main_api/shared/domain/SpringSecurityPasswordEncoder.java @@ -1,4 +1,4 @@ -package com.whoz_in.main_api.domain; +package com.whoz_in.main_api.shared.domain; import com.whoz_in.domain.member.service.PasswordEncoder; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; diff --git a/modules/main-api/src/main/java/com/whoz_in/main_api/shared/presentation/ApiResponseBody.java b/modules/main-api/src/main/java/com/whoz_in/main_api/shared/presentation/ApiResponseBody.java new file mode 100644 index 00000000..9ce3b12f --- /dev/null +++ b/modules/main-api/src/main/java/com/whoz_in/main_api/shared/presentation/ApiResponseBody.java @@ -0,0 +1,5 @@ +package com.whoz_in.main_api.shared.presentation; + +public abstract class ApiResponseBody { + +} diff --git a/modules/main-api/src/main/java/com/whoz_in/main_api/shared/presentation/response/ApiResponseCode.java b/modules/main-api/src/main/java/com/whoz_in/main_api/shared/presentation/ApiResponseCode.java similarity index 70% rename from modules/main-api/src/main/java/com/whoz_in/main_api/shared/presentation/response/ApiResponseCode.java rename to modules/main-api/src/main/java/com/whoz_in/main_api/shared/presentation/ApiResponseCode.java index b6597a19..9bfb9fea 100644 --- a/modules/main-api/src/main/java/com/whoz_in/main_api/shared/presentation/response/ApiResponseCode.java +++ b/modules/main-api/src/main/java/com/whoz_in/main_api/shared/presentation/ApiResponseCode.java @@ -1,4 +1,4 @@ -package com.whoz_in.main_api.shared.presentation.response; +package com.whoz_in.main_api.shared.presentation; import org.springframework.http.HttpStatus; diff --git a/modules/main-api/src/main/java/com/whoz_in/main_api/shared/presentation/response/CrudResponseCode.java b/modules/main-api/src/main/java/com/whoz_in/main_api/shared/presentation/CrudResponseCode.java similarity index 91% rename from modules/main-api/src/main/java/com/whoz_in/main_api/shared/presentation/response/CrudResponseCode.java rename to modules/main-api/src/main/java/com/whoz_in/main_api/shared/presentation/CrudResponseCode.java index 20edd98d..2c8e56f8 100644 --- a/modules/main-api/src/main/java/com/whoz_in/main_api/shared/presentation/response/CrudResponseCode.java +++ b/modules/main-api/src/main/java/com/whoz_in/main_api/shared/presentation/CrudResponseCode.java @@ -1,4 +1,4 @@ -package com.whoz_in.main_api.shared.presentation.response; +package com.whoz_in.main_api.shared.presentation; import lombok.RequiredArgsConstructor; import org.springframework.http.HttpStatus; diff --git a/modules/main-api/src/main/java/com/whoz_in/main_api/shared/presentation/response/FailureBody.java b/modules/main-api/src/main/java/com/whoz_in/main_api/shared/presentation/FailureBody.java similarity index 79% rename from modules/main-api/src/main/java/com/whoz_in/main_api/shared/presentation/response/FailureBody.java rename to modules/main-api/src/main/java/com/whoz_in/main_api/shared/presentation/FailureBody.java index 880766c3..644c279d 100644 --- a/modules/main-api/src/main/java/com/whoz_in/main_api/shared/presentation/response/FailureBody.java +++ b/modules/main-api/src/main/java/com/whoz_in/main_api/shared/presentation/FailureBody.java @@ -1,4 +1,4 @@ -package com.whoz_in.main_api.shared.presentation.response; +package com.whoz_in.main_api.shared.presentation; import lombok.Getter; import lombok.RequiredArgsConstructor; diff --git a/modules/main-api/src/main/java/com/whoz_in/main_api/shared/presentation/GlobalExceptionHandler.java b/modules/main-api/src/main/java/com/whoz_in/main_api/shared/presentation/GlobalExceptionHandler.java deleted file mode 100644 index 9a51af8a..00000000 --- a/modules/main-api/src/main/java/com/whoz_in/main_api/shared/presentation/GlobalExceptionHandler.java +++ /dev/null @@ -1,20 +0,0 @@ -//package com.gyuzal.whozin.shared.infrastructure.presentation; -// -//import com.gyuzal.whozin.shared.shared.BusinessException; -//import com.gyuzal.whozin.shared.infrastructure.presentation.ApiResponseBody.FailureBody; -//import lombok.extern.slf4j.Slf4j; -//import org.springframework.http.ResponseEntity; -//import org.springframework.web.bind.annotation.ExceptionHandler; -//import org.springframework.web.bind.annotation.RestControllerAdvice; -// -//@Slf4j -//@RestControllerAdvice -//public class GlobalExceptionHandler { -// -// //애플리케이션 계층에서 -// @ExceptionHandler(value = {BusinessException.class}) -// protected ResponseEntity handleConflict(BusinessException e) { -// log.warn("BusinessException", e); -// return ResponseEntityGenerator.fail(e.getMessage(), e.getCode(), e.getHttpStatus()); -// } -//} diff --git a/modules/main-api/src/main/java/com/whoz_in/main_api/shared/presentation/response/ResponseEntityGenerator.java b/modules/main-api/src/main/java/com/whoz_in/main_api/shared/presentation/ResponseEntityGenerator.java similarity index 95% rename from modules/main-api/src/main/java/com/whoz_in/main_api/shared/presentation/response/ResponseEntityGenerator.java rename to modules/main-api/src/main/java/com/whoz_in/main_api/shared/presentation/ResponseEntityGenerator.java index 938b16a8..92211c9f 100644 --- a/modules/main-api/src/main/java/com/whoz_in/main_api/shared/presentation/response/ResponseEntityGenerator.java +++ b/modules/main-api/src/main/java/com/whoz_in/main_api/shared/presentation/ResponseEntityGenerator.java @@ -1,4 +1,4 @@ -package com.whoz_in.main_api.shared.presentation.response; +package com.whoz_in.main_api.shared.presentation; //import com.whoz_in.domain.shared.BusinessException; import lombok.experimental.UtilityClass; diff --git a/modules/main-api/src/main/java/com/whoz_in/main_api/shared/presentation/response/SuccessBody.java b/modules/main-api/src/main/java/com/whoz_in/main_api/shared/presentation/SuccessBody.java similarity index 78% rename from modules/main-api/src/main/java/com/whoz_in/main_api/shared/presentation/response/SuccessBody.java rename to modules/main-api/src/main/java/com/whoz_in/main_api/shared/presentation/SuccessBody.java index bf8a38e3..052f1d9c 100644 --- a/modules/main-api/src/main/java/com/whoz_in/main_api/shared/presentation/response/SuccessBody.java +++ b/modules/main-api/src/main/java/com/whoz_in/main_api/shared/presentation/SuccessBody.java @@ -1,4 +1,4 @@ -package com.whoz_in.main_api.shared.presentation.response; +package com.whoz_in.main_api.shared.presentation; import lombok.Getter; import lombok.RequiredArgsConstructor; diff --git a/modules/main-api/src/main/java/com/whoz_in/main_api/shared/presentation/response/ApiResponseBody.java b/modules/main-api/src/main/java/com/whoz_in/main_api/shared/presentation/response/ApiResponseBody.java deleted file mode 100644 index b557f809..00000000 --- a/modules/main-api/src/main/java/com/whoz_in/main_api/shared/presentation/response/ApiResponseBody.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.whoz_in.main_api.shared.presentation.response; - -public abstract class ApiResponseBody { - -} From 1e5cb44a88eccd93e4e25664cd6e8c81d85824a4 Mon Sep 17 00:00:00 2001 From: coco3x Date: Sat, 28 Dec 2024 15:04:51 +0900 Subject: [PATCH 31/32] =?UTF-8?q?style(main-api):=20MemberViewer=20?= =?UTF-8?q?=EB=A9=94=EC=84=9C=EB=93=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 --- .../com/whoz_in/api_query_jpa/member/MemberJpaViewer.java | 2 +- .../main_api/query/member/application/MemberLoginHandler.java | 4 ++-- .../main_api/query/member/application/MemberViewer.java | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/modules/infrastructure/api-query-jpa/src/main/java/com/whoz_in/api_query_jpa/member/MemberJpaViewer.java b/modules/infrastructure/api-query-jpa/src/main/java/com/whoz_in/api_query_jpa/member/MemberJpaViewer.java index 1ea9ea09..e7c202b7 100644 --- a/modules/infrastructure/api-query-jpa/src/main/java/com/whoz_in/api_query_jpa/member/MemberJpaViewer.java +++ b/modules/infrastructure/api-query-jpa/src/main/java/com/whoz_in/api_query_jpa/member/MemberJpaViewer.java @@ -7,7 +7,7 @@ public class MemberJpaViewer implements MemberViewer { @Override - public Optional getAuthInfoByLoginId(String loginId) { + public Optional findAuthInfoByLoginId(String loginId) { return Optional.empty(); } } diff --git a/modules/main-api/src/main/java/com/whoz_in/main_api/query/member/application/MemberLoginHandler.java b/modules/main-api/src/main/java/com/whoz_in/main_api/query/member/application/MemberLoginHandler.java index b6551e89..7e658685 100644 --- a/modules/main-api/src/main/java/com/whoz_in/main_api/query/member/application/MemberLoginHandler.java +++ b/modules/main-api/src/main/java/com/whoz_in/main_api/query/member/application/MemberLoginHandler.java @@ -13,9 +13,9 @@ public class MemberLoginHandler extends QueryHandler getAuthInfoByLoginId(String loginId); + Optional findAuthInfoByLoginId(String loginId); } From 99f944476f62b0cfccad8f6e5dc48268f9ae6ac2 Mon Sep 17 00:00:00 2001 From: coco3x Date: Sat, 28 Dec 2024 15:06:33 +0900 Subject: [PATCH 32/32] =?UTF-8?q?test(main-api):=20Viewer=EB=8A=94=20Optio?= =?UTF-8?q?nal=EB=8F=84=20=EB=B0=98=ED=99=98=ED=95=A0=20=EC=88=98=20?= =?UTF-8?q?=EC=9E=88=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 --- .../main_api/architecture/ViewerTest.java | 67 +++++++++++++++++-- 1 file changed, 61 insertions(+), 6 deletions(-) diff --git a/modules/main-api/src/test/java/com/whoz_in/main_api/architecture/ViewerTest.java b/modules/main-api/src/test/java/com/whoz_in/main_api/architecture/ViewerTest.java index 60b7f0a1..2d18f4ef 100644 --- a/modules/main-api/src/test/java/com/whoz_in/main_api/architecture/ViewerTest.java +++ b/modules/main-api/src/test/java/com/whoz_in/main_api/architecture/ViewerTest.java @@ -3,6 +3,8 @@ import com.tngtech.archunit.core.domain.JavaClass; import com.tngtech.archunit.core.domain.JavaClasses; import com.tngtech.archunit.core.domain.JavaMethod; +import com.tngtech.archunit.core.domain.JavaType; +import com.tngtech.archunit.core.domain.JavaTypeVariable; import com.tngtech.archunit.core.importer.ImportOption; import com.tngtech.archunit.junit.AnalyzeClasses; import com.tngtech.archunit.junit.ArchTest; @@ -12,27 +14,80 @@ import com.tngtech.archunit.lang.syntax.ArchRuleDefinition; import com.whoz_in.main_api.query.shared.application.View; import com.whoz_in.main_api.query.shared.application.Viewer; +import java.lang.reflect.Method; +import java.lang.reflect.ParameterizedType; +import java.lang.reflect.Type; +import java.util.Arrays; +import java.util.List; +import java.util.Optional; +import java.util.stream.Collectors; @AnalyzeClasses(packages = "com.whoz_in.main_api", importOptions = ImportOption.DoNotIncludeTests.class) class ViewerTest { @ArchTest - public static void Viewer를_상속했으면_모든_메서드는_View를_반환해야합니다(JavaClasses importedClasses) { - ArchCondition returnTypeImplementsView = new ArchCondition<>("return a type implementing View") { + public static void Viewer를_상속했으면_모든_메서드는_View나_OptionalView를_반환해야합니다(JavaClasses importedClasses) { + ArchCondition returnTypeIsView = new ArchCondition<>("return a type implementing View") { @Override public void check(JavaMethod method, ConditionEvents events) { JavaClass returnType = method.getReturnType().toErasure(); - boolean implementsView = returnType.isAssignableTo(View.class); - if (!implementsView) { - String message = String.format("'%s'의 '%s' 는 'View' 구현체를 반환하지 않았습니다.", + + if (!returnType.isAssignableTo(View.class)) { + String message = String.format("'%s'의 '%s' 는 View를 반환하지 않았습니다.", method.getOwner().getName(), method.getName()); events.add(SimpleConditionEvent.violated(method, message)); } } }; + + ArchCondition returnTypeIsOptionalView = new ArchCondition<>("return Optional where T implements View") { + @Override + public void check(JavaMethod method, ConditionEvents events) { + JavaClass returnType = method.getReturnType().toErasure(); + + if (returnType.isAssignableTo(Optional.class)) { + try { + Class ownerClass = Class.forName(method.getOwner().getName()); + Method reflectedMethod = ownerClass.getDeclaredMethod(method.getName(), + method.getRawParameterTypes().stream() + .map(param -> { + try { + return Class.forName(param.getName()); + } catch (ClassNotFoundException e) { + throw new RuntimeException("Failed to load parameter type: " + param.getName(), e); + } + }).toArray(Class[]::new)); + + Type genericReturnType = reflectedMethod.getGenericReturnType(); + if (genericReturnType instanceof ParameterizedType) { + ParameterizedType parameterizedType = (ParameterizedType) genericReturnType; + Type[] typeArguments = parameterizedType.getActualTypeArguments(); + for (Type typeArgument : typeArguments) { + if (typeArgument instanceof Class) { + Class typeClass = (Class) typeArgument; + if (View.class.isAssignableFrom(typeClass)) { + return; + } + } + } + } + } catch (ClassNotFoundException | NoSuchMethodException e) { + String error = String.format("리플렉션 실패: '%s'의 '%s': %s", + method.getOwner().getName(), method.getName(), e.getMessage()); + events.add(SimpleConditionEvent.violated(method, error)); + return; + } + } + + String message = String.format("Optional를 반환하지 않았습니다.", + method.getOwner().getName(), method.getName()); + events.add(SimpleConditionEvent.violated(method, message)); + } + }; + ArchRuleDefinition.methods() .that().areDeclaredInClassesThat().areAssignableTo(Viewer.class) - .should(returnTypeImplementsView) + .should(returnTypeIsView.or(returnTypeIsOptionalView)) .check(importedClasses); }