Skip to content

Commit

Permalink
Merge pull request #36 from ucmo-cs/add-payments
Browse files Browse the repository at this point in the history
Added payments to backend
  • Loading branch information
michaelharlow authored Nov 20, 2024
2 parents 8780b4a + 14f7254 commit 820dc96
Show file tree
Hide file tree
Showing 7 changed files with 177 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,10 @@

import com.avengers.example.domain.Account;
import com.avengers.example.domain.Loan;
import com.avengers.example.domain.Payment;
import com.avengers.example.repository.AccountRepository;
import com.avengers.example.repository.LoanRepository;
import com.avengers.example.repository.PaymentRepository;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.CommandLineRunner;
Expand All @@ -18,12 +20,14 @@ public class TestDatabaseConfig {
private static final Logger logger = LoggerFactory.getLogger(TestDatabaseConfig.class);

@Bean
CommandLineRunner initDatabase(AccountRepository repository, LoanRepository loanRepository) {
CommandLineRunner initDatabase(AccountRepository repository, LoanRepository loanRepository, PaymentRepository paymentRepository) {
return args -> {
logger.info("Preloading {}", repository.save(new Account(true, "Tony Stark", "test", "[email protected]", "123-456-7890")));
logger.info("Preloading {}", repository.save(new Account(false, "Steve Rogers", "1234", "[email protected]", "123-123-1234")));
logger.info("Preloading {}", loanRepository.save(new Loan(1000, 0.05, 12f, new Date(), repository.findById(2L).orElse(null))));
logger.info("Preloading {}", loanRepository.save(new Loan(50000, 3270.75, 6.99f, new Date(), repository.findById(2L).orElse(null))));
logger.info("Preloading {}", paymentRepository.save(new Payment(100, new Date(), loanRepository.findById(1L).orElse(null))));
logger.info("Preloading {}", paymentRepository.save(new Payment(80, new Date(), loanRepository.findById(1L).orElse(null))));
};
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
package com.avengers.example.controller;

import com.avengers.example.domain.Payment;
import com.avengers.example.service.PaymentService;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

@RestController
public class PaymentController
{
private final PaymentService paymentService;

public PaymentController(PaymentService paymentService)
{
this.paymentService = paymentService;
}

/**
* Creates a new payment object and saves it to the database.
*
* @param payment the payment instance to be added to the database.
* @return The response from the server.
*/
@PostMapping("/payment")
public ResponseEntity<?> save(@RequestBody Payment payment)
{
return new ResponseEntity<>(paymentService.create(payment), HttpStatus.CREATED);
}

/**
* @return A response object containing all payments from the database.
*/
@GetMapping("/payments")
public ResponseEntity<?> findAll()
{
return new ResponseEntity<>(paymentService.findAll(), HttpStatus.OK);
}

@GetMapping("/payments/{loanId}")
public ResponseEntity<?> findAllByLoan(@PathVariable Long loanId)
{
return new ResponseEntity<>(paymentService.findAllByLoan(loanId), HttpStatus.OK);
}
}
20 changes: 19 additions & 1 deletion src/main/java/com/avengers/example/domain/Loan.java
Original file line number Diff line number Diff line change
@@ -1,11 +1,14 @@
package com.avengers.example.domain;

import com.fasterxml.jackson.annotation.JsonIgnore;
import jakarta.persistence.*;
import lombok.Data;
import lombok.Getter;
import lombok.Setter;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

@Entity
@Data
Expand All @@ -21,11 +24,14 @@ public class Loan
private float interestRate;
private Date date;


@ManyToOne
@JoinColumn(name = "account_id")
private Account account;

@OneToMany(mappedBy = "loan", cascade = CascadeType.ALL, orphanRemoval = true)
@JsonIgnore
private List<Payment> payments = new ArrayList<>();

public Loan()
{
}
Expand All @@ -44,4 +50,16 @@ public Loan(double originAmount, double currentAmount, float interestRate, Date
this.date = date;
this.account = account;
}

@Override
public String toString() {
return "Loan{" +
"id=" + id +
", originAmount=" + originAmount +
", currentAmount=" + currentAmount +
", interestRate=" + interestRate +
", date=" + date +
", account=" + account +
'}';
}
}
43 changes: 43 additions & 0 deletions src/main/java/com/avengers/example/domain/Payment.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
package com.avengers.example.domain;

import jakarta.persistence.*;
import lombok.Data;
import lombok.Getter;
import lombok.Setter;

import java.util.Date;

@Entity
@Data
@Getter
@Setter
public class Payment
{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private float paymentAmount;
private Date paymentDate;

@ManyToOne
@JoinColumn(name = "loan_id")
private Loan loan;

public Payment(float paymentAmount, Date paymentDate, Loan loan)
{
this.paymentAmount = paymentAmount;
this.paymentDate = paymentDate;
this.loan = loan;
}

public Payment(float paymentAmount, Date paymentDate)
{
this.paymentAmount = paymentAmount;
this.paymentDate = paymentDate;
}

public Payment()
{
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package com.avengers.example.repository;

import com.avengers.example.domain.Payment;
import org.springframework.data.jpa.repository.JpaRepository;

import java.util.List;

public interface PaymentRepository extends JpaRepository<Payment, Long>
{
List<Payment> findAllByLoanId(Long loanId);
}
31 changes: 31 additions & 0 deletions src/main/java/com/avengers/example/service/PaymentService.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package com.avengers.example.service;

import com.avengers.example.domain.Payment;
import com.avengers.example.repository.PaymentRepository;
import jakarta.transaction.Transactional;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;

import java.util.List;

@AllArgsConstructor
@Service
public class PaymentService
{
private final PaymentRepository paymentRepository;

@Transactional
public Payment create(Payment payment)
{
return paymentRepository.save(payment);
}

public List<Payment> findAllByLoan(Long loanId) {
return paymentRepository.findAllByLoanId(loanId);
}

public List<Payment> findAll()
{
return paymentRepository.findAll();
}
}
23 changes: 23 additions & 0 deletions src/test/java/com/avengers/example/domain/PaymentTests.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package com.avengers.example.domain;

import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.Date;

@SpringBootTest
public class PaymentTests
{
private Payment testPayment;
private float testPaymentAmount = 1.10f;
private Date testPaymentDate = new Date();

@Test
public void testConstructor()
{
testPayment = new Payment(testPaymentAmount, testPaymentDate);

assert testPayment.getPaymentAmount() == testPaymentAmount;
assert testPayment.getPaymentDate() == testPaymentDate;
}
}

0 comments on commit 820dc96

Please sign in to comment.