Move models and add DTOs

This commit is contained in:
2023-05-10 00:04:38 +02:00
parent caee7b5d4b
commit 0a3d3d25c6
20 changed files with 174 additions and 46 deletions

10
pom.xml
View File

@@ -15,6 +15,7 @@
<description>banking-service</description> <description>banking-service</description>
<properties> <properties>
<java.version>17</java.version> <java.version>17</java.version>
<modelmapper.version>3.1.1</modelmapper.version>
</properties> </properties>
<dependencies> <dependencies>
<dependency> <dependency>
@@ -29,6 +30,15 @@
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId> <artifactId>spring-boot-starter-web</artifactId>
</dependency> </dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
<dependency>
<groupId>org.modelmapper</groupId>
<artifactId>modelmapper</artifactId>
<version>${modelmapper.version}</version>
</dependency>
<dependency> <dependency>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>

View File

@@ -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;
}

View File

@@ -1,5 +0,0 @@
package net.kapcake.bankingservice.domain;
public enum PaymentStatus {
EXECUTED
}

View File

@@ -1,4 +1,4 @@
package net.kapcake.bankingservice.domain; package net.kapcake.bankingservice.model.domain;
public enum AccountStatus { public enum AccountStatus {
ENABLED, ENABLED,

View File

@@ -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;
}

View File

@@ -1,4 +1,4 @@
package net.kapcake.bankingservice.domain; package net.kapcake.bankingservice.model.domain;
public enum BalanceType { public enum BalanceType {
END_OF_DAY, END_OF_DAY,

View File

@@ -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<UserDTO> users;
@NotBlank
private String accountName;
@NotEmpty
private List<BalanceDTO> balances;
@NotNull
private AccountStatus status;
}

View File

@@ -0,0 +1,7 @@
package net.kapcake.bankingservice.model.domain;
public enum Currency {
EUR,
USD,
GBP
}

View File

@@ -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;
}

View File

@@ -0,0 +1,5 @@
package net.kapcake.bankingservice.model.domain;
public enum PaymentStatus {
EXECUTED
}

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -1,21 +1,26 @@
package net.kapcake.bankingservice.domain; package net.kapcake.bankingservice.model.entities;
import jakarta.persistence.*; import jakarta.persistence.*;
import lombok.Data; import lombok.Getter;
import lombok.Setter;
import net.kapcake.bankingservice.model.domain.AccountStatus;
import java.util.List; import java.util.List;
@Entity @Entity
@Data @Getter
@Setter
public class BankAccount { public class BankAccount {
@Id @Id
@GeneratedValue @GeneratedValue
private Long id; private Long id;
@Column(nullable = false) @Column(nullable = false)
private String accountNumber; private String accountNumber;
@ManyToMany @ManyToMany
@JoinTable(
joinColumns = {@JoinColumn(name = "BANK_ACCOUNT_ID", nullable = false)},
inverseJoinColumns = {@JoinColumn(name = "USER_ID", nullable = false)}
)
private List<User> users; private List<User> users;
@Column(nullable = false) @Column(nullable = false)
private String accountName; private String accountName;

View File

@@ -1,24 +1,30 @@
package net.kapcake.bankingservice.domain; package net.kapcake.bankingservice.model.entities;
import jakarta.persistence.*; 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 org.hibernate.annotations.CreationTimestamp;
import java.math.BigDecimal;
import java.util.Date; import java.util.Date;
@Entity @Entity
@Data @Getter
@Setter
public class Payment { public class Payment {
@Id @Id
@GeneratedValue @GeneratedValue
private Long id; private Long id;
@Column(nullable = false) @Column(nullable = false)
private Long amount; private BigDecimal amount;
@Column(nullable = false) @Column(nullable = false)
private String currency; @Enumerated(EnumType.STRING)
private Currency currency;
@ManyToOne @ManyToOne
@JoinColumn(nullable = false) @JoinColumn(nullable = false)
private BankAccount giver; private BankAccount giverAccount;
@Column(nullable = false) @Column(nullable = false)
private String beneficiaryAccountNumber; private String beneficiaryAccountNumber;
@Column(nullable = false) @Column(nullable = false)

View File

@@ -1,10 +1,12 @@
package net.kapcake.bankingservice.domain; package net.kapcake.bankingservice.model.entities;
import jakarta.persistence.*; import jakarta.persistence.*;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
import java.util.List;
@Entity @Entity
@Table(name = "BANKING_USER") @Table(name = "BANKING_USER")
@Accessors(chain = true) @Accessors(chain = true)
@@ -14,7 +16,6 @@ public class User {
@Id @Id
@GeneratedValue @GeneratedValue
private Long id; private Long id;
@Column(nullable = false) @Column(nullable = false)
private String username; private String username;
@Column(nullable = false) @Column(nullable = false)
@@ -24,4 +25,7 @@ public class User {
private String numberExtension; private String numberExtension;
private Integer postalCode; private Integer postalCode;
private String country; private String country;
@ManyToMany(mappedBy = "users", fetch = FetchType.EAGER)
private List<BankAccount> bankAccounts;
} }

View File

@@ -1,10 +1,11 @@
package net.kapcake.bankingservice.repositories; 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 org.springframework.data.jpa.repository.JpaRepository;
import java.util.List; import java.util.List;
import java.util.Optional;
public interface BankAccountRepository extends JpaRepository<BankAccount, Long> { public interface BankAccountRepository extends JpaRepository<BankAccount, Long> {
List<BankAccount> findAllByUsers_username(String username); Optional<List<BankAccount>> findAllByUsers_username(String username);
} }

View File

@@ -1,6 +1,6 @@
package net.kapcake.bankingservice.repositories; 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; import org.springframework.data.jpa.repository.JpaRepository;
public interface PaymentRepository extends JpaRepository<Payment, Long> { public interface PaymentRepository extends JpaRepository<Payment, Long> {

View File

@@ -1,6 +1,6 @@
package net.kapcake.bankingservice.repositories; 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 org.springframework.data.jpa.repository.JpaRepository;
import java.util.Optional; import java.util.Optional;

View File

@@ -1,6 +1,6 @@
package net.kapcake.bankingservice.security; 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 net.kapcake.bankingservice.repositories.UserRepository;
import org.springframework.security.core.userdetails.UserDetails; import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.security.core.userdetails.UserDetailsService;

View File

@@ -1,13 +1,14 @@
package net.kapcake.bankingservice.services; 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 net.kapcake.bankingservice.repositories.BankAccountRepository;
import org.springframework.security.core.userdetails.User; import org.springframework.stereotype.Service;
import org.springframework.stereotype.Component;
import java.util.Collections;
import java.util.List; import java.util.List;
@Component @Service
public class AccountService { public class AccountService {
private final BankAccountRepository bankAccountRepository; private final BankAccountRepository bankAccountRepository;
@@ -16,6 +17,6 @@ public class AccountService {
} }
public List<BankAccount> getAccounts(User user) { public List<BankAccount> getAccounts(User user) {
return bankAccountRepository.findAllByUsers_username(user.getUsername()); return bankAccountRepository.findAllByUsers_username(user.getUsername()).orElse(Collections.emptyList());
} }
} }