Repository: KimByeongKou/fastcampus-pay
Branch: main
Commit: e61875092c50
Files: 173
Total size: 138.2 KB
Directory structure:
gitextract_owzcci7l/
├── .gitignore
├── .idea/
│ ├── .gitignore
│ ├── compiler.xml
│ ├── gradle.xml
│ ├── jarRepositories.xml
│ ├── misc.xml
│ ├── modules/
│ │ ├── common/
│ │ │ └── fastcampus-pay.common.main.iml
│ │ └── settlement-service/
│ │ └── fastcampus-pay.settlement-service.main.iml
│ ├── modules.xml
│ ├── uiDesigner.xml
│ └── vcs.xml
├── Dockerfile
├── README.md
├── banking-service/
│ ├── build.gradle
│ └── src/
│ └── main/
│ └── java/
│ └── com/
│ └── fastcampuspay/
│ └── banking/
│ ├── BankingApplication.java
│ ├── BankingConfiguration.java
│ ├── BankingConfigurationProperties.java
│ ├── SwaggerConfig.java
│ ├── adapter/
│ │ ├── in/
│ │ │ └── web/
│ │ │ ├── FindBankingAccountInfoController.java
│ │ │ ├── RegisterBankingAccountInfoController.java
│ │ │ ├── RegisterBankingAccountInfoRequest.java
│ │ │ └── RequestTransferMoneyController.java
│ │ └── out/
│ │ └── persistence/
│ │ ├── BankingAccountPersistenceAdapter.java
│ │ ├── BankingAccountRegisterInfoJpaEntity.java
│ │ ├── BankingAccountRegisterInfoMapper.java
│ │ └── SpringDataBankingAccountRegisterInfoRepository.java
│ ├── application/
│ │ ├── port/
│ │ │ ├── in/
│ │ │ │ ├── RegisterBankingAccountCommand.java
│ │ │ │ └── RegisterBankingAccountUseCase.java
│ │ │ └── out/
│ │ │ └── RegisterBankingAccountPort.java
│ │ └── service/
│ │ └── RegisterBankingAccount.java
│ └── domain/
│ ├── BankingAccountRegisterInfo.java
│ └── TransferMoney.java
├── build.gradle
├── common/
│ ├── build.gradle
│ └── src/
│ └── main/
│ └── java/
│ └── com/
│ └── fastcampuspay/
│ └── common/
│ ├── PersistenceAdapter.java
│ ├── SelfValidating.java
│ ├── UseCase.java
│ ├── WebAdapter.java
│ └── events/
│ └── RegisterAccountEvent.java
├── db/
│ ├── conf.d/
│ │ └── my.cnf
│ └── initdb.d/
│ ├── create_table.sql
│ └── load_data.sql
├── docker-compose.yaml
├── gradle/
│ └── wrapper/
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradle.properties
├── gradlew
├── gradlew.bat
├── membership-service/
│ ├── build.gradle
│ └── src/
│ └── main/
│ └── java/
│ └── com/
│ └── fastcampuspay/
│ └── membership/
│ ├── MembershipApplication.java
│ ├── MembershipConfiguration.java
│ ├── MembershipConfigurationProperties.java
│ ├── SwaggerConfig.java
│ ├── adapter/
│ │ ├── in/
│ │ │ └── web/
│ │ │ ├── FindMembershipController.java
│ │ │ ├── FindMembershipRequest.java
│ │ │ ├── LoginAuthMembershipController.java
│ │ │ ├── RegisterMembershipController.java
│ │ │ ├── RegisterMembershipRequest.java
│ │ │ ├── UpdateMembershipController.java
│ │ │ └── UpdateMembershipRequest.java
│ │ └── out/
│ │ └── persistence/
│ │ ├── MembershipJpaEntity.java
│ │ ├── MembershipMapper.java
│ │ ├── MembershipPersistenceAdapter.java
│ │ └── SpringDataMembershipRepository.java
│ ├── application/
│ │ ├── port/
│ │ │ ├── in/
│ │ │ │ ├── FindMembershipCommand.java
│ │ │ │ ├── FindMembershipUseCase.java
│ │ │ │ ├── RegisterMembershipCommand.java
│ │ │ │ ├── RegisterMembershipUseCase.java
│ │ │ │ ├── UpdateMembershipCommand.java
│ │ │ │ ├── UpdateMembershipEventCommand.java
│ │ │ │ ├── UpdateMembershipUseCase.java
│ │ │ │ └── aggregate/
│ │ │ │ └── MembershipAggregate.java
│ │ │ └── out/
│ │ │ ├── FindMembershipPort.java
│ │ │ ├── RegisterMembershipPort.java
│ │ │ ├── UpdateMembershipPort.java
│ │ │ └── query/
│ │ │ ├── FindMembershipQuery.java
│ │ │ └── MembershipQueryHandler.java
│ │ ├── saga/
│ │ │ ├── MembershipCreateEvent.java
│ │ │ ├── MembershipUpdateEvent.java
│ │ │ ├── Order.java
│ │ │ ├── OrderCancelledEvent.java
│ │ │ ├── OrderConfirmedEvent.java
│ │ │ ├── OrderCreatedEvent.java
│ │ │ ├── OrderPlacedEvent.java
│ │ │ ├── OrderSaga.java
│ │ │ ├── Payment.java
│ │ │ ├── PaymentCancelledEvent.java
│ │ │ ├── PaymentCompletedEvent.java
│ │ │ └── PaymentRequestedCommand.java
│ │ └── service/
│ │ ├── FindMembership.java
│ │ ├── RegisterMembership.java
│ │ └── UpdateMembership.java
│ └── domain/
│ └── Membership.java
├── money-local-service/
│ ├── build.gradle
│ └── src/
│ └── main/
│ └── java/
│ └── com/
│ └── fastcampuspay/
│ └── moneylocal/
│ ├── MoneyLocalApplication.java
│ ├── MoneyLocalConfiguration.java
│ ├── MoneyLocalConfigurationProperties.java
│ ├── SwaggerConfig.java
│ ├── adapter/
│ │ ├── in/
│ │ │ └── web/
│ │ │ └── CalculateLocalMoneyController.java
│ │ └── out/
│ │ └── persistence/
│ │ ├── LocalMoneyJpaEntity.java
│ │ ├── LocalMoneyMapper.java
│ │ ├── LocalMoneyPersistenceAdapter.java
│ │ └── SpringDataLocalMoneyRepository.java
│ ├── application/
│ │ ├── port/
│ │ │ ├── in/
│ │ │ │ ├── RechargeMoneyCommand.java
│ │ │ │ └── RechargeMoneyUseCase.java
│ │ │ └── out/
│ │ │ └── RechargeMoneyPort.java
│ │ └── service/
│ │ └── RechargeMoney.java
│ └── domain/
│ └── MemberMoney.java
├── money-service/
│ ├── build.gradle
│ └── src/
│ └── main/
│ └── java/
│ └── com/
│ └── fastcampuspay/
│ └── money/
│ ├── MoneyApplication.java
│ ├── MoneyConfiguration.java
│ ├── MoneyConfigurationProperties.java
│ ├── SwaggerConfig.java
│ ├── adapter/
│ │ ├── in/
│ │ │ └── web/
│ │ │ ├── FindMoneyController.java
│ │ │ ├── RechargeMoneyController.java
│ │ │ └── RequestTransferMoneyController.java
│ │ └── out/
│ │ └── persistence/
│ │ ├── RechargeMoneyJpaEntity.java
│ │ ├── RechargeMoneyMapper.java
│ │ ├── RechargeMoneyPersistenceAdapter.java
│ │ └── SpringDataRechargeMoneyRepository.java
│ ├── application/
│ │ ├── port/
│ │ │ ├── in/
│ │ │ │ ├── RechargeMoneyCommand.java
│ │ │ │ └── RechargeMoneyUseCase.java
│ │ │ └── out/
│ │ │ └── RechargeMoneyPort.java
│ │ └── service/
│ │ └── RechargeMoney.java
│ └── domain/
│ └── MemberMoney.java
├── payment-service/
│ ├── build.gradle
│ └── src/
│ └── main/
│ └── java/
│ └── com/
│ └── fastcampuspay/
│ └── payment/
│ ├── PaymentApplication.java
│ ├── PaymentConfiguration.java
│ ├── PaymentConfigurationProperties.java
│ ├── SwaggerConfig.java
│ ├── adapter/
│ │ ├── in/
│ │ │ └── web/
│ │ │ ├── FindPaymentController.java
│ │ │ └── RequestTransferMoneyController.java
│ │ └── out/
│ │ └── persistence/
│ │ ├── PaymentJpaEntity.java
│ │ ├── PaymentMapper.java
│ │ ├── RechargeMoneyPersistenceAdapter.java
│ │ └── SpringDataPaymentRepository.java
│ ├── application/
│ │ ├── port/
│ │ │ ├── in/
│ │ │ │ ├── RechargeMoneyCommand.java
│ │ │ │ └── RechargeMoneyUseCase.java
│ │ │ └── out/
│ │ │ └── RechargeMoneyPort.java
│ │ └── service/
│ │ └── RechargeMoney.java
│ └── domain/
│ └── MemberMoney.java
├── remittance-service/
│ ├── build.gradle
│ └── src/
│ └── main/
│ └── java/
│ └── com/
│ └── fastcampuspay/
│ └── remittance/
│ ├── RemittanceApplication.java
│ ├── RemittanceConfiguration.java
│ ├── RemittanceConfigurationProperties.java
│ ├── SwaggerConfig.java
│ ├── adapter/
│ │ ├── in/
│ │ │ └── web/
│ │ │ ├── FindRemittanceController.java
│ │ │ └── RequestRemittanceMoneyController.java
│ │ └── out/
│ │ └── persistence/
│ │ ├── RemittanceMoneyJpaEntity.java
│ │ ├── RemittanceMoneyMapper.java
│ │ ├── RemittanceMoneyPersistenceAdapter.java
│ │ └── SpringDataRemittanceMoneyRepository.java
│ ├── application/
│ │ ├── port/
│ │ │ ├── in/
│ │ │ │ ├── RemittanceMoneyCommand.java
│ │ │ │ └── RemittanceMoneyUseCase.java
│ │ │ └── out/
│ │ │ └── RemittanceMoneyPort.java
│ │ └── service/
│ │ └── RemittanceMoney.java
│ └── domain/
│ └── RemittanceMoney.java
├── settings.gradle
└── settlement-service/
├── build.gradle
└── src/
└── main/
└── java/
└── com/
└── fastcampuspay/
└── settlement/
├── SettlementApplication.java
├── SettlementConfiguration.java
├── SettlementConfigurationProperties.java
├── SwaggerConfig.java
├── adapter/
│ ├── in/
│ │ └── web/
│ │ └── SettlementStartController.java
│ └── out/
│ └── persistence/
│ ├── RechargeMoneyMapper.java
│ ├── RechargeMoneyPersistenceAdapter.java
│ ├── SettlementJpaEntity.java
│ └── SpringDataSettlementRepository.java
├── application/
│ ├── port/
│ │ ├── in/
│ │ │ ├── RechargeMoneyCommand.java
│ │ │ └── RechargeMoneyUseCase.java
│ │ └── out/
│ │ └── RechargeMoneyPort.java
│ └── service/
│ └── RechargeMoney.java
└── domain/
└── MemberMoney.java
================================================
FILE CONTENTS
================================================
================================================
FILE: .gitignore
================================================
/*/build/
axon-server-se/*/*
db/data/*
================================================
FILE: .idea/.gitignore
================================================
# 디폴트 무시된 파일
/shelf/
/workspace.xml
# 에디터 기반 HTTP 클라이언트 요청
/httpRequests/
# Datasource local storage ignored files
/dataSources/
/dataSources.local.xml
# Zeppelin ignored files
/ZeppelinRemoteNotebooks/
================================================
FILE: .idea/compiler.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="CompilerConfiguration">
<annotationProcessing>
<profile name="Gradle Imported" enabled="true">
<outputRelativeToContentRoot value="true" />
<processorPath useClasspath="false">
<entry name="$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.projectlombok/lombok/1.18.20/18bcea7d5df4d49227b4a0743a536208ce4825bb/lombok-1.18.20.jar" />
<entry name="$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.springframework.boot/spring-boot-configuration-processor/2.5.2/69da26fe0e896d89feb388c425947c34416fde2e/spring-boot-configuration-processor-2.5.2.jar" />
</processorPath>
<module name="fastcampus-pay.settlement-service.main" />
<module name="fastcampus-pay.membership-service.main" />
<module name="fastcampus-pay.common.main" />
<module name="fastcampus-pay.money-local-service.main" />
<module name="fastcampus-pay.money-service.main" />
<module name="fastcampus-pay.payment-service.main" />
<module name="fastcampus-pay.banking-service.main" />
<module name="fastcampus-pay.remittance-service.main" />
</profile>
</annotationProcessing>
<bytecodeTargetLevel target="11" />
</component>
</project>
================================================
FILE: .idea/gradle.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="GradleMigrationSettings" migrationVersion="1" />
<component name="GradleSettings">
<option name="linkedExternalProjectsSettings">
<GradleProjectSettings>
<option name="distributionType" value="DEFAULT_WRAPPED" />
<option name="externalProjectPath" value="$PROJECT_DIR$" />
<option name="gradleJvm" value="#JAVA_HOME" />
<option name="modules">
<set>
<option value="$PROJECT_DIR$" />
<option value="$PROJECT_DIR$/banking-service" />
<option value="$PROJECT_DIR$/common" />
<option value="$PROJECT_DIR$/membership-service" />
<option value="$PROJECT_DIR$/money-local-service" />
<option value="$PROJECT_DIR$/money-service" />
<option value="$PROJECT_DIR$/payment-service" />
<option value="$PROJECT_DIR$/remittance-service" />
<option value="$PROJECT_DIR$/settlement-service" />
</set>
</option>
</GradleProjectSettings>
</option>
</component>
</project>
================================================
FILE: .idea/jarRepositories.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="RemoteRepositoriesConfiguration">
<remote-repository>
<option name="id" value="central" />
<option name="name" value="Maven Central repository" />
<option name="url" value="https://repo1.maven.org/maven2" />
</remote-repository>
<remote-repository>
<option name="id" value="jboss.community" />
<option name="name" value="JBoss Community repository" />
<option name="url" value="https://repository.jboss.org/nexus/content/repositories/public/" />
</remote-repository>
<remote-repository>
<option name="id" value="MavenRepo" />
<option name="name" value="MavenRepo" />
<option name="url" value="https://repo.maven.apache.org/maven2/" />
</remote-repository>
</component>
</project>
================================================
FILE: .idea/misc.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ExternalStorageConfigurationManager" enabled="true" />
<component name="FrameworkDetectionExcludesConfiguration">
<file type="web" url="file://$PROJECT_DIR$" />
</component>
<component name="ProjectRootManager" version="2" languageLevel="JDK_11" default="true" project-jdk-name="11" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/out" />
</component>
</project>
================================================
FILE: .idea/modules/common/fastcampus-pay.common.main.iml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<module version="4">
<component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$/../../../common/build/generated/sources/annotationProcessor/java/main">
<sourceFolder url="file://$MODULE_DIR$/../../../common/build/generated/sources/annotationProcessor/java/main" isTestSource="false" generated="true" />
</content>
</component>
</module>
================================================
FILE: .idea/modules/settlement-service/fastcampus-pay.settlement-service.main.iml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<module version="4">
<component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$/../../../settlement-service/build/generated/sources/annotationProcessor/java/main">
<sourceFolder url="file://$MODULE_DIR$/../../../settlement-service/build/generated/sources/annotationProcessor/java/main" isTestSource="false" generated="true" />
</content>
</component>
</module>
================================================
FILE: .idea/modules.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/modules/banking-service/fastcampus-pay.banking-service.main.iml" filepath="$PROJECT_DIR$/.idea/modules/banking-service/fastcampus-pay.banking-service.main.iml" />
<module fileurl="file://$PROJECT_DIR$/.idea/modules/common/fastcampus-pay.common.main.iml" filepath="$PROJECT_DIR$/.idea/modules/common/fastcampus-pay.common.main.iml" />
<module fileurl="file://$PROJECT_DIR$/.idea/modules/membership-service/fastcampus-pay.membership-service.main.iml" filepath="$PROJECT_DIR$/.idea/modules/membership-service/fastcampus-pay.membership-service.main.iml" />
<module fileurl="file://$PROJECT_DIR$/.idea/modules/money-local-service/fastcampus-pay.money-local-service.main.iml" filepath="$PROJECT_DIR$/.idea/modules/money-local-service/fastcampus-pay.money-local-service.main.iml" />
<module fileurl="file://$PROJECT_DIR$/.idea/modules/money-service/fastcampus-pay.money-service.main.iml" filepath="$PROJECT_DIR$/.idea/modules/money-service/fastcampus-pay.money-service.main.iml" />
<module fileurl="file://$PROJECT_DIR$/.idea/modules/payment-service/fastcampus-pay.payment-service.main.iml" filepath="$PROJECT_DIR$/.idea/modules/payment-service/fastcampus-pay.payment-service.main.iml" />
<module fileurl="file://$PROJECT_DIR$/.idea/modules/remittance-service/fastcampus-pay.remittance-service.main.iml" filepath="$PROJECT_DIR$/.idea/modules/remittance-service/fastcampus-pay.remittance-service.main.iml" />
<module fileurl="file://$PROJECT_DIR$/.idea/modules/settlement-service/fastcampus-pay.settlement-service.main.iml" filepath="$PROJECT_DIR$/.idea/modules/settlement-service/fastcampus-pay.settlement-service.main.iml" />
</modules>
</component>
</project>
================================================
FILE: .idea/uiDesigner.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="Palette2">
<group name="Swing">
<item class="com.intellij.uiDesigner.HSpacer" tooltip-text="Horizontal Spacer" icon="/com/intellij/uiDesigner/icons/hspacer.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="1" hsize-policy="6" anchor="0" fill="1" />
</item>
<item class="com.intellij.uiDesigner.VSpacer" tooltip-text="Vertical Spacer" icon="/com/intellij/uiDesigner/icons/vspacer.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="1" anchor="0" fill="2" />
</item>
<item class="javax.swing.JPanel" icon="/com/intellij/uiDesigner/icons/panel.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3" />
</item>
<item class="javax.swing.JScrollPane" icon="/com/intellij/uiDesigner/icons/scrollPane.svg" removable="false" auto-create-binding="false" can-attach-label="true">
<default-constraints vsize-policy="7" hsize-policy="7" anchor="0" fill="3" />
</item>
<item class="javax.swing.JButton" icon="/com/intellij/uiDesigner/icons/button.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="3" anchor="0" fill="1" />
<initial-values>
<property name="text" value="Button" />
</initial-values>
</item>
<item class="javax.swing.JRadioButton" icon="/com/intellij/uiDesigner/icons/radioButton.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
<initial-values>
<property name="text" value="RadioButton" />
</initial-values>
</item>
<item class="javax.swing.JCheckBox" icon="/com/intellij/uiDesigner/icons/checkBox.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
<initial-values>
<property name="text" value="CheckBox" />
</initial-values>
</item>
<item class="javax.swing.JLabel" icon="/com/intellij/uiDesigner/icons/label.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="0" anchor="8" fill="0" />
<initial-values>
<property name="text" value="Label" />
</initial-values>
</item>
<item class="javax.swing.JTextField" icon="/com/intellij/uiDesigner/icons/textField.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
<preferred-size width="150" height="-1" />
</default-constraints>
</item>
<item class="javax.swing.JPasswordField" icon="/com/intellij/uiDesigner/icons/passwordField.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
<preferred-size width="150" height="-1" />
</default-constraints>
</item>
<item class="javax.swing.JFormattedTextField" icon="/com/intellij/uiDesigner/icons/formattedTextField.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
<preferred-size width="150" height="-1" />
</default-constraints>
</item>
<item class="javax.swing.JTextArea" icon="/com/intellij/uiDesigner/icons/textArea.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JTextPane" icon="/com/intellij/uiDesigner/icons/textPane.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JEditorPane" icon="/com/intellij/uiDesigner/icons/editorPane.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JComboBox" icon="/com/intellij/uiDesigner/icons/comboBox.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="2" anchor="8" fill="1" />
</item>
<item class="javax.swing.JTable" icon="/com/intellij/uiDesigner/icons/table.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JList" icon="/com/intellij/uiDesigner/icons/list.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="2" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JTree" icon="/com/intellij/uiDesigner/icons/tree.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JTabbedPane" icon="/com/intellij/uiDesigner/icons/tabbedPane.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
<preferred-size width="200" height="200" />
</default-constraints>
</item>
<item class="javax.swing.JSplitPane" icon="/com/intellij/uiDesigner/icons/splitPane.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
<preferred-size width="200" height="200" />
</default-constraints>
</item>
<item class="javax.swing.JSpinner" icon="/com/intellij/uiDesigner/icons/spinner.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
</item>
<item class="javax.swing.JSlider" icon="/com/intellij/uiDesigner/icons/slider.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
</item>
<item class="javax.swing.JSeparator" icon="/com/intellij/uiDesigner/icons/separator.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3" />
</item>
<item class="javax.swing.JProgressBar" icon="/com/intellij/uiDesigner/icons/progressbar.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1" />
</item>
<item class="javax.swing.JToolBar" icon="/com/intellij/uiDesigner/icons/toolbar.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1">
<preferred-size width="-1" height="20" />
</default-constraints>
</item>
<item class="javax.swing.JToolBar$Separator" icon="/com/intellij/uiDesigner/icons/toolbarSeparator.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="0" anchor="0" fill="1" />
</item>
<item class="javax.swing.JScrollBar" icon="/com/intellij/uiDesigner/icons/scrollbar.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="0" anchor="0" fill="2" />
</item>
</group>
</component>
</project>
================================================
FILE: .idea/vcs.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="" vcs="Git" />
</component>
</project>
================================================
FILE: Dockerfile
================================================
FROM openjdk:11-slim-stretch
EXPOSE 8080
ARG JAR_FILE
COPY ${JAR_FILE} app.jar
#"-Djava.security.egd=file:/dev/./urandom",
#"-Dspring.profiles.active=prod",
ENTRYPOINT ["java", "-jar", "/app.jar"]
================================================
FILE: README.md
================================================
# FastCampus-Pay Project Overview

일반적인 간편결제 도메인을 주제로, MSA 를 중점적으로 학습하기 위한 교육용 프로젝트입니다.
회원(Membership), 뱅킹(Banking), 머니(Money), 송금(Remittance), 결제(Payment), 정산(Settlement) 6개의 서비스로 구성되어 있으며, 각각의 독립적인 프로젝트로 구성되어 있어요.
각 서비스에서는 기본적인 기능을 먼저 Hexagonal Architecture 로 구현하고, 일부 기능들에 EDA, CQRS, Event Sourcing, Saga Pattern 등을 적용하며 진행해 보아요.
기본적으로 Springboot 와 Java 11 을 기준으로 프로젝트를 구성하고, EDA 구현을 위해서 Axon Framework v4.6.0 을 사용해요.
로깅 파이프라인은 따로 구성하진 않았지만, kafka 의 실습을 목적으로 하는 간단한 로깅 파이프라인을 구성할 예정이에요.
실제 간편 결제 도메인 시스템과는 복잡성 측면에서 차이가 있지만, 간단한 버전을 기준으로 MSA 를 구성하고, 각 서비스의 기능을 구현하며, EDA 를 적용해 보는 것을 목표로 진행해요.
아래 내용들은 수업 진행 방향 및 실습 진행 속도에 따라 유동적일 수 있어요.
## Overall Architecture for Monolithic System

## Overall Architecture for MSA

## Membership Service (Part. 2, 3, 6, 7)
고객의 회원 가입, 회원 정보 변경, 회원 정보 조회 등의 기능을 제공하는 서비스입니다.
- Part 2.
- Hexagonal Architecture 를 활용하여 기본적인 Membership Service 를 구현 (회원 가입)
- Part 3.
- gradle build tool 을 이용하여 Docker build 연동. 추가적인 Membership Service 를 구현 (회원 정보 변경)
- Part 6.
- Axon Framework 를 이용하여 Event Driven Architecture 로 리팩토링.
- 고객 정보가 변경될 경우, 이벤트를 발행하고, 이를 구독하는 Money 서비스 에서 고객의 머니 정보를 변경하는 CQRS 패턴 구현 (with/ AWS DynamoDB)
- Part 7.
- 보안을 위해 JWT 를 이용한 간단한 API 인증 구현
### API Lists
- registerMembership
- updateMembershipByMemberId (CQRS Trigger)
- findMembershipByMemberId
- loginByMembershipIdPw
- authByToken
#### Using Stack
- Spring Boot, Java 11, Spring Data JPA, H2, Mysql, Lombok, Gradle, JWT, Axon Framework, Docker, Docker Compose, AWS DynamoDB
### Sequence Diagram Example (회원 가입, JWT 토큰 인증 프로세스)

## Banking Service (Part. 3)
고객의 계좌 정보 등록, 등록된 계좌 정보 조회, 입/출금, 거래내역 조회 등의 기능을 제공하는 서비스입니다.
- Part 3.
- Hexagonal Architecture 를 활용하여 기본적인 Banking Service 를 구현 (가상의 법인 계좌 및 고객 계좌 정보 등록, 은행으로 입/출금 요청하기)
### API Lists
- registerBankingAccount
- requestTransferMoneyToBank
- findRegisteredBankingAccountByMemberId
- findTransferMoneyInfoByMemberId
- findTransferMoneyInfoByBankingId
#### Using Stack
- Spring Boot, Java 11, Spring Data JPA, H2, Mysql, Lombok, Gradle, JWT, Axon Framework, Docker, Docker Compose
### Sequence Diagram Example (입/출금 요청 프로세스)

## Money Service (Part. 3, 4, 5, 6)
고객의 충전 잔액(머니) CRUD, 충전 내역 조회 등의 기능을 제공하는 서비스입니다.
- Part 3.
- Hexagonal Architecture 를 활용하여 Membership 서비스 및 Banking 서비스를 이용하는 충전 잔액(머니)을 충전하는 기능 구현
- 충전 내역 조회 기능 구현
- Part 4.
- kafka 을 이용한 간단 로깅 파이프라인 적용 (kafka 를 이용한 로깅 파이프라인은 실습을 위한 간단한 구현이며, 실제로는 ELK/EFK 등을 이용한 로깅 파이프라인을 구성하는 것을 추천합니다.)
- 충전 잔액(머니) 충전 프로세스를 Async 방식으로 구현하고, Polling 을 통한 결과 조회 방식 구현
- Part 5.
- 충전 잔액(머니)을 충전하는 기능은 Axon Framework 를 이용하여 Saga Pattern 적용 및 리팩토링
- Part 6.
- Axon Framework 를 이용하여 Event Driven Architecture 로 리팩토링.
- Membership 서비스로부터 고객 정보 변경 이벤트를 수신하고, 이를 기반으로 CQRS 패턴을 구현 (with/ AWS DynamoDB)
- "지역별 고객들의 잔액 총합 View" 을 얻어오려면?
### API Lists
- rechargeMoneyByMemberId
- findMoneyInfoByRechargeMoneyId
- findMoneyHistoryByMemberId
- transferMoneyBetweenMembers
### MoneyLocal Service (for CQRS)
- calculateMoneySumByLocal
- MembershipUpdate (EventHandler)
#### Using Stack
- Spring Boot, Java 11, Spring Data JPA, H2, Mysql, Lombok, Gradle, JWT, Axon Framework, Docker, Docker Compose, Kafka, Kafka-ui, Zookeeper, AWS DynamoDB
### Sequence Diagram Example (충전 잔액(머니) 충전 프로세스)

## Remittance Service (Part. 4, 5, 6)
고객 간 송금 기능 및 송금 내역 정보 조회 등의 기능을 제공하는 서비스입니다.
- Part 4.
- Hexagonal Architecture 를 활용하여 Membership 서비스, Banking 서비스, Money 서비스를 이용하는 고객 간 혹은 계좌 송금 기능 구현
- Part 5.
- 고객 간 송금하는 기능은 기능은 Axon Framework 를 이용하여 Saga Pattern 적용 및 리팩토링
- Part 6.
- 특정 송금 건을 기준으로, 머니의 충전 내역을 조회해보는 기능 구현을 위해 API Aggregation Pattern 적용
### API Lists
- requestRemittance
- findRemittanceInfoByRemittanceId
- findRemittanceHistoryByMemberId
- findMoneyTransferringByRemittanceId (API Aggregation, Banking + Money)
#### Using Stack
- Spring Boot, Java 11, Spring Data JPA, H2, Mysql, Lombok, Gradle, JWT, Axon Framework, Docker, Docker Compose, AWS DynamoDB
### Sequence Diagram Example (송금 프로세스)

## Payment Service (Part. 5)
가맹점에서 Fastcampus Pay 를 이용한 간편 결제 및 결제 내역 조회 등의 기능을 제공하는 서비스입니다.
- Part 5.
- Hexagonal Architecture 를 활용하여 Membership 서비스, Money 서비스를 이용하는 가맹점에서의 결제 기능 구현
- Membership Service 의 가맹점주 기능 확장
### API Lists
- requestPaymentAtMerchant
- findPaymentByPaymentId
- listPaymentsByPeriod
#### Using Stack
- Spring Boot, Java 11, Spring Data JPA, Mysql, Lombok, Gradle, Axon Framework, Docker, Docker Compose
### Sequence Diagram Example (결제 프로세스)

## Settlement Service (Part. 6)
완료된 결제 내역을 기준으로 가맹점에 정산된 금액을 입금하고, 수수료 수취를 위한 기능을 제공하는 서비스입니다.
- Part 6.
- Hexagonal Architecture 를 활용하여 Payment 서비스를 이용하는 기간별 정산 기능 구현.
- 수수료 수취 기능 구현, 가맹점주 계좌로 입금 기능 구현.
### API Lists
- startSettlementByPeriod
#### Using Stack
- Spring Boot, Java 11, Spring Data JPA, Mysql, Lombok, Gradle, JWT, Axon Framework, Docker, Docker Compose
### Sequence Diagram Example (정산 프로세스)

## Execution
```
./gradlew docker
docker-compose up -d
```
## Service Endpoint & Swagger UI
- Membership Service
- http://localhost:8081/membership/
- http://localhost:8081/swagger-ui.html
- Banking Service
- http://localhost:8082/banking/
- http://localhost:8082/swagger-ui.html
- Money Service
- http://localhost:8083/money/
- http://localhost:8083/swagger-ui.html
- Money Local Service (CQRS View Service)
- http://localhost:8084/money-local/
- http://localhost:8084/swagger-ui.html
- Remittance Service
- http://localhost:8085/remittance/
- http://localhost:8085/swagger-ui.html
- Payment Service
- http://localhost:8086/payment/
- http://localhost:8086/swagger-ui.html
- Settlement Service
- http://localhost:8087/settlement/
- http://localhost:8087/swagger-ui.html
- Mysql
- http://localhost:3306
- root password: rootpassword
- database: fastcampus_pay
- User/PW : mysqluser / mysqlpw
- Kafka UI
- http://localhost:8989
- Axon Server Dashboard
- http://localhost:8024
## Trouble Shooting
### 1. gradle build(docker build) 시, dockerPrepare 단계에서 error 가 발생하는 경우
```
./gradlew --stop
./gradlew docker
```
## Sample Screenshots





================================================
FILE: banking-service/build.gradle
================================================
plugins {
id 'com.palantir.docker' version '0.25.0'
}
ext{
axonVersion = "4.6.0"
}
group = 'com.fastcampuspay.banking'
version = '0.0.1-SNAPSHOT'
dependencies {
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 group: 'javax.persistence', name: 'javax.persistence-api', version: '2.2'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation group: 'org.axonframework', name: 'axon-configuration', version: "$axonVersion"
implementation group: 'org.axonframework', name: 'axon-spring-boot-starter', version: "$axonVersion"
implementation 'org.jetbrains:annotations:23.0.0'
implementation project(path: ':common')
// runtimeOnly 'com.h2database:h2'
runtimeOnly 'mysql:mysql-connector-java'
}
docker {
println(tasks.bootJar.outputs.files)
name rootProject.name+'-'+project.name + ":" + version
dockerfile file('../Dockerfile')
files tasks.bootJar.outputs.files
buildArgs(['JAR_FILE': tasks.bootJar.outputs.files.singleFile.name])
}
================================================
FILE: banking-service/src/main/java/com/fastcampuspay/banking/BankingApplication.java
================================================
package com.fastcampuspay.banking;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class BankingApplication {
public static void main(String[] args) {
SpringApplication.run(BankingApplication.class, args);
}
}
================================================
FILE: banking-service/src/main/java/com/fastcampuspay/banking/BankingConfiguration.java
================================================
package com.fastcampuspay.banking;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Configuration;
@Configuration
@EnableConfigurationProperties(BankingConfigurationProperties.class)
public class BankingConfiguration {
}
================================================
FILE: banking-service/src/main/java/com/fastcampuspay/banking/BankingConfigurationProperties.java
================================================
package com.fastcampuspay.banking;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
@Data
@ConfigurationProperties(prefix = "banking")
public class BankingConfigurationProperties {
private long transferThreshold = Long.MAX_VALUE;
}
================================================
FILE: banking-service/src/main/java/com/fastcampuspay/banking/SwaggerConfig.java
================================================
package com.fastcampuspay.banking;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
@Configuration
@EnableSwagger2
public class SwaggerConfig {
@Bean
public Docket restAPI() {
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.select()
.apis(RequestHandlerSelectors.basePackage("com.fastcampuspay.banking"))
.paths(PathSelectors.any())
.build();
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.build();
}
}
================================================
FILE: banking-service/src/main/java/com/fastcampuspay/banking/adapter/in/web/FindBankingAccountInfoController.java
================================================
package com.fastcampuspay.banking.adapter.in.web;
import com.fastcampuspay.common.WebAdapter;
import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@WebAdapter
@RestController
@RequiredArgsConstructor
class FindBankingAccountInfoController {
// private final RegisterBankingAccountUseCase registerBankingAccountUseCase;
@GetMapping(path = "/banking/registered-banking-account/")
ResponseEntity<Object> findRegisteredBankingAccountByMemberId(){
// RegisterMembershipRequest
// name, address, email
return ResponseEntity.status(HttpStatus.NOT_IMPLEMENTED).build();
}
@GetMapping(path = "/banking/transfer-money/")
ResponseEntity<Object> findTransferMoneyInfoByMemberId(){
// RegisterMembershipRequest
// name, address, email
return ResponseEntity.status(HttpStatus.NOT_IMPLEMENTED).build();
}
@GetMapping(path = "/banking/transfer-money-info/")
ResponseEntity<Object> findTransferMoneyInfoByBankingId(){
// RegisterMembershipRequest
// name, address, email
return ResponseEntity.status(HttpStatus.NOT_IMPLEMENTED).build();
}
}
================================================
FILE: banking-service/src/main/java/com/fastcampuspay/banking/adapter/in/web/RegisterBankingAccountInfoController.java
================================================
package com.fastcampuspay.banking.adapter.in.web;
import com.fastcampuspay.banking.application.port.in.RegisterBankingAccountCommand;
import com.fastcampuspay.banking.application.port.in.RegisterBankingAccountUseCase;
import com.fastcampuspay.common.WebAdapter;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
@WebAdapter
@RestController
@RequiredArgsConstructor
class RegisterBankingAccountInfoController {
private final RegisterBankingAccountUseCase registerBankingAccountUseCase;
@PostMapping(path = "/banking/account/")
void registerBankingAccount(@RequestBody RegisterBankingAccountInfoRequest request){
// RegisterMembershipRequest
// name, address, email
RegisterBankingAccountCommand command = RegisterBankingAccountCommand.builder()
.name(request.getName())
.address(request.getAddress())
.email(request.getEmail())
.build();
registerBankingAccountUseCase.registerBankingAccount(command);
}
}
================================================
FILE: banking-service/src/main/java/com/fastcampuspay/banking/adapter/in/web/RegisterBankingAccountInfoRequest.java
================================================
package com.fastcampuspay.banking.adapter.in.web;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
public class RegisterBankingAccountInfoRequest {
private String name;
private String address;
private String email;
}
================================================
FILE: banking-service/src/main/java/com/fastcampuspay/banking/adapter/in/web/RequestTransferMoneyController.java
================================================
package com.fastcampuspay.banking.adapter.in.web;
import com.fastcampuspay.banking.domain.BankingAccountRegisterInfo;
import com.fastcampuspay.common.WebAdapter;
import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
@WebAdapter
@RestController
@RequiredArgsConstructor
class RequestTransferMoneyController {
// private final RegisterBankingAccountUseCase registerBankingAccountUseCase;
@PostMapping(path = "/banking/transfer-money")
ResponseEntity<BankingAccountRegisterInfo> requestTransferMoneyToBank(){
// RegisterMembershipRequest
// name, address, email
return ResponseEntity.status(HttpStatus.NOT_IMPLEMENTED).build();
}
}
================================================
FILE: banking-service/src/main/java/com/fastcampuspay/banking/adapter/out/persistence/BankingAccountPersistenceAdapter.java
================================================
package com.fastcampuspay.banking.adapter.out.persistence;
import com.fastcampuspay.banking.application.port.out.RegisterBankingAccountPort;
import com.fastcampuspay.banking.domain.BankingAccountRegisterInfo;
import com.fastcampuspay.common.PersistenceAdapter;
import lombok.RequiredArgsConstructor;
@RequiredArgsConstructor
@PersistenceAdapter
class BankingAccountPersistenceAdapter implements RegisterBankingAccountPort {
private final SpringDataBankingAccountRegisterInfoRepository bankingAccountRepository;
private final BankingAccountRegisterInfoMapper bankingAccountRegisterInfoMapper;
private Long orZero(Long value){
return value == null ? 0L : value;
}
@Override
public void registerBankingAccount(BankingAccountRegisterInfo.BankingAccountRegisterInfoId bankingAccountRegisterInfoId) {
bankingAccountRepository.save(
new BankingAccountRegisterInfoJpaEntity(
Long.parseLong(bankingAccountRegisterInfoId.getBankingAccountRegisterInfoId())
)
);
}
}
================================================
FILE: banking-service/src/main/java/com/fastcampuspay/banking/adapter/out/persistence/BankingAccountRegisterInfoJpaEntity.java
================================================
package com.fastcampuspay.banking.adapter.out.persistence;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name = "banking_account_register_info")
@Data
@AllArgsConstructor
@NoArgsConstructor
class BankingAccountRegisterInfoJpaEntity {
@Id
@GeneratedValue
private Long registerInfoId;
// private String name;
//
// private String address;
//
// private String email;
//
// private boolean isValid;
}
================================================
FILE: banking-service/src/main/java/com/fastcampuspay/banking/adapter/out/persistence/BankingAccountRegisterInfoMapper.java
================================================
package com.fastcampuspay.banking.adapter.out.persistence;
import com.fastcampuspay.banking.domain.BankingAccountRegisterInfo;
import org.springframework.stereotype.Component;
@Component
class BankingAccountRegisterInfoMapper {
BankingAccountRegisterInfo mapToDomainEntity(
BankingAccountRegisterInfoJpaEntity bankingAccountRegisterInfoJpaEntity) {
System.out.println(bankingAccountRegisterInfoJpaEntity.toString());
return BankingAccountRegisterInfo.generateBankingAccountRegisterInfo(
new BankingAccountRegisterInfo.BankingAccountRegisterInfoId(bankingAccountRegisterInfoJpaEntity.getRegisterInfoId()+"")
);
}
}
================================================
FILE: banking-service/src/main/java/com/fastcampuspay/banking/adapter/out/persistence/SpringDataBankingAccountRegisterInfoRepository.java
================================================
package com.fastcampuspay.banking.adapter.out.persistence;
import org.springframework.data.jpa.repository.JpaRepository;
interface SpringDataBankingAccountRegisterInfoRepository extends JpaRepository<BankingAccountRegisterInfoJpaEntity, Long> {
}
================================================
FILE: banking-service/src/main/java/com/fastcampuspay/banking/application/port/in/RegisterBankingAccountCommand.java
================================================
package com.fastcampuspay.banking.application.port.in;
import com.fastcampuspay.common.SelfValidating;
import lombok.Builder;
import lombok.EqualsAndHashCode;
import lombok.Value;
import javax.validation.constraints.NotNull;
@Value
@Builder
@EqualsAndHashCode(callSuper = false)
public
class RegisterBankingAccountCommand extends SelfValidating<RegisterBankingAccountCommand> {
@NotNull
private final String name;
@NotNull
private final String email;
@NotNull
private final String address;
@NotNull
private final boolean isValid;
public RegisterBankingAccountCommand(String name, String email, String address, boolean isValid) {
this.name = name;
this.email = email;
this.address = address;
this.isValid = isValid;
}
}
================================================
FILE: banking-service/src/main/java/com/fastcampuspay/banking/application/port/in/RegisterBankingAccountUseCase.java
================================================
package com.fastcampuspay.banking.application.port.in;
public interface RegisterBankingAccountUseCase {
void registerBankingAccount(RegisterBankingAccountCommand command);
}
================================================
FILE: banking-service/src/main/java/com/fastcampuspay/banking/application/port/out/RegisterBankingAccountPort.java
================================================
package com.fastcampuspay.banking.application.port.out;
import com.fastcampuspay.banking.domain.BankingAccountRegisterInfo;
public interface RegisterBankingAccountPort {
void registerBankingAccount(
BankingAccountRegisterInfo.BankingAccountRegisterInfoId bankingAccountRegisterInfoId
);
}
================================================
FILE: banking-service/src/main/java/com/fastcampuspay/banking/application/service/RegisterBankingAccount.java
================================================
package com.fastcampuspay.banking.application.service;
import com.fastcampuspay.banking.application.port.in.RegisterBankingAccountCommand;
import com.fastcampuspay.banking.application.port.in.RegisterBankingAccountUseCase;
import com.fastcampuspay.banking.application.port.out.RegisterBankingAccountPort;
import com.fastcampuspay.banking.domain.BankingAccountRegisterInfo;
import com.fastcampuspay.common.UseCase;
import lombok.RequiredArgsConstructor;
import javax.transaction.Transactional;
@RequiredArgsConstructor
@UseCase
@Transactional
public class RegisterBankingAccount implements RegisterBankingAccountUseCase {
private final RegisterBankingAccountPort rport;
@Override
public void registerBankingAccount(RegisterBankingAccountCommand command) {
rport.registerBankingAccount(new BankingAccountRegisterInfo.BankingAccountRegisterInfoId(command.getEmail()));
}
}
================================================
FILE: banking-service/src/main/java/com/fastcampuspay/banking/domain/BankingAccountRegisterInfo.java
================================================
package com.fastcampuspay.banking.domain;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.Value;
@AllArgsConstructor(access = AccessLevel.PRIVATE)
public class BankingAccountRegisterInfo {
/**
* The baseline balance of the account. This was the balance of the account before the first
* activity in the activityWindow.
*/
@Getter private final String bankingAccountRegisterInfoId;
// @Getter private final String name;
// @Getter private final String email;
// @Getter private final String address;
// @Getter private final boolean isValid;
public static BankingAccountRegisterInfo generateBankingAccountRegisterInfo(
BankingAccountRegisterInfoId bankingAccountRegisterInfoId) {
return new BankingAccountRegisterInfo(
bankingAccountRegisterInfoId.bankingAccountRegisterInfoId
);
}
@Value
public static class BankingAccountRegisterInfoId {
public BankingAccountRegisterInfoId(String value) {
this.bankingAccountRegisterInfoId = value;
}
String bankingAccountRegisterInfoId ;
}
}
================================================
FILE: banking-service/src/main/java/com/fastcampuspay/banking/domain/TransferMoney.java
================================================
package com.fastcampuspay.banking.domain;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.Value;
@AllArgsConstructor(access = AccessLevel.PRIVATE)
public class TransferMoney {
/**
* The baseline balance of the account. This was the balance of the account before the first
* activity in the activityWindow.
*/
@Getter private final String transferMoneyId;
public static TransferMoney generateTransferMoney(
TransferMoneyId transferMoneyId) {
return new TransferMoney(
transferMoneyId.transferMoneyId
);
}
@Value
public static class TransferMoneyId {
public TransferMoneyId(String value) {
this.transferMoneyId = value;
}
String transferMoneyId ;
}
}
================================================
FILE: build.gradle
================================================
buildscript {
dependencies {
classpath "io.spring.gradle:dependency-management-plugin:0.5.1.RELEASE"
}
}
plugins {
id 'org.springframework.boot' version '2.5.2'
id 'java'
}
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 group: 'io.springfox', name: 'springfox-swagger-ui', version: '2.9.2'
implementation group: 'io.springfox', name: 'springfox-swagger2', version: '2.9.2'
testImplementation 'com.tngtech.archunit:archunit:1.0.1'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
test {
useJUnitPlatform()
maxHeapSize = "1024m" //원하는 만큼 변경
}
}
bootRun {
enabled = false
}
bootJar {
enabled = false
}
bootBuildImage{
enabled = false
}
================================================
FILE: common/build.gradle
================================================
group 'org.mypay.common'
repositories {
mavenCentral()
}
dependencies {
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.1'
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.1'
implementation 'org.springframework.boot:spring-boot-starter-validation'
}
test {
useJUnitPlatform()
}
================================================
FILE: common/src/main/java/com/fastcampuspay/common/PersistenceAdapter.java
================================================
package com.fastcampuspay.common;
import org.springframework.core.annotation.AliasFor;
import org.springframework.stereotype.Component;
import java.lang.annotation.*;
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface PersistenceAdapter {
/**
* The value may indicate a suggestion for a logical component name,
* to be turned into a Spring bean in case of an autodetected component.
* @return the suggested component name, if any (or empty String otherwise)
*/
@AliasFor(annotation = Component.class)
String value() default "";
}
================================================
FILE: common/src/main/java/com/fastcampuspay/common/SelfValidating.java
================================================
package com.fastcampuspay.common;
import javax.validation.*;
import java.util.Set;
public abstract class SelfValidating<T> {
private Validator validator;
public SelfValidating() {
ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
validator = factory.getValidator();
}
/**
* Evaluates all Bean Validations on the attributes of this
* instance.
*/
protected void validateSelf() {
Set<ConstraintViolation<T>> violations = validator.validate((T) this);
if (!violations.isEmpty()) {
throw new ConstraintViolationException(violations);
}
}
}
================================================
FILE: common/src/main/java/com/fastcampuspay/common/UseCase.java
================================================
package com.fastcampuspay.common;
import org.springframework.core.annotation.AliasFor;
import org.springframework.stereotype.Component;
import java.lang.annotation.*;
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface UseCase {
/**
* The value may indicate a suggestion for a logical component name,
* to be turned into a Spring bean in case of an autodetected component.
* @return the suggested component name, if any (or empty String otherwise)
*/
@AliasFor(annotation = Component.class)
String value() default "";
}
================================================
FILE: common/src/main/java/com/fastcampuspay/common/WebAdapter.java
================================================
package com.fastcampuspay.common;
import org.springframework.core.annotation.AliasFor;
import org.springframework.stereotype.Component;
import java.lang.annotation.*;
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface WebAdapter {
/**
* The value may indicate a suggestion for a logical component name,
* to be turned into a Spring bean in case of an autodetected component.
* @return the suggested component name, if any (or empty String otherwise)
*/
@AliasFor(annotation = Component.class)
String value() default "";
}
================================================
FILE: common/src/main/java/com/fastcampuspay/common/events/RegisterAccountEvent.java
================================================
package com.fastcampuspay.common.events;
import java.util.Objects;
public class RegisterAccountEvent {
private final String accountId;
public RegisterAccountEvent(){
this.accountId = "0000";
}
public RegisterAccountEvent(String accountId) {
this.accountId = accountId;
}
public String getAccountId() {
return accountId;
}
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
RegisterAccountEvent that = (RegisterAccountEvent) o;
return Objects.equals(accountId, that.accountId);
}
@Override
public int hashCode() {
return Objects.hash(accountId);
}
@Override
public String toString() {
return "OrderCreatedEvent{" + "orderId='" + accountId + '\'' + '}';
}
}
================================================
FILE: db/conf.d/my.cnf
================================================
================================================
FILE: db/initdb.d/create_table.sql
================================================
CREATE DATABASE IF NOT EXISTS fastcampus_pay;
USE fastcampus_pay;
-- for Axon Framework (for Mismatching of Axon and Mysql)
create table IF NOT EXISTS dead_letter_entry (
dead_letter_id varchar(255) not null,
cause_message varchar(255),
cause_type varchar(255),
diagnostics longblob,
enqueued_at datetime not null,
`index` bigint not null,
last_touched datetime,
aggregate_identifier varchar(255),
event_identifier varchar(255) not null,
message_type varchar(255) not null,
meta_data longblob, payload longblob not null,
payload_revision varchar(255),
payload_type varchar(255) not null,
sequence_number bigint,
time_stamp varchar(255) not null,
token longblob, token_type varchar(255),
type varchar(255),
processing_group varchar(255) not null,
processing_started datetime,
sequence_identifier varchar(255) not null,
primary key (dead_letter_id)
) engine=InnoDB
================================================
FILE: db/initdb.d/load_data.sql
================================================
================================================
FILE: docker-compose.yaml
================================================
version: '3'
services:
zookeeper:
image: 'arm64v8/zookeeper:3.8'
networks:
- fastcampuspay_network
ports:
- '2181:2181'
environment:
- ALLOW_ANONYMOUS_LOGIN=yes
- ZOO_TLS_CLIENT_AUTH=none
- ZOO_TLS_QUORUM_CLIENT_AUTH=none
kafka:
image: 'bitnami/kafka:3.4.0'
networks:
- fastcampuspay_network
ports:
- '9092:9092'
environment:
- KAFKA_BROKER_ID=1
- KAFKA_CFG_ZOOKEEPER_CONNECT=zookeeper:2181
- ALLOW_PLAINTEXT_LISTENER=yes
- KAFKA_CFG_LISTENERS=LC://kafka:29092,LX://kafka:9092
- KAFKA_CFG_ADVERTISED_LISTENERS=LC://kafka:29092,LX://${DOCKER_HOST_IP:-localhost}:9092
- KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=LC:PLAINTEXT,LX:PLAINTEXT
- KAFKA_CFG_INTER_BROKER_LISTENER_NAME=LC
depends_on:
- zookeeper
kafka-ui:
image: provectuslabs/kafka-ui
container_name: kafka-ui
networks:
- fastcampuspay_network
ports:
- "8989:8080"
restart: always
depends_on:
- kafka
- zookeeper
environment:
- KAFKA_CLUSTERS_0_NAME=local
- KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS=kafka:29092
- KAFKA_CLUSTERS_0_ZOOKEEPER=zookeeper:2181
mysql:
image: mysql:8.0
networks:
- fastcampuspay_network
volumes:
- ./db/conf.d:/etc/mysql/conf.d
- ./db/data:/var/lib/mysql
- ./db/initdb.d:/docker-entrypoint-initdb.d
env_file: .env
ports:
- "3306:3306"
environment:
- TZ=Asia/Seoul
- MYSQL_ROOT_PASSWORD=rootpassword
- MYSQL_USER=mysqluser
- MYSQL_PASSWORD=mysqlpw
axon-server:
container_name: axon-server
image: axoniq/axonserver:4.6.3-jdk-11-dev
networks:
- fastcampuspay_network
ports:
- "8024:8024"
- "8124:8124"
volumes:
- axonserver-data:/axonserver/data
- axonserver-events:/axonserver/events
- axonserver-config:/axonserver/config:ro
membership-service:
image: fastcampus-pay-membership-service:0.0.1-SNAPSHOT
networks:
- fastcampuspay_network
ports:
- "8081:8080"
depends_on:
- axon-server
- mysql
environment:
- AXON_AXONSERVER_SERVERS=axon-server:8124
- AXON_SERIALIZER_EVENTS=jackson
- AXON_SERIALIZER_MESSAGES=jackson
- AXON_SERIALIZER_GENERAL=xstream
- SPRING_DATASOURCE_URL=jdbc:mysql://mysql:3306/fastcampus_pay?useSSL=false&allowPublicKeyRetrieval=true
- SPRING_DATASOURCE_USERNAME=mysqluser
- SPRING_DATASOURCE_PASSWORD=mysqlpw
- SPRING_JPA_PROPERTIES_HIBERNATE_DIALECT=org.hibernate.dialect.MySQL5InnoDBDialect
- SPRING_JPA_HIBERNATE_DDL_AUTO=update
banking-service:
image: fastcampus-pay-banking-service:0.0.1-SNAPSHOT
networks:
- fastcampuspay_network
ports:
- "8082:8080"
depends_on:
- axon-server
- mysql
environment:
- AXON_AXONSERVER_SERVERS=axon-server:8124
- AXON_SERIALIZER_EVENTS=jackson
- AXON_SERIALIZER_MESSAGES=jackson
- AXON_SERIALIZER_GENERAL=xstream
- SPRING_DATASOURCE_URL=jdbc:mysql://mysql:3306/fastcampus_pay?useSSL=false&allowPublicKeyRetrieval=true
- SPRING_DATASOURCE_USERNAME=mysqluser
- SPRING_DATASOURCE_PASSWORD=mysqlpw
- SPRING_JPA_PROPERTIES_HIBERNATE_DIALECT=org.hibernate.dialect.MySQL5InnoDBDialect
- SPRING_JPA_HIBERNATE_DDL_AUTO=update
money-service:
image: fastcampus-pay-money-service:0.0.1-SNAPSHOT
networks:
- fastcampuspay_network
ports:
- "8083:8080"
depends_on:
- axon-server
- mysql
environment:
- AXON_AXONSERVER_SERVERS=axon-server:8124
- AXON_SERIALIZER_EVENTS=jackson
- AXON_SERIALIZER_MESSAGES=jackson
- AXON_SERIALIZER_GENERAL=xstream
- SPRING_DATASOURCE_URL=jdbc:mysql://mysql:3306/fastcampus_pay?useSSL=false&allowPublicKeyRetrieval=true
- SPRING_DATASOURCE_USERNAME=mysqluser
- SPRING_DATASOURCE_PASSWORD=mysqlpw
- SPRING_JPA_PROPERTIES_HIBERNATE_DIALECT=org.hibernate.dialect.MySQL5InnoDBDialect
- SPRING_JPA_HIBERNATE_DDL_AUTO=update
money-local-service:
image: fastcampus-pay-money-local-service:0.0.1-SNAPSHOT
networks:
- fastcampuspay_network
ports:
- "8084:8080"
depends_on:
- axon-server
- mysql
environment:
- AXON_AXONSERVER_SERVERS=axon-server:8124
- AXON_SERIALIZER_EVENTS=jackson
- AXON_SERIALIZER_MESSAGES=jackson
- AXON_SERIALIZER_GENERAL=xstream
- SPRING_DATASOURCE_URL=jdbc:mysql://mysql:3306/fastcampus_pay?useSSL=false&allowPublicKeyRetrieval=true
- SPRING_DATASOURCE_USERNAME=mysqluser
- SPRING_DATASOURCE_PASSWORD=mysqlpw
- SPRING_JPA_PROPERTIES_HIBERNATE_DIALECT=org.hibernate.dialect.MySQL5InnoDBDialect
- SPRING_JPA_HIBERNATE_DDL_AUTO=update
remittance-service:
image: fastcampus-pay-remittance-service:0.0.1-SNAPSHOT
networks:
- fastcampuspay_network
ports:
- "8085:8080"
depends_on:
- axon-server
- mysql
environment:
- AXON_AXONSERVER_SERVERS=axon-server:8124
- AXON_SERIALIZER_EVENTS=jackson
- AXON_SERIALIZER_MESSAGES=jackson
- AXON_SERIALIZER_GENERAL=xstream
- SPRING_DATASOURCE_URL=jdbc:mysql://mysql:3306/fastcampus_pay?useSSL=false&allowPublicKeyRetrieval=true
- SPRING_DATASOURCE_USERNAME=mysqluser
- SPRING_DATASOURCE_PASSWORD=mysqlpw
- SPRING_JPA_PROPERTIES_HIBERNATE_DIALECT=org.hibernate.dialect.MySQL5InnoDBDialect
- SPRING_JPA_HIBERNATE_DDL_AUTO=update
payment-service:
image: fastcampus-pay-payment-service:0.0.1-SNAPSHOT
networks:
- fastcampuspay_network
ports:
- "8086:8080"
depends_on:
- axon-server
- mysql
environment:
- AXON_AXONSERVER_SERVERS=axon-server:8124
- AXON_SERIALIZER_EVENTS=jackson
- AXON_SERIALIZER_MESSAGES=jackson
- AXON_SERIALIZER_GENERAL=xstream
- SPRING_DATASOURCE_URL=jdbc:mysql://mysql:3306/fastcampus_pay?useSSL=false&allowPublicKeyRetrieval=true
- SPRING_DATASOURCE_USERNAME=mysqluser
- SPRING_DATASOURCE_PASSWORD=mysqlpw
- SPRING_JPA_PROPERTIES_HIBERNATE_DIALECT=org.hibernate.dialect.MySQL5InnoDBDialect
- SPRING_JPA_HIBERNATE_DDL_AUTO=update
settlement-service:
image: fastcampus-pay-settlement-service:0.0.1-SNAPSHOT
networks:
- fastcampuspay_network
ports:
- "8087:8080"
depends_on:
- axon-server
- mysql
environment:
- AXON_AXONSERVER_SERVERS=axon-server:8124
- AXON_SERIALIZER_EVENTS=jackson
- AXON_SERIALIZER_MESSAGES=jackson
- AXON_SERIALIZER_GENERAL=xstream
- SPRING_DATASOURCE_URL=jdbc:mysql://mysql:3306/fastcampus_pay?useSSL=false&allowPublicKeyRetrieval=true
- SPRING_DATASOURCE_USERNAME=mysqluser
- SPRING_DATASOURCE_PASSWORD=mysqlpw
- SPRING_JPA_PROPERTIES_HIBERNATE_DIALECT=org.hibernate.dialect.MySQL5InnoDBDialect
- SPRING_JPA_HIBERNATE_DDL_AUTO=update
volumes:
axonserver-data:
driver: local
driver_opts:
o: bind
type: none
device: ${PWD}/axon-server-se/data
axonserver-events:
driver: local
driver_opts:
o: bind
type: none
device: ${PWD}/axon-server-se/events
axonserver-config:
driver: local
driver_opts:
o: bind
type: none
device: ${PWD}/axon-server-se/config
networks:
fastcampuspay_network:
driver: bridge
================================================
FILE: gradle/wrapper/gradle-wrapper.properties
================================================
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-6.8.2-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
================================================
FILE: gradle.properties
================================================
org.gradle.jvmargs=-Xmx2g
org.gradle.caching=true
org.gradle.configureondemand=true
org.gradle.parallel=false
================================================
FILE: gradlew
================================================
#!/usr/bin/env sh
#
# Copyright 2015 the original author or authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
##############################################################################
##
## Gradle start up script for UN*X
##
##############################################################################
# Attempt to set APP_HOME
# Resolve links: $0 may be a link
PRG="$0"
# Need this for relative symlinks.
while [ -h "$PRG" ] ; do
ls=`ls -ld "$PRG"`
link=`expr "$ls" : '.*-> \(.*\)$'`
if expr "$link" : '/.*' > /dev/null; then
PRG="$link"
else
PRG=`dirname "$PRG"`"/$link"
fi
done
SAVED="`pwd`"
cd "`dirname \"$PRG\"`/" >/dev/null
APP_HOME="`pwd -P`"
cd "$SAVED" >/dev/null
APP_NAME="Gradle"
APP_BASE_NAME=`basename "$0"`
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD="maximum"
warn () {
echo "$*"
}
die () {
echo
echo "$*"
echo
exit 1
}
# OS specific support (must be 'true' or 'false').
cygwin=false
msys=false
darwin=false
nonstop=false
case "`uname`" in
CYGWIN* )
cygwin=true
;;
Darwin* )
darwin=true
;;
MINGW* )
msys=true
;;
NONSTOP* )
nonstop=true
;;
esac
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
# Determine the Java command to use to start the JVM.
if [ -n "$JAVA_HOME" ] ; then
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
# IBM's JDK on AIX uses strange locations for the executables
JAVACMD="$JAVA_HOME/jre/sh/java"
else
JAVACMD="$JAVA_HOME/bin/java"
fi
if [ ! -x "$JAVACMD" ] ; then
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
else
JAVACMD="java"
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
# Increase the maximum file descriptors if we can.
if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
MAX_FD_LIMIT=`ulimit -H -n`
if [ $? -eq 0 ] ; then
if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
MAX_FD="$MAX_FD_LIMIT"
fi
ulimit -n $MAX_FD
if [ $? -ne 0 ] ; then
warn "Could not set maximum file descriptor limit: $MAX_FD"
fi
else
warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
fi
fi
# For Darwin, add options to specify how the application appears in the dock
if $darwin; then
GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
fi
# For Cygwin or MSYS, switch paths to Windows format before running java
if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then
APP_HOME=`cygpath --path --mixed "$APP_HOME"`
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
JAVACMD=`cygpath --unix "$JAVACMD"`
# We build the pattern for arguments to be converted via cygpath
ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
SEP=""
for dir in $ROOTDIRSRAW ; do
ROOTDIRS="$ROOTDIRS$SEP$dir"
SEP="|"
done
OURCYGPATTERN="(^($ROOTDIRS))"
# Add a user-defined pattern to the cygpath arguments
if [ "$GRADLE_CYGPATTERN" != "" ] ; then
OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
fi
# Now convert the arguments - kludge to limit ourselves to /bin/sh
i=0
for arg in "$@" ; do
CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
else
eval `echo args$i`="\"$arg\""
fi
i=`expr $i + 1`
done
case $i in
0) set -- ;;
1) set -- "$args0" ;;
2) set -- "$args0" "$args1" ;;
3) set -- "$args0" "$args1" "$args2" ;;
4) set -- "$args0" "$args1" "$args2" "$args3" ;;
5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
esac
fi
# Escape application args
save () {
for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
echo " "
}
APP_ARGS=`save "$@"`
# Collect all arguments for the java command, following the shell quoting and substitution rules
eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
exec "$JAVACMD" "$@"
================================================
FILE: gradlew.bat
================================================
@rem
@rem Copyright 2015 the original author or authors.
@rem
@rem Licensed under the Apache License, Version 2.0 (the "License");
@rem you may not use this file except in compliance with the License.
@rem You may obtain a copy of the License at
@rem
@rem https://www.apache.org/licenses/LICENSE-2.0
@rem
@rem Unless required by applicable law or agreed to in writing, software
@rem distributed under the License is distributed on an "AS IS" BASIS,
@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@rem See the License for the specific language governing permissions and
@rem limitations under the License.
@rem
@if "%DEBUG%" == "" @echo off
@rem ##########################################################################
@rem
@rem Gradle startup script for Windows
@rem
@rem ##########################################################################
@rem Set local scope for the variables with windows NT shell
if "%OS%"=="Windows_NT" setlocal
set DIRNAME=%~dp0
if "%DIRNAME%" == "" set DIRNAME=.
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%
@rem Resolve any "." and ".." in APP_HOME to make it shorter.
for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
@rem Find java.exe
if defined JAVA_HOME goto findJavaFromJavaHome
set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
if "%ERRORLEVEL%" == "0" goto execute
echo.
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
:findJavaFromJavaHome
set JAVA_HOME=%JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
if exist "%JAVA_EXE%" goto execute
echo.
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
:execute
@rem Setup the command line
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
@rem Execute Gradle
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
:end
@rem End local scope for the variables with windows NT shell
if "%ERRORLEVEL%"=="0" goto mainEnd
:fail
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
rem the _cmd.exe /c_ return code!
if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
exit /b 1
:mainEnd
if "%OS%"=="Windows_NT" endlocal
:omega
================================================
FILE: membership-service/build.gradle
================================================
plugins {
id 'com.palantir.docker' version '0.25.0'
}
ext{
axonVersion = "4.6.0"
}
group = 'com.fastcampuspay.membership'
version = '0.0.1-SNAPSHOT'
dependencies {
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 group: 'javax.persistence', name: 'javax.persistence-api', version: '2.2'
implementation group: 'org.axonframework', name: 'axon-configuration', version: "$axonVersion"
implementation group: 'org.axonframework', name: 'axon-spring-boot-starter', version: "$axonVersion"
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation project(path: ':common')
implementation 'org.jetbrains:annotations:23.0.0'
// runtimeOnly 'com.h2database:h2'
runtimeOnly 'mysql:mysql-connector-java'
}
docker {
println(tasks.bootJar.outputs.files)
name rootProject.name+'-'+project.name + ":" + version
dockerfile file('../Dockerfile')
files tasks.bootJar.outputs.files
buildArgs(['JAR_FILE': tasks.bootJar.outputs.files.singleFile.name])
}
================================================
FILE: membership-service/src/main/java/com/fastcampuspay/membership/MembershipApplication.java
================================================
package com.fastcampuspay.membership;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class MembershipApplication {
public static void main(String[] args) {
SpringApplication.run(MembershipApplication.class, args);
}
}
================================================
FILE: membership-service/src/main/java/com/fastcampuspay/membership/MembershipConfiguration.java
================================================
package com.fastcampuspay.membership;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Configuration;
@Configuration
@EnableConfigurationProperties(MembershipConfigurationProperties.class)
public class MembershipConfiguration {
}
================================================
FILE: membership-service/src/main/java/com/fastcampuspay/membership/MembershipConfigurationProperties.java
================================================
package com.fastcampuspay.membership;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
@Data
@ConfigurationProperties(prefix = "membership")
public class MembershipConfigurationProperties {
private long transferThreshold = Long.MAX_VALUE;
}
================================================
FILE: membership-service/src/main/java/com/fastcampuspay/membership/SwaggerConfig.java
================================================
package com.fastcampuspay.membership;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
@Configuration
@EnableSwagger2
public class SwaggerConfig {
@Bean
public Docket restAPI() {
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.select()
.apis(RequestHandlerSelectors.basePackage("com.fastcampuspay.membership"))
.paths(PathSelectors.any())
.build();
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.build();
}
}
================================================
FILE: membership-service/src/main/java/com/fastcampuspay/membership/adapter/in/web/FindMembershipController.java
================================================
package com.fastcampuspay.membership.adapter.in.web;
import com.fastcampuspay.common.WebAdapter;
import com.fastcampuspay.membership.application.port.in.FindMembershipCommand;
import com.fastcampuspay.membership.application.port.in.FindMembershipUseCase;
import com.fastcampuspay.membership.domain.Membership;
import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
@WebAdapter
@RestController
@RequiredArgsConstructor
class FindMembershipController {
private final FindMembershipUseCase findMembershipUseCase;
@GetMapping(path = "/membership/{membershipId}")
ResponseEntity<Membership> findMembershipByMemberId(@PathVariable String membershipId){
FindMembershipCommand command = FindMembershipCommand.builder()
.membershipId(membershipId)
.build();
return ResponseEntity.ok(findMembershipUseCase.findMembership(command));
}
@GetMapping(path = "/membership/axon/{membershipId}")
ResponseEntity<Membership> findAxonMembershipByMemberId(@PathVariable String membershipId){
FindMembershipCommand command = FindMembershipCommand.builder()
.membershipId(membershipId)
.build();
return ResponseEntity.ok(findMembershipUseCase.findAxonMembership(command));
}
}
================================================
FILE: membership-service/src/main/java/com/fastcampuspay/membership/adapter/in/web/FindMembershipRequest.java
================================================
package com.fastcampuspay.membership.adapter.in.web;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
public class FindMembershipRequest {
private String membershipId;
}
================================================
FILE: membership-service/src/main/java/com/fastcampuspay/membership/adapter/in/web/LoginAuthMembershipController.java
================================================
package com.fastcampuspay.membership.adapter.in.web;
import com.fastcampuspay.common.WebAdapter;
import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
@WebAdapter
@RestController
@RequiredArgsConstructor
class LoginAuthMembershipController {
@PostMapping(path = "/membership/login/")
ResponseEntity<Object> loginByMembershipIdPw(){
return ResponseEntity.status(HttpStatus.NOT_IMPLEMENTED).build();
}
@PostMapping(path = "/membership/auth/")
ResponseEntity<Object> authByToken(){
return ResponseEntity.status(HttpStatus.NOT_IMPLEMENTED).build();
}
}
================================================
FILE: membership-service/src/main/java/com/fastcampuspay/membership/adapter/in/web/RegisterMembershipController.java
================================================
package com.fastcampuspay.membership.adapter.in.web;
import com.fastcampuspay.common.WebAdapter;
import com.fastcampuspay.membership.application.port.in.RegisterMembershipCommand;
import com.fastcampuspay.membership.application.port.in.RegisterMembershipUseCase;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
@WebAdapter
@RestController
@RequiredArgsConstructor
class RegisterMembershipController {
private final RegisterMembershipUseCase registerMembershipUseCase;
@PostMapping(path = "/membership/register/")
void registerMembership(@RequestBody RegisterMembershipRequest request){
// RegisterMembershipRequest
// name, address, email
RegisterMembershipCommand command = RegisterMembershipCommand.builder()
.name(request.getName())
.address(request.getAddress())
.email(request.getEmail())
.build();
registerMembershipUseCase.registerMembership(command);
}
@PostMapping(path = "/membership/axon-register/")
void registerAxonMembership(@RequestBody RegisterMembershipRequest request){
RegisterMembershipCommand command = RegisterMembershipCommand.builder()
.name(request.getName())
.address(request.getAddress())
.email(request.getEmail())
.build();
registerMembershipUseCase.registerAxonMembership(command);
}
}
================================================
FILE: membership-service/src/main/java/com/fastcampuspay/membership/adapter/in/web/RegisterMembershipRequest.java
================================================
package com.fastcampuspay.membership.adapter.in.web;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
public class RegisterMembershipRequest {
private String name;
private String address;
private String email;
}
================================================
FILE: membership-service/src/main/java/com/fastcampuspay/membership/adapter/in/web/UpdateMembershipController.java
================================================
package com.fastcampuspay.membership.adapter.in.web;
import com.fastcampuspay.common.WebAdapter;
import com.fastcampuspay.membership.application.port.in.UpdateMembershipCommand;
import com.fastcampuspay.membership.application.port.in.UpdateMembershipUseCase;
import com.fastcampuspay.membership.domain.Membership;
import lombok.RequiredArgsConstructor;
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;
@WebAdapter
@RestController
@RequiredArgsConstructor
class UpdateMembershipController {
private final UpdateMembershipUseCase updateMembershipUseCase;
@PutMapping(path = "/membership/update")
ResponseEntity<Membership> updateMembershipByMemberId(@RequestBody UpdateMembershipRequest membershipToBeUpdated){
// updateMembership
UpdateMembershipCommand command = UpdateMembershipCommand.builder()
.membershipId(membershipToBeUpdated.getMembershipId())
.name(membershipToBeUpdated.getName())
.address(membershipToBeUpdated.getAddress())
.email(membershipToBeUpdated.getEmail())
.isValid(membershipToBeUpdated.isValid())
.build();
return ResponseEntity.ok(updateMembershipUseCase.updateMembership(command));
}
@PutMapping(path = "/membership/axon-update")
ResponseEntity<Membership> updateAxonMembershipByMemberId(@RequestBody UpdateMembershipRequest membershipToBeUpdated){
System.out.println("axon update controller");
// updateMembership
UpdateMembershipCommand command = UpdateMembershipCommand.builder()
.membershipId(membershipToBeUpdated.getMembershipId())
.name(membershipToBeUpdated.getName())
.address(membershipToBeUpdated.getAddress())
.email(membershipToBeUpdated.getEmail())
.isValid(membershipToBeUpdated.isValid())
.build();
return ResponseEntity.ok(updateMembershipUseCase.updateAxonMembership(command));
}
}
================================================
FILE: membership-service/src/main/java/com/fastcampuspay/membership/adapter/in/web/UpdateMembershipRequest.java
================================================
package com.fastcampuspay.membership.adapter.in.web;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
public class UpdateMembershipRequest {
private String membershipId;
private String name;
private String address;
private String email;
private boolean isValid;
}
================================================
FILE: membership-service/src/main/java/com/fastcampuspay/membership/adapter/out/persistence/MembershipJpaEntity.java
================================================
package com.fastcampuspay.membership.adapter.out.persistence;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name = "membership")
@Data
@AllArgsConstructor
@NoArgsConstructor
class MembershipJpaEntity {
@Id
@GeneratedValue
private Long membershipId;
private String name;
private String address;
private String email;
private boolean isValid;
private String aggregateIdentifier;
public MembershipJpaEntity(String name, String address, String email, boolean isValid, String aggregateIdentifier) {
this.name = name;
this.address = address;
this.email = email;
this.isValid = isValid;
this.aggregateIdentifier = aggregateIdentifier;
}
@Override
public String toString() {
return "MembershipJpaEntity{" +
"membershipId=" + membershipId +
", name='" + name + '\'' +
", address='" + address + '\'' +
", email='" + email + '\'' +
", isValid=" + isValid +
", aggregateIdentifier='" + aggregateIdentifier + '\'' +
'}';
}
}
================================================
FILE: membership-service/src/main/java/com/fastcampuspay/membership/adapter/out/persistence/MembershipMapper.java
================================================
package com.fastcampuspay.membership.adapter.out.persistence;
import com.fastcampuspay.membership.domain.Membership;
import org.springframework.stereotype.Component;
@Component
class MembershipMapper {
Membership mapToDomainEntity(
MembershipJpaEntity membership) {
System.out.println(membership.toString());
return Membership.generateMember(
new Membership.MembershipId(membership.getMembershipId()+""),
new Membership.MembershipName(membership.getName()),
new Membership.MembershipEmail(membership.getEmail()),
new Membership.MembershipAddress(membership.getAddress()),
new Membership.MembershipIsValid(membership.isValid()),
new Membership.MembershipAggregateIdentifier(membership.getAggregateIdentifier())
);
}
}
================================================
FILE: membership-service/src/main/java/com/fastcampuspay/membership/adapter/out/persistence/MembershipPersistenceAdapter.java
================================================
package com.fastcampuspay.membership.adapter.out.persistence;
import com.fastcampuspay.common.PersistenceAdapter;
import com.fastcampuspay.membership.application.port.out.FindMembershipPort;
import com.fastcampuspay.membership.application.port.out.RegisterMembershipPort;
import com.fastcampuspay.membership.application.port.out.UpdateMembershipPort;
import com.fastcampuspay.membership.domain.Membership;
import lombok.RequiredArgsConstructor;
@RequiredArgsConstructor
@PersistenceAdapter
class MembershipPersistenceAdapter implements RegisterMembershipPort, FindMembershipPort, UpdateMembershipPort {
private final SpringDataMembershipRepository membershipRepository;
private final MembershipMapper membershipMapper;
@Override
public void createMembership(Membership.MembershipName membershipName
, Membership.MembershipEmail membershipEmail
, Membership.MembershipAddress membershipAddress
, Membership.MembershipIsValid membershipIsValid
, Membership.MembershipAggregateIdentifier membershipAggregateIdentifier
) {
membershipRepository.save(
new MembershipJpaEntity(
membershipName.getNameValue(),
membershipEmail.getEmailValue(),
membershipAddress.getAddressValue(),
membershipIsValid.isValidValue(),
membershipAggregateIdentifier.getAggregateIdentifier()
)
);
}
@Override
public Membership findMembership(Membership.MembershipId membershipId) {
return membershipMapper.mapToDomainEntity(
membershipRepository.getById(Long.parseLong(membershipId.getMembershipId()))
);
}
@Override
public Membership updateMembership(Membership.MembershipId membershipId, Membership.MembershipName membershipName, Membership.MembershipEmail membershipEmail, Membership.MembershipAddress membershipAddress, Membership.MembershipIsValid membershipIsValid) {
// update membership Info
MembershipJpaEntity membershipJpaEntity = membershipRepository.getById(Long.parseLong(membershipId.getMembershipId()));
membershipJpaEntity.setName(membershipName.getNameValue());
membershipJpaEntity.setEmail(membershipEmail.getEmailValue());
membershipJpaEntity.setAddress(membershipAddress.getAddressValue());
membershipJpaEntity.setValid(membershipIsValid.isValidValue());
// save
MembershipJpaEntity updatedMembership = membershipRepository.save(membershipJpaEntity);
// return
return membershipMapper.mapToDomainEntity(updatedMembership);
}
}
================================================
FILE: membership-service/src/main/java/com/fastcampuspay/membership/adapter/out/persistence/SpringDataMembershipRepository.java
================================================
package com.fastcampuspay.membership.adapter.out.persistence;
import org.springframework.data.jpa.repository.JpaRepository;
interface SpringDataMembershipRepository extends JpaRepository<MembershipJpaEntity, Long> {
}
================================================
FILE: membership-service/src/main/java/com/fastcampuspay/membership/application/port/in/FindMembershipCommand.java
================================================
package com.fastcampuspay.membership.application.port.in;
import com.fastcampuspay.common.SelfValidating;
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@Builder
@EqualsAndHashCode(callSuper = false)
public
class FindMembershipCommand extends SelfValidating<FindMembershipCommand> {
private final String membershipId;
}
================================================
FILE: membership-service/src/main/java/com/fastcampuspay/membership/application/port/in/FindMembershipUseCase.java
================================================
package com.fastcampuspay.membership.application.port.in;
import com.fastcampuspay.membership.domain.Membership;
public interface FindMembershipUseCase {
Membership findMembership(FindMembershipCommand command);
Membership findAxonMembership(FindMembershipCommand command);
}
================================================
FILE: membership-service/src/main/java/com/fastcampuspay/membership/application/port/in/RegisterMembershipCommand.java
================================================
package com.fastcampuspay.membership.application.port.in;
import com.fastcampuspay.common.SelfValidating;
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.constraints.NotNull;
@Builder
@Data
@EqualsAndHashCode(callSuper = false)
public
class RegisterMembershipCommand extends SelfValidating<RegisterMembershipCommand> {
@NotNull
private final String name;
@NotNull
private final String email;
@NotNull
private final String address;
@NotNull
private final boolean isValid;
public RegisterMembershipCommand(String name, String email, String address, boolean isValid) {
this.name = name;
this.email = email;
this.address = address;
this.isValid = isValid;
}
}
================================================
FILE: membership-service/src/main/java/com/fastcampuspay/membership/application/port/in/RegisterMembershipUseCase.java
================================================
package com.fastcampuspay.membership.application.port.in;
public interface RegisterMembershipUseCase {
void registerMembership(RegisterMembershipCommand command);
void registerAxonMembership(RegisterMembershipCommand command);
}
================================================
FILE: membership-service/src/main/java/com/fastcampuspay/membership/application/port/in/UpdateMembershipCommand.java
================================================
package com.fastcampuspay.membership.application.port.in;
import com.fastcampuspay.common.SelfValidating;
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.axonframework.modelling.command.TargetAggregateIdentifier;
import javax.validation.constraints.NotNull;
@Builder
@Data
@EqualsAndHashCode(callSuper = false)
public class UpdateMembershipCommand extends SelfValidating<UpdateMembershipCommand> {
@NotNull
@TargetAggregateIdentifier
private String membershipId;
private String name;
private String address;
private String email;
private boolean isValid;
}
================================================
FILE: membership-service/src/main/java/com/fastcampuspay/membership/application/port/in/UpdateMembershipEventCommand.java
================================================
package com.fastcampuspay.membership.application.port.in;
import com.fastcampuspay.common.SelfValidating;
import lombok.*;
import org.axonframework.modelling.command.TargetAggregateIdentifier;
import javax.validation.constraints.NotNull;
@Builder
@Data
@EqualsAndHashCode(callSuper = false)
@AllArgsConstructor
@NoArgsConstructor
public class UpdateMembershipEventCommand extends SelfValidating<UpdateMembershipEventCommand> {
@NotNull
@TargetAggregateIdentifier
private String aggregateIdentifier;
private String name;
private String address;
private String email;
private boolean isValid;
}
================================================
FILE: membership-service/src/main/java/com/fastcampuspay/membership/application/port/in/UpdateMembershipUseCase.java
================================================
package com.fastcampuspay.membership.application.port.in;
import com.fastcampuspay.membership.domain.Membership;
public interface UpdateMembershipUseCase {
Membership updateMembership(UpdateMembershipCommand command);
Membership updateAxonMembership(UpdateMembershipCommand command);
}
================================================
FILE: membership-service/src/main/java/com/fastcampuspay/membership/application/port/in/aggregate/MembershipAggregate.java
================================================
package com.fastcampuspay.membership.application.port.in.aggregate;
import com.fastcampuspay.membership.application.port.in.RegisterMembershipCommand;
import com.fastcampuspay.membership.application.port.in.UpdateMembershipCommand;
import com.fastcampuspay.membership.application.port.in.UpdateMembershipEventCommand;
import com.fastcampuspay.membership.application.saga.MembershipCreateEvent;
import com.fastcampuspay.membership.application.saga.MembershipUpdateEvent;
import lombok.Data;
import org.axonframework.commandhandling.CommandHandler;
import org.axonframework.eventsourcing.EventSourcingHandler;
import org.axonframework.modelling.command.AggregateIdentifier;
import org.axonframework.spring.stereotype.Aggregate;
import org.jetbrains.annotations.NotNull;
import java.util.UUID;
import static org.axonframework.modelling.command.AggregateLifecycle.apply;
@Aggregate()
@Data
public class MembershipAggregate {
@AggregateIdentifier
private String id;
private String name;
private String email;
private String address;
@CommandHandler
public MembershipAggregate(@NotNull RegisterMembershipCommand command) {
System.out.println("RegisterMembershipCommand Handler");
// store event
apply(new MembershipCreateEvent(command.getName(), command.getEmail(), command.getAddress()));
}
@CommandHandler
public String handle(@NotNull UpdateMembershipEventCommand command) {
System.out.println("UpdateMembershipEventCommand Handler");
id = command.getAggregateIdentifier();
// store event
apply(new MembershipUpdateEvent(id, command.getName(), command.getEmail(), command.getAddress()));
return id;
}
@CommandHandler
public String handle (@NotNull UpdateMembershipCommand command) {
System.out.println("UpdateMembershipCommand Handler");
String aggregateIdentifier = command.getMembershipId();
id = aggregateIdentifier;
// store event
apply(new MembershipUpdateEvent(aggregateIdentifier, command.getName(), command.getEmail(), command.getAddress()));
return aggregateIdentifier;
}
@EventSourcingHandler
public void on(MembershipCreateEvent event) {
System.out.println("MembershipCreateEvent Sourcing Handler");
id = UUID.randomUUID().toString();
name = event.getName() ;
email = event.getEmail();
address = event.getAddress();
}
@EventSourcingHandler
public void on(MembershipUpdateEvent event) {
System.out.println("MembershipUpdateEvent Sourcing Handler");
name = event.getName() ;
email = event.getEmail();
address = event.getAddress();
}
public MembershipAggregate() {
// Required by Axon to construct an empty instance to initiate Event Sourcing.
}
@Override
public String toString() {
return "MembershipAggregate{" +
"id='" + id + '\'' +
", name='" + name + '\'' +
", email='" + email + '\'' +
", address='" + address + '\'' +
'}';
}
}
================================================
FILE: membership-service/src/main/java/com/fastcampuspay/membership/application/port/out/FindMembershipPort.java
================================================
package com.fastcampuspay.membership.application.port.out;
import com.fastcampuspay.membership.domain.Membership;
public interface FindMembershipPort {
Membership findMembership(
Membership.MembershipId membershipId
);
}
================================================
FILE: membership-service/src/main/java/com/fastcampuspay/membership/application/port/out/RegisterMembershipPort.java
================================================
package com.fastcampuspay.membership.application.port.out;
import com.fastcampuspay.membership.domain.Membership;
public interface RegisterMembershipPort {
void createMembership(
Membership.MembershipName membershipName
, Membership.MembershipEmail membershipEmail
, Membership.MembershipAddress membershipAddress
, Membership.MembershipIsValid membershipIsValid
, Membership.MembershipAggregateIdentifier membershipAggregateIdentifier
);
}
================================================
FILE: membership-service/src/main/java/com/fastcampuspay/membership/application/port/out/UpdateMembershipPort.java
================================================
package com.fastcampuspay.membership.application.port.out;
import com.fastcampuspay.membership.domain.Membership;
public interface UpdateMembershipPort {
Membership updateMembership(
Membership.MembershipId membershipId
, Membership.MembershipName membershipName
, Membership.MembershipEmail membershipEmail
, Membership.MembershipAddress membershipAddress
, Membership.MembershipIsValid membershipIsValid
);
}
================================================
FILE: membership-service/src/main/java/com/fastcampuspay/membership/application/port/out/query/FindMembershipQuery.java
================================================
package com.fastcampuspay.membership.application.port.out.query;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@AllArgsConstructor
@NoArgsConstructor
@Data
public class FindMembershipQuery {
String membershipId;
}
================================================
FILE: membership-service/src/main/java/com/fastcampuspay/membership/application/port/out/query/MembershipQueryHandler.java
================================================
package com.fastcampuspay.membership.application.port.out.query;
import com.fastcampuspay.membership.application.port.out.FindMembershipPort;
import com.fastcampuspay.membership.domain.Membership;
import lombok.RequiredArgsConstructor;
import org.axonframework.queryhandling.QueryHandler;
import org.springframework.stereotype.Component;
@RequiredArgsConstructor
@Component
public class MembershipQueryHandler{
private final FindMembershipPort fport;
@QueryHandler
public Membership handle(FindMembershipQuery query) {
System.out.println("MembershipQueryHandler Handler");
// Retrieve the event sourcing repository
// EventSourcingRepository<MembershipAggregate> repository = EventSourcingRepository.builder(MembershipAggregate.class).eventStore(eventStore).build();
// MembershipAggregate user = repository.load(query.getMembershipId()).getWrappedAggregate().getAggregateRoot();
// System.out.println(user.toString());
return fport.findMembership(new Membership.MembershipId(query.getMembershipId()));
// return Membership.generateMember(
// new Membership.MembershipId(user.getId()+""),
// new Membership.MembershipName(user.getName()),
// new Membership.MembershipEmail(user.getEmail()),
// new Membership.MembershipAddress(user.getAddress()),
// new Membership.MembershipIsValid(true)
// );
}
}
================================================
FILE: membership-service/src/main/java/com/fastcampuspay/membership/application/saga/MembershipCreateEvent.java
================================================
package com.fastcampuspay.membership.application.saga;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@AllArgsConstructor
@NoArgsConstructor
@Data
public class MembershipCreateEvent {
private String name;
private String email;
private String address;
}
================================================
FILE: membership-service/src/main/java/com/fastcampuspay/membership/application/saga/MembershipUpdateEvent.java
================================================
package com.fastcampuspay.membership.application.saga;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@AllArgsConstructor
@NoArgsConstructor
@Data
public class MembershipUpdateEvent {
private String membershipId;
private String name;
private String email;
private String address;
}
================================================
FILE: membership-service/src/main/java/com/fastcampuspay/membership/application/saga/Order.java
================================================
package com.fastcampuspay.membership.application.saga;
import lombok.Data;
import org.axonframework.modelling.command.AggregateIdentifier;
import org.axonframework.spring.stereotype.Aggregate;
@Data
@Aggregate()
public class Order {
@AggregateIdentifier
private String orderId;
}
================================================
FILE: membership-service/src/main/java/com/fastcampuspay/membership/application/saga/OrderCancelledEvent.java
================================================
package com.fastcampuspay.membership.application.saga;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@AllArgsConstructor
@NoArgsConstructor
@Data
public class OrderCancelledEvent {
private String orderId;
private String paymentId;
private String name;
}
================================================
FILE: membership-service/src/main/java/com/fastcampuspay/membership/application/saga/OrderConfirmedEvent.java
================================================
package com.fastcampuspay.membership.application.saga;
import lombok.AllArgsConstructor;
import lombok.Data;
@Data
@AllArgsConstructor
public class OrderConfirmedEvent {
private String orderId;
}
================================================
FILE: membership-service/src/main/java/com/fastcampuspay/membership/application/saga/OrderCreatedEvent.java
================================================
package com.fastcampuspay.membership.application.saga;
public class OrderCreatedEvent {
private String orderId;
private String customerName;
public OrderCreatedEvent(String orderId, String customerName) {
this.orderId = orderId;
this.customerName = customerName;
}
public String getOrderId() {
return orderId;
}
public String getCustomerName() {
return customerName;
}
}
================================================
FILE: membership-service/src/main/java/com/fastcampuspay/membership/application/saga/OrderPlacedEvent.java
================================================
package com.fastcampuspay.membership.application.saga;
import lombok.Data;
@Data
public class OrderPlacedEvent {
private String orderId;
private String name;
public OrderPlacedEvent(){
orderId = "default-123";
}
public OrderPlacedEvent(String orderId){
this.orderId = orderId;
}
public OrderPlacedEvent(String orderId, String name){
this.orderId = orderId;
this.name = name;
}
}
================================================
FILE: membership-service/src/main/java/com/fastcampuspay/membership/application/saga/OrderSaga.java
================================================
package com.fastcampuspay.membership.application.saga;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.NonNull;
import org.axonframework.commandhandling.gateway.CommandGateway;
import org.axonframework.eventhandling.EventBus;
import org.axonframework.modelling.saga.SagaEventHandler;
import org.axonframework.modelling.saga.SagaLifecycle;
import org.axonframework.modelling.saga.StartSaga;
import org.axonframework.spring.stereotype.Saga;
import org.springframework.beans.factory.annotation.Autowired;
import java.util.UUID;
@Saga
@Getter
@NoArgsConstructor
public class OrderSaga {
private String orderId;
private String paymentId;
private double amount;
@NonNull
private transient EventBus eventBus;
@NonNull
private transient CommandGateway commandGateway;
@Autowired
public void setEventBus(EventBus eventBus) {
this.eventBus = eventBus;
}
@Autowired
public void setCommandGateway(CommandGateway commandGateway) {
this.commandGateway = commandGateway;
}
@StartSaga
@SagaEventHandler(associationProperty = "orderId")
public void handle(OrderPlacedEvent event) {
SagaLifecycle.associateWith("orderId", event.getOrderId());
System.out.println("Order placed");
orderId = event.getOrderId();
paymentId = UUID.randomUUID().toString();
amount = 100.0; // hardcoded for simplicity
PaymentRequestedCommand command = new PaymentRequestedCommand(paymentId, orderId, amount);
commandGateway.send(command).whenComplete((Object result, Throwable throwable) -> {
// if (throwable == null) {
System.out.println("Payment requested");
this.orderId = "finished";
SagaLifecycle.associateWith("paymentId", paymentId);
// eventBus.publish(GenericEventMessage.asEventMessage(new PaymentCompletedEvent("1345", event.getOrderId())));
// }
System.out.println("Payment failed");
SagaLifecycle.end();
});
}
@SagaEventHandler(associationProperty = "orderId")
public void handle(OrderConfirmedEvent event) {
System.out.println("Payment completed");
SagaLifecycle.end();
// // OrderConfirmedEvent orderConfirmedEvent = new OrderConfirmedEvent(orderId);
// if (this.orderId != null) {
// System.out.println("Payment completed");
// // SagaLifecycle.associateWith("orderId", orderId);
// // eventBus.publish(orderConfirmedEvent);
// } else{
// System.out.println("Order Cancelled");
// // commandGateway.send(new OrderCancelledEvent(event.getOrderId()));
// }
// System.out.println("Payment completed");
}
}
================================================
FILE: membership-service/src/main/java/com/fastcampuspay/membership/application/saga/Payment.java
================================================
package com.fastcampuspay.membership.application.saga;
import lombok.Data;
import org.axonframework.modelling.command.AggregateIdentifier;
import org.axonframework.spring.stereotype.Aggregate;
@Data
@Aggregate()
public class Payment {
private String orderId;
@AggregateIdentifier
private String paymentId;
// getters and setters
}
================================================
FILE: membership-service/src/main/java/com/fastcampuspay/membership/application/saga/PaymentCancelledEvent.java
================================================
package com.fastcampuspay.membership.application.saga;
import lombok.AllArgsConstructor;
import lombok.Data;
@Data
@AllArgsConstructor
public class PaymentCancelledEvent {
private String orderId;
private String paymentId;
}
================================================
FILE: membership-service/src/main/java/com/fastcampuspay/membership/application/saga/PaymentCompletedEvent.java
================================================
package com.fastcampuspay.membership.application.saga;
import lombok.AllArgsConstructor;
import lombok.Data;
@Data
@AllArgsConstructor
public class PaymentCompletedEvent {
private String paymentId;
private String orderId;
}
================================================
FILE: membership-service/src/main/java/com/fastcampuspay/membership/application/saga/PaymentRequestedCommand.java
================================================
package com.fastcampuspay.membership.application.saga;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@AllArgsConstructor
@NoArgsConstructor
@Data
public class PaymentRequestedCommand {
private String paymentId;
private String orderId;
private double amount;
// getters and setters
}
================================================
FILE: membership-service/src/main/java/com/fastcampuspay/membership/application/service/FindMembership.java
================================================
package com.fastcampuspay.membership.application.service;
import com.fastcampuspay.common.UseCase;
import com.fastcampuspay.membership.application.port.in.FindMembershipCommand;
import com.fastcampuspay.membership.application.port.in.FindMembershipUseCase;
import com.fastcampuspay.membership.application.port.out.FindMembershipPort;
import com.fastcampuspay.membership.application.port.out.query.FindMembershipQuery;
import com.fastcampuspay.membership.domain.Membership;
import lombok.RequiredArgsConstructor;
import org.axonframework.messaging.responsetypes.ResponseTypes;
import org.axonframework.queryhandling.QueryGateway;
import javax.transaction.Transactional;
@RequiredArgsConstructor
@UseCase
@Transactional
public class FindMembership implements FindMembershipUseCase {
private final FindMembershipPort fport;
private final QueryGateway queryGateway;
@Override
public Membership findMembership(FindMembershipCommand command) {
return fport.findMembership(new Membership.MembershipId(command.getMembershipId()));
}
@Override
public Membership findAxonMembership(FindMembershipCommand command) {
FindMembershipQuery getQuery = new FindMembershipQuery(command.getMembershipId());
queryGateway.query(getQuery, ResponseTypes.instanceOf(Membership.class))
.whenComplete((Object result, Throwable throwable) -> {
if (throwable == null) {
System.out.println(result.toString());
}
else {
System.out.println("error : " + throwable.getMessage());
}
});
return null;
}
}
================================================
FILE: membership-service/src/main/java/com/fastcampuspay/membership/application/service/RegisterMembership.java
================================================
package com.fastcampuspay.membership.application.service;
import com.fastcampuspay.common.UseCase;
import com.fastcampuspay.membership.application.port.in.RegisterMembershipCommand;
import com.fastcampuspay.membership.application.port.in.RegisterMembershipUseCase;
import com.fastcampuspay.membership.application.port.out.RegisterMembershipPort;
import com.fastcampuspay.membership.domain.Membership;
import lombok.RequiredArgsConstructor;
import org.axonframework.commandhandling.gateway.CommandGateway;
import javax.transaction.Transactional;
@RequiredArgsConstructor
@UseCase
@Transactional
public class RegisterMembership implements RegisterMembershipUseCase {
private final RegisterMembershipPort rport;
private final CommandGateway commandGateway;
@Override
public void registerMembership(RegisterMembershipCommand command) {
rport.createMembership(
new Membership.MembershipName(command.getName()),
new Membership.MembershipEmail(command.getEmail()),
new Membership.MembershipAddress(command.getAddress()),
new Membership.MembershipIsValid(command.isValid()),
new Membership.MembershipAggregateIdentifier("default")
);
}
@Override
public void registerAxonMembership(RegisterMembershipCommand command) {
commandGateway.send(command)
.whenComplete((Object result, Throwable throwable) -> {
if (throwable == null) {
System.out.println("Aggregate ID:" + result.toString());
rport.createMembership(
new Membership.MembershipName(command.getName()),
new Membership.MembershipEmail(command.getEmail()),
new Membership.MembershipAddress(command.getAddress()),
new Membership.MembershipIsValid(command.isValid()),
new Membership.MembershipAggregateIdentifier(result.toString())
);
}
else{
System.out.println("error : " + throwable.getMessage());
}
});
}
}
================================================
FILE: membership-service/src/main/java/com/fastcampuspay/membership/application/service/UpdateMembership.java
================================================
package com.fastcampuspay.membership.application.service;
import com.fastcampuspay.common.UseCase;
import com.fastcampuspay.membership.application.port.in.UpdateMembershipCommand;
import com.fastcampuspay.membership.application.port.in.UpdateMembershipEventCommand;
import com.fastcampuspay.membership.application.port.in.UpdateMembershipUseCase;
import com.fastcampuspay.membership.application.port.out.FindMembershipPort;
import com.fastcampuspay.membership.application.port.out.UpdateMembershipPort;
import com.fastcampuspay.membership.domain.Membership;
import lombok.RequiredArgsConstructor;
import org.axonframework.commandhandling.gateway.CommandGateway;
import javax.transaction.Transactional;
@RequiredArgsConstructor
@UseCase
@Transactional
public class UpdateMembership implements UpdateMembershipUseCase {
private final UpdateMembershipPort uport;
private final FindMembershipPort fport;
private final CommandGateway commandGateway;
@Override
public Membership updateMembership(UpdateMembershipCommand command) {
return uport.updateMembership(
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())
);
}
@Override
public Membership updateAxonMembership(UpdateMembershipCommand command) {
System.out.println("update axon membership");
Membership membership = fport.findMembership(new Membership.MembershipId(command.getMembershipId()));
UpdateMembershipEventCommand eventCommand = UpdateMembershipEventCommand.builder()
.aggregateIdentifier(membership.getAggregateIdentifier())
.name(command.getName())
.email(command.getEmail())
.address(command.getAddress())
.isValid(command.isValid())
.build();
commandGateway.send(eventCommand).whenComplete((Object result, Throwable throwable) -> {
if (throwable == null) {
System.out.println("Aggregate ID:" + result);
} else {
System.out.println("error : " + throwable.getMessage());
}
});
this.updateMembership(command);
return null;
}
}
================================================
FILE: membership-service/src/main/java/com/fastcampuspay/membership/domain/Membership.java
================================================
package com.fastcampuspay.membership.domain;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.Value;
@AllArgsConstructor(access = AccessLevel.PRIVATE)
public class Membership {
/**
* The baseline balance of the account. This was the balance of the account before the first
* activity in the activityWindow.
*/
@Getter private final String membershipId;
@Getter private final String name;
@Getter private final String email;
@Getter private final String address;
@Getter private final boolean isValid;
@Getter private final String aggregateIdentifier;
public static Membership generateMember(
MembershipId membershipId, MembershipName membershipName, MembershipEmail membershipEmail, MembershipAddress membershipAddress, MembershipIsValid membershipIsValid,
MembershipAggregateIdentifier membershipAggregateIdentifier) {
return new Membership(
membershipId.membershipId,
membershipName.nameValue,
membershipEmail.emailValue,
membershipAddress.addressValue,
membershipIsValid.isValidValue,
membershipAggregateIdentifier.aggregateIdentifier
);
}
@Value
public static class MembershipId {
public MembershipId(String value) {
this.membershipId = value;
}
String membershipId ;
}
@Value
public static class MembershipName {
public MembershipName(String value) {
this.nameValue = value;
}
String nameValue;
}
@Value
public static class MembershipEmail {
public MembershipEmail(String value) {
this.emailValue = value;
}
String emailValue;
}
@Value
public static class MembershipAddress {
public MembershipAddress(String value) {
this.addressValue = value;
}
String addressValue;
}
@Value
public static class MembershipIsValid {
public MembershipIsValid(boolean value) {
this.isValidValue = value;
}
boolean isValidValue;
}
@Value
public static class MembershipAggregateIdentifier {
public MembershipAggregateIdentifier(String value) {
this.aggregateIdentifier = value;
}
String aggregateIdentifier;
}
}
================================================
FILE: money-local-service/build.gradle
================================================
plugins {
id 'com.palantir.docker' version '0.25.0'
}
ext{
axonVersion = "4.6.0"
}
group = 'com.fastcampuspay.moneylocal'
version = '0.0.1-SNAPSHOT'
dependencies {
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 group: 'javax.persistence', name: 'javax.persistence-api', version: '2.2'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation group: 'org.axonframework', name: 'axon-configuration', version: "$axonVersion"
implementation group: 'org.axonframework', name: 'axon-spring-boot-starter', version: "$axonVersion"
implementation 'org.jetbrains:annotations:23.0.0'
implementation project(path: ':common')
// runtimeOnly 'com.h2database:h2'
runtimeOnly 'mysql:mysql-connector-java'
}
docker {
println(tasks.bootJar.outputs.files)
name rootProject.name+'-'+project.name + ":" + version
dockerfile file('../Dockerfile')
files tasks.bootJar.outputs.files
buildArgs(['JAR_FILE': tasks.bootJar.outputs.files.singleFile.name])
}
================================================
FILE: money-local-service/src/main/java/com/fastcampuspay/moneylocal/MoneyLocalApplication.java
================================================
package com.fastcampuspay.moneylocal;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class MoneyLocalApplication {
public static void main(String[] args) {
SpringApplication.run(MoneyLocalApplication.class, args);
}
}
================================================
FILE: money-local-service/src/main/java/com/fastcampuspay/moneylocal/MoneyLocalConfiguration.java
================================================
package com.fastcampuspay.moneylocal;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Configuration;
@Configuration
@EnableConfigurationProperties(MoneyLocalConfigurationProperties.class)
public class MoneyLocalConfiguration {
}
================================================
FILE: money-local-service/src/main/java/com/fastcampuspay/moneylocal/MoneyLocalConfigurationProperties.java
================================================
package com.fastcampuspay.moneylocal;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
@Data
@ConfigurationProperties(prefix = "banking")
public class MoneyLocalConfigurationProperties {
private long transferThreshold = Long.MAX_VALUE;
}
================================================
FILE: money-local-service/src/main/java/com/fastcampuspay/moneylocal/SwaggerConfig.java
================================================
package com.fastcampuspay.moneylocal;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
@Configuration
@EnableSwagger2
public class SwaggerConfig {
@Bean
public Docket restAPI() {
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.select()
.apis(RequestHandlerSelectors.basePackage("com.fastcampuspay.money"))
.paths(PathSelectors.any())
.build();
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.build();
}
}
================================================
FILE: money-local-service/src/main/java/com/fastcampuspay/moneylocal/adapter/in/web/CalculateLocalMoneyController.java
================================================
package com.fastcampuspay.moneylocal.adapter.in.web;
import com.fastcampuspay.common.WebAdapter;
import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
// CQRS Controller
@WebAdapter
@RestController
@RequiredArgsConstructor
class CalculateLocalMoneyController {
// private final RegisterBankingAccountUseCase registerBankingAccountUseCase;
@GetMapping(path = "/money-local/calculate-money-sum")
ResponseEntity<Object> calculateMoneySumByLocal(){
// RegisterMembershipRequest
// name, address, email
return ResponseEntity.status(HttpStatus.NOT_IMPLEMENTED).build();
}
// TODO
// - MembershipUpdate EventHandler (EventHandler)
}
================================================
FILE: money-local-service/src/main/java/com/fastcampuspay/moneylocal/adapter/out/persistence/LocalMoneyJpaEntity.java
================================================
package com.fastcampuspay.moneylocal.adapter.out.persistence;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name = "local_money")
@Data
@AllArgsConstructor
@NoArgsConstructor
class LocalMoneyJpaEntity {
@Id
@GeneratedValue
private Long localMoneyId;
// private String name;
//
// private String address;
//
// private String email;
//
// private boolean isValid;
}
================================================
FILE: money-local-service/src/main/java/com/fastcampuspay/moneylocal/adapter/out/persistence/LocalMoneyMapper.java
================================================
package com.fastcampuspay.moneylocal.adapter.out.persistence;
import com.fastcampuspay.moneylocal.domain.MemberMoney;
import org.springframework.stereotype.Component;
@Component
class LocalMoneyMapper {
MemberMoney mapToDomainEntity(
LocalMoneyJpaEntity rechargeMoneyJpaEntity) {
System.out.println(rechargeMoneyJpaEntity.toString());
return MemberMoney.generateMemberMoney(
new MemberMoney.MemberMoneyId(rechargeMoneyJpaEntity.getLocalMoneyId()+"")
);
}
}
================================================
FILE: money-local-service/src/main/java/com/fastcampuspay/moneylocal/adapter/out/persistence/LocalMoneyPersistenceAdapter.java
================================================
package com.fastcampuspay.moneylocal.adapter.out.persistence;
import com.fastcampuspay.common.PersistenceAdapter;
import com.fastcampuspay.moneylocal.application.port.out.RechargeMoneyPort;
import com.fastcampuspay.moneylocal.domain.MemberMoney;
import lombok.RequiredArgsConstructor;
@RequiredArgsConstructor
@PersistenceAdapter
class LocalMoneyPersistenceAdapter implements RechargeMoneyPort {
// private final SpringDataRechargeMoneyRepository rechargeMoneyRepository;
// private final RechargeMoneyMapper rechargeMoneyMapper;
@Override
public void rechargeMoney(MemberMoney.MemberMoneyId memberMoneyId) {
}
}
================================================
FILE: money-local-service/src/main/java/com/fastcampuspay/moneylocal/adapter/out/persistence/SpringDataLocalMoneyRepository.java
================================================
package com.fastcampuspay.moneylocal.adapter.out.persistence;
import org.springframework.data.jpa.repository.JpaRepository;
interface SpringDataLocalMoneyRepository extends JpaRepository<LocalMoneyJpaEntity, Long> {
}
================================================
FILE: money-local-service/src/main/java/com/fastcampuspay/moneylocal/application/port/in/RechargeMoneyCommand.java
================================================
package com.fastcampuspay.moneylocal.application.port.in;
import com.fastcampuspay.common.SelfValidating;
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.constraints.NotNull;
@Builder
@Data
@EqualsAndHashCode(callSuper = false)
public
class RechargeMoneyCommand extends SelfValidating<RechargeMoneyCommand> {
@NotNull
private final String name;
@NotNull
private final String email;
@NotNull
private final String address;
@NotNull
private final boolean isValid;
public RechargeMoneyCommand(String name, String email, String address, boolean isValid) {
this.name = name;
this.email = email;
this.address = address;
this.isValid = isValid;
}
}
================================================
FILE: money-local-service/src/main/java/com/fastcampuspay/moneylocal/application/port/in/RechargeMoneyUseCase.java
================================================
package com.fastcampuspay.moneylocal.application.port.in;
public interface RechargeMoneyUseCase {
void rechargeMoney(RechargeMoneyCommand command);
}
================================================
FILE: money-local-service/src/main/java/com/fastcampuspay/moneylocal/application/port/out/RechargeMoneyPort.java
================================================
package com.fastcampuspay.moneylocal.application.port.out;
import com.fastcampuspay.moneylocal.domain.MemberMoney;
public interface RechargeMoneyPort {
void rechargeMoney(
MemberMoney.MemberMoneyId memberMoneyId
);
}
================================================
FILE: money-local-service/src/main/java/com/fastcampuspay/moneylocal/application/service/RechargeMoney.java
================================================
package com.fastcampuspay.moneylocal.application.service;
import com.fastcampuspay.common.UseCase;
import com.fastcampuspay.moneylocal.application.port.in.RechargeMoneyCommand;
import com.fastcampuspay.moneylocal.application.port.in.RechargeMoneyUseCase;
import lombok.RequiredArgsConstructor;
import javax.transaction.Transactional;
@RequiredArgsConstructor
@UseCase
@Transactional
public class RechargeMoney implements RechargeMoneyUseCase {
@Override
public void rechargeMoney(RechargeMoneyCommand command) {
}
}
================================================
FILE: money-local-service/src/main/java/com/fastcampuspay/moneylocal/domain/MemberMoney.java
================================================
package com.fastcampuspay.moneylocal.domain;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.Value;
@AllArgsConstructor(access = AccessLevel.PRIVATE)
public class MemberMoney {
/**
* The baseline balance of the account. This was the balance of the account before the first
* activity in the activityWindow.
*/
@Getter private final String memberMoneyId;
// @Getter private final String name;
// @Getter private final String email;
// @Getter private final String address;
// @Getter private final boolean isValid;
public static MemberMoney generateMemberMoney(
MemberMoneyId memberMoneyId) {
return new MemberMoney(
memberMoneyId.getMemberMoneyId()
);
}
@Value
public static class MemberMoneyId {
public MemberMoneyId(String value) {
this.memberMoneyId = value;
}
String memberMoneyId ;
}
}
================================================
FILE: money-service/build.gradle
================================================
plugins {
id 'com.palantir.docker' version '0.25.0'
}
ext{
axonVersion = "4.6.0"
}
group = 'com.fastcampuspay.money'
version = '0.0.1-SNAPSHOT'
dependencies {
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 group: 'javax.persistence', name: 'javax.persistence-api', version: '2.2'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation group: 'org.axonframework', name: 'axon-configuration', version: "$axonVersion"
implementation group: 'org.axonframework', name: 'axon-spring-boot-starter', version: "$axonVersion"
implementation 'org.jetbrains:annotations:23.0.0'
implementation project(path: ':common')
// runtimeOnly 'com.h2database:h2'
runtimeOnly 'mysql:mysql-connector-java'
}
docker {
println(tasks.bootJar.outputs.files)
name rootProject.name+'-'+project.name + ":" + version
dockerfile file('../Dockerfile')
files tasks.bootJar.outputs.files
buildArgs(['JAR_FILE': tasks.bootJar.outputs.files.singleFile.name])
}
================================================
FILE: money-service/src/main/java/com/fastcampuspay/money/MoneyApplication.java
================================================
package com.fastcampuspay.money;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class MoneyApplication {
public static void main(String[] args) {
SpringApplication.run(MoneyApplication.class, args);
}
}
================================================
FILE: money-service/src/main/java/com/fastcampuspay/money/MoneyConfiguration.java
================================================
package com.fastcampuspay.money;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Configuration;
@Configuration
@EnableConfigurationProperties(MoneyConfigurationProperties.class)
public class MoneyConfiguration {
}
================================================
FILE: money-service/src/main/java/com/fastcampuspay/money/MoneyConfigurationProperties.java
================================================
package com.fastcampuspay.money;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
@Data
@ConfigurationProperties(prefix = "banking")
public class MoneyConfigurationProperties {
private long transferThreshold = Long.MAX_VALUE;
}
================================================
FILE: money-service/src/main/java/com/fastcampuspay/money/SwaggerConfig.java
================================================
package com.fastcampuspay.money;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
@Configuration
@EnableSwagger2
public class SwaggerConfig {
@Bean
public Docket restAPI() {
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.select()
.apis(RequestHandlerSelectors.basePackage("com.fastcampuspay.money"))
.paths(PathSelectors.any())
.build();
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.build();
}
}
================================================
FILE: money-service/src/main/java/com/fastcampuspay/money/adapter/in/web/FindMoneyController.java
================================================
package com.fastcampuspay.money.adapter.in.web;
import com.fastcampuspay.common.WebAdapter;
import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@WebAdapter
@RestController
@RequiredArgsConstructor
class FindMoneyController {
// private final RegisterBankingAccountUseCase registerBankingAccountUseCase;
@GetMapping(path = "/money/money-history")
ResponseEntity<Object> findMoneyHistoryByMemberId(){
// RegisterMembershipRequest
// name, address, email
return ResponseEntity.status(HttpStatus.NOT_IMPLEMENTED).build();
}
@GetMapping(path = "/money/money-info")
ResponseEntity<Object> findMoneyInfoByRechargeMoneyId(){
// RegisterMembershipRequest
// name, address, email
return ResponseEntity.status(HttpStatus.NOT_IMPLEMENTED).build();
}
}
================================================
FILE: money-service/src/main/java/com/fastcampuspay/money/adapter/in/web/RechargeMoneyController.java
================================================
package com.fastcampuspay.money.adapter.in.web;
import com.fastcampuspay.common.WebAdapter;
import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
@WebAdapter
@RestController
@RequiredArgsConstructor
class RechargeMoneyController {
// private final RechargeMoneyUseCase registerBankingAccountUseCase;
@PostMapping(path = "/money/recharge/")
ResponseEntity<Object> rechargeMoney(){
return ResponseEntity.status(HttpStatus.NOT_IMPLEMENTED).build();
}
}
================================================
FILE: money-service/src/main/java/com/fastcampuspay/money/adapter/in/web/RequestTransferMoneyController.java
================================================
package com.fastcampuspay.money.adapter.in.web;
import com.fastcampuspay.common.WebAdapter;
import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
@WebAdapter
@RestController
@RequiredArgsConstructor
class RequestTransferMoneyController {
// private final RegisterBankingAccountUseCase registerBankingAccountUseCase;
@PostMapping(path = "/money/transfer")
ResponseEntity<Object> requestTransferMoneyBetweenMembers(){
return ResponseEntity.status(HttpStatus.NOT_IMPLEMENTED).build();
}
}
================================================
FILE: money-service/src/main/java/com/fastcampuspay/money/adapter/out/persistence/RechargeMoneyJpaEntity.java
================================================
package com.fastcampuspay.money.adapter.out.persistence;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name = "recharge_money")
@Data
@AllArgsConstructor
@NoArgsConstructor
class RechargeMoneyJpaEntity {
@Id
@GeneratedValue
private Long rechargeMoneyId;
// private String name;
//
// private String address;
//
// private String email;
//
// private boolean isValid;
}
================================================
FILE: money-service/src/main/java/com/fastcampuspay/money/adapter/out/persistence/RechargeMoneyMapper.java
================================================
package com.fastcampuspay.money.adapter.out.persistence;
import com.fastcampuspay.money.domain.MemberMoney;
import org.springframework.stereotype.Component;
@Component
class RechargeMoneyMapper {
MemberMoney mapToDomainEntity(
RechargeMoneyJpaEntity rechargeMoneyJpaEntity) {
System.out.println(rechargeMoneyJpaEntity.toString());
return MemberMoney.generateMemberMoney(
new MemberMoney.MemberMoneyId(rechargeMoneyJpaEntity.getRechargeMoneyId()+"")
);
}
}
================================================
FILE: money-service/src/main/java/com/fastcampuspay/money/adapter/out/persistence/RechargeMoneyPersistenceAdapter.java
================================================
package com.fastcampuspay.money.adapter.out.persistence;
import com.fastcampuspay.common.PersistenceAdapter;
import com.fastcampuspay.money.application.port.out.RechargeMoneyPort;
import com.fastcampuspay.money.domain.MemberMoney;
import lombok.RequiredArgsConstructor;
@RequiredArgsConstructor
@PersistenceAdapter
class RechargeMoneyPersistenceAdapter implements RechargeMoneyPort {
// private final SpringDataRechargeMoneyRepository rechargeMoneyRepository;
// private final RechargeMoneyMapper rechargeMoneyMapper;
@Override
public void rechargeMoney(MemberMoney.MemberMoneyId memberMoneyId) {
}
}
================================================
FILE: money-service/src/main/java/com/fastcampuspay/money/adapter/out/persistence/SpringDataRechargeMoneyRepository.java
================================================
package com.fastcampuspay.money.adapter.out.persistence;
import org.springframework.data.jpa.repository.JpaRepository;
interface SpringDataRechargeMoneyRepository extends JpaRepository<RechargeMoneyJpaEntity, Long> {
}
================================================
FILE: money-service/src/main/java/com/fastcampuspay/money/application/port/in/RechargeMoneyCommand.java
================================================
package com.fastcampuspay.money.application.port.in;
import com.fastcampuspay.common.SelfValidating;
import lombok.Builder;
import lombok.EqualsAndHashCode;
import lombok.Value;
import javax.validation.constraints.NotNull;
@Value
@Builder
@EqualsAndHashCode(callSuper = false)
public
class RechargeMoneyCommand extends SelfValidating<RechargeMoneyCommand> {
@NotNull
private final String name;
@NotNull
private final String email;
@NotNull
private final String address;
@NotNull
private final boolean isValid;
public RechargeMoneyCommand(String name, String email, String address, boolean isValid) {
this.name = name;
this.email = email;
this.address = address;
this.isValid = isValid;
}
}
================================================
FILE: money-service/src/main/java/com/fastcampuspay/money/application/port/in/RechargeMoneyUseCase.java
================================================
package com.fastcampuspay.money.application.port.in;
public interface RechargeMoneyUseCase {
void rechargeMoney(RechargeMoneyCommand command);
}
================================================
FILE: money-service/src/main/java/com/fastcampuspay/money/application/port/out/RechargeMoneyPort.java
================================================
package com.fastcampuspay.money.application.port.out;
import com.fastcampuspay.money.domain.MemberMoney;
public interface RechargeMoneyPort {
void rechargeMoney(
MemberMoney.MemberMoneyId memberMoneyId
);
}
================================================
FILE: money-service/src/main/java/com/fastcampuspay/money/application/service/RechargeMoney.java
================================================
package com.fastcampuspay.money.application.service;
import com.fastcampuspay.common.UseCase;
import com.fastcampuspay.money.application.port.in.RechargeMoneyCommand;
import com.fastcampuspay.money.application.port.in.RechargeMoneyUseCase;
import com.fastcampuspay.money.application.port.out.RechargeMoneyPort;
import lombok.RequiredArgsConstructor;
import javax.transaction.Transactional;
@RequiredArgsConstructor
@UseCase
@Transactional
public class RechargeMoney implements RechargeMoneyUseCase {
private final RechargeMoneyPort rport;
@Override
public void rechargeMoney(RechargeMoneyCommand command) {
}
}
================================================
FILE: money-service/src/main/java/com/fastcampuspay/money/domain/MemberMoney.java
================================================
package com.fastcampuspay.money.domain;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.Value;
@AllArgsConstructor(access = AccessLevel.PRIVATE)
public class MemberMoney {
/**
* The baseline balance of the account. This was the balance of the account before the first
* activity in the activityWindow.
*/
@Getter private final String memberMoneyId;
// @Getter private final String name;
// @Getter private final String email;
// @Getter private final String address;
// @Getter private final boolean isValid;
public static MemberMoney generateMemberMoney(
MemberMoneyId memberMoneyId) {
return new MemberMoney(
memberMoneyId.getMemberMoneyId()
);
}
@Value
public static class MemberMoneyId {
public MemberMoneyId(String value) {
this.memberMoneyId = value;
}
String memberMoneyId ;
}
}
================================================
FILE: payment-service/build.gradle
================================================
plugins {
id 'com.palantir.docker' version '0.25.0'
}
ext{
axonVersion = "4.6.0"
}
group = 'com.fastcampuspay.payment'
version = '0.0.1-SNAPSHOT'
dependencies {
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 group: 'javax.persistence', name: 'javax.persistence-api', version: '2.2'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation group: 'org.axonframework', name: 'axon-configuration', version: "$axonVersion"
implementation group: 'org.axonframework', name: 'axon-spring-boot-starter', version: "$axonVersion"
implementation 'org.jetbrains:annotations:23.0.0'
implementation project(path: ':common')
// runtimeOnly 'com.h2database:h2'
runtimeOnly 'mysql:mysql-connector-java'
}
docker {
println(tasks.bootJar.outputs.files)
name rootProject.name+'-'+project.name + ":" + version
dockerfile file('../Dockerfile')
files tasks.bootJar.outputs.files
buildArgs(['JAR_FILE': tasks.bootJar.outputs.files.singleFile.name])
}
================================================
FILE: payment-service/src/main/java/com/fastcampuspay/payment/PaymentApplication.java
================================================
package com.fastcampuspay.payment;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class PaymentApplication {
public static void main(String[] args) {
SpringApplication.run(PaymentApplication.class, args);
}
}
================================================
FILE: payment-service/src/main/java/com/fastcampuspay/payment/PaymentConfiguration.java
================================================
package com.fastcampuspay.payment;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Configuration;
@Configuration
@EnableConfigurationProperties(PaymentConfigurationProperties.class)
public class PaymentConfiguration {
}
================================================
FILE: payment-service/src/main/java/com/fastcampuspay/payment/PaymentConfigurationProperties.java
================================================
package com.fastcampuspay.payment;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
@Data
@ConfigurationProperties(prefix = "banking")
public class PaymentConfigurationProperties {
private long transferThreshold = Long.MAX_VALUE;
}
================================================
FILE: payment-service/src/main/java/com/fastcampuspay/payment/SwaggerConfig.java
================================================
package com.fastcampuspay.payment;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
@Configuration
@EnableSwagger2
public class SwaggerConfig {
@Bean
public Docket restAPI() {
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.select()
.apis(RequestHandlerSelectors.basePackage("com.fastcampuspay.money"))
.paths(PathSelectors.any())
.build();
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.build();
}
}
================================================
FILE: payment-service/src/main/java/com/fastcampuspay/payment/adapter/in/web/FindPaymentController.java
================================================
package com.fastcampuspay.payment.adapter.in.web;
import com.fastcampuspay.common.WebAdapter;
import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@WebAdapter
@RestController
@RequiredArgsConstructor
class FindPaymentController {
// private final RegisterBankingAccountUseCase registerBankingAccountUseCase;
@GetMapping(path = "/payment/info")
ResponseEntity<Object> findPaymentByPaymentId(){
// RegisterMembershipRequest
// name, address, email
return ResponseEntity.status(HttpStatus.NOT_IMPLEMENTED).build();
}
@GetMapping(path = "/payment/list-by-period")
ResponseEntity<Object> listPaymentsByPeriod(){
// RegisterMembershipRequest
// name, address, email
return ResponseEntity.status(HttpStatus.NOT_IMPLEMENTED).build();
}
}
================================================
FILE: payment-service/src/main/java/com/fastcampuspay/payment/adapter/in/web/RequestTransferMoneyController.java
================================================
package com.fastcampuspay.payment.adapter.in.web;
import com.fastcampuspay.common.WebAdapter;
import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
@WebAdapter
@RestController
@RequiredArgsConstructor
class RequestTransferMoneyController {
// private final RegisterBankingAccountUseCase registerBankingAccountUseCase;
@PostMapping(path = "/payment/request")
ResponseEntity<Object> requestPaymentAtMerchant(){
return ResponseEntity.status(HttpStatus.NOT_IMPLEMENTED).build();
}
}
================================================
FILE: payment-service/src/main/java/com/fastcampuspay/payment/adapter/out/persistence/PaymentJpaEntity.java
================================================
package com.fastcampuspay.payment.adapter.out.persistence;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name = "payment")
@Data
@AllArgsConstructor
@NoArgsConstructor
class PaymentJpaEntity {
@Id
@GeneratedValue
private Long rechargeMoneyId;
// private String name;
//
// private String address;
//
// private String email;
//
// private boolean isValid;
}
================================================
FILE: payment-service/src/main/java/com/fastcampuspay/payment/adapter/out/persistence/PaymentMapper.java
================================================
package com.fastcampuspay.payment.adapter.out.persistence;
import com.fastcampuspay.payment.domain.MemberMoney;
import org.springframework.stereotype.Component;
@Component
class PaymentMapper {
MemberMoney mapToDomainEntity(
PaymentJpaEntity rechargeMoneyJpaEntity) {
System.out.println(rechargeMoneyJpaEntity.toString());
return MemberMoney.generateMemberMoney(
new MemberMoney.MemberMoneyId(rechargeMoneyJpaEntity.getRechargeMoneyId()+"")
);
}
}
================================================
FILE: payment-service/src/main/java/com/fastcampuspay/payment/adapter/out/persistence/RechargeMoneyPersistenceAdapter.java
================================================
package com.fastcampuspay.payment.adapter.out.persistence;
import com.fastcampuspay.common.PersistenceAdapter;
import com.fastcampuspay.payment.application.port.out.RechargeMoneyPort;
import com.fastcampuspay.payment.domain.MemberMoney;
import lombok.RequiredArgsConstructor;
@RequiredArgsConstructor
@PersistenceAdapter
class PaymentPersistenceAdapter implements RechargeMoneyPort {
// private final SpringDataRechargeMoneyRepository rechargeMoneyRepository;
// private final RechargeMoneyMapper rechargeMoneyMapper;
@Override
public void rechargeMoney(MemberMoney.MemberMoneyId memberMoneyId) {
}
}
================================================
FILE: payment-service/src/main/java/com/fastcampuspay/payment/adapter/out/persistence/SpringDataPaymentRepository.java
================================================
package com.fastcampuspay.payment.adapter.out.persistence;
import org.springframework.data.jpa.repository.JpaRepository;
interface SpringDataPaymentRepository extends JpaRepository<PaymentJpaEntity, Long> {
}
================================================
FILE: payment-service/src/main/java/com/fastcampuspay/payment/application/port/in/RechargeMoneyCommand.java
================================================
package com.fastcampuspay.payment.application.port.in;
import com.fastcampuspay.common.SelfValidating;
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.constraints.NotNull;
@Data
@Builder
@EqualsAndHashCode(callSuper = false)
public
class RechargeMoneyCommand extends SelfValidating<RechargeMoneyCommand> {
@NotNull
private final String name;
@NotNull
private final String email;
@NotNull
private final String address;
@NotNull
private final boolean isValid;
public RechargeMoneyCommand(String name, String email, String address, boolean isValid) {
this.name = name;
this.email = email;
this.address = address;
this.isValid = isValid;
}
}
================================================
FILE: payment-service/src/main/java/com/fastcampuspay/payment/application/port/in/RechargeMoneyUseCase.java
================================================
package com.fastcampuspay.payment.application.port.in;
public interface RechargeMoneyUseCase {
void rechargeMoney(RechargeMoneyCommand command);
}
================================================
FILE: payment-service/src/main/java/com/fastcampuspay/payment/application/port/out/RechargeMoneyPort.java
================================================
package com.fastcampuspay.payment.application.port.out;
import com.fastcampuspay.payment.domain.MemberMoney;
public interface RechargeMoneyPort {
void rechargeMoney(
MemberMoney.MemberMoneyId memberMoneyId
);
}
================================================
FILE: payment-service/src/main/java/com/fastcampuspay/payment/application/service/RechargeMoney.java
================================================
package com.fastcampuspay.payment.application.service;
import com.fastcampuspay.common.UseCase;
import com.fastcampuspay.payment.application.port.in.RechargeMoneyCommand;
import com.fastcampuspay.payment.application.port.in.RechargeMoneyUseCase;
import lombok.RequiredArgsConstructor;
import javax.transaction.Transactional;
@RequiredArgsConstructor
@UseCase
@Transactional
public class RechargeMoney implements RechargeMoneyUseCase {
@Override
public void rechargeMoney(RechargeMoneyCommand command) {
}
}
================================================
FILE: payment-service/src/main/java/com/fastcampuspay/payment/domain/MemberMoney.java
================================================
package com.fastcampuspay.payment.domain;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.Value;
@AllArgsConstructor(access = AccessLevel.PRIVATE)
public class MemberMoney {
/**
* The baseline balance of the account. This was the balance of the account before the first
* activity in the activityWindow.
*/
@Getter private final String memberMoneyId;
// @Getter private final String name;
// @Getter private final String email;
// @Getter private final String address;
// @Getter private final boolean isValid;
public static MemberMoney generateMemberMoney(
MemberMoneyId memberMoneyId) {
return new MemberMoney(
memberMoneyId.getMemberMoneyId()
);
}
@Value
public static class MemberMoneyId {
public MemberMoneyId(String value) {
this.memberMoneyId = value;
}
String memberMoneyId ;
}
}
================================================
FILE: remittance-service/build.gradle
================================================
plugins {
id 'com.palantir.docker' version '0.25.0'
}
ext{
axonVersion = "4.6.0"
}
group = 'com.fastcampuspay.remittance'
version = '0.0.1-SNAPSHOT'
dependencies {
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 group: 'javax.persistence', name: 'javax.persistence-api', version: '2.2'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation group: 'org.axonframework', name: 'axon-configuration', version: "$axonVersion"
implementation group: 'org.axonframework', name: 'axon-spring-boot-starter', version: "$axonVersion"
implementation 'org.jetbrains:annotations:23.0.0'
implementation project(path: ':common')
// runtimeOnly 'com.h2database:h2'
runtimeOnly 'mysql:mysql-connector-java'
}
docker {
println(tasks.bootJar.outputs.files)
name rootProject.name+'-'+project.name + ":" + version
dockerfile file('../Dockerfile')
files tasks.bootJar.outputs.files
buildArgs(['JAR_FILE': tasks.bootJar.outputs.files.singleFile.name])
}
================================================
FILE: remittance-service/src/main/java/com/fastcampuspay/remittance/RemittanceApplication.java
================================================
package com.fastcampuspay.remittance;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class RemittanceApplication {
public static void main(String[] args) {
SpringApplication.run(RemittanceApplication.class, args);
}
}
================================================
FILE: remittance-service/src/main/java/com/fastcampuspay/remittance/RemittanceConfiguration.java
================================================
package com.fastcampuspay.remittance;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Configuration;
@Configuration
@EnableConfigurationProperties(RemittanceConfigurationProperties.class)
public class RemittanceConfiguration {
}
================================================
FILE: remittance-service/src/main/java/com/fastcampuspay/remittance/RemittanceConfigurationProperties.java
================================================
package com.fastcampuspay.remittance;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
@Data
@ConfigurationProperties(prefix = "banking")
public class RemittanceConfigurationProperties {
private long transferThreshold = Long.MAX_VALUE;
}
================================================
FILE: remittance-service/src/main/java/com/fastcampuspay/remittance/SwaggerConfig.java
================================================
package com.fastcampuspay.remittance;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
@Configuration
@EnableSwagger2
public class SwaggerConfig {
@Bean
public Docket restAPI() {
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.select()
.apis(RequestHandlerSelectors.basePackage("com.fastcampuspay.remittance"))
.paths(PathSelectors.any())
.build();
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.build();
}
}
================================================
FILE: remittance-service/src/main/java/com/fastcampuspay/remittance/adapter/in/web/FindRemittanceController.java
================================================
package com.fastcampuspay.remittance.adapter.in.web;
import com.fastcampuspay.common.WebAdapter;
import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@WebAdapter
@RestController
@RequiredArgsConstructor
class FindRemittanceController {
// private final RegisterBankingAccountUseCase registerBankingAccountUseCase;
@GetMapping(path = "/remittance/info")
ResponseEntity<Object> findRemittanceInfoByRemittanceId(){
return ResponseEntity.status(HttpStatus.NOT_IMPLEMENTED).build();
}
@GetMapping(path = "/remittance/history")
ResponseEntity<Object> findRemittanceHistoryByMemberId(){
return ResponseEntity.status(HttpStatus.NOT_IMPLEMENTED).build();
}
// (API Aggregation, Banking + Money)
@GetMapping(path = "/remittance/transferred-money")
ResponseEntity<Object> findMoneyTransferringByRemittanceId(){
return ResponseEntity.status(HttpStatus.NOT_IMPLEMENTED).build();
}
}
================================================
FILE: remittance-service/src/main/java/com/fastcampuspay/remittance/adapter/in/web/RequestRemittanceMoneyController.java
================================================
package com.fastcampuspay.remittance.adapter.in.web;
import com.fastcampuspay.common.WebAdapter;
import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
@WebAdapter
@RestController
@RequiredArgsConstructor
class RequestRemittanceMoneyController {
// private final RechargeMoneyUseCase registerBankingAccountUseCase;
@PostMapping(path = "/remittance/request/")
ResponseEntity<Object> requestRemittance(){
return ResponseEntity.status(HttpStatus.NOT_IMPLEMENTED).build();
}
}
================================================
FILE: remittance-service/src/main/java/com/fastcampuspay/remittance/adapter/out/persistence/RemittanceMoneyJpaEntity.java
================================================
package com.fastcampuspay.remittance.adapter.out.persistence;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name = "remittance_money")
@Data
@AllArgsConstructor
@NoArgsConstructor
class RemittanceMoneyJpaEntity {
@Id
@GeneratedValue
private Long remittanceMoneyId;
// private String name;
//
// private String address;
//
// private String email;
//
// private boolean isValid;
}
================================================
FILE: remittance-service/src/main/java/com/fastcampuspay/remittance/adapter/out/persistence/RemittanceMoneyMapper.java
================================================
package com.fastcampuspay.remittance.adapter.out.persistence;
import com.fastcampuspay.remittance.domain.RemittanceMoney;
import org.springframework.stereotype.Component;
@Component
class RemittanceMoneyMapper {
RemittanceMoney mapToDomainEntity(
RemittanceMoneyJpaEntity remittanceMoneyJpaEntity) {
System.out.println(remittanceMoneyJpaEntity.toString());
return RemittanceMoney.generateRemittanceMoney(
new RemittanceMoney.RemittanceMoneyId(remittanceMoneyJpaEntity.getRemittanceMoneyId()+"")
);
}
}
================================================
FILE: remittance-service/src/main/java/com/fastcampuspay/remittance/adapter/out/persistence/RemittanceMoneyPersistenceAdapter.java
================================================
package com.fastcampuspay.remittance.adapter.out.persistence;
import com.fastcampuspay.common.PersistenceAdapter;
import com.fastcampuspay.remittance.application.port.out.RemittanceMoneyPort;
import com.fastcampuspay.remittance.domain.RemittanceMoney;
import lombok.RequiredArgsConstructor;
@RequiredArgsConstructor
@PersistenceAdapter
class RemittanceMoneyPersistenceAdapter implements RemittanceMoneyPort {
private final SpringDataRemittanceMoneyRepository remittanceMoneyRepository;
private final RemittanceMoneyMapper remittanceMoneyMapper;
private Long orZero(Long value){
return value == null ? 0L : value;
}
@Override
public void remittanceMoney(RemittanceMoney.RemittanceMoneyId remittanceMoneyId) {
}
}
================================================
FILE: remittance-service/src/main/java/com/fastcampuspay/remittance/adapter/out/persistence/SpringDataRemittanceMoneyRepository.java
================================================
package com.fastcampuspay.remittance.adapter.out.persistence;
import org.springframework.data.jpa.repository.JpaRepository;
interface SpringDataRemittanceMoneyRepository extends JpaRepository<RemittanceMoneyJpaEntity, Long> {
}
================================================
FILE: remittance-service/src/main/java/com/fastcampuspay/remittance/application/port/in/RemittanceMoneyCommand.java
================================================
package com.fastcampuspay.remittance.application.port.in;
import com.fastcampuspay.common.SelfValidating;
import lombok.Builder;
import lombok.EqualsAndHashCode;
import lombok.Value;
import javax.validation.constraints.NotNull;
@Value
@Builder
@EqualsAndHashCode(callSuper = false)
public
class RemittanceMoneyCommand extends SelfValidating<RemittanceMoneyCommand> {
@NotNull
private final String name;
@NotNull
private final String email;
@NotNull
private final String address;
@NotNull
private final boolean isValid;
public RemittanceMoneyCommand(String name, String email, String address, boolean isValid) {
this.name = name;
this.email = email;
this.address = address;
this.isValid = isValid;
}
}
================================================
FILE: remittance-service/src/main/java/com/fastcampuspay/remittance/application/port/in/RemittanceMoneyUseCase.java
================================================
package com.fastcampuspay.remittance.application.port.in;
public interface RemittanceMoneyUseCase {
void remittanceMoney(RemittanceMoneyCommand command);
}
================================================
FILE: remittance-service/src/main/java/com/fastcampuspay/remittance/application/port/out/RemittanceMoneyPort.java
================================================
package com.fastcampuspay.remittance.application.port.out;
import com.fastcampuspay.remittance.domain.RemittanceMoney;
public interface RemittanceMoneyPort {
void remittanceMoney(
RemittanceMoney.RemittanceMoneyId remittanceMoneyId
);
}
================================================
FILE: remittance-service/src/main/java/com/fastcampuspay/remittance/application/service/RemittanceMoney.java
================================================
package com.fastcampuspay.remittance.application.service;
import com.fastcampuspay.common.UseCase;
import com.fastcampuspay.remittance.application.port.in.RemittanceMoneyCommand;
import com.fastcampuspay.remittance.application.port.in.RemittanceMoneyUseCase;
import com.fastcampuspay.remittance.application.port.out.RemittanceMoneyPort;
import lombok.RequiredArgsConstructor;
import javax.transaction.Transactional;
@RequiredArgsConstructor
@UseCase
@Transactional
public class RemittanceMoney implements RemittanceMoneyUseCase {
private final RemittanceMoneyPort rport;
@Override
public void remittanceMoney(RemittanceMoneyCommand command) {
}
}
================================================
FILE: remittance-service/src/main/java/com/fastcampuspay/remittance/domain/RemittanceMoney.java
================================================
package com.fastcampuspay.remittance.domain;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.Value;
@AllArgsConstructor(access = AccessLevel.PRIVATE)
public class RemittanceMoney {
/**
* The baseline balance of the account. This was the balance of the account before the first
* activity in the activityWindow.
*/
@Getter private final String memberMoneyId;
// @Getter private final String name;
// @Getter private final String email;
// @Getter private final String address;
// @Getter private final boolean isValid;
public static RemittanceMoney generateRemittanceMoney(
RemittanceMoneyId memberMoneyId) {
return new RemittanceMoney(
memberMoneyId.getRemittanceMoney()
);
}
@Value
public static class RemittanceMoneyId {
public RemittanceMoneyId(String value) {
this.remittanceMoney = value;
}
String remittanceMoney ;
}
}
================================================
FILE: settings.gradle
================================================
rootProject.name = 'fastcampus-pay'
include 'common'
include 'membership-service'
include 'banking-service'
include 'money-service'
include 'money-local-service'
include 'remittance-service'
include 'payment-service'
include 'settlement-service'
================================================
FILE: settlement-service/build.gradle
================================================
plugins {
id 'com.palantir.docker' version '0.25.0'
}
ext{
axonVersion = "4.6.0"
}
group = 'com.fastcampuspay.settlement'
version = '0.0.1-SNAPSHOT'
dependencies {
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 group: 'javax.persistence', name: 'javax.persistence-api', version: '2.2'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation group: 'org.axonframework', name: 'axon-configuration', version: "$axonVersion"
implementation group: 'org.axonframework', name: 'axon-spring-boot-starter', version: "$axonVersion"
implementation 'org.jetbrains:annotations:23.0.0'
implementation project(path: ':common')
// runtimeOnly 'com.h2database:h2'
runtimeOnly 'mysql:mysql-connector-java'
}
docker {
println(tasks.bootJar.outputs.files)
name rootProject.name+'-'+project.name + ":" + version
dockerfile file('../Dockerfile')
files tasks.bootJar.outputs.files
buildArgs(['JAR_FILE': tasks.bootJar.outputs.files.singleFile.name])
}
================================================
FILE: settlement-service/src/main/java/com/fastcampuspay/settlement/SettlementApplication.java
================================================
package com.fastcampuspay.settlement;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class SettlementApplication {
public static void main(String[] args) {
SpringApplication.run(SettlementApplication.class, args);
}
}
================================================
FILE: settlement-service/src/main/java/com/fastcampuspay/settlement/SettlementConfiguration.java
================================================
package com.fastcampuspay.settlement;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Configuration;
@Configuration
@EnableConfigurationProperties(SettlementConfigurationProperties.class)
public class SettlementConfiguration {
}
================================================
FILE: settlement-service/src/main/java/com/fastcampuspay/settlement/SettlementConfigurationProperties.java
================================================
package com.fastcampuspay.settlement;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
@Data
@ConfigurationProperties(prefix = "banking")
public class SettlementConfigurationProperties {
private long transferThreshold = Long.MAX_VALUE;
}
================================================
FILE: settlement-service/src/main/java/com/fastcampuspay/settlement/SwaggerConfig.java
================================================
package com.fastcampuspay.settlement;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
@Configuration
@EnableSwagger2
public class SwaggerConfig {
@Bean
public Docket restAPI() {
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.select()
.apis(RequestHandlerSelectors.basePackage("com.fastcampuspay.money"))
.paths(PathSelectors.any())
.build();
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.build();
}
}
================================================
FILE: settlement-service/src/main/java/com/fastcampuspay/settlement/adapter/in/web/SettlementStartController.java
================================================
package com.fastcampuspay.settlement.adapter.in.web;
import com.fastcampuspay.common.WebAdapter;
import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
@WebAdapter
@RestController
@RequiredArgsConstructor
class SettlementStartController {
// private final RegisterBankingAccountUseCase registerBankingAccountUseCase;
@PostMapping(path = "/settlement/start")
ResponseEntity<Object> startSettlementByPeriod(){
return ResponseEntity.status(HttpStatus.NOT_IMPLEMENTED).build();
}
}
================================================
FILE: settlement-service/src/main/java/com/fastcampuspay/settlement/adapter/out/persistence/RechargeMoneyMapper.java
================================================
package com.fastcampuspay.settlement.adapter.out.persistence;
import com.fastcampuspay.settlement.domain.MemberMoney;
import org.springframework.stereotype.Component;
@Component
class SettlementMapper {
MemberMoney mapToDomainEntity(
SettlementJpaEntity rechargeMoneyJpaEntity) {
System.out.println(rechargeMoneyJpaEntity.toString());
return MemberMoney.generateMemberMoney(
new MemberMoney.MemberMoneyId(rechargeMoneyJpaEntity.getRechargeMoneyId()+"")
);
}
}
================================================
FILE: settlement-service/src/main/java/com/fastcampuspay/settlement/adapter/out/persistence/RechargeMoneyPersistenceAdapter.java
================================================
package com.fastcampuspay.settlement.adapter.out.persistence;
import com.fastcampuspay.common.PersistenceAdapter;
import com.fastcampuspay.settlement.application.port.out.RechargeMoneyPort;
import com.fastcampuspay.settlement.domain.MemberMoney;
import lombok.RequiredArgsConstructor;
@RequiredArgsConstructor
@PersistenceAdapter
class RechargeMoneyPersistenceAdapter implements RechargeMoneyPort {
// private final SpringDataRechargeMoneyRepository rechargeMoneyRepository;
// private final RechargeMoneyMapper rechargeMoneyMapper;
@Override
public void rechargeMoney(MemberMoney.MemberMoneyId memberMoneyId) {
}
}
================================================
FILE: settlement-service/src/main/java/com/fastcampuspay/settlement/adapter/out/persistence/SettlementJpaEntity.java
================================================
package com.fastcampuspay.settlement.adapter.out.persistence;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name = "settlement")
@Data
@AllArgsConstructor
@NoArgsConstructor
class SettlementJpaEntity {
@Id
@GeneratedValue
private Long rechargeMoneyId;
// private String name;
//
// private String address;
//
// private String email;
//
// private boolean isValid;
}
================================================
FILE: settlement-service/src/main/java/com/fastcampuspay/settlement/adapter/out/persistence/SpringDataSettlementRepository.java
================================================
package com.fastcampuspay.settlement.adapter.out.persistence;
import org.springframework.data.jpa.repository.JpaRepository;
interface SpringDataSettlementRepository extends JpaRepository<SettlementJpaEntity, Long> {
}
================================================
FILE: settlement-service/src/main/java/com/fastcampuspay/settlement/application/port/in/RechargeMoneyCommand.java
================================================
package com.fastcampuspay.settlement.application.port.in;
import com.fastcampuspay.common.SelfValidating;
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.Value;
import javax.validation.constraints.NotNull;
@Data
@Builder
@EqualsAndHashCode(callSuper = false)
public
class RechargeMoneyCommand extends SelfValidating<RechargeMoneyCommand> {
@NotNull
private final String name;
@NotNull
private final String email;
@NotNull
private final String address;
@NotNull
private final boolean isValid;
public RechargeMoneyCommand(String name, String email, String address, boolean isValid) {
this.name = name;
this.email = email;
this.address = address;
this.isValid = isValid;
}
}
================================================
FILE: settlement-service/src/main/java/com/fastcampuspay/settlement/application/port/in/RechargeMoneyUseCase.java
================================================
package com.fastcampuspay.settlement.application.port.in;
public interface RechargeMoneyUseCase {
void rechargeMoney(RechargeMoneyCommand command);
}
================================================
FILE: settlement-service/src/main/java/com/fastcampuspay/settlement/application/port/out/RechargeMoneyPort.java
================================================
package com.fastcampuspay.settlement.application.port.out;
import com.fastcampuspay.settlement.domain.MemberMoney;
public interface RechargeMoneyPort {
void rechargeMoney(
MemberMoney.MemberMoneyId memberMoneyId
);
}
================================================
FILE: settlement-service/src/main/java/com/fastcampuspay/settlement/application/service/RechargeMoney.java
================================================
package com.fastcampuspay.settlement.application.service;
import com.fastcampuspay.common.UseCase;
import com.fastcampuspay.settlement.application.port.in.RechargeMoneyCommand;
import com.fastcampuspay.settlement.application.port.in.RechargeMoneyUseCase;
import lombok.RequiredArgsConstructor;
import javax.transaction.Transactional;
@RequiredArgsConstructor
@UseCase
@Transactional
public class RechargeMoney implements RechargeMoneyUseCase {
@Override
public void rechargeMoney(RechargeMoneyCommand command) {
}
}
================================================
FILE: settlement-service/src/main/java/com/fastcampuspay/settlement/domain/MemberMoney.java
================================================
package com.fastcampuspay.settlement.domain;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.Value;
@AllArgsConstructor(access = AccessLevel.PRIVATE)
public class MemberMoney {
/**
* The baseline balance of the account. This was the balance of the account before the first
* activity in the activityWindow.
*/
@Getter private final String memberMoneyId;
// @Getter private final String name;
// @Getter private final String email;
// @Getter private final String address;
// @Getter private final boolean isValid;
public static MemberMoney generateMemberMoney(
MemberMoneyId memberMoneyId) {
return new MemberMoney(
memberMoneyId.getMemberMoneyId()
);
}
@Value
public static class MemberMoneyId {
public MemberMoneyId(String value) {
this.memberMoneyId = value;
}
String memberMoneyId ;
}
}
gitextract_owzcci7l/
├── .gitignore
├── .idea/
│ ├── .gitignore
│ ├── compiler.xml
│ ├── gradle.xml
│ ├── jarRepositories.xml
│ ├── misc.xml
│ ├── modules/
│ │ ├── common/
│ │ │ └── fastcampus-pay.common.main.iml
│ │ └── settlement-service/
│ │ └── fastcampus-pay.settlement-service.main.iml
│ ├── modules.xml
│ ├── uiDesigner.xml
│ └── vcs.xml
├── Dockerfile
├── README.md
├── banking-service/
│ ├── build.gradle
│ └── src/
│ └── main/
│ └── java/
│ └── com/
│ └── fastcampuspay/
│ └── banking/
│ ├── BankingApplication.java
│ ├── BankingConfiguration.java
│ ├── BankingConfigurationProperties.java
│ ├── SwaggerConfig.java
│ ├── adapter/
│ │ ├── in/
│ │ │ └── web/
│ │ │ ├── FindBankingAccountInfoController.java
│ │ │ ├── RegisterBankingAccountInfoController.java
│ │ │ ├── RegisterBankingAccountInfoRequest.java
│ │ │ └── RequestTransferMoneyController.java
│ │ └── out/
│ │ └── persistence/
│ │ ├── BankingAccountPersistenceAdapter.java
│ │ ├── BankingAccountRegisterInfoJpaEntity.java
│ │ ├── BankingAccountRegisterInfoMapper.java
│ │ └── SpringDataBankingAccountRegisterInfoRepository.java
│ ├── application/
│ │ ├── port/
│ │ │ ├── in/
│ │ │ │ ├── RegisterBankingAccountCommand.java
│ │ │ │ └── RegisterBankingAccountUseCase.java
│ │ │ └── out/
│ │ │ └── RegisterBankingAccountPort.java
│ │ └── service/
│ │ └── RegisterBankingAccount.java
│ └── domain/
│ ├── BankingAccountRegisterInfo.java
│ └── TransferMoney.java
├── build.gradle
├── common/
│ ├── build.gradle
│ └── src/
│ └── main/
│ └── java/
│ └── com/
│ └── fastcampuspay/
│ └── common/
│ ├── PersistenceAdapter.java
│ ├── SelfValidating.java
│ ├── UseCase.java
│ ├── WebAdapter.java
│ └── events/
│ └── RegisterAccountEvent.java
├── db/
│ ├── conf.d/
│ │ └── my.cnf
│ └── initdb.d/
│ ├── create_table.sql
│ └── load_data.sql
├── docker-compose.yaml
├── gradle/
│ └── wrapper/
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradle.properties
├── gradlew
├── gradlew.bat
├── membership-service/
│ ├── build.gradle
│ └── src/
│ └── main/
│ └── java/
│ └── com/
│ └── fastcampuspay/
│ └── membership/
│ ├── MembershipApplication.java
│ ├── MembershipConfiguration.java
│ ├── MembershipConfigurationProperties.java
│ ├── SwaggerConfig.java
│ ├── adapter/
│ │ ├── in/
│ │ │ └── web/
│ │ │ ├── FindMembershipController.java
│ │ │ ├── FindMembershipRequest.java
│ │ │ ├── LoginAuthMembershipController.java
│ │ │ ├── RegisterMembershipController.java
│ │ │ ├── RegisterMembershipRequest.java
│ │ │ ├── UpdateMembershipController.java
│ │ │ └── UpdateMembershipRequest.java
│ │ └── out/
│ │ └── persistence/
│ │ ├── MembershipJpaEntity.java
│ │ ├── MembershipMapper.java
│ │ ├── MembershipPersistenceAdapter.java
│ │ └── SpringDataMembershipRepository.java
│ ├── application/
│ │ ├── port/
│ │ │ ├── in/
│ │ │ │ ├── FindMembershipCommand.java
│ │ │ │ ├── FindMembershipUseCase.java
│ │ │ │ ├── RegisterMembershipCommand.java
│ │ │ │ ├── RegisterMembershipUseCase.java
│ │ │ │ ├── UpdateMembershipCommand.java
│ │ │ │ ├── UpdateMembershipEventCommand.java
│ │ │ │ ├── UpdateMembershipUseCase.java
│ │ │ │ └── aggregate/
│ │ │ │ └── MembershipAggregate.java
│ │ │ └── out/
│ │ │ ├── FindMembershipPort.java
│ │ │ ├── RegisterMembershipPort.java
│ │ │ ├── UpdateMembershipPort.java
│ │ │ └── query/
│ │ │ ├── FindMembershipQuery.java
│ │ │ └── MembershipQueryHandler.java
│ │ ├── saga/
│ │ │ ├── MembershipCreateEvent.java
│ │ │ ├── MembershipUpdateEvent.java
│ │ │ ├── Order.java
│ │ │ ├── OrderCancelledEvent.java
│ │ │ ├── OrderConfirmedEvent.java
│ │ │ ├── OrderCreatedEvent.java
│ │ │ ├── OrderPlacedEvent.java
│ │ │ ├── OrderSaga.java
│ │ │ ├── Payment.java
│ │ │ ├── PaymentCancelledEvent.java
│ │ │ ├── PaymentCompletedEvent.java
│ │ │ └── PaymentRequestedCommand.java
│ │ └── service/
│ │ ├── FindMembership.java
│ │ ├── RegisterMembership.java
│ │ └── UpdateMembership.java
│ └── domain/
│ └── Membership.java
├── money-local-service/
│ ├── build.gradle
│ └── src/
│ └── main/
│ └── java/
│ └── com/
│ └── fastcampuspay/
│ └── moneylocal/
│ ├── MoneyLocalApplication.java
│ ├── MoneyLocalConfiguration.java
│ ├── MoneyLocalConfigurationProperties.java
│ ├── SwaggerConfig.java
│ ├── adapter/
│ │ ├── in/
│ │ │ └── web/
│ │ │ └── CalculateLocalMoneyController.java
│ │ └── out/
│ │ └── persistence/
│ │ ├── LocalMoneyJpaEntity.java
│ │ ├── LocalMoneyMapper.java
│ │ ├── LocalMoneyPersistenceAdapter.java
│ │ └── SpringDataLocalMoneyRepository.java
│ ├── application/
│ │ ├── port/
│ │ │ ├── in/
│ │ │ │ ├── RechargeMoneyCommand.java
│ │ │ │ └── RechargeMoneyUseCase.java
│ │ │ └── out/
│ │ │ └── RechargeMoneyPort.java
│ │ └── service/
│ │ └── RechargeMoney.java
│ └── domain/
│ └── MemberMoney.java
├── money-service/
│ ├── build.gradle
│ └── src/
│ └── main/
│ └── java/
│ └── com/
│ └── fastcampuspay/
│ └── money/
│ ├── MoneyApplication.java
│ ├── MoneyConfiguration.java
│ ├── MoneyConfigurationProperties.java
│ ├── SwaggerConfig.java
│ ├── adapter/
│ │ ├── in/
│ │ │ └── web/
│ │ │ ├── FindMoneyController.java
│ │ │ ├── RechargeMoneyController.java
│ │ │ └── RequestTransferMoneyController.java
│ │ └── out/
│ │ └── persistence/
│ │ ├── RechargeMoneyJpaEntity.java
│ │ ├── RechargeMoneyMapper.java
│ │ ├── RechargeMoneyPersistenceAdapter.java
│ │ └── SpringDataRechargeMoneyRepository.java
│ ├── application/
│ │ ├── port/
│ │ │ ├── in/
│ │ │ │ ├── RechargeMoneyCommand.java
│ │ │ │ └── RechargeMoneyUseCase.java
│ │ │ └── out/
│ │ │ └── RechargeMoneyPort.java
│ │ └── service/
│ │ └── RechargeMoney.java
│ └── domain/
│ └── MemberMoney.java
├── payment-service/
│ ├── build.gradle
│ └── src/
│ └── main/
│ └── java/
│ └── com/
│ └── fastcampuspay/
│ └── payment/
│ ├── PaymentApplication.java
│ ├── PaymentConfiguration.java
│ ├── PaymentConfigurationProperties.java
│ ├── SwaggerConfig.java
│ ├── adapter/
│ │ ├── in/
│ │ │ └── web/
│ │ │ ├── FindPaymentController.java
│ │ │ └── RequestTransferMoneyController.java
│ │ └── out/
│ │ └── persistence/
│ │ ├── PaymentJpaEntity.java
│ │ ├── PaymentMapper.java
│ │ ├── RechargeMoneyPersistenceAdapter.java
│ │ └── SpringDataPaymentRepository.java
│ ├── application/
│ │ ├── port/
│ │ │ ├── in/
│ │ │ │ ├── RechargeMoneyCommand.java
│ │ │ │ └── RechargeMoneyUseCase.java
│ │ │ └── out/
│ │ │ └── RechargeMoneyPort.java
│ │ └── service/
│ │ └── RechargeMoney.java
│ └── domain/
│ └── MemberMoney.java
├── remittance-service/
│ ├── build.gradle
│ └── src/
│ └── main/
│ └── java/
│ └── com/
│ └── fastcampuspay/
│ └── remittance/
│ ├── RemittanceApplication.java
│ ├── RemittanceConfiguration.java
│ ├── RemittanceConfigurationProperties.java
│ ├── SwaggerConfig.java
│ ├── adapter/
│ │ ├── in/
│ │ │ └── web/
│ │ │ ├── FindRemittanceController.java
│ │ │ └── RequestRemittanceMoneyController.java
│ │ └── out/
│ │ └── persistence/
│ │ ├── RemittanceMoneyJpaEntity.java
│ │ ├── RemittanceMoneyMapper.java
│ │ ├── RemittanceMoneyPersistenceAdapter.java
│ │ └── SpringDataRemittanceMoneyRepository.java
│ ├── application/
│ │ ├── port/
│ │ │ ├── in/
│ │ │ │ ├── RemittanceMoneyCommand.java
│ │ │ │ └── RemittanceMoneyUseCase.java
│ │ │ └── out/
│ │ │ └── RemittanceMoneyPort.java
│ │ └── service/
│ │ └── RemittanceMoney.java
│ └── domain/
│ └── RemittanceMoney.java
├── settings.gradle
└── settlement-service/
├── build.gradle
└── src/
└── main/
└── java/
└── com/
└── fastcampuspay/
└── settlement/
├── SettlementApplication.java
├── SettlementConfiguration.java
├── SettlementConfigurationProperties.java
├── SwaggerConfig.java
├── adapter/
│ ├── in/
│ │ └── web/
│ │ └── SettlementStartController.java
│ └── out/
│ └── persistence/
│ ├── RechargeMoneyMapper.java
│ ├── RechargeMoneyPersistenceAdapter.java
│ ├── SettlementJpaEntity.java
│ └── SpringDataSettlementRepository.java
├── application/
│ ├── port/
│ │ ├── in/
│ │ │ ├── RechargeMoneyCommand.java
│ │ │ └── RechargeMoneyUseCase.java
│ │ └── out/
│ │ └── RechargeMoneyPort.java
│ └── service/
│ └── RechargeMoney.java
└── domain/
└── MemberMoney.java
SYMBOL INDEX (306 symbols across 139 files)
FILE: banking-service/src/main/java/com/fastcampuspay/banking/BankingApplication.java
class BankingApplication (line 6) | @SpringBootApplication
method main (line 9) | public static void main(String[] args) {
FILE: banking-service/src/main/java/com/fastcampuspay/banking/BankingConfiguration.java
class BankingConfiguration (line 6) | @Configuration
FILE: banking-service/src/main/java/com/fastcampuspay/banking/BankingConfigurationProperties.java
class BankingConfigurationProperties (line 6) | @Data
FILE: banking-service/src/main/java/com/fastcampuspay/banking/SwaggerConfig.java
class SwaggerConfig (line 13) | @Configuration
method restAPI (line 17) | @Bean
method apiInfo (line 27) | private ApiInfo apiInfo() {
FILE: banking-service/src/main/java/com/fastcampuspay/banking/adapter/in/web/FindBankingAccountInfoController.java
class FindBankingAccountInfoController (line 10) | @WebAdapter
method findRegisteredBankingAccountByMemberId (line 17) | @GetMapping(path = "/banking/registered-banking-account/")
method findTransferMoneyInfoByMemberId (line 25) | @GetMapping(path = "/banking/transfer-money/")
method findTransferMoneyInfoByBankingId (line 33) | @GetMapping(path = "/banking/transfer-money-info/")
FILE: banking-service/src/main/java/com/fastcampuspay/banking/adapter/in/web/RegisterBankingAccountInfoController.java
class RegisterBankingAccountInfoController (line 11) | @WebAdapter
method registerBankingAccount (line 18) | @PostMapping(path = "/banking/account/")
FILE: banking-service/src/main/java/com/fastcampuspay/banking/adapter/in/web/RegisterBankingAccountInfoRequest.java
class RegisterBankingAccountInfoRequest (line 8) | @Getter
FILE: banking-service/src/main/java/com/fastcampuspay/banking/adapter/in/web/RequestTransferMoneyController.java
class RequestTransferMoneyController (line 11) | @WebAdapter
method requestTransferMoneyToBank (line 18) | @PostMapping(path = "/banking/transfer-money")
FILE: banking-service/src/main/java/com/fastcampuspay/banking/adapter/out/persistence/BankingAccountPersistenceAdapter.java
class BankingAccountPersistenceAdapter (line 8) | @RequiredArgsConstructor
method orZero (line 15) | private Long orZero(Long value){
method registerBankingAccount (line 20) | @Override
FILE: banking-service/src/main/java/com/fastcampuspay/banking/adapter/out/persistence/BankingAccountRegisterInfoJpaEntity.java
class BankingAccountRegisterInfoJpaEntity (line 12) | @Entity
FILE: banking-service/src/main/java/com/fastcampuspay/banking/adapter/out/persistence/BankingAccountRegisterInfoMapper.java
class BankingAccountRegisterInfoMapper (line 6) | @Component
method mapToDomainEntity (line 8) | BankingAccountRegisterInfo mapToDomainEntity(
FILE: banking-service/src/main/java/com/fastcampuspay/banking/adapter/out/persistence/SpringDataBankingAccountRegisterInfoRepository.java
type SpringDataBankingAccountRegisterInfoRepository (line 5) | interface SpringDataBankingAccountRegisterInfoRepository extends JpaRepo...
FILE: banking-service/src/main/java/com/fastcampuspay/banking/application/port/in/RegisterBankingAccountCommand.java
class RegisterBankingAccountCommand (line 11) | @Value
method RegisterBankingAccountCommand (line 29) | public RegisterBankingAccountCommand(String name, String email, String...
FILE: banking-service/src/main/java/com/fastcampuspay/banking/application/port/in/RegisterBankingAccountUseCase.java
type RegisterBankingAccountUseCase (line 3) | public interface RegisterBankingAccountUseCase {
method registerBankingAccount (line 5) | void registerBankingAccount(RegisterBankingAccountCommand command);
FILE: banking-service/src/main/java/com/fastcampuspay/banking/application/port/out/RegisterBankingAccountPort.java
type RegisterBankingAccountPort (line 6) | public interface RegisterBankingAccountPort {
method registerBankingAccount (line 8) | void registerBankingAccount(
FILE: banking-service/src/main/java/com/fastcampuspay/banking/application/service/RegisterBankingAccount.java
class RegisterBankingAccount (line 12) | @RequiredArgsConstructor
method registerBankingAccount (line 19) | @Override
FILE: banking-service/src/main/java/com/fastcampuspay/banking/domain/BankingAccountRegisterInfo.java
class BankingAccountRegisterInfo (line 8) | @AllArgsConstructor(access = AccessLevel.PRIVATE)
method generateBankingAccountRegisterInfo (line 20) | public static BankingAccountRegisterInfo generateBankingAccountRegiste...
class BankingAccountRegisterInfoId (line 27) | @Value
method BankingAccountRegisterInfoId (line 29) | public BankingAccountRegisterInfoId(String value) {
FILE: banking-service/src/main/java/com/fastcampuspay/banking/domain/TransferMoney.java
class TransferMoney (line 8) | @AllArgsConstructor(access = AccessLevel.PRIVATE)
method generateTransferMoney (line 16) | public static TransferMoney generateTransferMoney(
class TransferMoneyId (line 23) | @Value
method TransferMoneyId (line 25) | public TransferMoneyId(String value) {
FILE: common/src/main/java/com/fastcampuspay/common/SelfValidating.java
class SelfValidating (line 6) | public abstract class SelfValidating<T> {
method SelfValidating (line 10) | public SelfValidating() {
method validateSelf (line 19) | protected void validateSelf() {
FILE: common/src/main/java/com/fastcampuspay/common/events/RegisterAccountEvent.java
class RegisterAccountEvent (line 5) | public class RegisterAccountEvent {
method RegisterAccountEvent (line 8) | public RegisterAccountEvent(){
method RegisterAccountEvent (line 11) | public RegisterAccountEvent(String accountId) {
method getAccountId (line 15) | public String getAccountId() {
method equals (line 19) | @Override
method hashCode (line 31) | @Override
method toString (line 36) | @Override
FILE: db/initdb.d/create_table.sql
type dead_letter_entry (line 5) | create table IF NOT EXISTS dead_letter_entry (
FILE: membership-service/src/main/java/com/fastcampuspay/membership/MembershipApplication.java
class MembershipApplication (line 6) | @SpringBootApplication
method main (line 9) | public static void main(String[] args) {
FILE: membership-service/src/main/java/com/fastcampuspay/membership/MembershipConfiguration.java
class MembershipConfiguration (line 6) | @Configuration
FILE: membership-service/src/main/java/com/fastcampuspay/membership/MembershipConfigurationProperties.java
class MembershipConfigurationProperties (line 6) | @Data
FILE: membership-service/src/main/java/com/fastcampuspay/membership/SwaggerConfig.java
class SwaggerConfig (line 13) | @Configuration
method restAPI (line 17) | @Bean
method apiInfo (line 27) | private ApiInfo apiInfo() {
FILE: membership-service/src/main/java/com/fastcampuspay/membership/adapter/in/web/FindMembershipController.java
class FindMembershipController (line 13) | @WebAdapter
method findMembershipByMemberId (line 20) | @GetMapping(path = "/membership/{membershipId}")
method findAxonMembershipByMemberId (line 29) | @GetMapping(path = "/membership/axon/{membershipId}")
FILE: membership-service/src/main/java/com/fastcampuspay/membership/adapter/in/web/FindMembershipRequest.java
class FindMembershipRequest (line 8) | @Getter
FILE: membership-service/src/main/java/com/fastcampuspay/membership/adapter/in/web/LoginAuthMembershipController.java
class LoginAuthMembershipController (line 10) | @WebAdapter
method loginByMembershipIdPw (line 15) | @PostMapping(path = "/membership/login/")
method authByToken (line 21) | @PostMapping(path = "/membership/auth/")
FILE: membership-service/src/main/java/com/fastcampuspay/membership/adapter/in/web/RegisterMembershipController.java
class RegisterMembershipController (line 11) | @WebAdapter
method registerMembership (line 17) | @PostMapping(path = "/membership/register/")
method registerAxonMembership (line 30) | @PostMapping(path = "/membership/axon-register/")
FILE: membership-service/src/main/java/com/fastcampuspay/membership/adapter/in/web/RegisterMembershipRequest.java
class RegisterMembershipRequest (line 8) | @Getter
FILE: membership-service/src/main/java/com/fastcampuspay/membership/adapter/in/web/UpdateMembershipController.java
class UpdateMembershipController (line 13) | @WebAdapter
method updateMembershipByMemberId (line 19) | @PutMapping(path = "/membership/update")
method updateAxonMembershipByMemberId (line 32) | @PutMapping(path = "/membership/axon-update")
FILE: membership-service/src/main/java/com/fastcampuspay/membership/adapter/in/web/UpdateMembershipRequest.java
class UpdateMembershipRequest (line 8) | @Getter
FILE: membership-service/src/main/java/com/fastcampuspay/membership/adapter/out/persistence/MembershipJpaEntity.java
class MembershipJpaEntity (line 12) | @Entity
method MembershipJpaEntity (line 33) | public MembershipJpaEntity(String name, String address, String email, ...
method toString (line 41) | @Override
FILE: membership-service/src/main/java/com/fastcampuspay/membership/adapter/out/persistence/MembershipMapper.java
class MembershipMapper (line 6) | @Component
method mapToDomainEntity (line 8) | Membership mapToDomainEntity(
FILE: membership-service/src/main/java/com/fastcampuspay/membership/adapter/out/persistence/MembershipPersistenceAdapter.java
class MembershipPersistenceAdapter (line 10) | @RequiredArgsConstructor
method createMembership (line 17) | @Override
method findMembership (line 35) | @Override
method updateMembership (line 42) | @Override
FILE: membership-service/src/main/java/com/fastcampuspay/membership/adapter/out/persistence/SpringDataMembershipRepository.java
type SpringDataMembershipRepository (line 5) | interface SpringDataMembershipRepository extends JpaRepository<Membershi...
FILE: membership-service/src/main/java/com/fastcampuspay/membership/application/port/in/FindMembershipCommand.java
class FindMembershipCommand (line 9) | @Data
FILE: membership-service/src/main/java/com/fastcampuspay/membership/application/port/in/FindMembershipUseCase.java
type FindMembershipUseCase (line 5) | public interface FindMembershipUseCase {
method findMembership (line 7) | Membership findMembership(FindMembershipCommand command);
method findAxonMembership (line 8) | Membership findAxonMembership(FindMembershipCommand command);
FILE: membership-service/src/main/java/com/fastcampuspay/membership/application/port/in/RegisterMembershipCommand.java
class RegisterMembershipCommand (line 11) | @Builder
method RegisterMembershipCommand (line 29) | public RegisterMembershipCommand(String name, String email, String add...
FILE: membership-service/src/main/java/com/fastcampuspay/membership/application/port/in/RegisterMembershipUseCase.java
type RegisterMembershipUseCase (line 3) | public interface RegisterMembershipUseCase {
method registerMembership (line 5) | void registerMembership(RegisterMembershipCommand command);
method registerAxonMembership (line 6) | void registerAxonMembership(RegisterMembershipCommand command);
FILE: membership-service/src/main/java/com/fastcampuspay/membership/application/port/in/UpdateMembershipCommand.java
class UpdateMembershipCommand (line 12) | @Builder
FILE: membership-service/src/main/java/com/fastcampuspay/membership/application/port/in/UpdateMembershipEventCommand.java
class UpdateMembershipEventCommand (line 10) | @Builder
FILE: membership-service/src/main/java/com/fastcampuspay/membership/application/port/in/UpdateMembershipUseCase.java
type UpdateMembershipUseCase (line 5) | public interface UpdateMembershipUseCase {
method updateMembership (line 7) | Membership updateMembership(UpdateMembershipCommand command);
method updateAxonMembership (line 8) | Membership updateAxonMembership(UpdateMembershipCommand command);
FILE: membership-service/src/main/java/com/fastcampuspay/membership/application/port/in/aggregate/MembershipAggregate.java
class MembershipAggregate (line 20) | @Aggregate()
method MembershipAggregate (line 31) | @CommandHandler
method handle (line 39) | @CommandHandler
method handle (line 49) | @CommandHandler
method on (line 60) | @EventSourcingHandler
method on (line 69) | @EventSourcingHandler
method MembershipAggregate (line 78) | public MembershipAggregate() {
method toString (line 82) | @Override
FILE: membership-service/src/main/java/com/fastcampuspay/membership/application/port/out/FindMembershipPort.java
type FindMembershipPort (line 5) | public interface FindMembershipPort {
method findMembership (line 7) | Membership findMembership(
FILE: membership-service/src/main/java/com/fastcampuspay/membership/application/port/out/RegisterMembershipPort.java
type RegisterMembershipPort (line 5) | public interface RegisterMembershipPort {
method createMembership (line 7) | void createMembership(
FILE: membership-service/src/main/java/com/fastcampuspay/membership/application/port/out/UpdateMembershipPort.java
type UpdateMembershipPort (line 5) | public interface UpdateMembershipPort {
method updateMembership (line 7) | Membership updateMembership(
FILE: membership-service/src/main/java/com/fastcampuspay/membership/application/port/out/query/FindMembershipQuery.java
class FindMembershipQuery (line 7) | @AllArgsConstructor
FILE: membership-service/src/main/java/com/fastcampuspay/membership/application/port/out/query/MembershipQueryHandler.java
class MembershipQueryHandler (line 9) | @RequiredArgsConstructor
method handle (line 15) | @QueryHandler
FILE: membership-service/src/main/java/com/fastcampuspay/membership/application/saga/MembershipCreateEvent.java
class MembershipCreateEvent (line 8) | @AllArgsConstructor
FILE: membership-service/src/main/java/com/fastcampuspay/membership/application/saga/MembershipUpdateEvent.java
class MembershipUpdateEvent (line 8) | @AllArgsConstructor
FILE: membership-service/src/main/java/com/fastcampuspay/membership/application/saga/Order.java
class Order (line 7) | @Data
FILE: membership-service/src/main/java/com/fastcampuspay/membership/application/saga/OrderCancelledEvent.java
class OrderCancelledEvent (line 8) | @AllArgsConstructor
FILE: membership-service/src/main/java/com/fastcampuspay/membership/application/saga/OrderConfirmedEvent.java
class OrderConfirmedEvent (line 6) | @Data
FILE: membership-service/src/main/java/com/fastcampuspay/membership/application/saga/OrderCreatedEvent.java
class OrderCreatedEvent (line 3) | public class OrderCreatedEvent {
method OrderCreatedEvent (line 8) | public OrderCreatedEvent(String orderId, String customerName) {
method getOrderId (line 13) | public String getOrderId() {
method getCustomerName (line 17) | public String getCustomerName() {
FILE: membership-service/src/main/java/com/fastcampuspay/membership/application/saga/OrderPlacedEvent.java
class OrderPlacedEvent (line 5) | @Data
method OrderPlacedEvent (line 13) | public OrderPlacedEvent(){
method OrderPlacedEvent (line 17) | public OrderPlacedEvent(String orderId){
method OrderPlacedEvent (line 21) | public OrderPlacedEvent(String orderId, String name){
FILE: membership-service/src/main/java/com/fastcampuspay/membership/application/saga/OrderSaga.java
class OrderSaga (line 16) | @Saga
method setEventBus (line 30) | @Autowired
method setCommandGateway (line 35) | @Autowired
method handle (line 40) | @StartSaga
method handle (line 61) | @SagaEventHandler(associationProperty = "orderId")
FILE: membership-service/src/main/java/com/fastcampuspay/membership/application/saga/Payment.java
class Payment (line 7) | @Data
FILE: membership-service/src/main/java/com/fastcampuspay/membership/application/saga/PaymentCancelledEvent.java
class PaymentCancelledEvent (line 7) | @Data
FILE: membership-service/src/main/java/com/fastcampuspay/membership/application/saga/PaymentCompletedEvent.java
class PaymentCompletedEvent (line 6) | @Data
FILE: membership-service/src/main/java/com/fastcampuspay/membership/application/saga/PaymentRequestedCommand.java
class PaymentRequestedCommand (line 7) | @AllArgsConstructor
FILE: membership-service/src/main/java/com/fastcampuspay/membership/application/service/FindMembership.java
class FindMembership (line 15) | @RequiredArgsConstructor
method findMembership (line 23) | @Override
method findAxonMembership (line 28) | @Override
FILE: membership-service/src/main/java/com/fastcampuspay/membership/application/service/RegisterMembership.java
class RegisterMembership (line 13) | @RequiredArgsConstructor
method registerMembership (line 21) | @Override
method registerAxonMembership (line 31) | @Override
FILE: membership-service/src/main/java/com/fastcampuspay/membership/application/service/UpdateMembership.java
class UpdateMembership (line 15) | @RequiredArgsConstructor
method updateMembership (line 23) | @Override
method updateAxonMembership (line 34) | @Override
FILE: membership-service/src/main/java/com/fastcampuspay/membership/domain/Membership.java
class Membership (line 8) | @AllArgsConstructor(access = AccessLevel.PRIVATE)
method generateMember (line 21) | public static Membership generateMember(
class MembershipId (line 34) | @Value
method MembershipId (line 36) | public MembershipId(String value) {
class MembershipName (line 42) | @Value
method MembershipName (line 44) | public MembershipName(String value) {
class MembershipEmail (line 50) | @Value
method MembershipEmail (line 52) | public MembershipEmail(String value) {
class MembershipAddress (line 58) | @Value
method MembershipAddress (line 60) | public MembershipAddress(String value) {
class MembershipIsValid (line 66) | @Value
method MembershipIsValid (line 68) | public MembershipIsValid(boolean value) {
class MembershipAggregateIdentifier (line 74) | @Value
method MembershipAggregateIdentifier (line 76) | public MembershipAggregateIdentifier(String value) {
FILE: money-local-service/src/main/java/com/fastcampuspay/moneylocal/MoneyLocalApplication.java
class MoneyLocalApplication (line 6) | @SpringBootApplication
method main (line 9) | public static void main(String[] args) {
FILE: money-local-service/src/main/java/com/fastcampuspay/moneylocal/MoneyLocalConfiguration.java
class MoneyLocalConfiguration (line 6) | @Configuration
FILE: money-local-service/src/main/java/com/fastcampuspay/moneylocal/MoneyLocalConfigurationProperties.java
class MoneyLocalConfigurationProperties (line 6) | @Data
FILE: money-local-service/src/main/java/com/fastcampuspay/moneylocal/SwaggerConfig.java
class SwaggerConfig (line 13) | @Configuration
method restAPI (line 17) | @Bean
method apiInfo (line 27) | private ApiInfo apiInfo() {
FILE: money-local-service/src/main/java/com/fastcampuspay/moneylocal/adapter/in/web/CalculateLocalMoneyController.java
class CalculateLocalMoneyController (line 11) | @WebAdapter
method calculateMoneySumByLocal (line 18) | @GetMapping(path = "/money-local/calculate-money-sum")
FILE: money-local-service/src/main/java/com/fastcampuspay/moneylocal/adapter/out/persistence/LocalMoneyJpaEntity.java
class LocalMoneyJpaEntity (line 12) | @Entity
FILE: money-local-service/src/main/java/com/fastcampuspay/moneylocal/adapter/out/persistence/LocalMoneyMapper.java
class LocalMoneyMapper (line 6) | @Component
method mapToDomainEntity (line 8) | MemberMoney mapToDomainEntity(
FILE: money-local-service/src/main/java/com/fastcampuspay/moneylocal/adapter/out/persistence/LocalMoneyPersistenceAdapter.java
class LocalMoneyPersistenceAdapter (line 8) | @RequiredArgsConstructor
method rechargeMoney (line 15) | @Override
FILE: money-local-service/src/main/java/com/fastcampuspay/moneylocal/adapter/out/persistence/SpringDataLocalMoneyRepository.java
type SpringDataLocalMoneyRepository (line 5) | interface SpringDataLocalMoneyRepository extends JpaRepository<LocalMone...
FILE: money-local-service/src/main/java/com/fastcampuspay/moneylocal/application/port/in/RechargeMoneyCommand.java
class RechargeMoneyCommand (line 11) | @Builder
method RechargeMoneyCommand (line 29) | public RechargeMoneyCommand(String name, String email, String address,...
FILE: money-local-service/src/main/java/com/fastcampuspay/moneylocal/application/port/in/RechargeMoneyUseCase.java
type RechargeMoneyUseCase (line 3) | public interface RechargeMoneyUseCase {
method rechargeMoney (line 5) | void rechargeMoney(RechargeMoneyCommand command);
FILE: money-local-service/src/main/java/com/fastcampuspay/moneylocal/application/port/out/RechargeMoneyPort.java
type RechargeMoneyPort (line 6) | public interface RechargeMoneyPort {
method rechargeMoney (line 8) | void rechargeMoney(
FILE: money-local-service/src/main/java/com/fastcampuspay/moneylocal/application/service/RechargeMoney.java
class RechargeMoney (line 11) | @RequiredArgsConstructor
method rechargeMoney (line 17) | @Override
FILE: money-local-service/src/main/java/com/fastcampuspay/moneylocal/domain/MemberMoney.java
class MemberMoney (line 8) | @AllArgsConstructor(access = AccessLevel.PRIVATE)
method generateMemberMoney (line 20) | public static MemberMoney generateMemberMoney(
class MemberMoneyId (line 27) | @Value
method MemberMoneyId (line 29) | public MemberMoneyId(String value) {
FILE: money-service/src/main/java/com/fastcampuspay/money/MoneyApplication.java
class MoneyApplication (line 6) | @SpringBootApplication
method main (line 9) | public static void main(String[] args) {
FILE: money-service/src/main/java/com/fastcampuspay/money/MoneyConfiguration.java
class MoneyConfiguration (line 6) | @Configuration
FILE: money-service/src/main/java/com/fastcampuspay/money/MoneyConfigurationProperties.java
class MoneyConfigurationProperties (line 6) | @Data
FILE: money-service/src/main/java/com/fastcampuspay/money/SwaggerConfig.java
class SwaggerConfig (line 13) | @Configuration
method restAPI (line 17) | @Bean
method apiInfo (line 27) | private ApiInfo apiInfo() {
FILE: money-service/src/main/java/com/fastcampuspay/money/adapter/in/web/FindMoneyController.java
class FindMoneyController (line 10) | @WebAdapter
method findMoneyHistoryByMemberId (line 17) | @GetMapping(path = "/money/money-history")
method findMoneyInfoByRechargeMoneyId (line 25) | @GetMapping(path = "/money/money-info")
FILE: money-service/src/main/java/com/fastcampuspay/money/adapter/in/web/RechargeMoneyController.java
class RechargeMoneyController (line 10) | @WebAdapter
method rechargeMoney (line 17) | @PostMapping(path = "/money/recharge/")
FILE: money-service/src/main/java/com/fastcampuspay/money/adapter/in/web/RequestTransferMoneyController.java
class RequestTransferMoneyController (line 10) | @WebAdapter
method requestTransferMoneyBetweenMembers (line 17) | @PostMapping(path = "/money/transfer")
FILE: money-service/src/main/java/com/fastcampuspay/money/adapter/out/persistence/RechargeMoneyJpaEntity.java
class RechargeMoneyJpaEntity (line 12) | @Entity
FILE: money-service/src/main/java/com/fastcampuspay/money/adapter/out/persistence/RechargeMoneyMapper.java
class RechargeMoneyMapper (line 6) | @Component
method mapToDomainEntity (line 8) | MemberMoney mapToDomainEntity(
FILE: money-service/src/main/java/com/fastcampuspay/money/adapter/out/persistence/RechargeMoneyPersistenceAdapter.java
class RechargeMoneyPersistenceAdapter (line 8) | @RequiredArgsConstructor
method rechargeMoney (line 15) | @Override
FILE: money-service/src/main/java/com/fastcampuspay/money/adapter/out/persistence/SpringDataRechargeMoneyRepository.java
type SpringDataRechargeMoneyRepository (line 5) | interface SpringDataRechargeMoneyRepository extends JpaRepository<Rechar...
FILE: money-service/src/main/java/com/fastcampuspay/money/application/port/in/RechargeMoneyCommand.java
class RechargeMoneyCommand (line 11) | @Value
method RechargeMoneyCommand (line 29) | public RechargeMoneyCommand(String name, String email, String address,...
FILE: money-service/src/main/java/com/fastcampuspay/money/application/port/in/RechargeMoneyUseCase.java
type RechargeMoneyUseCase (line 3) | public interface RechargeMoneyUseCase {
method rechargeMoney (line 5) | void rechargeMoney(RechargeMoneyCommand command);
FILE: money-service/src/main/java/com/fastcampuspay/money/application/port/out/RechargeMoneyPort.java
type RechargeMoneyPort (line 6) | public interface RechargeMoneyPort {
method rechargeMoney (line 8) | void rechargeMoney(
FILE: money-service/src/main/java/com/fastcampuspay/money/application/service/RechargeMoney.java
class RechargeMoney (line 12) | @RequiredArgsConstructor
method rechargeMoney (line 19) | @Override
FILE: money-service/src/main/java/com/fastcampuspay/money/domain/MemberMoney.java
class MemberMoney (line 8) | @AllArgsConstructor(access = AccessLevel.PRIVATE)
method generateMemberMoney (line 20) | public static MemberMoney generateMemberMoney(
class MemberMoneyId (line 27) | @Value
method MemberMoneyId (line 29) | public MemberMoneyId(String value) {
FILE: payment-service/src/main/java/com/fastcampuspay/payment/PaymentApplication.java
class PaymentApplication (line 6) | @SpringBootApplication
method main (line 9) | public static void main(String[] args) {
FILE: payment-service/src/main/java/com/fastcampuspay/payment/PaymentConfiguration.java
class PaymentConfiguration (line 6) | @Configuration
FILE: payment-service/src/main/java/com/fastcampuspay/payment/PaymentConfigurationProperties.java
class PaymentConfigurationProperties (line 6) | @Data
FILE: payment-service/src/main/java/com/fastcampuspay/payment/SwaggerConfig.java
class SwaggerConfig (line 13) | @Configuration
method restAPI (line 17) | @Bean
method apiInfo (line 27) | private ApiInfo apiInfo() {
FILE: payment-service/src/main/java/com/fastcampuspay/payment/adapter/in/web/FindPaymentController.java
class FindPaymentController (line 10) | @WebAdapter
method findPaymentByPaymentId (line 17) | @GetMapping(path = "/payment/info")
method listPaymentsByPeriod (line 25) | @GetMapping(path = "/payment/list-by-period")
FILE: payment-service/src/main/java/com/fastcampuspay/payment/adapter/in/web/RequestTransferMoneyController.java
class RequestTransferMoneyController (line 10) | @WebAdapter
method requestPaymentAtMerchant (line 17) | @PostMapping(path = "/payment/request")
FILE: payment-service/src/main/java/com/fastcampuspay/payment/adapter/out/persistence/PaymentJpaEntity.java
class PaymentJpaEntity (line 12) | @Entity
FILE: payment-service/src/main/java/com/fastcampuspay/payment/adapter/out/persistence/PaymentMapper.java
class PaymentMapper (line 6) | @Component
method mapToDomainEntity (line 8) | MemberMoney mapToDomainEntity(
FILE: payment-service/src/main/java/com/fastcampuspay/payment/adapter/out/persistence/RechargeMoneyPersistenceAdapter.java
class PaymentPersistenceAdapter (line 8) | @RequiredArgsConstructor
method rechargeMoney (line 16) | @Override
FILE: payment-service/src/main/java/com/fastcampuspay/payment/adapter/out/persistence/SpringDataPaymentRepository.java
type SpringDataPaymentRepository (line 5) | interface SpringDataPaymentRepository extends JpaRepository<PaymentJpaEn...
FILE: payment-service/src/main/java/com/fastcampuspay/payment/application/port/in/RechargeMoneyCommand.java
class RechargeMoneyCommand (line 11) | @Data
method RechargeMoneyCommand (line 29) | public RechargeMoneyCommand(String name, String email, String address,...
FILE: payment-service/src/main/java/com/fastcampuspay/payment/application/port/in/RechargeMoneyUseCase.java
type RechargeMoneyUseCase (line 3) | public interface RechargeMoneyUseCase {
method rechargeMoney (line 5) | void rechargeMoney(RechargeMoneyCommand command);
FILE: payment-service/src/main/java/com/fastcampuspay/payment/application/port/out/RechargeMoneyPort.java
type RechargeMoneyPort (line 6) | public interface RechargeMoneyPort {
method rechargeMoney (line 8) | void rechargeMoney(
FILE: payment-service/src/main/java/com/fastcampuspay/payment/application/service/RechargeMoney.java
class RechargeMoney (line 11) | @RequiredArgsConstructor
method rechargeMoney (line 16) | @Override
FILE: payment-service/src/main/java/com/fastcampuspay/payment/domain/MemberMoney.java
class MemberMoney (line 8) | @AllArgsConstructor(access = AccessLevel.PRIVATE)
method generateMemberMoney (line 20) | public static MemberMoney generateMemberMoney(
class MemberMoneyId (line 27) | @Value
method MemberMoneyId (line 29) | public MemberMoneyId(String value) {
FILE: remittance-service/src/main/java/com/fastcampuspay/remittance/RemittanceApplication.java
class RemittanceApplication (line 6) | @SpringBootApplication
method main (line 9) | public static void main(String[] args) {
FILE: remittance-service/src/main/java/com/fastcampuspay/remittance/RemittanceConfiguration.java
class RemittanceConfiguration (line 6) | @Configuration
FILE: remittance-service/src/main/java/com/fastcampuspay/remittance/RemittanceConfigurationProperties.java
class RemittanceConfigurationProperties (line 6) | @Data
FILE: remittance-service/src/main/java/com/fastcampuspay/remittance/SwaggerConfig.java
class SwaggerConfig (line 13) | @Configuration
method restAPI (line 17) | @Bean
method apiInfo (line 27) | private ApiInfo apiInfo() {
FILE: remittance-service/src/main/java/com/fastcampuspay/remittance/adapter/in/web/FindRemittanceController.java
class FindRemittanceController (line 10) | @WebAdapter
method findRemittanceInfoByRemittanceId (line 17) | @GetMapping(path = "/remittance/info")
method findRemittanceHistoryByMemberId (line 25) | @GetMapping(path = "/remittance/history")
method findMoneyTransferringByRemittanceId (line 33) | @GetMapping(path = "/remittance/transferred-money")
FILE: remittance-service/src/main/java/com/fastcampuspay/remittance/adapter/in/web/RequestRemittanceMoneyController.java
class RequestRemittanceMoneyController (line 10) | @WebAdapter
method requestRemittance (line 17) | @PostMapping(path = "/remittance/request/")
FILE: remittance-service/src/main/java/com/fastcampuspay/remittance/adapter/out/persistence/RemittanceMoneyJpaEntity.java
class RemittanceMoneyJpaEntity (line 12) | @Entity
FILE: remittance-service/src/main/java/com/fastcampuspay/remittance/adapter/out/persistence/RemittanceMoneyMapper.java
class RemittanceMoneyMapper (line 6) | @Component
method mapToDomainEntity (line 8) | RemittanceMoney mapToDomainEntity(
FILE: remittance-service/src/main/java/com/fastcampuspay/remittance/adapter/out/persistence/RemittanceMoneyPersistenceAdapter.java
class RemittanceMoneyPersistenceAdapter (line 8) | @RequiredArgsConstructor
method orZero (line 15) | private Long orZero(Long value){
method remittanceMoney (line 19) | @Override
FILE: remittance-service/src/main/java/com/fastcampuspay/remittance/adapter/out/persistence/SpringDataRemittanceMoneyRepository.java
type SpringDataRemittanceMoneyRepository (line 5) | interface SpringDataRemittanceMoneyRepository extends JpaRepository<Remi...
FILE: remittance-service/src/main/java/com/fastcampuspay/remittance/application/port/in/RemittanceMoneyCommand.java
class RemittanceMoneyCommand (line 11) | @Value
method RemittanceMoneyCommand (line 29) | public RemittanceMoneyCommand(String name, String email, String addres...
FILE: remittance-service/src/main/java/com/fastcampuspay/remittance/application/port/in/RemittanceMoneyUseCase.java
type RemittanceMoneyUseCase (line 3) | public interface RemittanceMoneyUseCase {
method remittanceMoney (line 5) | void remittanceMoney(RemittanceMoneyCommand command);
FILE: remittance-service/src/main/java/com/fastcampuspay/remittance/application/port/out/RemittanceMoneyPort.java
type RemittanceMoneyPort (line 6) | public interface RemittanceMoneyPort {
method remittanceMoney (line 8) | void remittanceMoney(
FILE: remittance-service/src/main/java/com/fastcampuspay/remittance/application/service/RemittanceMoney.java
class RemittanceMoney (line 12) | @RequiredArgsConstructor
method remittanceMoney (line 19) | @Override
FILE: remittance-service/src/main/java/com/fastcampuspay/remittance/domain/RemittanceMoney.java
class RemittanceMoney (line 8) | @AllArgsConstructor(access = AccessLevel.PRIVATE)
method generateRemittanceMoney (line 20) | public static RemittanceMoney generateRemittanceMoney(
class RemittanceMoneyId (line 27) | @Value
method RemittanceMoneyId (line 29) | public RemittanceMoneyId(String value) {
FILE: settlement-service/src/main/java/com/fastcampuspay/settlement/SettlementApplication.java
class SettlementApplication (line 6) | @SpringBootApplication
method main (line 9) | public static void main(String[] args) {
FILE: settlement-service/src/main/java/com/fastcampuspay/settlement/SettlementConfiguration.java
class SettlementConfiguration (line 6) | @Configuration
FILE: settlement-service/src/main/java/com/fastcampuspay/settlement/SettlementConfigurationProperties.java
class SettlementConfigurationProperties (line 6) | @Data
FILE: settlement-service/src/main/java/com/fastcampuspay/settlement/SwaggerConfig.java
class SwaggerConfig (line 13) | @Configuration
method restAPI (line 17) | @Bean
method apiInfo (line 27) | private ApiInfo apiInfo() {
FILE: settlement-service/src/main/java/com/fastcampuspay/settlement/adapter/in/web/SettlementStartController.java
class SettlementStartController (line 10) | @WebAdapter
method startSettlementByPeriod (line 17) | @PostMapping(path = "/settlement/start")
FILE: settlement-service/src/main/java/com/fastcampuspay/settlement/adapter/out/persistence/RechargeMoneyMapper.java
class SettlementMapper (line 6) | @Component
method mapToDomainEntity (line 8) | MemberMoney mapToDomainEntity(
FILE: settlement-service/src/main/java/com/fastcampuspay/settlement/adapter/out/persistence/RechargeMoneyPersistenceAdapter.java
class RechargeMoneyPersistenceAdapter (line 8) | @RequiredArgsConstructor
method rechargeMoney (line 14) | @Override
FILE: settlement-service/src/main/java/com/fastcampuspay/settlement/adapter/out/persistence/SettlementJpaEntity.java
class SettlementJpaEntity (line 12) | @Entity
FILE: settlement-service/src/main/java/com/fastcampuspay/settlement/adapter/out/persistence/SpringDataSettlementRepository.java
type SpringDataSettlementRepository (line 5) | interface SpringDataSettlementRepository extends JpaRepository<Settlemen...
FILE: settlement-service/src/main/java/com/fastcampuspay/settlement/application/port/in/RechargeMoneyCommand.java
class RechargeMoneyCommand (line 12) | @Data
method RechargeMoneyCommand (line 30) | public RechargeMoneyCommand(String name, String email, String address,...
FILE: settlement-service/src/main/java/com/fastcampuspay/settlement/application/port/in/RechargeMoneyUseCase.java
type RechargeMoneyUseCase (line 3) | public interface RechargeMoneyUseCase {
method rechargeMoney (line 5) | void rechargeMoney(RechargeMoneyCommand command);
FILE: settlement-service/src/main/java/com/fastcampuspay/settlement/application/port/out/RechargeMoneyPort.java
type RechargeMoneyPort (line 6) | public interface RechargeMoneyPort {
method rechargeMoney (line 8) | void rechargeMoney(
FILE: settlement-service/src/main/java/com/fastcampuspay/settlement/application/service/RechargeMoney.java
class RechargeMoney (line 11) | @RequiredArgsConstructor
method rechargeMoney (line 16) | @Override
FILE: settlement-service/src/main/java/com/fastcampuspay/settlement/domain/MemberMoney.java
class MemberMoney (line 8) | @AllArgsConstructor(access = AccessLevel.PRIVATE)
method generateMemberMoney (line 20) | public static MemberMoney generateMemberMoney(
class MemberMoneyId (line 27) | @Value
method MemberMoneyId (line 29) | public MemberMoneyId(String value) {
Condensed preview — 173 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (171K chars).
[
{
"path": ".gitignore",
"chars": 38,
"preview": "/*/build/\naxon-server-se/*/*\ndb/data/*"
},
{
"path": ".idea/.gitignore",
"chars": 203,
"preview": "# 디폴트 무시된 파일\n/shelf/\n/workspace.xml\n# 에디터 기반 HTTP 클라이언트 요청\n/httpRequests/\n# Datasource local storage ignored files\n/data"
},
{
"path": ".idea/compiler.xml",
"chars": 1311,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n <component name=\"CompilerConfiguration\">\n <annotationP"
},
{
"path": ".idea/gradle.xml",
"chars": 1124,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n <component name=\"GradleMigrationSettings\" migrationVersio"
},
{
"path": ".idea/jarRepositories.xml",
"chars": 839,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n <component name=\"RemoteRepositoriesConfiguration\">\n <r"
},
{
"path": ".idea/misc.xml",
"chars": 472,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n <component name=\"ExternalStorageConfigurationManager\" ena"
},
{
"path": ".idea/modules/common/fastcampus-pay.common.main.iml",
"chars": 408,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<module version=\"4\">\n <component name=\"NewModuleRootManager\">\n <content url=\""
},
{
"path": ".idea/modules/settlement-service/fastcampus-pay.settlement-service.main.iml",
"chars": 432,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<module version=\"4\">\n <component name=\"NewModuleRootManager\">\n <content url=\""
},
{
"path": ".idea/modules.xml",
"chars": 1869,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n <component name=\"ProjectModuleManager\">\n <modules>\n "
},
{
"path": ".idea/uiDesigner.xml",
"chars": 8792,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n <component name=\"Palette2\">\n <group name=\"Swing\">\n "
},
{
"path": ".idea/vcs.xml",
"chars": 167,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n <component name=\"VcsDirectoryMappings\">\n <mapping dire"
},
{
"path": "Dockerfile",
"chars": 196,
"preview": "FROM openjdk:11-slim-stretch\nEXPOSE 8080\nARG JAR_FILE\nCOPY ${JAR_FILE} app.jar\n#\"-Djava.security.egd=file:/dev/./urandom"
},
{
"path": "README.md",
"chars": 6847,
"preview": "\n\n# FastCampus-Pay Project Overview\n\n\n일반적인 간편결제 도메인을 "
},
{
"path": "banking-service/build.gradle",
"chars": 1210,
"preview": "plugins {\n id 'com.palantir.docker' version '0.25.0'\n}\n\next{\n axonVersion = \"4.6.0\"\n}\n\ngroup = 'com.fastcampuspay."
},
{
"path": "banking-service/src/main/java/com/fastcampuspay/banking/BankingApplication.java",
"chars": 323,
"preview": "package com.fastcampuspay.banking;\n\nimport org.springframework.boot.SpringApplication;\nimport org.springframework.boot.a"
},
{
"path": "banking-service/src/main/java/com/fastcampuspay/banking/BankingConfiguration.java",
"chars": 303,
"preview": "package com.fastcampuspay.banking;\n\nimport org.springframework.boot.context.properties.EnableConfigurationProperties;\nim"
},
{
"path": "banking-service/src/main/java/com/fastcampuspay/banking/BankingConfigurationProperties.java",
"chars": 285,
"preview": "package com.fastcampuspay.banking;\n\nimport lombok.Data;\nimport org.springframework.boot.context.properties.Configuration"
},
{
"path": "banking-service/src/main/java/com/fastcampuspay/banking/SwaggerConfig.java",
"chars": 1039,
"preview": "package com.fastcampuspay.banking;\n\nimport org.springframework.context.annotation.Bean;\nimport org.springframework.conte"
},
{
"path": "banking-service/src/main/java/com/fastcampuspay/banking/adapter/in/web/FindBankingAccountInfoController.java",
"chars": 1265,
"preview": "package com.fastcampuspay.banking.adapter.in.web;\n\nimport com.fastcampuspay.common.WebAdapter;\nimport lombok.RequiredArg"
},
{
"path": "banking-service/src/main/java/com/fastcampuspay/banking/adapter/in/web/RegisterBankingAccountInfoController.java",
"chars": 1109,
"preview": "package com.fastcampuspay.banking.adapter.in.web;\n\nimport com.fastcampuspay.banking.application.port.in.RegisterBankingA"
},
{
"path": "banking-service/src/main/java/com/fastcampuspay/banking/adapter/in/web/RegisterBankingAccountInfoRequest.java",
"chars": 351,
"preview": "package com.fastcampuspay.banking.adapter.in.web;\n\nimport lombok.AllArgsConstructor;\nimport lombok.Getter;\nimport lombok"
},
{
"path": "banking-service/src/main/java/com/fastcampuspay/banking/adapter/in/web/RequestTransferMoneyController.java",
"chars": 845,
"preview": "package com.fastcampuspay.banking.adapter.in.web;\n\nimport com.fastcampuspay.banking.domain.BankingAccountRegisterInfo;\ni"
},
{
"path": "banking-service/src/main/java/com/fastcampuspay/banking/adapter/out/persistence/BankingAccountPersistenceAdapter.java",
"chars": 989,
"preview": "package com.fastcampuspay.banking.adapter.out.persistence;\n\nimport com.fastcampuspay.banking.application.port.out.Regist"
},
{
"path": "banking-service/src/main/java/com/fastcampuspay/banking/adapter/out/persistence/BankingAccountRegisterInfoJpaEntity.java",
"chars": 598,
"preview": "package com.fastcampuspay.banking.adapter.out.persistence;\n\nimport lombok.AllArgsConstructor;\nimport lombok.Data;\nimport"
},
{
"path": "banking-service/src/main/java/com/fastcampuspay/banking/adapter/out/persistence/BankingAccountRegisterInfoMapper.java",
"chars": 633,
"preview": "package com.fastcampuspay.banking.adapter.out.persistence;\n\nimport com.fastcampuspay.banking.domain.BankingAccountRegist"
},
{
"path": "banking-service/src/main/java/com/fastcampuspay/banking/adapter/out/persistence/SpringDataBankingAccountRegisterInfoRepository.java",
"chars": 249,
"preview": "package com.fastcampuspay.banking.adapter.out.persistence;\n\nimport org.springframework.data.jpa.repository.JpaRepository"
},
{
"path": "banking-service/src/main/java/com/fastcampuspay/banking/application/port/in/RegisterBankingAccountCommand.java",
"chars": 800,
"preview": "package com.fastcampuspay.banking.application.port.in;\n\n\nimport com.fastcampuspay.common.SelfValidating;\nimport lombok.B"
},
{
"path": "banking-service/src/main/java/com/fastcampuspay/banking/application/port/in/RegisterBankingAccountUseCase.java",
"chars": 177,
"preview": "package com.fastcampuspay.banking.application.port.in;\n\npublic interface RegisterBankingAccountUseCase {\n\n\tvoid register"
},
{
"path": "banking-service/src/main/java/com/fastcampuspay/banking/application/port/out/RegisterBankingAccountPort.java",
"chars": 298,
"preview": "package com.fastcampuspay.banking.application.port.out;\n\n\nimport com.fastcampuspay.banking.domain.BankingAccountRegister"
},
{
"path": "banking-service/src/main/java/com/fastcampuspay/banking/application/service/RegisterBankingAccount.java",
"chars": 885,
"preview": "package com.fastcampuspay.banking.application.service;\n\nimport com.fastcampuspay.banking.application.port.in.RegisterBan"
},
{
"path": "banking-service/src/main/java/com/fastcampuspay/banking/domain/BankingAccountRegisterInfo.java",
"chars": 1064,
"preview": "package com.fastcampuspay.banking.domain;\n\nimport lombok.AccessLevel;\nimport lombok.AllArgsConstructor;\nimport lombok.Ge"
},
{
"path": "banking-service/src/main/java/com/fastcampuspay/banking/domain/TransferMoney.java",
"chars": 735,
"preview": "package com.fastcampuspay.banking.domain;\n\nimport lombok.AccessLevel;\nimport lombok.AllArgsConstructor;\nimport lombok.Ge"
},
{
"path": "build.gradle",
"chars": 1246,
"preview": "buildscript {\n dependencies {\n classpath \"io.spring.gradle:dependency-management-plugin:0.5.1.RELEASE\"\n }\n}"
},
{
"path": "common/build.gradle",
"chars": 326,
"preview": "\n\ngroup 'org.mypay.common'\n\nrepositories {\n mavenCentral()\n}\n\ndependencies {\n testImplementation 'org.junit.jupite"
},
{
"path": "common/src/main/java/com/fastcampuspay/common/PersistenceAdapter.java",
"chars": 607,
"preview": "package com.fastcampuspay.common;\n\nimport org.springframework.core.annotation.AliasFor;\nimport org.springframework.stere"
},
{
"path": "common/src/main/java/com/fastcampuspay/common/SelfValidating.java",
"chars": 608,
"preview": "package com.fastcampuspay.common;\n\nimport javax.validation.*;\nimport java.util.Set;\n\npublic abstract class SelfValidatin"
},
{
"path": "common/src/main/java/com/fastcampuspay/common/UseCase.java",
"chars": 596,
"preview": "package com.fastcampuspay.common;\n\nimport org.springframework.core.annotation.AliasFor;\nimport org.springframework.stere"
},
{
"path": "common/src/main/java/com/fastcampuspay/common/WebAdapter.java",
"chars": 599,
"preview": "package com.fastcampuspay.common;\n\nimport org.springframework.core.annotation.AliasFor;\nimport org.springframework.stere"
},
{
"path": "common/src/main/java/com/fastcampuspay/common/events/RegisterAccountEvent.java",
"chars": 929,
"preview": "package com.fastcampuspay.common.events;\n\nimport java.util.Objects;\n\npublic class RegisterAccountEvent {\n private fin"
},
{
"path": "db/conf.d/my.cnf",
"chars": 0,
"preview": ""
},
{
"path": "db/initdb.d/create_table.sql",
"chars": 927,
"preview": "CREATE DATABASE IF NOT EXISTS fastcampus_pay;\nUSE fastcampus_pay;\n\n-- for Axon Framework (for Mismatching of Axon and My"
},
{
"path": "db/initdb.d/load_data.sql",
"chars": 0,
"preview": ""
},
{
"path": "docker-compose.yaml",
"chars": 7469,
"preview": "version: '3'\nservices:\n zookeeper:\n image: 'arm64v8/zookeeper:3.8'\n networks:\n - fastcampuspay_network\n p"
},
{
"path": "gradle/wrapper/gradle-wrapper.properties",
"chars": 202,
"preview": "distributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\ndistributionUrl=https\\://services.gradle.org/distributi"
},
{
"path": "gradle.properties",
"chars": 110,
"preview": "org.gradle.jvmargs=-Xmx2g\norg.gradle.caching=true\norg.gradle.configureondemand=true\norg.gradle.parallel=false\n"
},
{
"path": "gradlew",
"chars": 5766,
"preview": "#!/usr/bin/env sh\n\n#\n# Copyright 2015 the original author or authors.\n#\n# Licensed under the Apache License, Version 2.0"
},
{
"path": "gradlew.bat",
"chars": 2674,
"preview": "@rem\n@rem Copyright 2015 the original author or authors.\n@rem\n@rem Licensed under the Apache License, Version 2.0 (the \""
},
{
"path": "membership-service/build.gradle",
"chars": 1212,
"preview": "plugins {\n id 'com.palantir.docker' version '0.25.0'\n}\next{\n axonVersion = \"4.6.0\"\n}\n\ngroup = 'com.fastcampuspay.m"
},
{
"path": "membership-service/src/main/java/com/fastcampuspay/membership/MembershipApplication.java",
"chars": 332,
"preview": "package com.fastcampuspay.membership;\n\nimport org.springframework.boot.SpringApplication;\nimport org.springframework.boo"
},
{
"path": "membership-service/src/main/java/com/fastcampuspay/membership/MembershipConfiguration.java",
"chars": 312,
"preview": "package com.fastcampuspay.membership;\n\nimport org.springframework.boot.context.properties.EnableConfigurationProperties;"
},
{
"path": "membership-service/src/main/java/com/fastcampuspay/membership/MembershipConfigurationProperties.java",
"chars": 294,
"preview": "package com.fastcampuspay.membership;\n\nimport lombok.Data;\nimport org.springframework.boot.context.properties.Configurat"
},
{
"path": "membership-service/src/main/java/com/fastcampuspay/membership/SwaggerConfig.java",
"chars": 1045,
"preview": "package com.fastcampuspay.membership;\n\nimport org.springframework.context.annotation.Bean;\nimport org.springframework.co"
},
{
"path": "membership-service/src/main/java/com/fastcampuspay/membership/adapter/in/web/FindMembershipController.java",
"chars": 1407,
"preview": "package com.fastcampuspay.membership.adapter.in.web;\n\nimport com.fastcampuspay.common.WebAdapter;\nimport com.fastcampusp"
},
{
"path": "membership-service/src/main/java/com/fastcampuspay/membership/adapter/in/web/FindMembershipRequest.java",
"chars": 293,
"preview": "package com.fastcampuspay.membership.adapter.in.web;\n\nimport lombok.AllArgsConstructor;\nimport lombok.Getter;\nimport lom"
},
{
"path": "membership-service/src/main/java/com/fastcampuspay/membership/adapter/in/web/LoginAuthMembershipController.java",
"chars": 765,
"preview": "package com.fastcampuspay.membership.adapter.in.web;\n\nimport com.fastcampuspay.common.WebAdapter;\nimport lombok.Required"
},
{
"path": "membership-service/src/main/java/com/fastcampuspay/membership/adapter/in/web/RegisterMembershipController.java",
"chars": 1447,
"preview": "package com.fastcampuspay.membership.adapter.in.web;\n\nimport com.fastcampuspay.common.WebAdapter;\nimport com.fastcampusp"
},
{
"path": "membership-service/src/main/java/com/fastcampuspay/membership/adapter/in/web/RegisterMembershipRequest.java",
"chars": 345,
"preview": "package com.fastcampuspay.membership.adapter.in.web;\n\nimport lombok.AllArgsConstructor;\nimport lombok.Getter;\nimport lom"
},
{
"path": "membership-service/src/main/java/com/fastcampuspay/membership/adapter/in/web/UpdateMembershipController.java",
"chars": 1978,
"preview": "package com.fastcampuspay.membership.adapter.in.web;\n\nimport com.fastcampuspay.common.WebAdapter;\nimport com.fastcampusp"
},
{
"path": "membership-service/src/main/java/com/fastcampuspay/membership/adapter/in/web/UpdateMembershipRequest.java",
"chars": 406,
"preview": "package com.fastcampuspay.membership.adapter.in.web;\n\nimport lombok.AllArgsConstructor;\nimport lombok.Getter;\nimport lom"
},
{
"path": "membership-service/src/main/java/com/fastcampuspay/membership/adapter/out/persistence/MembershipJpaEntity.java",
"chars": 1167,
"preview": "package com.fastcampuspay.membership.adapter.out.persistence;\n\nimport lombok.AllArgsConstructor;\nimport lombok.Data;\nimp"
},
{
"path": "membership-service/src/main/java/com/fastcampuspay/membership/adapter/out/persistence/MembershipMapper.java",
"chars": 756,
"preview": "package com.fastcampuspay.membership.adapter.out.persistence;\n\nimport com.fastcampuspay.membership.domain.Membership;\nim"
},
{
"path": "membership-service/src/main/java/com/fastcampuspay/membership/adapter/out/persistence/MembershipPersistenceAdapter.java",
"chars": 2420,
"preview": "package com.fastcampuspay.membership.adapter.out.persistence;\n\nimport com.fastcampuspay.common.PersistenceAdapter;\nimpor"
},
{
"path": "membership-service/src/main/java/com/fastcampuspay/membership/adapter/out/persistence/SpringDataMembershipRepository.java",
"chars": 220,
"preview": "package com.fastcampuspay.membership.adapter.out.persistence;\n\nimport org.springframework.data.jpa.repository.JpaReposit"
},
{
"path": "membership-service/src/main/java/com/fastcampuspay/membership/application/port/in/FindMembershipCommand.java",
"chars": 363,
"preview": "package com.fastcampuspay.membership.application.port.in;\n\n\nimport com.fastcampuspay.common.SelfValidating;\nimport lombo"
},
{
"path": "membership-service/src/main/java/com/fastcampuspay/membership/application/port/in/FindMembershipUseCase.java",
"chars": 281,
"preview": "package com.fastcampuspay.membership.application.port.in;\n\nimport com.fastcampuspay.membership.domain.Membership;\n\npubli"
},
{
"path": "membership-service/src/main/java/com/fastcampuspay/membership/application/port/in/RegisterMembershipCommand.java",
"chars": 789,
"preview": "package com.fastcampuspay.membership.application.port.in;\n\n\nimport com.fastcampuspay.common.SelfValidating;\nimport lombo"
},
{
"path": "membership-service/src/main/java/com/fastcampuspay/membership/application/port/in/RegisterMembershipUseCase.java",
"chars": 233,
"preview": "package com.fastcampuspay.membership.application.port.in;\n\npublic interface RegisterMembershipUseCase {\n\n\tvoid registerM"
},
{
"path": "membership-service/src/main/java/com/fastcampuspay/membership/application/port/in/UpdateMembershipCommand.java",
"chars": 632,
"preview": "package com.fastcampuspay.membership.application.port.in;\n\n\nimport com.fastcampuspay.common.SelfValidating;\nimport lombo"
},
{
"path": "membership-service/src/main/java/com/fastcampuspay/membership/application/port/in/UpdateMembershipEventCommand.java",
"chars": 629,
"preview": "package com.fastcampuspay.membership.application.port.in;\n\n\nimport com.fastcampuspay.common.SelfValidating;\nimport lombo"
},
{
"path": "membership-service/src/main/java/com/fastcampuspay/membership/application/port/in/UpdateMembershipUseCase.java",
"chars": 291,
"preview": "package com.fastcampuspay.membership.application.port.in;\n\nimport com.fastcampuspay.membership.domain.Membership;\n\npubli"
},
{
"path": "membership-service/src/main/java/com/fastcampuspay/membership/application/port/in/aggregate/MembershipAggregate.java",
"chars": 3138,
"preview": "package com.fastcampuspay.membership.application.port.in.aggregate;\n\nimport com.fastcampuspay.membership.application.por"
},
{
"path": "membership-service/src/main/java/com/fastcampuspay/membership/application/port/out/FindMembershipPort.java",
"chars": 229,
"preview": "package com.fastcampuspay.membership.application.port.out;\n\nimport com.fastcampuspay.membership.domain.Membership;\n\npubl"
},
{
"path": "membership-service/src/main/java/com/fastcampuspay/membership/application/port/out/RegisterMembershipPort.java",
"chars": 461,
"preview": "package com.fastcampuspay.membership.application.port.out;\n\nimport com.fastcampuspay.membership.domain.Membership;\n\npubl"
},
{
"path": "membership-service/src/main/java/com/fastcampuspay/membership/application/port/out/UpdateMembershipPort.java",
"chars": 431,
"preview": "package com.fastcampuspay.membership.application.port.out;\n\nimport com.fastcampuspay.membership.domain.Membership;\n\npubl"
},
{
"path": "membership-service/src/main/java/com/fastcampuspay/membership/application/port/out/query/FindMembershipQuery.java",
"chars": 261,
"preview": "package com.fastcampuspay.membership.application.port.out.query;\n\nimport lombok.AllArgsConstructor;\nimport lombok.Data;\n"
},
{
"path": "membership-service/src/main/java/com/fastcampuspay/membership/application/port/out/query/MembershipQueryHandler.java",
"chars": 1457,
"preview": "package com.fastcampuspay.membership.application.port.out.query;\n\nimport com.fastcampuspay.membership.application.port.o"
},
{
"path": "membership-service/src/main/java/com/fastcampuspay/membership/application/saga/MembershipCreateEvent.java",
"chars": 308,
"preview": "package com.fastcampuspay.membership.application.saga;\n\n\nimport lombok.AllArgsConstructor;\nimport lombok.Data;\nimport lo"
},
{
"path": "membership-service/src/main/java/com/fastcampuspay/membership/application/saga/MembershipUpdateEvent.java",
"chars": 341,
"preview": "package com.fastcampuspay.membership.application.saga;\n\n\nimport lombok.AllArgsConstructor;\nimport lombok.Data;\nimport lo"
},
{
"path": "membership-service/src/main/java/com/fastcampuspay/membership/application/saga/Order.java",
"chars": 290,
"preview": "package com.fastcampuspay.membership.application.saga;\n\nimport lombok.Data;\nimport org.axonframework.modelling.command.A"
},
{
"path": "membership-service/src/main/java/com/fastcampuspay/membership/application/saga/OrderCancelledEvent.java",
"chars": 310,
"preview": "package com.fastcampuspay.membership.application.saga;\n\n\nimport lombok.AllArgsConstructor;\nimport lombok.Data;\nimport lo"
},
{
"path": "membership-service/src/main/java/com/fastcampuspay/membership/application/saga/OrderConfirmedEvent.java",
"chars": 204,
"preview": "package com.fastcampuspay.membership.application.saga;\n\nimport lombok.AllArgsConstructor;\nimport lombok.Data;\n\n@Data\n@Al"
},
{
"path": "membership-service/src/main/java/com/fastcampuspay/membership/application/saga/OrderCreatedEvent.java",
"chars": 439,
"preview": "package com.fastcampuspay.membership.application.saga;\n\npublic class OrderCreatedEvent {\n\n private String orderId;\n "
},
{
"path": "membership-service/src/main/java/com/fastcampuspay/membership/application/saga/OrderPlacedEvent.java",
"chars": 451,
"preview": "package com.fastcampuspay.membership.application.saga;\n\nimport lombok.Data;\n\n@Data\npublic class OrderPlacedEvent {\n\n "
},
{
"path": "membership-service/src/main/java/com/fastcampuspay/membership/application/saga/OrderSaga.java",
"chars": 2786,
"preview": "package com.fastcampuspay.membership.application.saga;\n\nimport lombok.Getter;\nimport lombok.NoArgsConstructor;\nimport lo"
},
{
"path": "membership-service/src/main/java/com/fastcampuspay/membership/application/saga/Payment.java",
"chars": 352,
"preview": "package com.fastcampuspay.membership.application.saga;\n\nimport lombok.Data;\nimport org.axonframework.modelling.command.A"
},
{
"path": "membership-service/src/main/java/com/fastcampuspay/membership/application/saga/PaymentCancelledEvent.java",
"chars": 237,
"preview": "package com.fastcampuspay.membership.application.saga;\n\n\nimport lombok.AllArgsConstructor;\nimport lombok.Data;\n\n@Data\n@A"
},
{
"path": "membership-service/src/main/java/com/fastcampuspay/membership/application/saga/PaymentCompletedEvent.java",
"chars": 236,
"preview": "package com.fastcampuspay.membership.application.saga;\n\nimport lombok.AllArgsConstructor;\nimport lombok.Data;\n\n@Data\n@Al"
},
{
"path": "membership-service/src/main/java/com/fastcampuspay/membership/application/saga/PaymentRequestedCommand.java",
"chars": 342,
"preview": "package com.fastcampuspay.membership.application.saga;\n\nimport lombok.AllArgsConstructor;\nimport lombok.Data;\nimport lom"
},
{
"path": "membership-service/src/main/java/com/fastcampuspay/membership/application/service/FindMembership.java",
"chars": 1536,
"preview": "package com.fastcampuspay.membership.application.service;\n\nimport com.fastcampuspay.common.UseCase;\nimport com.fastcampu"
},
{
"path": "membership-service/src/main/java/com/fastcampuspay/membership/application/service/RegisterMembership.java",
"chars": 1876,
"preview": "package com.fastcampuspay.membership.application.service;\n\nimport com.fastcampuspay.common.UseCase;\nimport com.fastcampu"
},
{
"path": "membership-service/src/main/java/com/fastcampuspay/membership/application/service/UpdateMembership.java",
"chars": 2207,
"preview": "package com.fastcampuspay.membership.application.service;\n\nimport com.fastcampuspay.common.UseCase;\nimport com.fastcampu"
},
{
"path": "membership-service/src/main/java/com/fastcampuspay/membership/domain/Membership.java",
"chars": 2074,
"preview": "package com.fastcampuspay.membership.domain;\n\nimport lombok.AccessLevel;\nimport lombok.AllArgsConstructor;\nimport lombok"
},
{
"path": "money-local-service/build.gradle",
"chars": 1212,
"preview": "plugins {\n id 'com.palantir.docker' version '0.25.0'\n}\n\next{\n axonVersion = \"4.6.0\"\n}\n\ngroup = 'com.fastcampuspay."
},
{
"path": "money-local-service/src/main/java/com/fastcampuspay/moneylocal/MoneyLocalApplication.java",
"chars": 332,
"preview": "package com.fastcampuspay.moneylocal;\n\nimport org.springframework.boot.SpringApplication;\nimport org.springframework.boo"
},
{
"path": "money-local-service/src/main/java/com/fastcampuspay/moneylocal/MoneyLocalConfiguration.java",
"chars": 312,
"preview": "package com.fastcampuspay.moneylocal;\n\nimport org.springframework.boot.context.properties.EnableConfigurationProperties;"
},
{
"path": "money-local-service/src/main/java/com/fastcampuspay/moneylocal/MoneyLocalConfigurationProperties.java",
"chars": 291,
"preview": "package com.fastcampuspay.moneylocal;\n\nimport lombok.Data;\nimport org.springframework.boot.context.properties.Configurat"
},
{
"path": "money-local-service/src/main/java/com/fastcampuspay/moneylocal/SwaggerConfig.java",
"chars": 1040,
"preview": "package com.fastcampuspay.moneylocal;\n\nimport org.springframework.context.annotation.Bean;\nimport org.springframework.co"
},
{
"path": "money-local-service/src/main/java/com/fastcampuspay/moneylocal/adapter/in/web/CalculateLocalMoneyController.java",
"chars": 844,
"preview": "package com.fastcampuspay.moneylocal.adapter.in.web;\n\nimport com.fastcampuspay.common.WebAdapter;\nimport lombok.Required"
},
{
"path": "money-local-service/src/main/java/com/fastcampuspay/moneylocal/adapter/out/persistence/LocalMoneyJpaEntity.java",
"chars": 565,
"preview": "package com.fastcampuspay.moneylocal.adapter.out.persistence;\n\nimport lombok.AllArgsConstructor;\nimport lombok.Data;\nimp"
},
{
"path": "money-local-service/src/main/java/com/fastcampuspay/moneylocal/adapter/out/persistence/LocalMoneyMapper.java",
"chars": 476,
"preview": "package com.fastcampuspay.moneylocal.adapter.out.persistence;\n\nimport com.fastcampuspay.moneylocal.domain.MemberMoney;\ni"
},
{
"path": "money-local-service/src/main/java/com/fastcampuspay/moneylocal/adapter/out/persistence/LocalMoneyPersistenceAdapter.java",
"chars": 622,
"preview": "package com.fastcampuspay.moneylocal.adapter.out.persistence;\n\nimport com.fastcampuspay.common.PersistenceAdapter;\nimpor"
},
{
"path": "money-local-service/src/main/java/com/fastcampuspay/moneylocal/adapter/out/persistence/SpringDataLocalMoneyRepository.java",
"chars": 220,
"preview": "package com.fastcampuspay.moneylocal.adapter.out.persistence;\n\nimport org.springframework.data.jpa.repository.JpaReposit"
},
{
"path": "money-local-service/src/main/java/com/fastcampuspay/moneylocal/application/port/in/RechargeMoneyCommand.java",
"chars": 774,
"preview": "package com.fastcampuspay.moneylocal.application.port.in;\n\n\nimport com.fastcampuspay.common.SelfValidating;\nimport lombo"
},
{
"path": "money-local-service/src/main/java/com/fastcampuspay/moneylocal/application/port/in/RechargeMoneyUseCase.java",
"chars": 153,
"preview": "package com.fastcampuspay.moneylocal.application.port.in;\n\npublic interface RechargeMoneyUseCase {\n\n\tvoid rechargeMoney("
},
{
"path": "money-local-service/src/main/java/com/fastcampuspay/moneylocal/application/port/out/RechargeMoneyPort.java",
"chars": 226,
"preview": "package com.fastcampuspay.moneylocal.application.port.out;\n\n\nimport com.fastcampuspay.moneylocal.domain.MemberMoney;\n\npu"
},
{
"path": "money-local-service/src/main/java/com/fastcampuspay/moneylocal/application/service/RechargeMoney.java",
"chars": 530,
"preview": "package com.fastcampuspay.moneylocal.application.service;\n\n\nimport com.fastcampuspay.common.UseCase;\nimport com.fastcamp"
},
{
"path": "money-local-service/src/main/java/com/fastcampuspay/moneylocal/domain/MemberMoney.java",
"chars": 877,
"preview": "package com.fastcampuspay.moneylocal.domain;\n\nimport lombok.AccessLevel;\nimport lombok.AllArgsConstructor;\nimport lombok"
},
{
"path": "money-service/build.gradle",
"chars": 1207,
"preview": "plugins {\n id 'com.palantir.docker' version '0.25.0'\n}\n\next{\n axonVersion = \"4.6.0\"\n}\n\ngroup = 'com.fastcampuspay."
},
{
"path": "money-service/src/main/java/com/fastcampuspay/money/MoneyApplication.java",
"chars": 317,
"preview": "package com.fastcampuspay.money;\n\nimport org.springframework.boot.SpringApplication;\nimport org.springframework.boot.aut"
},
{
"path": "money-service/src/main/java/com/fastcampuspay/money/MoneyConfiguration.java",
"chars": 297,
"preview": "package com.fastcampuspay.money;\n\nimport org.springframework.boot.context.properties.EnableConfigurationProperties;\nimpo"
},
{
"path": "money-service/src/main/java/com/fastcampuspay/money/MoneyConfigurationProperties.java",
"chars": 281,
"preview": "package com.fastcampuspay.money;\n\nimport lombok.Data;\nimport org.springframework.boot.context.properties.ConfigurationPr"
},
{
"path": "money-service/src/main/java/com/fastcampuspay/money/SwaggerConfig.java",
"chars": 1035,
"preview": "package com.fastcampuspay.money;\n\nimport org.springframework.context.annotation.Bean;\nimport org.springframework.context"
},
{
"path": "money-service/src/main/java/com/fastcampuspay/money/adapter/in/web/FindMoneyController.java",
"chars": 971,
"preview": "package com.fastcampuspay.money.adapter.in.web;\n\nimport com.fastcampuspay.common.WebAdapter;\nimport lombok.RequiredArgsC"
},
{
"path": "money-service/src/main/java/com/fastcampuspay/money/adapter/in/web/RechargeMoneyController.java",
"chars": 661,
"preview": "package com.fastcampuspay.money.adapter.in.web;\n\nimport com.fastcampuspay.common.WebAdapter;\nimport lombok.RequiredArgsC"
},
{
"path": "money-service/src/main/java/com/fastcampuspay/money/adapter/in/web/RequestTransferMoneyController.java",
"chars": 697,
"preview": "package com.fastcampuspay.money.adapter.in.web;\n\nimport com.fastcampuspay.common.WebAdapter;\nimport lombok.RequiredArgsC"
},
{
"path": "money-service/src/main/java/com/fastcampuspay/money/adapter/out/persistence/RechargeMoneyJpaEntity.java",
"chars": 569,
"preview": "package com.fastcampuspay.money.adapter.out.persistence;\n\nimport lombok.AllArgsConstructor;\nimport lombok.Data;\nimport l"
},
{
"path": "money-service/src/main/java/com/fastcampuspay/money/adapter/out/persistence/RechargeMoneyMapper.java",
"chars": 475,
"preview": "package com.fastcampuspay.money.adapter.out.persistence;\n\nimport com.fastcampuspay.money.domain.MemberMoney;\nimport org."
},
{
"path": "money-service/src/main/java/com/fastcampuspay/money/adapter/out/persistence/RechargeMoneyPersistenceAdapter.java",
"chars": 609,
"preview": "package com.fastcampuspay.money.adapter.out.persistence;\n\nimport com.fastcampuspay.common.PersistenceAdapter;\nimport com"
},
{
"path": "money-service/src/main/java/com/fastcampuspay/money/adapter/out/persistence/SpringDataRechargeMoneyRepository.java",
"chars": 221,
"preview": "package com.fastcampuspay.money.adapter.out.persistence;\n\nimport org.springframework.data.jpa.repository.JpaRepository;\n"
},
{
"path": "money-service/src/main/java/com/fastcampuspay/money/application/port/in/RechargeMoneyCommand.java",
"chars": 771,
"preview": "package com.fastcampuspay.money.application.port.in;\n\n\nimport com.fastcampuspay.common.SelfValidating;\nimport lombok.Bui"
},
{
"path": "money-service/src/main/java/com/fastcampuspay/money/application/port/in/RechargeMoneyUseCase.java",
"chars": 148,
"preview": "package com.fastcampuspay.money.application.port.in;\n\npublic interface RechargeMoneyUseCase {\n\n\tvoid rechargeMoney(Recha"
},
{
"path": "money-service/src/main/java/com/fastcampuspay/money/application/port/out/RechargeMoneyPort.java",
"chars": 216,
"preview": "package com.fastcampuspay.money.application.port.out;\n\n\nimport com.fastcampuspay.money.domain.MemberMoney;\n\npublic inter"
},
{
"path": "money-service/src/main/java/com/fastcampuspay/money/application/service/RechargeMoney.java",
"chars": 626,
"preview": "package com.fastcampuspay.money.application.service;\n\n\nimport com.fastcampuspay.common.UseCase;\nimport com.fastcampuspay"
},
{
"path": "money-service/src/main/java/com/fastcampuspay/money/domain/MemberMoney.java",
"chars": 872,
"preview": "package com.fastcampuspay.money.domain;\n\nimport lombok.AccessLevel;\nimport lombok.AllArgsConstructor;\nimport lombok.Gett"
},
{
"path": "payment-service/build.gradle",
"chars": 1209,
"preview": "plugins {\n id 'com.palantir.docker' version '0.25.0'\n}\n\next{\n axonVersion = \"4.6.0\"\n}\n\ngroup = 'com.fastcampuspay."
},
{
"path": "payment-service/src/main/java/com/fastcampuspay/payment/PaymentApplication.java",
"chars": 323,
"preview": "package com.fastcampuspay.payment;\n\nimport org.springframework.boot.SpringApplication;\nimport org.springframework.boot.a"
},
{
"path": "payment-service/src/main/java/com/fastcampuspay/payment/PaymentConfiguration.java",
"chars": 303,
"preview": "package com.fastcampuspay.payment;\n\nimport org.springframework.boot.context.properties.EnableConfigurationProperties;\nim"
},
{
"path": "payment-service/src/main/java/com/fastcampuspay/payment/PaymentConfigurationProperties.java",
"chars": 285,
"preview": "package com.fastcampuspay.payment;\n\nimport lombok.Data;\nimport org.springframework.boot.context.properties.Configuration"
},
{
"path": "payment-service/src/main/java/com/fastcampuspay/payment/SwaggerConfig.java",
"chars": 1037,
"preview": "package com.fastcampuspay.payment;\n\nimport org.springframework.context.annotation.Bean;\nimport org.springframework.conte"
},
{
"path": "payment-service/src/main/java/com/fastcampuspay/payment/adapter/in/web/FindPaymentController.java",
"chars": 960,
"preview": "package com.fastcampuspay.payment.adapter.in.web;\n\nimport com.fastcampuspay.common.WebAdapter;\nimport lombok.RequiredArg"
},
{
"path": "payment-service/src/main/java/com/fastcampuspay/payment/adapter/in/web/RequestTransferMoneyController.java",
"chars": 690,
"preview": "package com.fastcampuspay.payment.adapter.in.web;\n\nimport com.fastcampuspay.common.WebAdapter;\nimport lombok.RequiredArg"
},
{
"path": "payment-service/src/main/java/com/fastcampuspay/payment/adapter/out/persistence/PaymentJpaEntity.java",
"chars": 558,
"preview": "package com.fastcampuspay.payment.adapter.out.persistence;\n\nimport lombok.AllArgsConstructor;\nimport lombok.Data;\nimport"
},
{
"path": "payment-service/src/main/java/com/fastcampuspay/payment/adapter/out/persistence/PaymentMapper.java",
"chars": 467,
"preview": "package com.fastcampuspay.payment.adapter.out.persistence;\n\nimport com.fastcampuspay.payment.domain.MemberMoney;\nimport "
},
{
"path": "payment-service/src/main/java/com/fastcampuspay/payment/adapter/out/persistence/RechargeMoneyPersistenceAdapter.java",
"chars": 610,
"preview": "package com.fastcampuspay.payment.adapter.out.persistence;\n\nimport com.fastcampuspay.common.PersistenceAdapter;\nimport c"
},
{
"path": "payment-service/src/main/java/com/fastcampuspay/payment/adapter/out/persistence/SpringDataPaymentRepository.java",
"chars": 211,
"preview": "package com.fastcampuspay.payment.adapter.out.persistence;\n\nimport org.springframework.data.jpa.repository.JpaRepository"
},
{
"path": "payment-service/src/main/java/com/fastcampuspay/payment/application/port/in/RechargeMoneyCommand.java",
"chars": 771,
"preview": "package com.fastcampuspay.payment.application.port.in;\n\n\nimport com.fastcampuspay.common.SelfValidating;\nimport lombok.B"
},
{
"path": "payment-service/src/main/java/com/fastcampuspay/payment/application/port/in/RechargeMoneyUseCase.java",
"chars": 150,
"preview": "package com.fastcampuspay.payment.application.port.in;\n\npublic interface RechargeMoneyUseCase {\n\n\tvoid rechargeMoney(Rec"
},
{
"path": "payment-service/src/main/java/com/fastcampuspay/payment/application/port/out/RechargeMoneyPort.java",
"chars": 220,
"preview": "package com.fastcampuspay.payment.application.port.out;\n\n\nimport com.fastcampuspay.payment.domain.MemberMoney;\n\npublic i"
},
{
"path": "payment-service/src/main/java/com/fastcampuspay/payment/application/service/RechargeMoney.java",
"chars": 520,
"preview": "package com.fastcampuspay.payment.application.service;\n\n\nimport com.fastcampuspay.common.UseCase;\nimport com.fastcampusp"
},
{
"path": "payment-service/src/main/java/com/fastcampuspay/payment/domain/MemberMoney.java",
"chars": 874,
"preview": "package com.fastcampuspay.payment.domain;\n\nimport lombok.AccessLevel;\nimport lombok.AllArgsConstructor;\nimport lombok.Ge"
},
{
"path": "remittance-service/build.gradle",
"chars": 1212,
"preview": "plugins {\n id 'com.palantir.docker' version '0.25.0'\n}\n\next{\n axonVersion = \"4.6.0\"\n}\n\ngroup = 'com.fastcampuspay."
},
{
"path": "remittance-service/src/main/java/com/fastcampuspay/remittance/RemittanceApplication.java",
"chars": 332,
"preview": "package com.fastcampuspay.remittance;\n\nimport org.springframework.boot.SpringApplication;\nimport org.springframework.boo"
},
{
"path": "remittance-service/src/main/java/com/fastcampuspay/remittance/RemittanceConfiguration.java",
"chars": 312,
"preview": "package com.fastcampuspay.remittance;\n\nimport org.springframework.boot.context.properties.EnableConfigurationProperties;"
},
{
"path": "remittance-service/src/main/java/com/fastcampuspay/remittance/RemittanceConfigurationProperties.java",
"chars": 291,
"preview": "package com.fastcampuspay.remittance;\n\nimport lombok.Data;\nimport org.springframework.boot.context.properties.Configurat"
},
{
"path": "remittance-service/src/main/java/com/fastcampuspay/remittance/SwaggerConfig.java",
"chars": 1045,
"preview": "package com.fastcampuspay.remittance;\n\nimport org.springframework.context.annotation.Bean;\nimport org.springframework.co"
},
{
"path": "remittance-service/src/main/java/com/fastcampuspay/remittance/adapter/in/web/FindRemittanceController.java",
"chars": 1103,
"preview": "package com.fastcampuspay.remittance.adapter.in.web;\n\nimport com.fastcampuspay.common.WebAdapter;\nimport lombok.Required"
},
{
"path": "remittance-service/src/main/java/com/fastcampuspay/remittance/adapter/in/web/RequestRemittanceMoneyController.java",
"chars": 683,
"preview": "package com.fastcampuspay.remittance.adapter.in.web;\n\nimport com.fastcampuspay.common.WebAdapter;\nimport lombok.Required"
},
{
"path": "remittance-service/src/main/java/com/fastcampuspay/remittance/adapter/out/persistence/RemittanceMoneyJpaEntity.java",
"chars": 579,
"preview": "package com.fastcampuspay.remittance.adapter.out.persistence;\n\nimport lombok.AllArgsConstructor;\nimport lombok.Data;\nimp"
},
{
"path": "remittance-service/src/main/java/com/fastcampuspay/remittance/adapter/out/persistence/RemittanceMoneyMapper.java",
"chars": 521,
"preview": "package com.fastcampuspay.remittance.adapter.out.persistence;\n\nimport com.fastcampuspay.remittance.domain.RemittanceMone"
},
{
"path": "remittance-service/src/main/java/com/fastcampuspay/remittance/adapter/out/persistence/RemittanceMoneyPersistenceAdapter.java",
"chars": 728,
"preview": "package com.fastcampuspay.remittance.adapter.out.persistence;\n\nimport com.fastcampuspay.common.PersistenceAdapter;\nimpor"
},
{
"path": "remittance-service/src/main/java/com/fastcampuspay/remittance/adapter/out/persistence/SpringDataRemittanceMoneyRepository.java",
"chars": 230,
"preview": "package com.fastcampuspay.remittance.adapter.out.persistence;\n\nimport org.springframework.data.jpa.repository.JpaReposit"
},
{
"path": "remittance-service/src/main/java/com/fastcampuspay/remittance/application/port/in/RemittanceMoneyCommand.java",
"chars": 782,
"preview": "package com.fastcampuspay.remittance.application.port.in;\n\n\nimport com.fastcampuspay.common.SelfValidating;\nimport lombo"
},
{
"path": "remittance-service/src/main/java/com/fastcampuspay/remittance/application/port/in/RemittanceMoneyUseCase.java",
"chars": 159,
"preview": "package com.fastcampuspay.remittance.application.port.in;\n\npublic interface RemittanceMoneyUseCase {\n\n\tvoid remittanceMo"
},
{
"path": "remittance-service/src/main/java/com/fastcampuspay/remittance/application/port/out/RemittanceMoneyPort.java",
"chars": 246,
"preview": "package com.fastcampuspay.remittance.application.port.out;\n\n\nimport com.fastcampuspay.remittance.domain.RemittanceMoney;"
},
{
"path": "remittance-service/src/main/java/com/fastcampuspay/remittance/application/service/RemittanceMoney.java",
"chars": 662,
"preview": "package com.fastcampuspay.remittance.application.service;\n\n\nimport com.fastcampuspay.common.UseCase;\nimport com.fastcamp"
},
{
"path": "remittance-service/src/main/java/com/fastcampuspay/remittance/domain/RemittanceMoney.java",
"chars": 911,
"preview": "package com.fastcampuspay.remittance.domain;\n\nimport lombok.AccessLevel;\nimport lombok.AllArgsConstructor;\nimport lombok"
},
{
"path": "settings.gradle",
"chars": 246,
"preview": "rootProject.name = 'fastcampus-pay'\n\ninclude 'common'\ninclude 'membership-service'\ninclude 'banking-service'\ninclude 'mo"
},
{
"path": "settlement-service/build.gradle",
"chars": 1212,
"preview": "plugins {\n id 'com.palantir.docker' version '0.25.0'\n}\n\next{\n axonVersion = \"4.6.0\"\n}\n\ngroup = 'com.fastcampuspay."
},
{
"path": "settlement-service/src/main/java/com/fastcampuspay/settlement/SettlementApplication.java",
"chars": 332,
"preview": "package com.fastcampuspay.settlement;\n\nimport org.springframework.boot.SpringApplication;\nimport org.springframework.boo"
},
{
"path": "settlement-service/src/main/java/com/fastcampuspay/settlement/SettlementConfiguration.java",
"chars": 312,
"preview": "package com.fastcampuspay.settlement;\n\nimport org.springframework.boot.context.properties.EnableConfigurationProperties;"
},
{
"path": "settlement-service/src/main/java/com/fastcampuspay/settlement/SettlementConfigurationProperties.java",
"chars": 291,
"preview": "package com.fastcampuspay.settlement;\n\nimport lombok.Data;\nimport org.springframework.boot.context.properties.Configurat"
},
{
"path": "settlement-service/src/main/java/com/fastcampuspay/settlement/SwaggerConfig.java",
"chars": 1040,
"preview": "package com.fastcampuspay.settlement;\n\nimport org.springframework.context.annotation.Bean;\nimport org.springframework.co"
},
{
"path": "settlement-service/src/main/java/com/fastcampuspay/settlement/adapter/in/web/SettlementStartController.java",
"chars": 688,
"preview": "package com.fastcampuspay.settlement.adapter.in.web;\n\nimport com.fastcampuspay.common.WebAdapter;\nimport lombok.Required"
},
{
"path": "settlement-service/src/main/java/com/fastcampuspay/settlement/adapter/out/persistence/RechargeMoneyMapper.java",
"chars": 479,
"preview": "package com.fastcampuspay.settlement.adapter.out.persistence;\n\nimport com.fastcampuspay.settlement.domain.MemberMoney;\ni"
},
{
"path": "settlement-service/src/main/java/com/fastcampuspay/settlement/adapter/out/persistence/RechargeMoneyPersistenceAdapter.java",
"chars": 624,
"preview": "package com.fastcampuspay.settlement.adapter.out.persistence;\n\nimport com.fastcampuspay.common.PersistenceAdapter;\nimpor"
},
{
"path": "settlement-service/src/main/java/com/fastcampuspay/settlement/adapter/out/persistence/SettlementJpaEntity.java",
"chars": 567,
"preview": "package com.fastcampuspay.settlement.adapter.out.persistence;\n\nimport lombok.AllArgsConstructor;\nimport lombok.Data;\nimp"
},
{
"path": "settlement-service/src/main/java/com/fastcampuspay/settlement/adapter/out/persistence/SpringDataSettlementRepository.java",
"chars": 220,
"preview": "package com.fastcampuspay.settlement.adapter.out.persistence;\n\nimport org.springframework.data.jpa.repository.JpaReposit"
},
{
"path": "settlement-service/src/main/java/com/fastcampuspay/settlement/application/port/in/RechargeMoneyCommand.java",
"chars": 795,
"preview": "package com.fastcampuspay.settlement.application.port.in;\n\n\nimport com.fastcampuspay.common.SelfValidating;\nimport lombo"
},
{
"path": "settlement-service/src/main/java/com/fastcampuspay/settlement/application/port/in/RechargeMoneyUseCase.java",
"chars": 153,
"preview": "package com.fastcampuspay.settlement.application.port.in;\n\npublic interface RechargeMoneyUseCase {\n\n\tvoid rechargeMoney("
},
{
"path": "settlement-service/src/main/java/com/fastcampuspay/settlement/application/port/out/RechargeMoneyPort.java",
"chars": 226,
"preview": "package com.fastcampuspay.settlement.application.port.out;\n\n\nimport com.fastcampuspay.settlement.domain.MemberMoney;\n\npu"
},
{
"path": "settlement-service/src/main/java/com/fastcampuspay/settlement/application/service/RechargeMoney.java",
"chars": 529,
"preview": "package com.fastcampuspay.settlement.application.service;\n\n\nimport com.fastcampuspay.common.UseCase;\nimport com.fastcamp"
},
{
"path": "settlement-service/src/main/java/com/fastcampuspay/settlement/domain/MemberMoney.java",
"chars": 877,
"preview": "package com.fastcampuspay.settlement.domain;\n\nimport lombok.AccessLevel;\nimport lombok.AllArgsConstructor;\nimport lombok"
}
]
// ... and 1 more files (download for full content)
About this extraction
This page contains the full source code of the KimByeongKou/fastcampus-pay GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 173 files (138.2 KB), approximately 39.3k tokens, and a symbol index with 306 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.