Compare commits
7 Commits
multi-modu
...
single-mod
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4806b68230 | ||
|
|
844ee6b55b | ||
|
|
e8fce429e6 | ||
|
|
31d89ab436 | ||
|
|
e6e9e848d8 | ||
|
|
02256fa543 | ||
|
|
612a40bced |
36
.github/workflows/ci.yml
vendored
Normal file
36
.github/workflows/ci.yml
vendored
Normal file
@@ -0,0 +1,36 @@
|
||||
name: CI
|
||||
|
||||
on: [push]
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
|
||||
- name: "Checkout sources"
|
||||
uses: actions/checkout@v1
|
||||
|
||||
- name: "Setup Java"
|
||||
uses: actions/setup-java@v1
|
||||
with:
|
||||
java-version: 14
|
||||
|
||||
- name: "Initialize Gradle dependencies cache"
|
||||
uses: actions/cache@v2
|
||||
with:
|
||||
path: ~/.gradle/caches
|
||||
key: ${{ runner.os }}-gradle-caches-${{ hashFiles('**/build.gradle') }}
|
||||
|
||||
- name: "Run Gradle build"
|
||||
run: chmod 755 gradlew && ./gradlew build
|
||||
|
||||
- name: "Zip build reports"
|
||||
if: failure()
|
||||
run: zip -r reports.zip build/reports
|
||||
|
||||
- uses: actions/upload-artifact@v1
|
||||
name: "Upload build reports"
|
||||
if: failure()
|
||||
with:
|
||||
name: reports
|
||||
path: reports.zip
|
||||
17
.travis.yml
17
.travis.yml
@@ -1,17 +0,0 @@
|
||||
before_install:
|
||||
- chmod +x gradlew
|
||||
- |
|
||||
if ! git diff --name-only $TRAVIS_COMMIT_RANGE | grep -qvE '(.md)|^(LICENSE)'
|
||||
then
|
||||
echo "Not running CI since only docs were changed."
|
||||
exit
|
||||
fi
|
||||
|
||||
install: ./gradlew assemble
|
||||
|
||||
script: ./gradlew clean build --info
|
||||
|
||||
language: java
|
||||
|
||||
jdk:
|
||||
- oraclejdk11
|
||||
@@ -1,6 +1,8 @@
|
||||
# Example Implementation of a Hexagonal Architecture
|
||||
|
||||
[](https://travis-ci.org/thombergs/buckpal)
|
||||
[](https://github.com/thombergs/buckpal/actions/workflows/ci.yml)
|
||||
|
||||
[](https://reflectoring.io/book).
|
||||
|
||||
This is the companion code to my eBook [Get Your Hands Dirty on Clean Architecture](https://leanpub.com/get-your-hands-dirty-on-clean-architecture).
|
||||
|
||||
@@ -13,5 +15,5 @@ It implements a domain-centric "Hexagonal" approach of a common web application
|
||||
|
||||
## Prerequisites
|
||||
|
||||
* JDK 8
|
||||
* JDK 11
|
||||
* this project uses Lombok, so enable annotation processing in your IDE
|
||||
|
||||
@@ -1,26 +0,0 @@
|
||||
dependencies {
|
||||
implementation project(':common')
|
||||
implementation project(':buckpal-application')
|
||||
|
||||
compileOnly 'org.projectlombok:lombok'
|
||||
annotationProcessor 'org.projectlombok:lombok'
|
||||
|
||||
implementation 'org.springframework.boot:spring-boot-starter-validation'
|
||||
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
|
||||
|
||||
testImplementation('org.springframework.boot:spring-boot-starter-test') {
|
||||
exclude group: 'junit' // excluding junit 4
|
||||
}
|
||||
testImplementation 'org.junit.jupiter:junit-jupiter-engine:5.0.1'
|
||||
testImplementation 'org.mockito:mockito-junit-jupiter:2.23.0'
|
||||
testImplementation 'com.tngtech.archunit:archunit:0.9.3'
|
||||
testImplementation 'de.adesso:junit-insights:1.1.0'
|
||||
testImplementation 'org.junit.platform:junit-platform-launcher:1.4.2'
|
||||
testImplementation 'com.h2database:h2'
|
||||
testImplementation project(':buckpal-testdata')
|
||||
}
|
||||
|
||||
test {
|
||||
useJUnitPlatform()
|
||||
systemProperty 'de.adesso.junitinsights.enabled', 'true'
|
||||
}
|
||||
@@ -1,6 +0,0 @@
|
||||
package io.reflectoring.buckpal.adapter.persistence;
|
||||
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
|
||||
interface AccountRepository extends JpaRepository<AccountJpaEntity, Long> {
|
||||
}
|
||||
@@ -1,12 +0,0 @@
|
||||
package io.reflectoring.buckpal.adapter.persistence;
|
||||
|
||||
import org.springframework.boot.SpringApplication;
|
||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||
|
||||
@SpringBootApplication
|
||||
class TestApplication {
|
||||
|
||||
public static void main(String[] args) {
|
||||
SpringApplication.run(TestApplication.class, args);
|
||||
}
|
||||
}
|
||||
@@ -1,23 +0,0 @@
|
||||
dependencies {
|
||||
implementation project(':common')
|
||||
implementation project(':buckpal-application')
|
||||
|
||||
implementation 'org.springframework.boot:spring-boot-starter-web'
|
||||
|
||||
compileOnly 'org.projectlombok:lombok'
|
||||
annotationProcessor 'org.projectlombok:lombok'
|
||||
|
||||
testImplementation('org.springframework.boot:spring-boot-starter-test') {
|
||||
exclude group: 'junit' // excluding junit 4
|
||||
}
|
||||
testImplementation 'org.junit.jupiter:junit-jupiter-engine:5.0.1'
|
||||
testImplementation 'org.mockito:mockito-junit-jupiter:2.23.0'
|
||||
testImplementation 'com.tngtech.archunit:archunit:0.9.3'
|
||||
testImplementation 'de.adesso:junit-insights:1.1.0'
|
||||
testImplementation 'org.junit.platform:junit-platform-launcher:1.4.2'
|
||||
}
|
||||
|
||||
test {
|
||||
useJUnitPlatform()
|
||||
systemProperty 'de.adesso.junitinsights.enabled', 'true'
|
||||
}
|
||||
@@ -1,2 +0,0 @@
|
||||
Manifest-Version: 1.0
|
||||
|
||||
@@ -1,7 +0,0 @@
|
||||
package io.reflectoring.buckpal.adapter.web;
|
||||
|
||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||
|
||||
@SpringBootApplication
|
||||
public class TestApplication {
|
||||
}
|
||||
@@ -1,26 +0,0 @@
|
||||
dependencies {
|
||||
implementation project(':common')
|
||||
|
||||
compileOnly 'org.projectlombok:lombok'
|
||||
annotationProcessor 'org.projectlombok:lombok'
|
||||
|
||||
implementation 'org.springframework.boot:spring-boot-starter-validation'
|
||||
|
||||
implementation 'javax.transaction:javax.transaction-api'
|
||||
|
||||
testImplementation('org.springframework.boot:spring-boot-starter-test') {
|
||||
exclude group: 'junit' // excluding junit 4
|
||||
}
|
||||
testImplementation 'org.junit.jupiter:junit-jupiter-engine:5.0.1'
|
||||
testImplementation 'org.mockito:mockito-junit-jupiter:2.23.0'
|
||||
testImplementation 'com.tngtech.archunit:archunit:0.9.3'
|
||||
testImplementation 'de.adesso:junit-insights:1.1.0'
|
||||
testImplementation 'org.junit.platform:junit-platform-launcher:1.4.2'
|
||||
testImplementation project(':buckpal-testdata')
|
||||
}
|
||||
|
||||
test {
|
||||
useJUnitPlatform()
|
||||
systemProperty 'de.adesso.junitinsights.enabled', 'true'
|
||||
}
|
||||
|
||||
@@ -1,10 +0,0 @@
|
||||
package io.reflectoring.buckpal.application.port.in;
|
||||
|
||||
import io.reflectoring.buckpal.domain.Account.AccountId;
|
||||
import io.reflectoring.buckpal.domain.Money;
|
||||
|
||||
public interface GetAccountBalanceQuery {
|
||||
|
||||
Money getAccountBalance(AccountId accountId);
|
||||
|
||||
}
|
||||
@@ -1,39 +0,0 @@
|
||||
package io.reflectoring.buckpal.application.port.in;
|
||||
|
||||
import io.reflectoring.buckpal.domain.Account.AccountId;
|
||||
import io.reflectoring.buckpal.domain.Money;
|
||||
import io.reflectoring.buckpal.common.SelfValidating;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.Value;
|
||||
|
||||
import javax.validation.constraints.NotNull;
|
||||
|
||||
public interface SendMoneyUseCase {
|
||||
|
||||
boolean sendMoney(SendMoneyCommand command);
|
||||
|
||||
@Value
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
class SendMoneyCommand extends SelfValidating<SendMoneyCommand> {
|
||||
|
||||
@NotNull
|
||||
private final AccountId sourceAccountId;
|
||||
|
||||
@NotNull
|
||||
private final AccountId targetAccountId;
|
||||
|
||||
@NotNull
|
||||
private final Money money;
|
||||
|
||||
public SendMoneyCommand(
|
||||
AccountId sourceAccountId,
|
||||
AccountId targetAccountId,
|
||||
Money money) {
|
||||
this.sourceAccountId = sourceAccountId;
|
||||
this.targetAccountId = targetAccountId;
|
||||
this.money = money;
|
||||
this.validateSelf();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,11 +0,0 @@
|
||||
package io.reflectoring.buckpal.application.port.out;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
import io.reflectoring.buckpal.domain.Account;
|
||||
import io.reflectoring.buckpal.domain.Account.AccountId;
|
||||
|
||||
public interface LoadAccountPort {
|
||||
|
||||
Account loadAccount(AccountId accountId, LocalDateTime baselineDate);
|
||||
}
|
||||
@@ -1,9 +0,0 @@
|
||||
package io.reflectoring.buckpal.application.port.out;
|
||||
|
||||
import io.reflectoring.buckpal.domain.Account;
|
||||
|
||||
public interface UpdateAccountStatePort {
|
||||
|
||||
void updateActivities(Account account);
|
||||
|
||||
}
|
||||
@@ -1,34 +0,0 @@
|
||||
plugins {
|
||||
id "org.springframework.boot" version "2.1.9.RELEASE"
|
||||
}
|
||||
|
||||
dependencies {
|
||||
|
||||
compileOnly 'org.projectlombok:lombok'
|
||||
annotationProcessor 'org.projectlombok:lombok'
|
||||
|
||||
implementation project(':common')
|
||||
implementation project(':buckpal-application')
|
||||
implementation project(':adapters:buckpal-persistence')
|
||||
implementation project(':adapters:buckpal-web')
|
||||
implementation ('org.springframework.boot:spring-boot-starter-web')
|
||||
runtimeOnly 'com.h2database:h2'
|
||||
|
||||
testImplementation('org.springframework.boot:spring-boot-starter-test') {
|
||||
exclude group: 'junit' // excluding junit 4
|
||||
}
|
||||
testImplementation 'org.junit.jupiter:junit-jupiter-engine:5.0.1'
|
||||
testImplementation 'org.junit.platform:junit-platform-launcher:1.4.2'
|
||||
testImplementation 'org.mockito:mockito-junit-jupiter:2.23.0'
|
||||
testImplementation 'com.tngtech.archunit:archunit:0.9.3'
|
||||
testImplementation 'de.adesso:junit-insights:1.1.0'
|
||||
testImplementation 'com.h2database:h2'
|
||||
|
||||
}
|
||||
|
||||
test {
|
||||
useJUnitPlatform()
|
||||
systemProperty 'de.adesso.junitinsights.enabled', 'true'
|
||||
}
|
||||
|
||||
|
||||
@@ -1,3 +0,0 @@
|
||||
dependencies {
|
||||
implementation project(':buckpal-application')
|
||||
}
|
||||
56
build.gradle
56
build.gradle
@@ -1,29 +1,47 @@
|
||||
plugins {
|
||||
id "io.spring.dependency-management" version "1.0.8.RELEASE"
|
||||
id 'org.springframework.boot' version '2.4.3'
|
||||
id 'io.spring.dependency-management' version '1.0.11.RELEASE'
|
||||
}
|
||||
|
||||
subprojects {
|
||||
|
||||
group = 'io.reflectoring.reviewapp'
|
||||
version = '0.0.1-SNAPSHOT'
|
||||
group = 'io.reflectoring.buckpal'
|
||||
version = '0.0.1-SNAPSHOT'
|
||||
|
||||
apply plugin: 'java'
|
||||
apply plugin: 'io.spring.dependency-management'
|
||||
apply plugin: 'java-library'
|
||||
apply plugin: 'java'
|
||||
apply plugin: 'io.spring.dependency-management'
|
||||
apply plugin: 'java-library'
|
||||
|
||||
repositories {
|
||||
jcenter()
|
||||
repositories {
|
||||
mavenCentral()
|
||||
}
|
||||
|
||||
compileJava {
|
||||
sourceCompatibility = 11
|
||||
targetCompatibility = 11
|
||||
}
|
||||
|
||||
dependencies {
|
||||
compileOnly 'org.projectlombok:lombok'
|
||||
annotationProcessor 'org.projectlombok:lombok'
|
||||
|
||||
implementation ('org.springframework.boot:spring-boot-starter-web')
|
||||
implementation 'org.springframework.boot:spring-boot-starter-validation'
|
||||
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
|
||||
|
||||
testImplementation('org.springframework.boot:spring-boot-starter-test') {
|
||||
exclude group: 'junit' // excluding junit 4
|
||||
}
|
||||
testImplementation 'org.junit.jupiter:junit-jupiter-engine:5.0.1'
|
||||
testImplementation 'org.mockito:mockito-junit-jupiter:2.23.0'
|
||||
testImplementation 'com.tngtech.archunit:archunit:0.16.0'
|
||||
testImplementation 'org.junit.platform:junit-platform-launcher:1.4.2'
|
||||
testImplementation 'com.h2database:h2'
|
||||
|
||||
dependencyManagement {
|
||||
imports {
|
||||
mavenBom("org.springframework.boot:spring-boot-dependencies:2.1.9.RELEASE")
|
||||
}
|
||||
}
|
||||
|
||||
compileJava {
|
||||
sourceCompatibility = 1.8
|
||||
targetCompatibility = 1.8
|
||||
}
|
||||
runtimeOnly 'com.h2database:h2'
|
||||
|
||||
}
|
||||
|
||||
test {
|
||||
useJUnitPlatform()
|
||||
}
|
||||
|
||||
|
||||
@@ -1,5 +0,0 @@
|
||||
dependencies {
|
||||
implementation 'org.springframework:spring-context'
|
||||
implementation 'javax.validation:validation-api'
|
||||
}
|
||||
|
||||
2
gradle/wrapper/gradle-wrapper.properties
vendored
2
gradle/wrapper/gradle-wrapper.properties
vendored
@@ -1,5 +1,5 @@
|
||||
distributionBase=GRADLE_USER_HOME
|
||||
distributionPath=wrapper/dists
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.3-bin.zip
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-6.8.2-bin.zip
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
zipStorePath=wrapper/dists
|
||||
|
||||
@@ -1,7 +0,0 @@
|
||||
include 'common'
|
||||
include 'buckpal-configuration'
|
||||
|
||||
include 'adapters:buckpal-web'
|
||||
include 'adapters:buckpal-persistence'
|
||||
include 'buckpal-application'
|
||||
include 'buckpal-testdata'
|
||||
@@ -1,7 +1,7 @@
|
||||
package io.reflectoring.buckpal;
|
||||
|
||||
import io.reflectoring.buckpal.application.service.MoneyTransferProperties;
|
||||
import io.reflectoring.buckpal.domain.Money;
|
||||
import io.reflectoring.buckpal.account.application.service.MoneyTransferProperties;
|
||||
import io.reflectoring.buckpal.account.domain.Money;
|
||||
import org.springframework.boot.context.properties.EnableConfigurationProperties;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
@@ -1,10 +1,10 @@
|
||||
package io.reflectoring.buckpal.adapter.web;
|
||||
package io.reflectoring.buckpal.account.adapter.in.web;
|
||||
|
||||
import io.reflectoring.buckpal.application.port.in.SendMoneyUseCase;
|
||||
import io.reflectoring.buckpal.application.port.in.SendMoneyUseCase.SendMoneyCommand;
|
||||
import io.reflectoring.buckpal.account.application.port.in.SendMoneyUseCase;
|
||||
import io.reflectoring.buckpal.account.application.port.in.SendMoneyCommand;
|
||||
import io.reflectoring.buckpal.common.WebAdapter;
|
||||
import io.reflectoring.buckpal.domain.Account.AccountId;
|
||||
import io.reflectoring.buckpal.domain.Money;
|
||||
import io.reflectoring.buckpal.account.domain.Account.AccountId;
|
||||
import io.reflectoring.buckpal.account.domain.Money;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.web.bind.annotation.PathVariable;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
@@ -1,4 +1,4 @@
|
||||
package io.reflectoring.buckpal.adapter.persistence;
|
||||
package io.reflectoring.buckpal.account.adapter.out.persistence;
|
||||
|
||||
import javax.persistence.Entity;
|
||||
import javax.persistence.GeneratedValue;
|
||||
@@ -1,14 +1,14 @@
|
||||
package io.reflectoring.buckpal.adapter.persistence;
|
||||
package io.reflectoring.buckpal.account.adapter.out.persistence;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import io.reflectoring.buckpal.domain.Account;
|
||||
import io.reflectoring.buckpal.domain.Account.AccountId;
|
||||
import io.reflectoring.buckpal.domain.Activity;
|
||||
import io.reflectoring.buckpal.domain.Activity.ActivityId;
|
||||
import io.reflectoring.buckpal.domain.ActivityWindow;
|
||||
import io.reflectoring.buckpal.domain.Money;
|
||||
import io.reflectoring.buckpal.account.domain.Account;
|
||||
import io.reflectoring.buckpal.account.domain.Account.AccountId;
|
||||
import io.reflectoring.buckpal.account.domain.Activity;
|
||||
import io.reflectoring.buckpal.account.domain.Activity.ActivityId;
|
||||
import io.reflectoring.buckpal.account.domain.ActivityWindow;
|
||||
import io.reflectoring.buckpal.account.domain.Money;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@Component
|
||||
@@ -1,18 +1,17 @@
|
||||
package io.reflectoring.buckpal.adapter.persistence;
|
||||
package io.reflectoring.buckpal.account.adapter.out.persistence;
|
||||
|
||||
import javax.persistence.EntityNotFoundException;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.List;
|
||||
|
||||
import io.reflectoring.buckpal.application.port.out.LoadAccountPort;
|
||||
import io.reflectoring.buckpal.application.port.out.UpdateAccountStatePort;
|
||||
import io.reflectoring.buckpal.account.application.port.out.LoadAccountPort;
|
||||
import io.reflectoring.buckpal.account.application.port.out.UpdateAccountStatePort;
|
||||
import io.reflectoring.buckpal.account.domain.Account;
|
||||
import io.reflectoring.buckpal.account.domain.Account.AccountId;
|
||||
import io.reflectoring.buckpal.account.domain.Activity;
|
||||
import io.reflectoring.buckpal.common.PersistenceAdapter;
|
||||
import io.reflectoring.buckpal.domain.Account;
|
||||
import io.reflectoring.buckpal.domain.Account.AccountId;
|
||||
import io.reflectoring.buckpal.domain.Activity;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@RequiredArgsConstructor
|
||||
@PersistenceAdapter
|
||||
@@ -20,7 +19,7 @@ class AccountPersistenceAdapter implements
|
||||
LoadAccountPort,
|
||||
UpdateAccountStatePort {
|
||||
|
||||
private final AccountRepository accountRepository;
|
||||
private final SpringDataAccountRepository accountRepository;
|
||||
private final ActivityRepository activityRepository;
|
||||
private final AccountMapper accountMapper;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package io.reflectoring.buckpal.adapter.persistence;
|
||||
package io.reflectoring.buckpal.account.adapter.out.persistence;
|
||||
|
||||
import javax.persistence.Column;
|
||||
import javax.persistence.Entity;
|
||||
@@ -1,4 +1,4 @@
|
||||
package io.reflectoring.buckpal.adapter.persistence;
|
||||
package io.reflectoring.buckpal.account.adapter.out.persistence;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.List;
|
||||
@@ -0,0 +1,6 @@
|
||||
package io.reflectoring.buckpal.account.adapter.out.persistence;
|
||||
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
|
||||
interface SpringDataAccountRepository extends JpaRepository<AccountJpaEntity, Long> {
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
package io.reflectoring.buckpal.account.application.port.in;
|
||||
|
||||
import io.reflectoring.buckpal.account.domain.Account.AccountId;
|
||||
import io.reflectoring.buckpal.account.domain.Money;
|
||||
|
||||
public interface GetAccountBalanceQuery {
|
||||
|
||||
Money getAccountBalance(AccountId accountId);
|
||||
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
package io.reflectoring.buckpal.account.application.port.in;
|
||||
|
||||
import io.reflectoring.buckpal.account.domain.Account.AccountId;
|
||||
import io.reflectoring.buckpal.account.domain.Money;
|
||||
import io.reflectoring.buckpal.common.SelfValidating;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.Value;
|
||||
|
||||
import javax.validation.constraints.NotNull;
|
||||
|
||||
@Value
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
public
|
||||
class SendMoneyCommand extends SelfValidating<SendMoneyCommand> {
|
||||
|
||||
@NotNull
|
||||
private final AccountId sourceAccountId;
|
||||
|
||||
@NotNull
|
||||
private final AccountId targetAccountId;
|
||||
|
||||
@NotNull
|
||||
private final Money money;
|
||||
|
||||
public SendMoneyCommand(
|
||||
AccountId sourceAccountId,
|
||||
AccountId targetAccountId,
|
||||
Money money) {
|
||||
this.sourceAccountId = sourceAccountId;
|
||||
this.targetAccountId = targetAccountId;
|
||||
this.money = money;
|
||||
this.validateSelf();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
package io.reflectoring.buckpal.account.application.port.in;
|
||||
|
||||
import io.reflectoring.buckpal.account.domain.Account.AccountId;
|
||||
import io.reflectoring.buckpal.account.domain.Money;
|
||||
import io.reflectoring.buckpal.common.SelfValidating;
|
||||
|
||||
public interface SendMoneyUseCase {
|
||||
|
||||
boolean sendMoney(SendMoneyCommand command);
|
||||
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
package io.reflectoring.buckpal.application.port.out;
|
||||
package io.reflectoring.buckpal.account.application.port.out;
|
||||
|
||||
import io.reflectoring.buckpal.domain.Account;
|
||||
import io.reflectoring.buckpal.account.domain.Account;
|
||||
|
||||
public interface AccountLock {
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
package io.reflectoring.buckpal.account.application.port.out;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
import io.reflectoring.buckpal.account.domain.Account;
|
||||
import io.reflectoring.buckpal.account.domain.Account.AccountId;
|
||||
|
||||
public interface LoadAccountPort {
|
||||
|
||||
Account loadAccount(AccountId accountId, LocalDateTime baselineDate);
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
package io.reflectoring.buckpal.account.application.port.out;
|
||||
|
||||
import io.reflectoring.buckpal.account.domain.Account;
|
||||
|
||||
public interface UpdateAccountStatePort {
|
||||
|
||||
void updateActivities(Account account);
|
||||
|
||||
}
|
||||
@@ -1,11 +1,11 @@
|
||||
package io.reflectoring.buckpal.application.service;
|
||||
package io.reflectoring.buckpal.account.application.service;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
import io.reflectoring.buckpal.application.port.in.GetAccountBalanceQuery;
|
||||
import io.reflectoring.buckpal.application.port.out.LoadAccountPort;
|
||||
import io.reflectoring.buckpal.domain.Account.AccountId;
|
||||
import io.reflectoring.buckpal.domain.Money;
|
||||
import io.reflectoring.buckpal.account.application.port.in.GetAccountBalanceQuery;
|
||||
import io.reflectoring.buckpal.account.application.port.out.LoadAccountPort;
|
||||
import io.reflectoring.buckpal.account.domain.Account.AccountId;
|
||||
import io.reflectoring.buckpal.account.domain.Money;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
|
||||
@RequiredArgsConstructor
|
||||
@@ -1,6 +1,6 @@
|
||||
package io.reflectoring.buckpal.application.service;
|
||||
package io.reflectoring.buckpal.account.application.service;
|
||||
|
||||
import io.reflectoring.buckpal.domain.Money;
|
||||
import io.reflectoring.buckpal.account.domain.Money;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
@@ -1,7 +1,7 @@
|
||||
package io.reflectoring.buckpal.application.service;
|
||||
package io.reflectoring.buckpal.account.application.service;
|
||||
|
||||
import io.reflectoring.buckpal.application.port.out.AccountLock;
|
||||
import io.reflectoring.buckpal.domain.Account.AccountId;
|
||||
import io.reflectoring.buckpal.account.application.port.out.AccountLock;
|
||||
import io.reflectoring.buckpal.account.domain.Account.AccountId;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@Component
|
||||
@@ -1,12 +1,13 @@
|
||||
package io.reflectoring.buckpal.application.service;
|
||||
package io.reflectoring.buckpal.account.application.service;
|
||||
|
||||
import io.reflectoring.buckpal.application.port.in.SendMoneyUseCase;
|
||||
import io.reflectoring.buckpal.application.port.out.AccountLock;
|
||||
import io.reflectoring.buckpal.application.port.out.LoadAccountPort;
|
||||
import io.reflectoring.buckpal.application.port.out.UpdateAccountStatePort;
|
||||
import io.reflectoring.buckpal.account.application.port.in.SendMoneyCommand;
|
||||
import io.reflectoring.buckpal.account.application.port.in.SendMoneyUseCase;
|
||||
import io.reflectoring.buckpal.account.application.port.out.AccountLock;
|
||||
import io.reflectoring.buckpal.account.application.port.out.LoadAccountPort;
|
||||
import io.reflectoring.buckpal.account.application.port.out.UpdateAccountStatePort;
|
||||
import io.reflectoring.buckpal.common.UseCase;
|
||||
import io.reflectoring.buckpal.domain.Account;
|
||||
import io.reflectoring.buckpal.domain.Account.AccountId;
|
||||
import io.reflectoring.buckpal.account.domain.Account;
|
||||
import io.reflectoring.buckpal.account.domain.Account.AccountId;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
|
||||
import javax.transaction.Transactional;
|
||||
@@ -1,6 +1,6 @@
|
||||
package io.reflectoring.buckpal.application.service;
|
||||
package io.reflectoring.buckpal.account.application.service;
|
||||
|
||||
import io.reflectoring.buckpal.domain.Money;
|
||||
import io.reflectoring.buckpal.account.domain.Money;
|
||||
|
||||
public class ThresholdExceededException extends RuntimeException {
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package io.reflectoring.buckpal.domain;
|
||||
package io.reflectoring.buckpal.account.domain;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.Optional;
|
||||
@@ -1,4 +1,4 @@
|
||||
package io.reflectoring.buckpal.domain;
|
||||
package io.reflectoring.buckpal.account.domain;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package io.reflectoring.buckpal.domain;
|
||||
package io.reflectoring.buckpal.account.domain;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.ArrayList;
|
||||
@@ -7,7 +7,7 @@ import java.util.Collections;
|
||||
import java.util.Comparator;
|
||||
import java.util.List;
|
||||
|
||||
import io.reflectoring.buckpal.domain.Account.AccountId;
|
||||
import io.reflectoring.buckpal.account.domain.Account.AccountId;
|
||||
import lombok.NonNull;
|
||||
|
||||
/**
|
||||
@@ -1,4 +1,4 @@
|
||||
package io.reflectoring.buckpal.domain;
|
||||
package io.reflectoring.buckpal.account.domain;
|
||||
|
||||
import java.math.BigInteger;
|
||||
|
||||
@@ -9,13 +9,13 @@ class DependencyRuleTests {
|
||||
|
||||
@Test
|
||||
void validateRegistrationContextArchitecture() {
|
||||
HexagonalArchitecture.boundedContext("io.reflectoring.buckpal")
|
||||
HexagonalArchitecture.boundedContext("io.reflectoring.buckpal.account")
|
||||
|
||||
.withDomainLayer("domain")
|
||||
|
||||
.withAdaptersLayer("adapter")
|
||||
.incoming("web")
|
||||
.outgoing("persistence")
|
||||
.incoming("in.web")
|
||||
.outgoing("out.persistence")
|
||||
.and()
|
||||
|
||||
.withApplicationLayer("application")
|
||||
@@ -2,10 +2,10 @@ package io.reflectoring.buckpal;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
import io.reflectoring.buckpal.application.port.out.LoadAccountPort;
|
||||
import io.reflectoring.buckpal.domain.Account;
|
||||
import io.reflectoring.buckpal.domain.Account.AccountId;
|
||||
import io.reflectoring.buckpal.domain.Money;
|
||||
import io.reflectoring.buckpal.account.application.port.out.LoadAccountPort;
|
||||
import io.reflectoring.buckpal.account.domain.Account;
|
||||
import io.reflectoring.buckpal.account.domain.Account.AccountId;
|
||||
import io.reflectoring.buckpal.account.domain.Money;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.test.context.SpringBootTest;
|
||||
@@ -1,9 +1,9 @@
|
||||
package io.reflectoring.buckpal.adapter.web;
|
||||
package io.reflectoring.buckpal.account.adapter.in.web;
|
||||
|
||||
import io.reflectoring.buckpal.application.port.in.SendMoneyUseCase;
|
||||
import io.reflectoring.buckpal.application.port.in.SendMoneyUseCase.SendMoneyCommand;
|
||||
import io.reflectoring.buckpal.domain.Account.AccountId;
|
||||
import io.reflectoring.buckpal.domain.Money;
|
||||
import io.reflectoring.buckpal.account.application.port.in.SendMoneyUseCase;
|
||||
import io.reflectoring.buckpal.account.application.port.in.SendMoneyCommand;
|
||||
import io.reflectoring.buckpal.account.domain.Account.AccountId;
|
||||
import io.reflectoring.buckpal.account.domain.Money;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
|
||||
@@ -1,11 +1,11 @@
|
||||
package io.reflectoring.buckpal.adapter.persistence;
|
||||
package io.reflectoring.buckpal.account.adapter.out.persistence;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
import io.reflectoring.buckpal.domain.Account;
|
||||
import io.reflectoring.buckpal.domain.Account.AccountId;
|
||||
import io.reflectoring.buckpal.domain.ActivityWindow;
|
||||
import io.reflectoring.buckpal.domain.Money;
|
||||
import io.reflectoring.buckpal.account.domain.Account;
|
||||
import io.reflectoring.buckpal.account.domain.Account.AccountId;
|
||||
import io.reflectoring.buckpal.account.domain.ActivityWindow;
|
||||
import io.reflectoring.buckpal.account.domain.Money;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest;
|
||||
@@ -13,7 +13,7 @@ import org.springframework.context.annotation.Import;
|
||||
import org.springframework.test.context.jdbc.Sql;
|
||||
import static io.reflectoring.buckpal.common.AccountTestData.*;
|
||||
import static io.reflectoring.buckpal.common.ActivityTestData.*;
|
||||
import static org.assertj.core.api.Assertions.*;
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
@DataJpaTest
|
||||
@Import({AccountPersistenceAdapter.class, AccountMapper.class})
|
||||
@@ -1,6 +1,6 @@
|
||||
package io.reflectoring.buckpal.domain;
|
||||
package io.reflectoring.buckpal.account.domain;
|
||||
|
||||
import io.reflectoring.buckpal.domain.Account.AccountId;
|
||||
import io.reflectoring.buckpal.account.domain.Account.AccountId;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import static io.reflectoring.buckpal.common.AccountTestData.*;
|
||||
import static io.reflectoring.buckpal.common.ActivityTestData.*;
|
||||
@@ -1,8 +1,8 @@
|
||||
package io.reflectoring.buckpal.domain;
|
||||
package io.reflectoring.buckpal.account.domain;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
import io.reflectoring.buckpal.domain.Account.AccountId;
|
||||
import io.reflectoring.buckpal.account.domain.Account.AccountId;
|
||||
import org.assertj.core.api.Assertions;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import static io.reflectoring.buckpal.common.ActivityTestData.*;
|
||||
@@ -1,12 +1,12 @@
|
||||
package io.reflectoring.buckpal.application.service;
|
||||
package io.reflectoring.buckpal.account.application.service;
|
||||
|
||||
import io.reflectoring.buckpal.application.port.in.SendMoneyUseCase.SendMoneyCommand;
|
||||
import io.reflectoring.buckpal.application.port.out.AccountLock;
|
||||
import io.reflectoring.buckpal.application.port.out.LoadAccountPort;
|
||||
import io.reflectoring.buckpal.application.port.out.UpdateAccountStatePort;
|
||||
import io.reflectoring.buckpal.domain.Account;
|
||||
import io.reflectoring.buckpal.domain.Account.AccountId;
|
||||
import io.reflectoring.buckpal.domain.Money;
|
||||
import io.reflectoring.buckpal.account.application.port.in.SendMoneyCommand;
|
||||
import io.reflectoring.buckpal.account.application.port.out.AccountLock;
|
||||
import io.reflectoring.buckpal.account.application.port.out.LoadAccountPort;
|
||||
import io.reflectoring.buckpal.account.application.port.out.UpdateAccountStatePort;
|
||||
import io.reflectoring.buckpal.account.domain.Account;
|
||||
import io.reflectoring.buckpal.account.domain.Account.AccountId;
|
||||
import io.reflectoring.buckpal.account.domain.Money;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.mockito.ArgumentCaptor;
|
||||
import org.mockito.Mockito;
|
||||
@@ -1,9 +1,9 @@
|
||||
package io.reflectoring.buckpal.common;
|
||||
|
||||
import io.reflectoring.buckpal.domain.Account;
|
||||
import io.reflectoring.buckpal.domain.Account.AccountId;
|
||||
import io.reflectoring.buckpal.domain.ActivityWindow;
|
||||
import io.reflectoring.buckpal.domain.Money;
|
||||
import io.reflectoring.buckpal.account.domain.Account;
|
||||
import io.reflectoring.buckpal.account.domain.Account.AccountId;
|
||||
import io.reflectoring.buckpal.account.domain.ActivityWindow;
|
||||
import io.reflectoring.buckpal.account.domain.Money;
|
||||
|
||||
public class AccountTestData {
|
||||
|
||||
@@ -2,10 +2,10 @@ package io.reflectoring.buckpal.common;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
import io.reflectoring.buckpal.domain.Account.AccountId;
|
||||
import io.reflectoring.buckpal.domain.Activity;
|
||||
import io.reflectoring.buckpal.domain.Activity.ActivityId;
|
||||
import io.reflectoring.buckpal.domain.Money;
|
||||
import io.reflectoring.buckpal.account.domain.Account.AccountId;
|
||||
import io.reflectoring.buckpal.account.domain.Activity;
|
||||
import io.reflectoring.buckpal.account.domain.Activity.ActivityId;
|
||||
import io.reflectoring.buckpal.account.domain.Money;
|
||||
|
||||
public class ActivityTestData {
|
||||
|
||||
Reference in New Issue
Block a user