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()); } }