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