#38 hexagonal: common 모듈 분리
This commit is contained in:
@@ -9,43 +9,46 @@ plugins {
|
||||
id 'java'
|
||||
}
|
||||
|
||||
compileJava {
|
||||
sourceCompatibility = 11
|
||||
targetCompatibility = 11
|
||||
subprojects {
|
||||
compileJava {
|
||||
sourceCompatibility = 11
|
||||
targetCompatibility = 11
|
||||
}
|
||||
|
||||
apply plugin: 'java'
|
||||
apply plugin: 'java-library'
|
||||
apply plugin: 'org.springframework.boot'
|
||||
apply plugin: 'io.spring.dependency-management'
|
||||
|
||||
repositories {
|
||||
mavenCentral()
|
||||
}
|
||||
|
||||
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'
|
||||
}
|
||||
|
||||
test {
|
||||
useJUnitPlatform()
|
||||
}
|
||||
}
|
||||
|
||||
apply plugin: 'java'
|
||||
apply plugin: 'java-library'
|
||||
apply plugin: 'org.springframework.boot'
|
||||
apply plugin: 'io.spring.dependency-management'
|
||||
|
||||
group 'org.example'
|
||||
version '1.0-SNAPSHOT'
|
||||
|
||||
repositories {
|
||||
mavenCentral()
|
||||
bootRun {
|
||||
enabled = false
|
||||
}
|
||||
|
||||
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-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'
|
||||
bootJar {
|
||||
enabled = false
|
||||
}
|
||||
|
||||
test {
|
||||
useJUnitPlatform()
|
||||
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.stereotype.Component;
|
||||
@@ -1,4 +1,4 @@
|
||||
package common;
|
||||
package org.example.common;
|
||||
|
||||
import javax.validation.*;
|
||||
import java.util.Set;
|
||||
@@ -1,4 +1,4 @@
|
||||
package common;
|
||||
package org.example.common;
|
||||
|
||||
import org.springframework.core.annotation.AliasFor;
|
||||
import org.springframework.stereotype.Component;
|
||||
@@ -1,4 +1,4 @@
|
||||
package common;
|
||||
package org.example.common;
|
||||
|
||||
import org.springframework.core.annotation.AliasFor;
|
||||
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'
|
||||
version '1.0-SNAPSHOT'
|
||||
@@ -27,22 +7,15 @@ repositories {
|
||||
}
|
||||
|
||||
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-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'
|
||||
|
||||
implementation project(path: ':common')
|
||||
|
||||
testImplementation 'junit:junit:4.13.1'
|
||||
|
||||
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;
|
||||
|
||||
|
||||
import common.WebAdapter;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.example.common.WebAdapter;
|
||||
import org.example.membership.application.port.in.RegisterMembershipCommand;
|
||||
import org.example.membership.application.port.in.RegisterMembershipUseCase;
|
||||
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.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
@@ -8,7 +8,7 @@ public class MembershipMapper {
|
||||
|
||||
public Membership mapToDomainEntity(MembershipJpaEntity membershipJpaEntity) {
|
||||
return Membership.generateMember(
|
||||
new Membership.MembershipId(membershipJpaEntity.getMembershipId()),
|
||||
new Membership.MembershipId(membershipJpaEntity.getMembershipId()),
|
||||
new Membership.MembershipName(membershipJpaEntity.getName()),
|
||||
new Membership.MembershipEmail(membershipJpaEntity.getEmail()),
|
||||
new Membership.MembershipAddress(membershipJpaEntity.getAddress()),
|
||||
|
||||
@@ -1,14 +1,15 @@
|
||||
package org.example.membership.adapter.out.persistence;
|
||||
|
||||
import common.PersistenceAdapter;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.example.common.PersistenceAdapter;
|
||||
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.domain.Membership;
|
||||
|
||||
@PersistenceAdapter
|
||||
@RequiredArgsConstructor
|
||||
public class MembershipPersistenceAdapter implements RegisterMembershipPort, FindMembershipPort {
|
||||
public class MembershipPersistenceAdapter implements RegisterMembershipPort, FindMembershipPort, ModifyMembershipPort {
|
||||
|
||||
private final SpringDataMembershipRepository membershipRepository;
|
||||
|
||||
@@ -29,4 +30,17 @@ public class MembershipPersistenceAdapter implements RegisterMembershipPort, Fin
|
||||
public MembershipJpaEntity findMembership(Membership.MembershipId membershipId) {
|
||||
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;
|
||||
|
||||
|
||||
import common.SelfValidating;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import org.example.common.SelfValidating;
|
||||
|
||||
@Data
|
||||
@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;
|
||||
|
||||
import common.SelfValidating;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import org.example.common.SelfValidating;
|
||||
|
||||
import javax.validation.constraints.AssertTrue;
|
||||
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;
|
||||
|
||||
import common.UseCase;
|
||||
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.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;
|
||||
|
||||
import common.UseCase;
|
||||
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.RegisterMembershipCommand;
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
rootProject.name = 'bobby-pay'
|
||||
include 'membership-service'
|
||||
include 'common'
|
||||
|
||||
|
||||
Reference in New Issue
Block a user