diff --git a/pom.xml b/pom.xml index 0a99788..ee68058 100644 --- a/pom.xml +++ b/pom.xml @@ -44,10 +44,16 @@ runtime - + + + com.h2database + h2 + runtime diff --git a/src/main/java/io/zipcoder/Enums/AccountType.java b/src/main/java/io/zipcoder/Enums/AccountType.java new file mode 100644 index 0000000..10b21bf --- /dev/null +++ b/src/main/java/io/zipcoder/Enums/AccountType.java @@ -0,0 +1,13 @@ +package io.zipcoder.Enums; + +public enum AccountType { + SAVINGS("Savings"), + CHECKING("Checking"), + CREDIT("Credit"); + + private String name; + + AccountType(String name){ + this.name = name; + } +} diff --git a/src/main/java/io/zipcoder/Enums/DepositType.java b/src/main/java/io/zipcoder/Enums/DepositType.java new file mode 100644 index 0000000..95ee1ea --- /dev/null +++ b/src/main/java/io/zipcoder/Enums/DepositType.java @@ -0,0 +1,13 @@ +package io.zipcoder.Enums; + +public enum DepositType { + P2P("P2P"), + DEPOSIT("Deposit"), + WITHDRAWAL("Withdrawal"); + + private String name; + + DepositType(String name){ + this.name = name; + } +} diff --git a/src/main/java/io/zipcoder/Enums/Medium.java b/src/main/java/io/zipcoder/Enums/Medium.java new file mode 100644 index 0000000..79a94b1 --- /dev/null +++ b/src/main/java/io/zipcoder/Enums/Medium.java @@ -0,0 +1,12 @@ +package io.zipcoder.Enums; + +public enum Medium { + BALANCE("Balance"), + REWARDS("Rewards"); + + private String name; + + Medium(String name){ + this.name = name; + } +} diff --git a/src/main/java/io/zipcoder/Enums/Status.java b/src/main/java/io/zipcoder/Enums/Status.java new file mode 100644 index 0000000..dc0ad8c --- /dev/null +++ b/src/main/java/io/zipcoder/Enums/Status.java @@ -0,0 +1,14 @@ +package io.zipcoder.Enums; + +public enum Status { + PENDING("Pending"), + CANCELLED("Cancelled"), + COMPLETED("Completed"), + RECURRING("Recurring"); + + private String name; + + Status(String name){ + this.name = name; + } +} diff --git a/src/main/java/io/zipcoder/controller/AccountController.java b/src/main/java/io/zipcoder/controller/AccountController.java new file mode 100644 index 0000000..3538875 --- /dev/null +++ b/src/main/java/io/zipcoder/controller/AccountController.java @@ -0,0 +1,99 @@ +package io.zipcoder.controller; + +import io.zipcoder.domain.Account; +import io.zipcoder.domain.Bill; +import io.zipcoder.domain.Deposit; +import io.zipcoder.domain.Withdrawal; +import io.zipcoder.service.AccountService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +@RestController +public class AccountController { + + + AccountService service; + + @Autowired + public AccountController(AccountService service){ + this.service = service; + } + + @RequestMapping(value = "/accounts", method = RequestMethod.GET) + public ResponseEntity getAllAccounts() { + return new ResponseEntity<>(service.getAllAccounts(), HttpStatus.OK); + } + + @RequestMapping(value = "/accounts/{id}", method = RequestMethod.GET) + public ResponseEntity getAccount(@PathVariable Long id) { + return new ResponseEntity<>(service.getAccountById(id), HttpStatus.OK); + } + + @RequestMapping(value = "/accounts/{id}", method = RequestMethod.PUT) + public ResponseEntity updateAccount(@PathVariable Long id, @RequestBody Account account) { + if(service.updateAccount(id,account)){ + return new ResponseEntity<>(HttpStatus.OK); + } + else{ + return new ResponseEntity<>(HttpStatus.NOT_FOUND); + } + + } + + @RequestMapping(value = "/accounts/{id}", method = RequestMethod.DELETE) + public ResponseEntity deleteAccount(@PathVariable Long id) { + if(service.removeAccount(id)){ + return new ResponseEntity<>(HttpStatus.OK); + } + else{ + return new ResponseEntity<>(HttpStatus.NOT_FOUND); + } + } + + @RequestMapping(value = "/accounts/{id}/customer", method = RequestMethod.GET) + public ResponseEntity getAccountCustomer(@PathVariable Long id) { + return new ResponseEntity<>(service.getAccountCustomer(id), HttpStatus.OK); + } + + @RequestMapping(value = "/accounts/{id}/bills", method = RequestMethod.GET) + public ResponseEntity getAccountBills(@PathVariable Long id) { + return new ResponseEntity<>(service.getAccountBills(id), HttpStatus.OK); + } + + @RequestMapping(value = "/accounts/{id}/bills", method = RequestMethod.POST) + public ResponseEntity createBill(@PathVariable Long id, @RequestBody Bill bill) { + service.createBill(bill); + return new ResponseEntity<>(HttpStatus.CREATED); + } + + @RequestMapping(value = "/accounts/{id}/deposits", method = RequestMethod.GET) + public ResponseEntity getAllDeposits(@PathVariable Long id) { + return new ResponseEntity<>(service.getAccountDeposits(id), HttpStatus.OK); + } + + @RequestMapping(value = "/accounts/{id}/deposits", method = RequestMethod.POST) + public ResponseEntity createDeposit(@PathVariable Long id, @RequestBody Deposit deposit) { + service.createDeposit(deposit); + return new ResponseEntity<>(HttpStatus.CREATED); + } + + @RequestMapping(value = "/accounts/{id}/withdrawals", method = RequestMethod.GET) + public ResponseEntity getAllWithdrawals(@PathVariable Long id) { + return new ResponseEntity<>(service.getAccountWithdrawals(id), HttpStatus.OK); + } + + @RequestMapping(value = "/accounts/{id}/withdrawals", method = RequestMethod.POST) + public ResponseEntity createWithdrawal(@PathVariable Long id, @RequestBody Withdrawal withdrawal) { + service.createWithdrawal(withdrawal); + return new ResponseEntity<>(HttpStatus.CREATED); + } + + + + + + + +} diff --git a/src/main/java/io/zipcoder/controller/BillController.java b/src/main/java/io/zipcoder/controller/BillController.java new file mode 100644 index 0000000..2107ea0 --- /dev/null +++ b/src/main/java/io/zipcoder/controller/BillController.java @@ -0,0 +1,41 @@ +package io.zipcoder.controller; + + +import io.zipcoder.domain.Bill; +import io.zipcoder.service.BillService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +@RestController +public class BillController { + + private BillService billService; + + @Autowired + BillController(BillService billService){ + this.billService = billService; + } + + @RequestMapping(value = "/bills/{billid}", method = RequestMethod.GET) + public ResponseEntity getBillById(@PathVariable Long billId){ + return new ResponseEntity(this.billService.getBillById(billId), HttpStatus.OK); + } + + @RequestMapping(value = "/bills/(billid}", method = RequestMethod.PUT) + public ResponseEntity updateBill(@PathVariable Long billId, @RequestBody Bill billToUpdate){ + boolean wasUpdated = this.billService.updateBill(billToUpdate); + if (wasUpdated){ + return new ResponseEntity(HttpStatus.OK); + } else { + return new ResponseEntity(HttpStatus.NOT_FOUND); + } + } + + @RequestMapping(value = "/bills/{billid}", method = RequestMethod.DELETE) + public ResponseEntity deleteBill(@PathVariable Long billId){ + this.billService.deleteBillById(billId); + return new ResponseEntity(HttpStatus.OK); + } +} diff --git a/src/main/java/io/zipcoder/controller/CustomerController.java b/src/main/java/io/zipcoder/controller/CustomerController.java new file mode 100644 index 0000000..54c5ef3 --- /dev/null +++ b/src/main/java/io/zipcoder/controller/CustomerController.java @@ -0,0 +1,67 @@ +package io.zipcoder.controller; + +import com.sun.deploy.net.HttpResponse; +import io.zipcoder.domain.Account; +import io.zipcoder.domain.Customer; +import io.zipcoder.service.CustomerService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +@RestController +public class CustomerController { + + + CustomerService service; + + @Autowired + public CustomerController(CustomerService service){ + this.service = service; + } + + @RequestMapping(value = "/customers/{id}/accounts", method = RequestMethod.GET) + public ResponseEntity getAllAcctsForCust(@PathVariable Long id) { + + return new ResponseEntity<>(service.getAllAccountsForCust(id), HttpStatus.OK); + } + + @RequestMapping(value = "/customers/{id}/accounts", method = RequestMethod.POST) + public ResponseEntity createAccount(@PathVariable Long id, @RequestBody Account account){ + service.createAccount(account); + return new ResponseEntity<>(HttpStatus.CREATED); + } + + @RequestMapping(value = "/customers", method = RequestMethod.GET) + public ResponseEntity getAllCustomers(){ + return new ResponseEntity<>(service.getAllCustomers(), HttpStatus.OK); + } + + @RequestMapping(value = "/customers/{id}", method = RequestMethod.GET) + public ResponseEntity getSpecificCusomer(@PathVariable Long id){ + + return new ResponseEntity<>(service.getCustomerById(id), HttpStatus.OK); + } + + @RequestMapping(value = "/customers", method = RequestMethod.POST) + public ResponseEntity createACustomer(@RequestBody Customer customer){ + service.addCustomer(customer); + return new ResponseEntity<>(HttpStatus.CREATED); + } + + @RequestMapping(value = "/customer/{id}", method = RequestMethod.PUT) + public ResponseEntity updateCustomer(@PathVariable Long id, @RequestBody Customer customer){ + if(service.updateCustomer(id,customer)){ + return new ResponseEntity<>(HttpStatus.OK); + } + else{ + return new ResponseEntity<>(HttpStatus.NOT_FOUND); + } + } + + @RequestMapping(value = "/customer/{id}/bills", method = RequestMethod.GET) + public ResponseEntity getAllBillsForCust(@PathVariable Long id){ + + return new ResponseEntity<>(service.getAllBillsForCustomer(id), HttpStatus.OK); + } +} diff --git a/src/main/java/io/zipcoder/controller/DepositController.java b/src/main/java/io/zipcoder/controller/DepositController.java new file mode 100644 index 0000000..6252ac5 --- /dev/null +++ b/src/main/java/io/zipcoder/controller/DepositController.java @@ -0,0 +1,40 @@ +package io.zipcoder.controller; + +import io.zipcoder.domain.Deposit; +import io.zipcoder.service.DepositService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +@RestController +public class DepositController { + + private DepositService depositService; + + @Autowired + DepositController(DepositService depositService){ + this.depositService = depositService; + } + + @RequestMapping(value = "/deposits/{depositId}", method = RequestMethod.GET) + public ResponseEntity getDepositById(@PathVariable long depositId){ + return new ResponseEntity(this.depositService.getDepositById(depositId), HttpStatus.OK); + } + + @RequestMapping(value = "/deposits/{depositid}", method = RequestMethod.PUT) + public ResponseEntity updateDeposit(@PathVariable long depositId, @RequestBody Deposit depositToUpdate){ + boolean wasUpdated = this.depositService.updateDeposit(depositToUpdate); + if (wasUpdated) { + return new ResponseEntity(HttpStatus.OK); + } else { + return new ResponseEntity(HttpStatus.NOT_FOUND); + } + } + + @RequestMapping(value = "/deposits/{depositId}", method = RequestMethod.DELETE) + public ResponseEntity deleteDepositById(@PathVariable long depositId){ + this.depositService.deleteDepositById(depositId); + return new ResponseEntity(HttpStatus.OK); + } +} diff --git a/src/main/java/io/zipcoder/controller/WithdrawalController.java b/src/main/java/io/zipcoder/controller/WithdrawalController.java new file mode 100644 index 0000000..8b46aa9 --- /dev/null +++ b/src/main/java/io/zipcoder/controller/WithdrawalController.java @@ -0,0 +1,40 @@ +package io.zipcoder.controller; + +import io.zipcoder.domain.Withdrawal; +import io.zipcoder.service.WithdrawalService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +@RestController +public class WithdrawalController { + + private WithdrawalService withdrawalService; + + @Autowired + WithdrawalController(WithdrawalService withdrawalService){ + this.withdrawalService = withdrawalService; + } + + @RequestMapping(value = "/withdrawals/{withdrawalId}", method = RequestMethod.GET) + public ResponseEntity getWithdrawalById(@PathVariable long withdrawalId){ + return new ResponseEntity(this.withdrawalService.getWithdrawalById(withdrawalId), HttpStatus.OK); + } + + @RequestMapping(value = "/withdrawals/{withdrawalid}", method = RequestMethod.PUT) + public ResponseEntity updateWithdrawal(@PathVariable long withdrawalId, @RequestBody Withdrawal withdrawalToUpdate){ + boolean wasUpdated = this.withdrawalService.updateWithdrawal(withdrawalToUpdate); + if (wasUpdated) { + return new ResponseEntity(HttpStatus.OK); + } else { + return new ResponseEntity(HttpStatus.NOT_FOUND); + } + } + + @RequestMapping(value = "/withdrawals/{withdrawalId}", method = RequestMethod.DELETE) + public ResponseEntity deleteWithdrawalById(@PathVariable long withdrawalId){ + this.withdrawalService.deleteWithdrawalById(withdrawalId); + return new ResponseEntity(HttpStatus.OK); + } +} diff --git a/src/main/java/io/zipcoder/domain/Account.java b/src/main/java/io/zipcoder/domain/Account.java new file mode 100644 index 0000000..095e55c --- /dev/null +++ b/src/main/java/io/zipcoder/domain/Account.java @@ -0,0 +1,77 @@ +package io.zipcoder.domain; + +import io.zipcoder.Enums.AccountType; + +import javax.persistence.*; + +@Entity +public class Account { + + @Id + @GeneratedValue + private Long id; + + @Column(name = "ACCOUNT_TYPE") + private AccountType type; + + @Column(name = "NICKNAME") + private String nickname; + + @Column(name = "REWARDS") + private Integer rewards; + + @Column(name = "BALANCE") + private Double balance; + + + @Column(name = "CUSTOMER_ID") + private Long customerId; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getType() { + return type.name(); + } + + public void setType(AccountType type) { + this.type = type; + } + + public String getNickname() { + return nickname; + } + + public void setNickname(String nickname) { + this.nickname = nickname; + } + + public Integer getRewards() { + return rewards; + } + + public void setRewards(Integer rewards) { + this.rewards = rewards; + } + + public Double getBalance() { + return balance; + } + + public void setBalance(Double balance) { + this.balance = balance; + } + + public Long getCustomer() { + return customerId; + } + + public void setCustomer(Long customerId) { + this.customerId = customerId; + } +} diff --git a/src/main/java/io/zipcoder/domain/Address.java b/src/main/java/io/zipcoder/domain/Address.java new file mode 100644 index 0000000..29f087d --- /dev/null +++ b/src/main/java/io/zipcoder/domain/Address.java @@ -0,0 +1,76 @@ +package io.zipcoder.domain; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; + +@Entity +public class Address { + @Id + @GeneratedValue + private Long id; + + @Column(name = "STREET_NUMBER") + private String streetNumber; + + @Column(name = "STREET_NAME") + private String streetName; + + @Column(name = "CITY") + private String city; + + @Column(name = "STATE") + private String state; + + @Column(name = "ZIP") + private String zip; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getStreetNumber() { + return streetNumber; + } + + public void setStreetNumber(String streetNumber) { + this.streetNumber = streetNumber; + } + + public String getStreetName() { + return streetName; + } + + public void setStreetName(String streetName) { + this.streetName = streetName; + } + + public String getCity() { + return city; + } + + public void setCity(String city) { + this.city = city; + } + + public String getState() { + return state; + } + + public void setState(String state) { + this.state = state; + } + + public String getZip() { + return zip; + } + + public void setZip(String zip) { + this.zip = zip; + } +} diff --git a/src/main/java/io/zipcoder/domain/Bill.java b/src/main/java/io/zipcoder/domain/Bill.java new file mode 100644 index 0000000..e0f82da --- /dev/null +++ b/src/main/java/io/zipcoder/domain/Bill.java @@ -0,0 +1,108 @@ +package io.zipcoder.domain; + +import io.zipcoder.Enums.Status; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; + +@Entity +public class Bill { + + @Id + @GeneratedValue + private Long id; + + private Status status; + private String payee; + private String nickname; + private String creation_date; + private String payment_date; + private Integer recurring_date; + private String upcoming_payment_date; + private Double paymount_amount; + + + private String account_id; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public Status getStatus() { + return status; + } + + public void setStatus(Status status) { + this.status = status; + } + + public String getPayee() { + return payee; + } + + public void setPayee(String payee) { + this.payee = payee; + } + + public String getNickname() { + return nickname; + } + + public void setNickname(String nickname) { + this.nickname = nickname; + } + + public String getCreation_date() { + return creation_date; + } + + public void setCreation_date(String creation_date) { + this.creation_date = creation_date; + } + + public String getPayment_date() { + return payment_date; + } + + public void setPayment_date(String payment_date) { + this.payment_date = payment_date; + } + + public Integer getRecurring_date() { + return recurring_date; + } + + public void setRecurring_date(Integer recurring_date) { + this.recurring_date = recurring_date; + } + + public String getUpcoming_payment_date() { + return upcoming_payment_date; + } + + public void setUpcoming_payment_date(String upcoming_payment_date) { + this.upcoming_payment_date = upcoming_payment_date; + } + + public Double getPaymount_amount() { + return paymount_amount; + } + + public void setPaymount_amount(Double paymount_amount) { + this.paymount_amount = paymount_amount; + } + + public String getAccount_id() { + return account_id; + } + + public void setAccount_id(String account_id) { + this.account_id = account_id; + } +} diff --git a/src/main/java/io/zipcoder/domain/Customer.java b/src/main/java/io/zipcoder/domain/Customer.java new file mode 100644 index 0000000..76e64dc --- /dev/null +++ b/src/main/java/io/zipcoder/domain/Customer.java @@ -0,0 +1,54 @@ +package io.zipcoder.domain; + +import javax.persistence.*; +import java.util.Set; + +@Entity +public class Customer { + + @Id + @GeneratedValue + private long id; + + @Column(name = "FIRST_NAME") + private String firstName; + + @Column(name = "LAST_NAME") + private String lastName; + + @OneToMany(cascade = CascadeType.ALL) + @Column(name = "ADDRESSES") + private Set
addresses; + + public long getId() { + return id; + } + + public void setId(long id) { + this.id = id; + } + + public String getFirstName() { + return firstName; + } + + public void setFirstName(String firstName) { + this.firstName = firstName; + } + + public String getLastName() { + return lastName; + } + + public void setLastName(String lastName) { + this.lastName = lastName; + } + + public Set
getAddresses() { + return addresses; + } + + public void setAddresses(Set
addresses) { + this.addresses = addresses; + } +} diff --git a/src/main/java/io/zipcoder/domain/Deposit.java b/src/main/java/io/zipcoder/domain/Deposit.java new file mode 100644 index 0000000..b2da3f1 --- /dev/null +++ b/src/main/java/io/zipcoder/domain/Deposit.java @@ -0,0 +1,90 @@ +package io.zipcoder.domain; + + +import io.zipcoder.Enums.DepositType; +import io.zipcoder.Enums.Medium; +import io.zipcoder.Enums.Status; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; + +@Entity +public class Deposit { + + @Id + @GeneratedValue + private long id; + private DepositType type; + private String transaction_date; + private Status status; + private long payee_id; + private Medium medium; + private double amount; + private String description; + + public long getId() { + return id; + } + + public void setId(long id) { + this.id = id; + } + + public DepositType getType() { + return type; + } + + public void setType(DepositType type) { + this.type = type; + } + + public String getTransaction_date() { + return transaction_date; + } + + public void setTransaction_date(String transaction_date) { + this.transaction_date = transaction_date; + } + + public Status getStatus() { + return status; + } + + public void setStatus(Status status) { + this.status = status; + } + + public long getPayee_id() { + return payee_id; + } + + public void setPayee_id(long payee_id) { + this.payee_id = payee_id; + } + + public Medium getMedium() { + return medium; + } + + public void setMedium(Medium medium) { + this.medium = medium; + } + + public double getAmount() { + return amount; + } + + public void setAmount(double amount) { + this.amount = amount; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + +} diff --git a/src/main/java/io/zipcoder/domain/Withdrawal.java b/src/main/java/io/zipcoder/domain/Withdrawal.java new file mode 100644 index 0000000..926057c --- /dev/null +++ b/src/main/java/io/zipcoder/domain/Withdrawal.java @@ -0,0 +1,89 @@ +package io.zipcoder.domain; + + +import io.zipcoder.Enums.DepositType; +import io.zipcoder.Enums.Medium; +import io.zipcoder.Enums.Status; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; + +@Entity +public class Withdrawal { + + @Id + @GeneratedValue + private long id; + private DepositType type; + private String transaction_date; + private Status status; + private long payer_id; + private Medium medium; + private double amount; + private String description; + + public long getId() { + return id; + } + + public void setId(long id) { + this.id = id; + } + + public DepositType getType() { + return type; + } + + public void setType(DepositType type) { + this.type = type; + } + + public String getTransaction_date() { + return transaction_date; + } + + public void setTransaction_date(String transaction_date) { + this.transaction_date = transaction_date; + } + + public Status getStatus() { + return status; + } + + public void setStatus(Status status) { + this.status = status; + } + + public long getPayer_id() { + return payer_id; + } + + public void setPayer_id(long payee_id) { + this.payer_id = payee_id; + } + + public Medium getMedium() { + return medium; + } + + public void setMedium(Medium medium) { + this.medium = medium; + } + + public double getAmount() { + return amount; + } + + public void setAmount(double amount) { + this.amount = amount; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } +} diff --git a/src/main/java/io/zipcoder/repository/AccountRepository.java b/src/main/java/io/zipcoder/repository/AccountRepository.java new file mode 100644 index 0000000..4a97049 --- /dev/null +++ b/src/main/java/io/zipcoder/repository/AccountRepository.java @@ -0,0 +1,9 @@ +package io.zipcoder.repository; + +import io.zipcoder.domain.Account; +import io.zipcoder.domain.Customer; +import org.springframework.data.repository.CrudRepository; + +public interface AccountRepository extends CrudRepository { + Iterable findAllByCustomerId(Long id); +} diff --git a/src/main/java/io/zipcoder/repository/BillRepository.java b/src/main/java/io/zipcoder/repository/BillRepository.java new file mode 100644 index 0000000..f03c1dd --- /dev/null +++ b/src/main/java/io/zipcoder/repository/BillRepository.java @@ -0,0 +1,12 @@ +package io.zipcoder.repository; + +import io.zipcoder.domain.Bill; +import org.springframework.data.repository.CrudRepository; + +import java.util.List; + +public interface BillRepository extends CrudRepository { + + public Iterable findAllByAccount_id(Long id); +} + diff --git a/src/main/java/io/zipcoder/repository/CustomerRepository.java b/src/main/java/io/zipcoder/repository/CustomerRepository.java new file mode 100644 index 0000000..656915e --- /dev/null +++ b/src/main/java/io/zipcoder/repository/CustomerRepository.java @@ -0,0 +1,8 @@ +package io.zipcoder.repository; + +import io.zipcoder.domain.Customer; +import org.springframework.data.repository.CrudRepository; + +public interface CustomerRepository extends CrudRepository{ + +} diff --git a/src/main/java/io/zipcoder/repository/DepositRepository.java b/src/main/java/io/zipcoder/repository/DepositRepository.java new file mode 100644 index 0000000..3788379 --- /dev/null +++ b/src/main/java/io/zipcoder/repository/DepositRepository.java @@ -0,0 +1,10 @@ +package io.zipcoder.repository; + +import io.zipcoder.domain.Deposit; +import org.springframework.data.repository.CrudRepository; + +public interface DepositRepository extends CrudRepository { + + Iterable findAllByPayee_id(Long id); + +} diff --git a/src/main/java/io/zipcoder/repository/WithdrawalRepository.java b/src/main/java/io/zipcoder/repository/WithdrawalRepository.java new file mode 100644 index 0000000..675cdcc --- /dev/null +++ b/src/main/java/io/zipcoder/repository/WithdrawalRepository.java @@ -0,0 +1,8 @@ +package io.zipcoder.repository; + +import io.zipcoder.domain.Withdrawal; +import org.springframework.data.repository.CrudRepository; + +public interface WithdrawalRepository extends CrudRepository{ + Iterable findAllByPayee_id(Long id); +} diff --git a/src/main/java/io/zipcoder/service/AccountService.java b/src/main/java/io/zipcoder/service/AccountService.java new file mode 100644 index 0000000..c1e1ad5 --- /dev/null +++ b/src/main/java/io/zipcoder/service/AccountService.java @@ -0,0 +1,105 @@ +package io.zipcoder.service; + +import io.zipcoder.domain.*; +import io.zipcoder.repository.*; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; + +@Service +public class AccountService { + + + private AccountRepository repo; + private BillRepository billRepo; + private DepositRepository depositRepo; + private WithdrawalRepository withdrawalRepo; + private CustomerRepository customerRepo; + + @Autowired + public AccountService(BillRepository billRepo, AccountRepository repo, DepositRepository depositRepo, WithdrawalRepository withdrawalRepo, CustomerRepository customerRepo){ + this.billRepo=billRepo; + this.repo = repo; + this.depositRepo= depositRepo; + this.withdrawalRepo=withdrawalRepo; + this.customerRepo = customerRepo; + } + + + public List getAllAccounts(){ + List accounts = new ArrayList<>(); + for(Account a : repo.findAll()) { + accounts.add(a); + } + return accounts; + } + + public Account getAccountById(Long id){ + return repo.findOne(id); + } + + public boolean updateAccount(Long id, Account account){ + if(repo.exists(id)){ + repo.save(account); + return true; + } + else{ + return false; + } + } + + public boolean removeAccount(Long id){ + if(repo.exists(id)){ + repo.delete(id); + return true; + } + else{ + return false; + } + } + + public Customer getAccountCustomer(Long id) { + Account account = repo.findOne(id); + + return customerRepo.findOne(account.getCustomer()); + } + + public List getAccountBills(Long id) { + List bills = new ArrayList<>(); + for(Bill b : billRepo.findAllByAccount_id(id)) { + bills.add(b); + } + return bills; + } + + public void createBill(Bill bill) { + billRepo.save(bill); + } + + public List getAccountDeposits(Long id) { + List deposits = new ArrayList<>(); + for(Deposit d : depositRepo.findAllByPayee_id(id)) { + deposits.add(d); + } + return deposits; + } + + public void createDeposit(Deposit deposit) { + depositRepo.save(deposit); + } + + public List getAccountWithdrawals(Long id) { + List withdrawals = new ArrayList<>(); + for(Withdrawal w : withdrawalRepo.findAllByPayee_id(id)) { + withdrawals.add(w); + } + return withdrawals; + } + + public void createWithdrawal(Withdrawal withdrawal) { + withdrawalRepo.save(withdrawal); + } + +} diff --git a/src/main/java/io/zipcoder/service/BillService.java b/src/main/java/io/zipcoder/service/BillService.java new file mode 100644 index 0000000..72bf319 --- /dev/null +++ b/src/main/java/io/zipcoder/service/BillService.java @@ -0,0 +1,34 @@ +package io.zipcoder.service; + +import io.zipcoder.domain.Bill; +import io.zipcoder.repository.BillRepository; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +@Service +public class BillService { + + private BillRepository billRepository; + + @Autowired + BillService(BillRepository billRepository){ + this.billRepository = billRepository; + } + + public Bill getBillById(Long id){ + return this.billRepository.findOne(id); + } + + public boolean updateBill(Bill newBill){ + if(this.billRepository.findOne(newBill.getId()) != null) { + this.billRepository.save(newBill); + return true; + }else { + return false; + } + } + + public void deleteBillById(Long id){ + this.billRepository.delete(id); + } +} diff --git a/src/main/java/io/zipcoder/service/CustomerService.java b/src/main/java/io/zipcoder/service/CustomerService.java new file mode 100644 index 0000000..b076dd4 --- /dev/null +++ b/src/main/java/io/zipcoder/service/CustomerService.java @@ -0,0 +1,82 @@ +package io.zipcoder.service; + +import io.zipcoder.domain.Account; +import io.zipcoder.domain.Bill; +import io.zipcoder.domain.Customer; +import io.zipcoder.repository.AccountRepository; +import io.zipcoder.repository.BillRepository; +import io.zipcoder.repository.CustomerRepository; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; + +@Service +public class CustomerService { + + + private CustomerRepository repo; + private AccountRepository accountRepo; + private BillRepository billRepo; + private AccountService accountService; + + @Autowired + public CustomerService(CustomerRepository repo, AccountRepository accountRepo, BillRepository billRepo, AccountService accountService) { + this.repo = repo; + this.accountRepo = accountRepo; + this.billRepo = billRepo; + this.accountService = accountService; + } + + public List getAllAccountsForCust(Long id){ + List accounts = new ArrayList<>(); + for(Account a : accountRepo.findAllByCustomerId(id)) { + accounts.add(a); + } + return accounts; + } + + public void createAccount(Account account){ + accountRepo.save(account); + } + + public List getAllCustomers() { + List customers = new ArrayList(); + for(Customer c : repo.findAll()){ + customers.add(c); + } + return customers; + } + + public Customer getCustomerById(Long id){ + return repo.findOne(id); + } + + public void addCustomer (Customer customer) { + repo.save(customer); + } + + public boolean updateCustomer(Long id, Customer customer){ + if(repo.exists(id)){ + repo.save(customer); + return true; + } + else{ + return false; + } + } + + public List getAllBillsForCustomer(Long id){ + List bills = new ArrayList<>(); + List accounts = this.getAllAccountsForCust(id); + for(Account a : accounts){ + List accountBills = accountService.getAccountBills(a.getId()); + for(Bill b : accountBills){ + bills.add(b); + } + } + return bills; + } + +} diff --git a/src/main/java/io/zipcoder/service/DepositService.java b/src/main/java/io/zipcoder/service/DepositService.java new file mode 100644 index 0000000..667ae4c --- /dev/null +++ b/src/main/java/io/zipcoder/service/DepositService.java @@ -0,0 +1,34 @@ +package io.zipcoder.service; + +import io.zipcoder.domain.Deposit; +import io.zipcoder.repository.DepositRepository; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +@Service +public class DepositService { + + private DepositRepository depositRepository; + + @Autowired + DepositService(DepositRepository depositRepository){ + this.depositRepository = depositRepository; + } + + public Deposit getDepositById(Long depositId){ + return this.depositRepository.findOne(depositId); + } + + public boolean updateDeposit(Deposit newDeposit){ + if(this.depositRepository.findOne(newDeposit.getId()) != null) { + this.depositRepository.save(newDeposit); + return true; + }else { + return false; + } + } + + public void deleteDepositById(Long id){ + this.depositRepository.delete(id); + } +} diff --git a/src/main/java/io/zipcoder/service/WithdrawalService.java b/src/main/java/io/zipcoder/service/WithdrawalService.java new file mode 100644 index 0000000..2b730d9 --- /dev/null +++ b/src/main/java/io/zipcoder/service/WithdrawalService.java @@ -0,0 +1,34 @@ +package io.zipcoder.service; + +import io.zipcoder.domain.Withdrawal; +import io.zipcoder.repository.WithdrawalRepository; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +@Service +public class WithdrawalService { + + private WithdrawalRepository withdrawalRepository; + + @Autowired + WithdrawalService(WithdrawalRepository withdrawalRepository){ + this.withdrawalRepository = withdrawalRepository; + } + + public Withdrawal getWithdrawalById(Long withdrawalId){ + return this.withdrawalRepository.findOne(withdrawalId); + } + + public boolean updateWithdrawal(Withdrawal newWithdrawal){ + if(this.withdrawalRepository.findOne(newWithdrawal.getId()) != null) { + this.withdrawalRepository.save(newWithdrawal); + return true; + }else { + return false; + } + } + + public void deleteWithdrawalById(Long id){ + this.withdrawalRepository.delete(id); + } +} diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index e69de29..69b8998 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -0,0 +1 @@ +spring.h2.console.enabled=true \ No newline at end of file