diff --git a/modules/api/src/main/java/com/whoz_in/api/auth/AuthController.java b/modules/api/src/main/java/com/whoz_in/api/auth/AuthController.java new file mode 100644 index 00000000..8b471d2f --- /dev/null +++ b/modules/api/src/main/java/com/whoz_in/api/auth/AuthController.java @@ -0,0 +1,5 @@ +package com.whoz_in.api.auth; + +public class AuthController { + +} diff --git a/modules/api/src/main/java/com/whoz_in/api/device/DeviceController.java b/modules/api/src/main/java/com/whoz_in/api/device/DeviceController.java new file mode 100644 index 00000000..c8c0fd9f --- /dev/null +++ b/modules/api/src/main/java/com/whoz_in/api/device/DeviceController.java @@ -0,0 +1,22 @@ +package com.whoz_in.api.device; + + +import com.whoz_in.domain.device.application.DeviceService; +import lombok.RequiredArgsConstructor; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/api") +@RequiredArgsConstructor +public class DeviceController { + private final DeviceService deviceService; + + @PostMapping("/device") + public ResponseEntity test(){ + deviceService.save(); + return ResponseEntity.ok().body("test"); + } +} diff --git a/modules/api/src/main/java/com/whoz_in/api/memebr/MemberController.java b/modules/api/src/main/java/com/whoz_in/api/memebr/MemberController.java new file mode 100644 index 00000000..20fe2bd4 --- /dev/null +++ b/modules/api/src/main/java/com/whoz_in/api/memebr/MemberController.java @@ -0,0 +1,5 @@ +package com.whoz_in.api.memebr; + +public class MemberController { + +} diff --git a/modules/api/src/main/java/com/whoz_in/api/shared/ApiResponseBody.java b/modules/api/src/main/java/com/whoz_in/api/shared/ApiResponseBody.java new file mode 100644 index 00000000..25a2a08d --- /dev/null +++ b/modules/api/src/main/java/com/whoz_in/api/shared/ApiResponseBody.java @@ -0,0 +1,23 @@ +package com.whoz_in.api.shared; + +import java.io.Serializable; +import lombok.AllArgsConstructor; +import lombok.Getter; + +public class ApiResponseBody { + @Getter + @AllArgsConstructor + public static class FailureBody implements Serializable { + private String status; + private String code; + private String message; + } + + @Getter + @AllArgsConstructor + public static class SuccessBody implements Serializable { + private D data; + private String message; + private String code; + } +} diff --git a/modules/api/src/main/java/com/whoz_in/api/shared/CommandQueryController.java b/modules/api/src/main/java/com/whoz_in/api/shared/CommandQueryController.java index 0abf3d43..ea1fad14 100644 --- a/modules/api/src/main/java/com/whoz_in/api/shared/CommandQueryController.java +++ b/modules/api/src/main/java/com/whoz_in/api/shared/CommandQueryController.java @@ -4,7 +4,6 @@ import com.whoz_in.domain.shared.domain.bus.command.CommandBus; import com.whoz_in.domain.shared.domain.bus.query.Query; import com.whoz_in.domain.shared.domain.bus.query.QueryBus; -import com.whoz_in.domain.shared.domain.bus.query.Response; import lombok.AccessLevel; import lombok.RequiredArgsConstructor; diff --git a/modules/api/src/main/java/com/whoz_in/api/shared/ResponseEntityGenerator.java b/modules/api/src/main/java/com/whoz_in/api/shared/ResponseEntityGenerator.java new file mode 100644 index 00000000..c1c911bd --- /dev/null +++ b/modules/api/src/main/java/com/whoz_in/api/shared/ResponseEntityGenerator.java @@ -0,0 +1,58 @@ +//package com.gyuzal.whozin.shared.infrastructure.presentation; +// +//import java.util.List; +//import lombok.experimental.UtilityClass; +//import org.springframework.http.HttpStatus; +//import org.springframework.http.ResponseEntity; +//import org.springframework.validation.BindingResult; +//import org.springframework.validation.FieldError; +// +//@UtilityClass +//public class ResponseEntityGenerator { +// +// public static ResponseEntity> success( +// final HttpStatus status) { +// return new ResponseEntity<>( +// new ApiResponseBody.SuccessBody<>(null, , ), status); +// } +// +// public static ResponseEntity> success( +// D data, HttpStatus status, ) { +// return new ResponseEntity<>( +// new ApiResponseBody.SuccessBody<>(data, code.getMessage(), code.getCode()), status); +// } +// +// public static ResponseEntity fail( +// String message, String code, HttpStatus status) { +// return new ResponseEntity<>( +// new ApiResponseBody.FailureBody(String.valueOf(status.value()), code, message), status); +// } +// +// public static ResponseEntity fail( +// BindingResult bindingResult, String code, HttpStatus status) { +// return new ResponseEntity<>( +// new ApiResponseBody.FailureBody( +// String.valueOf(status.value()), code, createErrorMessage(bindingResult)), +// status); +// } +// +// private static String createErrorMessage(BindingResult bindingResult) { +// StringBuilder sb = new StringBuilder(); +// boolean isFirst = true; +// +// List fieldErrors = bindingResult.getFieldErrors(); +// for (FieldError fieldError : fieldErrors) { +// if (!isFirst) { +// sb.append(", "); +// } else { +// isFirst = false; +// } +// sb.append("["); +// sb.append(fieldError.getField()); +// sb.append("] "); +// sb.append(fieldError.getDefaultMessage()); +// } +// +// return sb.toString(); +// } +//} diff --git a/modules/domain/src/main/java/com/whoz_in/domain/auth/application/AuthService.java b/modules/domain/src/main/java/com/whoz_in/domain/auth/application/AuthService.java new file mode 100644 index 00000000..ec2c8ac9 --- /dev/null +++ b/modules/domain/src/main/java/com/whoz_in/domain/auth/application/AuthService.java @@ -0,0 +1,5 @@ +package com.whoz_in.domain.auth.application; + +public class AuthService { + +} diff --git a/modules/domain/src/main/java/com/whoz_in/domain/auth/domain/Auth.java b/modules/domain/src/main/java/com/whoz_in/domain/auth/domain/Auth.java new file mode 100644 index 00000000..297dbb0b --- /dev/null +++ b/modules/domain/src/main/java/com/whoz_in/domain/auth/domain/Auth.java @@ -0,0 +1,7 @@ +package com.whoz_in.domain.auth.domain; + +import com.whoz_in.domain.shared.domain.AggregateRoot; + +public class Auth extends AggregateRoot { + +} diff --git a/modules/domain/src/main/java/com/whoz_in/domain/auth/domain/AuthRepository.java b/modules/domain/src/main/java/com/whoz_in/domain/auth/domain/AuthRepository.java new file mode 100644 index 00000000..23bfc5d8 --- /dev/null +++ b/modules/domain/src/main/java/com/whoz_in/domain/auth/domain/AuthRepository.java @@ -0,0 +1,6 @@ +package com.whoz_in.domain.auth.domain; + +public interface AuthRepository { + void save(); + +} diff --git a/modules/domain/src/main/java/com/whoz_in/domain/device/application/DeviceService.java b/modules/domain/src/main/java/com/whoz_in/domain/device/application/DeviceService.java new file mode 100644 index 00000000..64698482 --- /dev/null +++ b/modules/domain/src/main/java/com/whoz_in/domain/device/application/DeviceService.java @@ -0,0 +1,15 @@ +package com.whoz_in.domain.device.application; + +import com.whoz_in.domain.device.domain.DeviceRepository; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +@Service +@RequiredArgsConstructor +public class DeviceService { + private final DeviceRepository deviceRepository; + + public void save(){ + deviceRepository.save(); + } +} diff --git a/modules/domain/src/main/java/com/whoz_in/domain/member/application/MemberService.java b/modules/domain/src/main/java/com/whoz_in/domain/member/application/MemberService.java new file mode 100644 index 00000000..64af0178 --- /dev/null +++ b/modules/domain/src/main/java/com/whoz_in/domain/member/application/MemberService.java @@ -0,0 +1,5 @@ +package com.whoz_in.domain.member.application; + +public class MemberService { + +} diff --git a/modules/domain/src/main/java/com/whoz_in/domain/member/domain/Member.java b/modules/domain/src/main/java/com/whoz_in/domain/member/domain/Member.java new file mode 100644 index 00000000..4a582dc0 --- /dev/null +++ b/modules/domain/src/main/java/com/whoz_in/domain/member/domain/Member.java @@ -0,0 +1,6 @@ +package com.whoz_in.domain.member.domain; + +import com.whoz_in.domain.shared.domain.AggregateRoot; + +public class Member extends AggregateRoot { +} diff --git a/modules/domain/src/main/java/com/whoz_in/domain/member/domain/MemberRepository.java b/modules/domain/src/main/java/com/whoz_in/domain/member/domain/MemberRepository.java new file mode 100644 index 00000000..5c48d22b --- /dev/null +++ b/modules/domain/src/main/java/com/whoz_in/domain/member/domain/MemberRepository.java @@ -0,0 +1,5 @@ +package com.whoz_in.domain.member.domain; + +public interface MemberRepository { + void save(); +} diff --git a/modules/infrastructure/jpa/src/main/java/com/whoz_in/infra/jpa/auth/AuthEntity.java b/modules/infrastructure/jpa/src/main/java/com/whoz_in/infra/jpa/auth/AuthEntity.java new file mode 100644 index 00000000..7d28895d --- /dev/null +++ b/modules/infrastructure/jpa/src/main/java/com/whoz_in/infra/jpa/auth/AuthEntity.java @@ -0,0 +1,55 @@ +package com.whoz_in.infra.jpa.auth; + +import com.whoz_in.domain.auth.domain.Auth; +import com.whoz_in.infra.jpa.member.MemberEntity; +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; + +@Entity +public class AuthEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + // 회원은 여러 계정을 만들 수 있지만 + // 계정 하나당 회원 정보 하나씩 고유로 가지므로 일대일 + @OneToOne + @JoinColumn(name = "member_id") + private MemberEntity memberEntity; + + @Column(name = "name", nullable = false) + private String loginId; + + @Column(name = "name", nullable = false) + private String password; + + protected AuthEntity() { } + + public AuthEntity(MemberEntity memberEntity, String loginId, String password) { + this.memberEntity = memberEntity; + this.loginId = loginId; + this.password = password; + } + + public Long getId() { + return id; + } + + public MemberEntity getMemberEntity() { + return memberEntity; + } + + public String getLoginId() { + return loginId; + } + + public String getPassword() { + return password; + } +} diff --git a/modules/infrastructure/jpa/src/main/java/com/whoz_in/infra/jpa/auth/AuthJpaAdapter.java b/modules/infrastructure/jpa/src/main/java/com/whoz_in/infra/jpa/auth/AuthJpaAdapter.java new file mode 100644 index 00000000..efeb323b --- /dev/null +++ b/modules/infrastructure/jpa/src/main/java/com/whoz_in/infra/jpa/auth/AuthJpaAdapter.java @@ -0,0 +1,13 @@ +package com.whoz_in.infra.jpa.auth; + +import com.whoz_in.domain.auth.domain.AuthRepository; +import org.springframework.stereotype.Repository; + +@Repository +public class AuthJpaAdapter implements AuthRepository { + + @Override + public void save() { + System.out.println("1"); + } +} diff --git a/modules/infrastructure/jpa/src/main/java/com/whoz_in/infra/jpa/auth/AuthJpaRepository.java b/modules/infrastructure/jpa/src/main/java/com/whoz_in/infra/jpa/auth/AuthJpaRepository.java new file mode 100644 index 00000000..8cd27361 --- /dev/null +++ b/modules/infrastructure/jpa/src/main/java/com/whoz_in/infra/jpa/auth/AuthJpaRepository.java @@ -0,0 +1,8 @@ +package com.whoz_in.infra.jpa.auth; + +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +public interface AuthJpaRepository extends JpaRepository { + +} diff --git a/modules/infrastructure/jpa/src/main/java/com/whoz_in/infra/jpa/device/DeviceJpaAdapter.java b/modules/infrastructure/jpa/src/main/java/com/whoz_in/infra/jpa/device/DeviceJpaAdapter.java index 72fbe52c..6c7c32d1 100644 --- a/modules/infrastructure/jpa/src/main/java/com/whoz_in/infra/jpa/device/DeviceJpaAdapter.java +++ b/modules/infrastructure/jpa/src/main/java/com/whoz_in/infra/jpa/device/DeviceJpaAdapter.java @@ -9,6 +9,5 @@ public class DeviceJpaAdapter implements DeviceRepository { @Override public void save(Device device) { - } } diff --git a/modules/infrastructure/jpa/src/main/java/com/whoz_in/infra/jpa/member/MemberEntity.java b/modules/infrastructure/jpa/src/main/java/com/whoz_in/infra/jpa/member/MemberEntity.java new file mode 100644 index 00000000..93e63d20 --- /dev/null +++ b/modules/infrastructure/jpa/src/main/java/com/whoz_in/infra/jpa/member/MemberEntity.java @@ -0,0 +1,56 @@ +package com.whoz_in.infra.jpa.member; + +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; + +@Entity +public class MemberEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @Column(name = "name", nullable = false) + private String name; + + @Column(name = "generation", nullable = false) + private int generation; + + @Column(name = "position", nullable = false) + private String position; + + @Column(name = "status_message", nullable = false) + private String statusMessage; + + public MemberEntity(String name, int generation, String position, String statusMessage) { + this.name = name; + this.generation = generation; + this.position = position; + this.statusMessage = statusMessage; + } + + protected MemberEntity() { } + + public Long getId() { + return id; + } + + public String getName() { + return name; + } + + public int getGeneration() { + return generation; + } + + public String getPosition() { + return position; + } + + public String getStatusMessage() { + return statusMessage; + } +} diff --git a/modules/infrastructure/jpa/src/main/java/com/whoz_in/infra/jpa/member/MemberJpaAdapter.java b/modules/infrastructure/jpa/src/main/java/com/whoz_in/infra/jpa/member/MemberJpaAdapter.java new file mode 100644 index 00000000..34f329e1 --- /dev/null +++ b/modules/infrastructure/jpa/src/main/java/com/whoz_in/infra/jpa/member/MemberJpaAdapter.java @@ -0,0 +1,12 @@ +package com.whoz_in.infra.jpa.member; + +import org.springframework.stereotype.Repository; + +@Repository +public class MemberJpaAdapter implements MemberRepository{ + + @Override + public void save() { + System.out.println("1"); + } +} diff --git a/modules/infrastructure/jpa/src/main/java/com/whoz_in/infra/jpa/member/MemberJpaRepository.java b/modules/infrastructure/jpa/src/main/java/com/whoz_in/infra/jpa/member/MemberJpaRepository.java new file mode 100644 index 00000000..02318cf4 --- /dev/null +++ b/modules/infrastructure/jpa/src/main/java/com/whoz_in/infra/jpa/member/MemberJpaRepository.java @@ -0,0 +1,7 @@ +package com.whoz_in.infra.jpa.member; + +import org.springframework.data.jpa.repository.JpaRepository; + +public interface MemberJpaRepository extends JpaRepository { + +} diff --git a/modules/infrastructure/jpa/src/main/resources/env.properties b/modules/infrastructure/jpa/src/main/resources/env.properties new file mode 100644 index 00000000..0c4add7e --- /dev/null +++ b/modules/infrastructure/jpa/src/main/resources/env.properties @@ -0,0 +1,3 @@ +MYSQL_URL=jdbc:mysql://localhost:3306/whozin?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC&useUnicode=true&characterSetResults=utf8mb4 +MYSQL_USERNAME=root +MYSQL_PASSWORD=qwer1234 \ No newline at end of file diff --git a/modules/infrastructure/spring/build.gradle b/modules/infrastructure/spring/build.gradle index 1d471eb2..e3314a46 100644 --- a/modules/infrastructure/spring/build.gradle +++ b/modules/infrastructure/spring/build.gradle @@ -11,7 +11,6 @@ repositories { dependencies { implementation project(':modules:domain') - testImplementation platform('org.junit:junit-bom:5.9.1') testImplementation 'org.junit.jupiter:junit-jupiter' } diff --git a/modules/infrastructure/spring/src/main/java/com/whoz_in/infra/spring/event/SpringApplicationEventBus.java b/modules/infrastructure/spring/src/main/java/com/whoz_in/infra/spring/event/SpringApplicationEventBus.java new file mode 100644 index 00000000..216a57f2 --- /dev/null +++ b/modules/infrastructure/spring/src/main/java/com/whoz_in/infra/spring/event/SpringApplicationEventBus.java @@ -0,0 +1,25 @@ +package com.whoz_in.infra.spring.event; + + +import com.whoz_in.domain.shared.domain.bus.event.DomainEvent; +import com.whoz_in.domain.shared.domain.bus.event.EventBus; +import java.util.List; +import lombok.RequiredArgsConstructor; +import org.springframework.context.ApplicationEventPublisher; +import org.springframework.stereotype.Service; + + +/* +기본적인 이벤트 퍼블리셔 +추후에 카프카나 토끼MQ를 공부하면 새로운 구현체를 만들어봅시다. + */ +@Service +@RequiredArgsConstructor +public final class SpringApplicationEventBus implements EventBus { + private final ApplicationEventPublisher publisher; + + @Override + public void publish(List events) { + events.forEach(this.publisher::publishEvent); + } +}