diff --git a/pom.xml b/pom.xml
index 6d1fee4..d7bdb34 100644
--- a/pom.xml
+++ b/pom.xml
@@ -15,6 +15,7 @@
banking-service
17
+ 3.1.1
@@ -29,6 +30,15 @@
org.springframework.boot
spring-boot-starter-web
+
+ org.springframework.boot
+ spring-boot-starter-validation
+
+
+ org.modelmapper
+ modelmapper
+ ${modelmapper.version}
+
org.springframework.boot
diff --git a/src/main/java/net/kapcake/bankingservice/domain/Balance.java b/src/main/java/net/kapcake/bankingservice/domain/Balance.java
deleted file mode 100644
index 2dd84a8..0000000
--- a/src/main/java/net/kapcake/bankingservice/domain/Balance.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package net.kapcake.bankingservice.domain;
-
-import jakarta.persistence.*;
-import lombok.Data;
-
-@Entity
-@Data
-public class Balance {
- @Id
- @GeneratedValue
- private Long id;
- private Long amount;
- private String currency;
- @Enumerated(EnumType.STRING)
- private BalanceType type;
-}
diff --git a/src/main/java/net/kapcake/bankingservice/domain/PaymentStatus.java b/src/main/java/net/kapcake/bankingservice/domain/PaymentStatus.java
deleted file mode 100644
index e74f882..0000000
--- a/src/main/java/net/kapcake/bankingservice/domain/PaymentStatus.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package net.kapcake.bankingservice.domain;
-
-public enum PaymentStatus {
- EXECUTED
-}
diff --git a/src/main/java/net/kapcake/bankingservice/domain/AccountStatus.java b/src/main/java/net/kapcake/bankingservice/model/domain/AccountStatus.java
similarity index 53%
rename from src/main/java/net/kapcake/bankingservice/domain/AccountStatus.java
rename to src/main/java/net/kapcake/bankingservice/model/domain/AccountStatus.java
index 03bb411..31edd55 100644
--- a/src/main/java/net/kapcake/bankingservice/domain/AccountStatus.java
+++ b/src/main/java/net/kapcake/bankingservice/model/domain/AccountStatus.java
@@ -1,4 +1,4 @@
-package net.kapcake.bankingservice.domain;
+package net.kapcake.bankingservice.model.domain;
public enum AccountStatus {
ENABLED,
diff --git a/src/main/java/net/kapcake/bankingservice/model/domain/BalanceDTO.java b/src/main/java/net/kapcake/bankingservice/model/domain/BalanceDTO.java
new file mode 100644
index 0000000..7b5af82
--- /dev/null
+++ b/src/main/java/net/kapcake/bankingservice/model/domain/BalanceDTO.java
@@ -0,0 +1,19 @@
+package net.kapcake.bankingservice.model.domain;
+
+import jakarta.validation.constraints.DecimalMin;
+import jakarta.validation.constraints.NotNull;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+public class BalanceDTO {
+ private Long id;
+ @NotNull
+ @DecimalMin(value = "0", inclusive = false)
+ private BigDecimal amount;
+ @NotNull
+ private Currency currency;
+ @NotNull
+ private BalanceType type;
+}
diff --git a/src/main/java/net/kapcake/bankingservice/domain/BalanceType.java b/src/main/java/net/kapcake/bankingservice/model/domain/BalanceType.java
similarity index 54%
rename from src/main/java/net/kapcake/bankingservice/domain/BalanceType.java
rename to src/main/java/net/kapcake/bankingservice/model/domain/BalanceType.java
index a84fa45..cf2d8f6 100644
--- a/src/main/java/net/kapcake/bankingservice/domain/BalanceType.java
+++ b/src/main/java/net/kapcake/bankingservice/model/domain/BalanceType.java
@@ -1,4 +1,4 @@
-package net.kapcake.bankingservice.domain;
+package net.kapcake.bankingservice.model.domain;
public enum BalanceType {
END_OF_DAY,
diff --git a/src/main/java/net/kapcake/bankingservice/model/domain/BankAccountDTO.java b/src/main/java/net/kapcake/bankingservice/model/domain/BankAccountDTO.java
new file mode 100644
index 0000000..ed8f3d7
--- /dev/null
+++ b/src/main/java/net/kapcake/bankingservice/model/domain/BankAccountDTO.java
@@ -0,0 +1,25 @@
+package net.kapcake.bankingservice.model.domain;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotEmpty;
+import jakarta.validation.constraints.NotNull;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class BankAccountDTO {
+ private Long id;
+ @NotBlank
+ private String accountNumber;
+ @NotEmpty
+ @JsonIgnore
+ private List users;
+ @NotBlank
+ private String accountName;
+ @NotEmpty
+ private List balances;
+ @NotNull
+ private AccountStatus status;
+}
diff --git a/src/main/java/net/kapcake/bankingservice/model/domain/Currency.java b/src/main/java/net/kapcake/bankingservice/model/domain/Currency.java
new file mode 100644
index 0000000..9415d9d
--- /dev/null
+++ b/src/main/java/net/kapcake/bankingservice/model/domain/Currency.java
@@ -0,0 +1,7 @@
+package net.kapcake.bankingservice.model.domain;
+
+public enum Currency {
+ EUR,
+ USD,
+ GBP
+}
diff --git a/src/main/java/net/kapcake/bankingservice/model/domain/PaymentDTO.java b/src/main/java/net/kapcake/bankingservice/model/domain/PaymentDTO.java
new file mode 100644
index 0000000..56cc1c1
--- /dev/null
+++ b/src/main/java/net/kapcake/bankingservice/model/domain/PaymentDTO.java
@@ -0,0 +1,27 @@
+package net.kapcake.bankingservice.model.domain;
+
+import jakarta.validation.constraints.DecimalMin;
+import jakarta.validation.constraints.NotNull;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+@Data
+public class PaymentDTO {
+ private Long id;
+ @NotNull
+ @DecimalMin(value = "0", inclusive = false)
+ private BigDecimal amount;
+ @NotNull
+ private Currency currency;
+ @NotNull
+ private Long giverAccount;
+ @NotNull
+ private String beneficiaryAccountNumber;
+ @NotNull
+ private String beneficiaryName;
+ private String communication;
+ private Date creationDate;
+ private PaymentStatus status;
+}
diff --git a/src/main/java/net/kapcake/bankingservice/model/domain/PaymentStatus.java b/src/main/java/net/kapcake/bankingservice/model/domain/PaymentStatus.java
new file mode 100644
index 0000000..f9ac549
--- /dev/null
+++ b/src/main/java/net/kapcake/bankingservice/model/domain/PaymentStatus.java
@@ -0,0 +1,5 @@
+package net.kapcake.bankingservice.model.domain;
+
+public enum PaymentStatus {
+ EXECUTED
+}
diff --git a/src/main/java/net/kapcake/bankingservice/model/domain/UserDTO.java b/src/main/java/net/kapcake/bankingservice/model/domain/UserDTO.java
new file mode 100644
index 0000000..29b0e9a
--- /dev/null
+++ b/src/main/java/net/kapcake/bankingservice/model/domain/UserDTO.java
@@ -0,0 +1,16 @@
+package net.kapcake.bankingservice.model.domain;
+
+import jakarta.validation.constraints.NotEmpty;
+import lombok.Data;
+
+@Data
+public class UserDTO {
+ private Long id;
+ @NotEmpty
+ private String username;
+ private String street;
+ private Integer number;
+ private String numberExtension;
+ private Integer postalCode;
+ private String country;
+}
diff --git a/src/main/java/net/kapcake/bankingservice/model/entities/Balance.java b/src/main/java/net/kapcake/bankingservice/model/entities/Balance.java
new file mode 100644
index 0000000..f98e736
--- /dev/null
+++ b/src/main/java/net/kapcake/bankingservice/model/entities/Balance.java
@@ -0,0 +1,23 @@
+package net.kapcake.bankingservice.model.entities;
+
+import jakarta.persistence.*;
+import lombok.Getter;
+import lombok.Setter;
+import net.kapcake.bankingservice.model.domain.BalanceType;
+import net.kapcake.bankingservice.model.domain.Currency;
+
+import java.math.BigDecimal;
+
+@Entity
+@Getter
+@Setter
+public class Balance {
+ @Id
+ @GeneratedValue
+ private Long id;
+ private BigDecimal amount;
+ @Enumerated(EnumType.STRING)
+ private Currency currency;
+ @Enumerated(EnumType.STRING)
+ private BalanceType type;
+}
diff --git a/src/main/java/net/kapcake/bankingservice/domain/BankAccount.java b/src/main/java/net/kapcake/bankingservice/model/entities/BankAccount.java
similarity index 54%
rename from src/main/java/net/kapcake/bankingservice/domain/BankAccount.java
rename to src/main/java/net/kapcake/bankingservice/model/entities/BankAccount.java
index d1893ee..5f756f4 100644
--- a/src/main/java/net/kapcake/bankingservice/domain/BankAccount.java
+++ b/src/main/java/net/kapcake/bankingservice/model/entities/BankAccount.java
@@ -1,21 +1,26 @@
-package net.kapcake.bankingservice.domain;
+package net.kapcake.bankingservice.model.entities;
import jakarta.persistence.*;
-import lombok.Data;
+import lombok.Getter;
+import lombok.Setter;
+import net.kapcake.bankingservice.model.domain.AccountStatus;
import java.util.List;
@Entity
-@Data
+@Getter
+@Setter
public class BankAccount {
@Id
@GeneratedValue
private Long id;
-
@Column(nullable = false)
private String accountNumber;
-
@ManyToMany
+ @JoinTable(
+ joinColumns = {@JoinColumn(name = "BANK_ACCOUNT_ID", nullable = false)},
+ inverseJoinColumns = {@JoinColumn(name = "USER_ID", nullable = false)}
+ )
private List users;
@Column(nullable = false)
private String accountName;
diff --git a/src/main/java/net/kapcake/bankingservice/domain/Payment.java b/src/main/java/net/kapcake/bankingservice/model/entities/Payment.java
similarity index 62%
rename from src/main/java/net/kapcake/bankingservice/domain/Payment.java
rename to src/main/java/net/kapcake/bankingservice/model/entities/Payment.java
index 7c6f25a..b4f25d3 100644
--- a/src/main/java/net/kapcake/bankingservice/domain/Payment.java
+++ b/src/main/java/net/kapcake/bankingservice/model/entities/Payment.java
@@ -1,24 +1,30 @@
-package net.kapcake.bankingservice.domain;
+package net.kapcake.bankingservice.model.entities;
import jakarta.persistence.*;
-import lombok.Data;
+import lombok.Getter;
+import lombok.Setter;
+import net.kapcake.bankingservice.model.domain.Currency;
+import net.kapcake.bankingservice.model.domain.PaymentStatus;
import org.hibernate.annotations.CreationTimestamp;
+import java.math.BigDecimal;
import java.util.Date;
@Entity
-@Data
+@Getter
+@Setter
public class Payment {
@Id
@GeneratedValue
private Long id;
@Column(nullable = false)
- private Long amount;
+ private BigDecimal amount;
@Column(nullable = false)
- private String currency;
+ @Enumerated(EnumType.STRING)
+ private Currency currency;
@ManyToOne
@JoinColumn(nullable = false)
- private BankAccount giver;
+ private BankAccount giverAccount;
@Column(nullable = false)
private String beneficiaryAccountNumber;
@Column(nullable = false)
diff --git a/src/main/java/net/kapcake/bankingservice/domain/User.java b/src/main/java/net/kapcake/bankingservice/model/entities/User.java
similarity index 74%
rename from src/main/java/net/kapcake/bankingservice/domain/User.java
rename to src/main/java/net/kapcake/bankingservice/model/entities/User.java
index 736463e..f58896a 100644
--- a/src/main/java/net/kapcake/bankingservice/domain/User.java
+++ b/src/main/java/net/kapcake/bankingservice/model/entities/User.java
@@ -1,10 +1,12 @@
-package net.kapcake.bankingservice.domain;
+package net.kapcake.bankingservice.model.entities;
import jakarta.persistence.*;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.Accessors;
+import java.util.List;
+
@Entity
@Table(name = "BANKING_USER")
@Accessors(chain = true)
@@ -14,7 +16,6 @@ public class User {
@Id
@GeneratedValue
private Long id;
-
@Column(nullable = false)
private String username;
@Column(nullable = false)
@@ -24,4 +25,7 @@ public class User {
private String numberExtension;
private Integer postalCode;
private String country;
+ @ManyToMany(mappedBy = "users", fetch = FetchType.EAGER)
+ private List bankAccounts;
+
}
diff --git a/src/main/java/net/kapcake/bankingservice/repositories/BankAccountRepository.java b/src/main/java/net/kapcake/bankingservice/repositories/BankAccountRepository.java
index 94124f8..6d0a11b 100644
--- a/src/main/java/net/kapcake/bankingservice/repositories/BankAccountRepository.java
+++ b/src/main/java/net/kapcake/bankingservice/repositories/BankAccountRepository.java
@@ -1,10 +1,11 @@
package net.kapcake.bankingservice.repositories;
-import net.kapcake.bankingservice.domain.BankAccount;
+import net.kapcake.bankingservice.model.entities.BankAccount;
import org.springframework.data.jpa.repository.JpaRepository;
import java.util.List;
+import java.util.Optional;
public interface BankAccountRepository extends JpaRepository {
- List findAllByUsers_username(String username);
+ Optional> findAllByUsers_username(String username);
}
diff --git a/src/main/java/net/kapcake/bankingservice/repositories/PaymentRepository.java b/src/main/java/net/kapcake/bankingservice/repositories/PaymentRepository.java
index bfbf504..0d1f769 100644
--- a/src/main/java/net/kapcake/bankingservice/repositories/PaymentRepository.java
+++ b/src/main/java/net/kapcake/bankingservice/repositories/PaymentRepository.java
@@ -1,6 +1,6 @@
package net.kapcake.bankingservice.repositories;
-import net.kapcake.bankingservice.domain.Payment;
+import net.kapcake.bankingservice.model.entities.Payment;
import org.springframework.data.jpa.repository.JpaRepository;
public interface PaymentRepository extends JpaRepository {
diff --git a/src/main/java/net/kapcake/bankingservice/repositories/UserRepository.java b/src/main/java/net/kapcake/bankingservice/repositories/UserRepository.java
index 2848a4f..e748dc7 100644
--- a/src/main/java/net/kapcake/bankingservice/repositories/UserRepository.java
+++ b/src/main/java/net/kapcake/bankingservice/repositories/UserRepository.java
@@ -1,6 +1,6 @@
package net.kapcake.bankingservice.repositories;
-import net.kapcake.bankingservice.domain.User;
+import net.kapcake.bankingservice.model.entities.User;
import org.springframework.data.jpa.repository.JpaRepository;
import java.util.Optional;
diff --git a/src/main/java/net/kapcake/bankingservice/security/UserDetailsServiceImpl.java b/src/main/java/net/kapcake/bankingservice/security/UserDetailsServiceImpl.java
index 5f937f0..35f86a0 100644
--- a/src/main/java/net/kapcake/bankingservice/security/UserDetailsServiceImpl.java
+++ b/src/main/java/net/kapcake/bankingservice/security/UserDetailsServiceImpl.java
@@ -1,6 +1,6 @@
package net.kapcake.bankingservice.security;
-import net.kapcake.bankingservice.domain.User;
+import net.kapcake.bankingservice.model.entities.User;
import net.kapcake.bankingservice.repositories.UserRepository;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
diff --git a/src/main/java/net/kapcake/bankingservice/services/AccountService.java b/src/main/java/net/kapcake/bankingservice/services/AccountService.java
index 7bbba09..d67180a 100644
--- a/src/main/java/net/kapcake/bankingservice/services/AccountService.java
+++ b/src/main/java/net/kapcake/bankingservice/services/AccountService.java
@@ -1,13 +1,14 @@
package net.kapcake.bankingservice.services;
-import net.kapcake.bankingservice.domain.BankAccount;
+import net.kapcake.bankingservice.model.entities.BankAccount;
+import net.kapcake.bankingservice.model.entities.User;
import net.kapcake.bankingservice.repositories.BankAccountRepository;
-import org.springframework.security.core.userdetails.User;
-import org.springframework.stereotype.Component;
+import org.springframework.stereotype.Service;
+import java.util.Collections;
import java.util.List;
-@Component
+@Service
public class AccountService {
private final BankAccountRepository bankAccountRepository;
@@ -16,6 +17,6 @@ public class AccountService {
}
public List getAccounts(User user) {
- return bankAccountRepository.findAllByUsers_username(user.getUsername());
+ return bankAccountRepository.findAllByUsers_username(user.getUsername()).orElse(Collections.emptyList());
}
}