#38 hexagonal: common 모듈 분리
This commit is contained in:
@@ -9,6 +9,7 @@ plugins {
|
|||||||
id 'java'
|
id 'java'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
subprojects {
|
||||||
compileJava {
|
compileJava {
|
||||||
sourceCompatibility = 11
|
sourceCompatibility = 11
|
||||||
targetCompatibility = 11
|
targetCompatibility = 11
|
||||||
@@ -19,9 +20,6 @@ apply plugin: 'java-library'
|
|||||||
apply plugin: 'org.springframework.boot'
|
apply plugin: 'org.springframework.boot'
|
||||||
apply plugin: 'io.spring.dependency-management'
|
apply plugin: 'io.spring.dependency-management'
|
||||||
|
|
||||||
group 'org.example'
|
|
||||||
version '1.0-SNAPSHOT'
|
|
||||||
|
|
||||||
repositories {
|
repositories {
|
||||||
mavenCentral()
|
mavenCentral()
|
||||||
}
|
}
|
||||||
@@ -36,16 +34,21 @@ dependencies {
|
|||||||
|
|
||||||
testImplementation 'com.tngtech.archunit:archunit:1.0.1'
|
testImplementation 'com.tngtech.archunit:archunit:1.0.1'
|
||||||
testImplementation 'org.springframework.boot:spring-boot-starter-test'
|
testImplementation 'org.springframework.boot:spring-boot-starter-test'
|
||||||
|
|
||||||
implementation 'org.springframework.boot:spring-boot-starter-validation'
|
|
||||||
implementation 'org.springframework.boot:spring-boot-starter-actuator'
|
|
||||||
implementation 'org.springframework.boot:spring-boot-starter-web'
|
|
||||||
implementation 'javax.persistence:javax.persistence-api:2.2'
|
|
||||||
// implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
|
|
||||||
implementation 'org.jetbrains:annotations:23.0.0'
|
|
||||||
testImplementation 'junit:junit:4.13.1'
|
|
||||||
}
|
}
|
||||||
|
|
||||||
test {
|
test {
|
||||||
useJUnitPlatform()
|
useJUnitPlatform()
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bootRun {
|
||||||
|
enabled = false
|
||||||
|
}
|
||||||
|
|
||||||
|
bootJar {
|
||||||
|
enabled = false
|
||||||
|
}
|
||||||
|
|
||||||
|
bootBuildImage{
|
||||||
|
enabled = false
|
||||||
|
}
|
||||||
17
bobby-pay/common/build.gradle
Normal file
17
bobby-pay/common/build.gradle
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
group 'org.example.common'
|
||||||
|
version '1.0-SNAPSHOT'
|
||||||
|
|
||||||
|
repositories {
|
||||||
|
mavenCentral()
|
||||||
|
}
|
||||||
|
|
||||||
|
dependencies {
|
||||||
|
implementation 'org.springframework.boot:spring-boot-starter-validation'
|
||||||
|
|
||||||
|
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.1'
|
||||||
|
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.1'
|
||||||
|
}
|
||||||
|
|
||||||
|
test {
|
||||||
|
useJUnitPlatform()
|
||||||
|
}
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package common;
|
package org.example.common;
|
||||||
|
|
||||||
import org.springframework.core.annotation.AliasFor;
|
import org.springframework.core.annotation.AliasFor;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package common;
|
package org.example.common;
|
||||||
|
|
||||||
import javax.validation.*;
|
import javax.validation.*;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package common;
|
package org.example.common;
|
||||||
|
|
||||||
import org.springframework.core.annotation.AliasFor;
|
import org.springframework.core.annotation.AliasFor;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package common;
|
package org.example.common;
|
||||||
|
|
||||||
import org.springframework.core.annotation.AliasFor;
|
import org.springframework.core.annotation.AliasFor;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
@@ -1,23 +1,3 @@
|
|||||||
buildscript {
|
|
||||||
dependencies {
|
|
||||||
classpath "io.spring.gradle:dependency-management-plugin:0.5.1.RELEASE"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
plugins {
|
|
||||||
id 'org.springframework.boot' version '2.5.2'
|
|
||||||
id 'java'
|
|
||||||
}
|
|
||||||
|
|
||||||
compileJava {
|
|
||||||
sourceCompatibility = 11
|
|
||||||
targetCompatibility = 11
|
|
||||||
}
|
|
||||||
|
|
||||||
apply plugin: 'java'
|
|
||||||
apply plugin: 'java-library'
|
|
||||||
apply plugin: 'org.springframework.boot'
|
|
||||||
apply plugin: 'io.spring.dependency-management'
|
|
||||||
|
|
||||||
group 'org.example.membership'
|
group 'org.example.membership'
|
||||||
version '1.0-SNAPSHOT'
|
version '1.0-SNAPSHOT'
|
||||||
@@ -27,22 +7,15 @@ repositories {
|
|||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
compileOnly 'org.projectlombok:lombok'
|
|
||||||
annotationProcessor 'org.projectlombok:lombok'
|
|
||||||
annotationProcessor 'org.springframework.boot:spring-boot-configuration-processor'
|
|
||||||
|
|
||||||
implementation 'io.springfox:springfox-swagger-ui:2.9.2'
|
|
||||||
implementation 'io.springfox:springfox-swagger2:2.9.2'
|
|
||||||
|
|
||||||
testImplementation 'com.tngtech.archunit:archunit:1.0.1'
|
|
||||||
testImplementation 'org.springframework.boot:spring-boot-starter-test'
|
|
||||||
|
|
||||||
implementation 'org.springframework.boot:spring-boot-starter-validation'
|
implementation 'org.springframework.boot:spring-boot-starter-validation'
|
||||||
implementation 'org.springframework.boot:spring-boot-starter-actuator'
|
implementation 'org.springframework.boot:spring-boot-starter-actuator'
|
||||||
implementation 'org.springframework.boot:spring-boot-starter-web'
|
implementation 'org.springframework.boot:spring-boot-starter-web'
|
||||||
implementation 'javax.persistence:javax.persistence-api:2.2'
|
implementation 'javax.persistence:javax.persistence-api:2.2'
|
||||||
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
|
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
|
||||||
implementation 'org.jetbrains:annotations:23.0.0'
|
implementation 'org.jetbrains:annotations:23.0.0'
|
||||||
|
|
||||||
|
implementation project(path: ':common')
|
||||||
|
|
||||||
testImplementation 'junit:junit:4.13.1'
|
testImplementation 'junit:junit:4.13.1'
|
||||||
|
|
||||||
runtimeOnly 'com.h2database:h2'
|
runtimeOnly 'com.h2database:h2'
|
||||||
|
|||||||
@@ -0,0 +1,34 @@
|
|||||||
|
package org.example.membership.adapter.in.web;
|
||||||
|
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import org.example.membership.application.port.in.ModifyMembershipCommand;
|
||||||
|
import org.example.membership.application.port.in.ModifyMembershipUseCase;
|
||||||
|
import org.example.membership.domain.Membership;
|
||||||
|
import org.springframework.http.ResponseEntity;
|
||||||
|
import org.springframework.web.bind.annotation.PutMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RequestBody;
|
||||||
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
||||||
|
@RestController
|
||||||
|
@RequiredArgsConstructor
|
||||||
|
public class ModifyMembershipController {
|
||||||
|
|
||||||
|
private final ModifyMembershipUseCase modifyMembershipUseCase;
|
||||||
|
|
||||||
|
@PutMapping("/membership/{membershipId}")
|
||||||
|
ResponseEntity<Membership> modifyMembershipByMemberId(@RequestBody ModifyMembershipRequest request) {
|
||||||
|
|
||||||
|
ModifyMembershipCommand command = ModifyMembershipCommand.builder()
|
||||||
|
.membershipId(request.getMembershipId())
|
||||||
|
.name(request.getName())
|
||||||
|
.email(request.getEmail())
|
||||||
|
.address(request.getAddress())
|
||||||
|
.isValid(request.isValid())
|
||||||
|
.isCorp(request.isCorp())
|
||||||
|
.build();
|
||||||
|
|
||||||
|
Membership membership = modifyMembershipUseCase.modifyMembership(command);
|
||||||
|
|
||||||
|
return ResponseEntity.ok(membership);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
package org.example.membership.adapter.in.web;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@AllArgsConstructor
|
||||||
|
@NoArgsConstructor
|
||||||
|
public class ModifyMembershipRequest {
|
||||||
|
|
||||||
|
private String membershipId;
|
||||||
|
private String name;
|
||||||
|
private String email;
|
||||||
|
private String address;
|
||||||
|
private boolean isValid;
|
||||||
|
private boolean isCorp;
|
||||||
|
}
|
||||||
@@ -1,12 +1,11 @@
|
|||||||
package org.example.membership.adapter.in.web;
|
package org.example.membership.adapter.in.web;
|
||||||
|
|
||||||
|
|
||||||
import common.WebAdapter;
|
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import org.example.common.WebAdapter;
|
||||||
import org.example.membership.application.port.in.RegisterMembershipCommand;
|
import org.example.membership.application.port.in.RegisterMembershipCommand;
|
||||||
import org.example.membership.application.port.in.RegisterMembershipUseCase;
|
import org.example.membership.application.port.in.RegisterMembershipUseCase;
|
||||||
import org.example.membership.domain.Membership;
|
import org.example.membership.domain.Membership;
|
||||||
import org.springframework.web.bind.annotation.GetMapping;
|
|
||||||
import org.springframework.web.bind.annotation.PostMapping;
|
import org.springframework.web.bind.annotation.PostMapping;
|
||||||
import org.springframework.web.bind.annotation.RequestBody;
|
import org.springframework.web.bind.annotation.RequestBody;
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|||||||
@@ -1,14 +1,15 @@
|
|||||||
package org.example.membership.adapter.out.persistence;
|
package org.example.membership.adapter.out.persistence;
|
||||||
|
|
||||||
import common.PersistenceAdapter;
|
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import org.example.common.PersistenceAdapter;
|
||||||
import org.example.membership.application.port.out.FindMembershipPort;
|
import org.example.membership.application.port.out.FindMembershipPort;
|
||||||
|
import org.example.membership.application.port.out.ModifyMembershipPort;
|
||||||
import org.example.membership.application.port.out.RegisterMembershipPort;
|
import org.example.membership.application.port.out.RegisterMembershipPort;
|
||||||
import org.example.membership.domain.Membership;
|
import org.example.membership.domain.Membership;
|
||||||
|
|
||||||
@PersistenceAdapter
|
@PersistenceAdapter
|
||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
public class MembershipPersistenceAdapter implements RegisterMembershipPort, FindMembershipPort {
|
public class MembershipPersistenceAdapter implements RegisterMembershipPort, FindMembershipPort, ModifyMembershipPort {
|
||||||
|
|
||||||
private final SpringDataMembershipRepository membershipRepository;
|
private final SpringDataMembershipRepository membershipRepository;
|
||||||
|
|
||||||
@@ -29,4 +30,17 @@ public class MembershipPersistenceAdapter implements RegisterMembershipPort, Fin
|
|||||||
public MembershipJpaEntity findMembership(Membership.MembershipId membershipId) {
|
public MembershipJpaEntity findMembership(Membership.MembershipId membershipId) {
|
||||||
return membershipRepository.getById(membershipId.getMembershipId());
|
return membershipRepository.getById(membershipId.getMembershipId());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public MembershipJpaEntity modifyMembership(Membership.MembershipId membershipId, Membership.MembershipName membershipName, Membership.MembershipEmail membershipEmail, Membership.MembershipAddress membershipAddress, Membership.MembershipIsValid membershipIsValid, Membership.MembershipIsCorp membershipIsCorp) {
|
||||||
|
MembershipJpaEntity entity = membershipRepository.getById(membershipId.getMembershipId());
|
||||||
|
|
||||||
|
entity.setName(membershipName.getMembershipName());
|
||||||
|
entity.setAddress(membershipAddress.getMembershipAddress());
|
||||||
|
entity.setEmail(membershipEmail.getMembershipEmail());
|
||||||
|
entity.setCorp(membershipIsCorp.isMembershipIsCorp());
|
||||||
|
entity.setValid(membershipIsValid.isMembershipIsValid());
|
||||||
|
|
||||||
|
return membershipRepository.save(entity);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
package org.example.membership.application.port.in;
|
package org.example.membership.application.port.in;
|
||||||
|
|
||||||
|
|
||||||
import common.SelfValidating;
|
|
||||||
import lombok.Builder;
|
import lombok.Builder;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.EqualsAndHashCode;
|
import lombok.EqualsAndHashCode;
|
||||||
|
import org.example.common.SelfValidating;
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
@Builder
|
@Builder
|
||||||
|
|||||||
@@ -0,0 +1,43 @@
|
|||||||
|
package org.example.membership.application.port.in;
|
||||||
|
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.EqualsAndHashCode;
|
||||||
|
import org.example.common.SelfValidating;
|
||||||
|
|
||||||
|
import javax.validation.constraints.AssertTrue;
|
||||||
|
import javax.validation.constraints.NotEmpty;
|
||||||
|
|
||||||
|
@Builder
|
||||||
|
@Data
|
||||||
|
@EqualsAndHashCode(callSuper = false)
|
||||||
|
public class ModifyMembershipCommand extends SelfValidating<ModifyMembershipCommand> {
|
||||||
|
|
||||||
|
@NotEmpty
|
||||||
|
private final String membershipId;
|
||||||
|
|
||||||
|
@NotEmpty
|
||||||
|
private final String name;
|
||||||
|
|
||||||
|
@NotEmpty
|
||||||
|
private final String email;
|
||||||
|
|
||||||
|
@NotEmpty
|
||||||
|
private final String address;
|
||||||
|
|
||||||
|
@AssertTrue
|
||||||
|
private final boolean isValid;
|
||||||
|
|
||||||
|
private final boolean isCorp;
|
||||||
|
|
||||||
|
public ModifyMembershipCommand(String membershipId, String name, String email, String address, boolean isValid, boolean isCorp) {
|
||||||
|
this.membershipId = membershipId;
|
||||||
|
this.name = name;
|
||||||
|
this.email = email;
|
||||||
|
this.address = address;
|
||||||
|
this.isValid = isValid;
|
||||||
|
this.isCorp = isCorp;
|
||||||
|
|
||||||
|
this.validateSelf();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
package org.example.membership.application.port.in;
|
||||||
|
|
||||||
|
import org.example.membership.domain.Membership;
|
||||||
|
|
||||||
|
public interface ModifyMembershipUseCase {
|
||||||
|
|
||||||
|
Membership modifyMembership(ModifyMembershipCommand command);
|
||||||
|
}
|
||||||
@@ -1,9 +1,9 @@
|
|||||||
package org.example.membership.application.port.in;
|
package org.example.membership.application.port.in;
|
||||||
|
|
||||||
import common.SelfValidating;
|
|
||||||
import lombok.Builder;
|
import lombok.Builder;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.EqualsAndHashCode;
|
import lombok.EqualsAndHashCode;
|
||||||
|
import org.example.common.SelfValidating;
|
||||||
|
|
||||||
import javax.validation.constraints.AssertTrue;
|
import javax.validation.constraints.AssertTrue;
|
||||||
import javax.validation.constraints.NotEmpty;
|
import javax.validation.constraints.NotEmpty;
|
||||||
|
|||||||
@@ -0,0 +1,16 @@
|
|||||||
|
package org.example.membership.application.port.out;
|
||||||
|
|
||||||
|
import org.example.membership.adapter.out.persistence.MembershipJpaEntity;
|
||||||
|
import org.example.membership.domain.Membership;
|
||||||
|
|
||||||
|
public interface ModifyMembershipPort {
|
||||||
|
|
||||||
|
MembershipJpaEntity modifyMembership(
|
||||||
|
Membership.MembershipId membershipId,
|
||||||
|
Membership.MembershipName membershipName,
|
||||||
|
Membership.MembershipEmail membershipEmail,
|
||||||
|
Membership.MembershipAddress membershipAddress,
|
||||||
|
Membership.MembershipIsValid membershipIsValid,
|
||||||
|
Membership.MembershipIsCorp membershipIsCorp
|
||||||
|
);
|
||||||
|
}
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
package org.example.membership.application.service;
|
package org.example.membership.application.service;
|
||||||
|
|
||||||
import common.UseCase;
|
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import org.example.common.UseCase;
|
||||||
import org.example.membership.adapter.out.persistence.MembershipJpaEntity;
|
import org.example.membership.adapter.out.persistence.MembershipJpaEntity;
|
||||||
import org.example.membership.adapter.out.persistence.MembershipMapper;
|
import org.example.membership.adapter.out.persistence.MembershipMapper;
|
||||||
import org.example.membership.application.port.in.FindMembershipCommand;
|
import org.example.membership.application.port.in.FindMembershipCommand;
|
||||||
|
|||||||
@@ -0,0 +1,34 @@
|
|||||||
|
package org.example.membership.application.service;
|
||||||
|
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import org.example.common.UseCase;
|
||||||
|
import org.example.membership.adapter.out.persistence.MembershipJpaEntity;
|
||||||
|
import org.example.membership.adapter.out.persistence.MembershipMapper;
|
||||||
|
import org.example.membership.application.port.in.ModifyMembershipCommand;
|
||||||
|
import org.example.membership.application.port.in.ModifyMembershipUseCase;
|
||||||
|
import org.example.membership.application.port.out.ModifyMembershipPort;
|
||||||
|
import org.example.membership.domain.Membership;
|
||||||
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
|
@UseCase
|
||||||
|
@Transactional
|
||||||
|
@RequiredArgsConstructor
|
||||||
|
public class ModifyMembershipService implements ModifyMembershipUseCase {
|
||||||
|
|
||||||
|
private final ModifyMembershipPort modifyMembershipPort;
|
||||||
|
private final MembershipMapper membershipMapper;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Membership modifyMembership(ModifyMembershipCommand command) {
|
||||||
|
MembershipJpaEntity jpaEntity = modifyMembershipPort.modifyMembership(
|
||||||
|
new Membership.MembershipId(command.getMembershipId()),
|
||||||
|
new Membership.MembershipName(command.getName()),
|
||||||
|
new Membership.MembershipEmail(command.getEmail()),
|
||||||
|
new Membership.MembershipAddress(command.getAddress()),
|
||||||
|
new Membership.MembershipIsValid(command.isValid()),
|
||||||
|
new Membership.MembershipIsCorp(command.isCorp())
|
||||||
|
);
|
||||||
|
|
||||||
|
return membershipMapper.mapToDomainEntity(jpaEntity);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
package org.example.membership.application.service;
|
package org.example.membership.application.service;
|
||||||
|
|
||||||
import common.UseCase;
|
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import org.example.common.UseCase;
|
||||||
import org.example.membership.adapter.out.persistence.MembershipJpaEntity;
|
import org.example.membership.adapter.out.persistence.MembershipJpaEntity;
|
||||||
import org.example.membership.adapter.out.persistence.MembershipMapper;
|
import org.example.membership.adapter.out.persistence.MembershipMapper;
|
||||||
import org.example.membership.application.port.in.RegisterMembershipCommand;
|
import org.example.membership.application.port.in.RegisterMembershipCommand;
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
rootProject.name = 'bobby-pay'
|
rootProject.name = 'bobby-pay'
|
||||||
include 'membership-service'
|
include 'membership-service'
|
||||||
|
include 'common'
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user