summaryrefslogtreecommitdiff
path: root/spring-boot/04-bank-jpa-rest/src/main
diff options
context:
space:
mode:
Diffstat (limited to 'spring-boot/04-bank-jpa-rest/src/main')
-rw-r--r--spring-boot/04-bank-jpa-rest/src/main/java/com/example/spring/Application.java12
-rw-r--r--spring-boot/04-bank-jpa-rest/src/main/java/com/example/spring/bank/account/Account.java53
-rw-r--r--spring-boot/04-bank-jpa-rest/src/main/java/com/example/spring/bank/account/AccountController.java28
-rw-r--r--spring-boot/04-bank-jpa-rest/src/main/java/com/example/spring/bank/account/AccountManager.java13
-rw-r--r--spring-boot/04-bank-jpa-rest/src/main/java/com/example/spring/bank/account/AccountManagerImpl.java33
-rw-r--r--spring-boot/04-bank-jpa-rest/src/main/java/com/example/spring/bank/account/AccountRepository.java7
-rw-r--r--spring-boot/04-bank-jpa-rest/src/main/java/com/example/spring/bank/customer/Customer.java66
-rw-r--r--spring-boot/04-bank-jpa-rest/src/main/java/com/example/spring/bank/customer/CustomerManager.java17
-rw-r--r--spring-boot/04-bank-jpa-rest/src/main/java/com/example/spring/bank/customer/CustomerManagerImpl.java45
-rw-r--r--spring-boot/04-bank-jpa-rest/src/main/java/com/example/spring/bank/customer/CustomerRepository.java7
-rw-r--r--spring-boot/04-bank-jpa-rest/src/main/java/com/example/spring/bank/dev/AppInit.java44
-rw-r--r--spring-boot/04-bank-jpa-rest/src/main/java/com/example/spring/hello/HelloController.java14
-rw-r--r--spring-boot/04-bank-jpa-rest/src/main/resources/application.properties21
-rw-r--r--spring-boot/04-bank-jpa-rest/src/main/resources/config/application-default.properties0
-rw-r--r--spring-boot/04-bank-jpa-rest/src/main/resources/config/application-dev.properties1
-rw-r--r--spring-boot/04-bank-jpa-rest/src/main/resources/config/application-production.properties0
16 files changed, 361 insertions, 0 deletions
diff --git a/spring-boot/04-bank-jpa-rest/src/main/java/com/example/spring/Application.java b/spring-boot/04-bank-jpa-rest/src/main/java/com/example/spring/Application.java
new file mode 100644
index 0000000..4393f3f
--- /dev/null
+++ b/spring-boot/04-bank-jpa-rest/src/main/java/com/example/spring/Application.java
@@ -0,0 +1,12 @@
+package com.example.spring;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+public class Application {
+
+ public static void main(String[] args) throws Exception {
+ SpringApplication.run(Application.class, args);
+ }
+} \ No newline at end of file
diff --git a/spring-boot/04-bank-jpa-rest/src/main/java/com/example/spring/bank/account/Account.java b/spring-boot/04-bank-jpa-rest/src/main/java/com/example/spring/bank/account/Account.java
new file mode 100644
index 0000000..b5fe811
--- /dev/null
+++ b/spring-boot/04-bank-jpa-rest/src/main/java/com/example/spring/bank/account/Account.java
@@ -0,0 +1,53 @@
+package com.example.spring.bank.account;
+
+import java.math.BigDecimal;
+
+import com.example.spring.bank.customer.Customer;
+
+import jakarta.persistence.Entity;
+import jakarta.persistence.GeneratedValue;
+import jakarta.persistence.GenerationType;
+import jakarta.persistence.Id;
+import jakarta.persistence.ManyToOne;
+
+@Entity
+public class Account {
+ @Id
+ @GeneratedValue(strategy = GenerationType.AUTO)
+ private Long accountNumber;
+
+ private BigDecimal balance;
+
+ public Account() {
+ super();
+ }
+
+ public Account(BigDecimal balance) {
+ super();
+ this.balance = balance;
+ }
+
+ @ManyToOne
+ private Customer customer;
+
+ public Customer getCustomer() {
+ return customer;
+ }
+
+ public void setCustomer(Customer customer) {
+ this.customer = customer;
+ }
+
+ public Long getAccountNumber() {
+ return accountNumber;
+ }
+ public void setAccountNumber(Long accountNumber) {
+ this.accountNumber = accountNumber;
+ }
+ public BigDecimal getBalance() {
+ return balance;
+ }
+ public void setBalance(BigDecimal balance) {
+ this.balance = balance;
+ }
+} \ No newline at end of file
diff --git a/spring-boot/04-bank-jpa-rest/src/main/java/com/example/spring/bank/account/AccountController.java b/spring-boot/04-bank-jpa-rest/src/main/java/com/example/spring/bank/account/AccountController.java
new file mode 100644
index 0000000..dc017dd
--- /dev/null
+++ b/spring-boot/04-bank-jpa-rest/src/main/java/com/example/spring/bank/account/AccountController.java
@@ -0,0 +1,28 @@
+package com.example.spring.bank.account;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+@RequestMapping("/account")
+public class AccountController {
+
+ @Autowired
+ private AccountManager accountManager;
+
+ @GetMapping("/{accountNumber}")
+ public Account getAccount(@PathVariable Long accountNumber) {
+ // TODO: Check null returns.
+ Account account = accountManager.findByAccountNumber(accountNumber).get();
+ return account;
+ }
+
+ @PostMapping("/")
+ public Account createAccount(Account account) {
+ return accountManager.create(account);
+ }
+} \ No newline at end of file
diff --git a/spring-boot/04-bank-jpa-rest/src/main/java/com/example/spring/bank/account/AccountManager.java b/spring-boot/04-bank-jpa-rest/src/main/java/com/example/spring/bank/account/AccountManager.java
new file mode 100644
index 0000000..14dfa0c
--- /dev/null
+++ b/spring-boot/04-bank-jpa-rest/src/main/java/com/example/spring/bank/account/AccountManager.java
@@ -0,0 +1,13 @@
+package com.example.spring.bank.account;
+
+import java.util.Optional;
+
+public interface AccountManager {
+
+ public Account create(Account account);
+
+ public Optional<Account> findByAccountNumber(Long accountNumber);
+ public Iterable<Account> findAll();
+
+ // Other methods
+}
diff --git a/spring-boot/04-bank-jpa-rest/src/main/java/com/example/spring/bank/account/AccountManagerImpl.java b/spring-boot/04-bank-jpa-rest/src/main/java/com/example/spring/bank/account/AccountManagerImpl.java
new file mode 100644
index 0000000..2227469
--- /dev/null
+++ b/spring-boot/04-bank-jpa-rest/src/main/java/com/example/spring/bank/account/AccountManagerImpl.java
@@ -0,0 +1,33 @@
+package com.example.spring.bank.account;
+
+import java.util.Optional;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import jakarta.transaction.Transactional;
+
+@Service
+public class AccountManagerImpl implements AccountManager {
+
+ @Autowired
+ private AccountRepository accountRepository;
+
+ @Override
+ @Transactional
+ public Account create(Account account) {
+ return accountRepository.save(account);
+ }
+
+ @Override
+ public Optional<Account> findByAccountNumber(Long accountNumber) {
+ return accountRepository.findById(accountNumber);
+ }
+
+ @Override
+ public Iterable<Account> findAll() {
+ return accountRepository.findAll();
+ }
+
+ // Other methods
+} \ No newline at end of file
diff --git a/spring-boot/04-bank-jpa-rest/src/main/java/com/example/spring/bank/account/AccountRepository.java b/spring-boot/04-bank-jpa-rest/src/main/java/com/example/spring/bank/account/AccountRepository.java
new file mode 100644
index 0000000..086f828
--- /dev/null
+++ b/spring-boot/04-bank-jpa-rest/src/main/java/com/example/spring/bank/account/AccountRepository.java
@@ -0,0 +1,7 @@
+package com.example.spring.bank.account;
+
+import org.springframework.data.repository.ListCrudRepository;
+
+public interface AccountRepository extends ListCrudRepository<Account, Long> {
+
+} \ No newline at end of file
diff --git a/spring-boot/04-bank-jpa-rest/src/main/java/com/example/spring/bank/customer/Customer.java b/spring-boot/04-bank-jpa-rest/src/main/java/com/example/spring/bank/customer/Customer.java
new file mode 100644
index 0000000..43bf0a6
--- /dev/null
+++ b/spring-boot/04-bank-jpa-rest/src/main/java/com/example/spring/bank/customer/Customer.java
@@ -0,0 +1,66 @@
+package com.example.spring.bank.customer;
+
+import java.util.List;
+
+import com.example.spring.bank.account.Account;
+
+import jakarta.persistence.Entity;
+import jakarta.persistence.GeneratedValue;
+import jakarta.persistence.GenerationType;
+import jakarta.persistence.Id;
+import jakarta.persistence.OneToMany;
+
+
+
+@Entity
+public class Customer {
+
+ @Id
+ @GeneratedValue(strategy = GenerationType.AUTO)
+ private Long id;
+
+ private String name;
+
+ public Customer() {
+ super();
+ }
+
+ public Customer(String name) {
+ super();
+ this.name = name;
+ }
+
+ @OneToMany(mappedBy = "customer")
+// @OneToMany
+ private List<Account> accounts;
+
+ public List<Account> getAccounts() {
+ return accounts;
+ }
+
+ public void setAccounts(List<Account> accounts) {
+ this.accounts = accounts;
+ }
+
+ public Long getId() {
+ return id;
+ }
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ @Override
+ public String toString() {
+ return "Customer [id=" + id + ", name=" + name + "]";
+ }
+
+}
diff --git a/spring-boot/04-bank-jpa-rest/src/main/java/com/example/spring/bank/customer/CustomerManager.java b/spring-boot/04-bank-jpa-rest/src/main/java/com/example/spring/bank/customer/CustomerManager.java
new file mode 100644
index 0000000..1560672
--- /dev/null
+++ b/spring-boot/04-bank-jpa-rest/src/main/java/com/example/spring/bank/customer/CustomerManager.java
@@ -0,0 +1,17 @@
+package com.example.spring.bank.customer;
+
+import java.util.Optional;
+
+import com.example.spring.bank.account.Account;
+
+public interface CustomerManager {
+
+ public Customer create(Customer customer);
+
+ public Optional<Customer> findById(Long customerId);
+ public Iterable<Customer> findAll();
+
+ public void addAccount(Customer customer, Account account);
+
+ // Other methods
+}
diff --git a/spring-boot/04-bank-jpa-rest/src/main/java/com/example/spring/bank/customer/CustomerManagerImpl.java b/spring-boot/04-bank-jpa-rest/src/main/java/com/example/spring/bank/customer/CustomerManagerImpl.java
new file mode 100644
index 0000000..05b3fdc
--- /dev/null
+++ b/spring-boot/04-bank-jpa-rest/src/main/java/com/example/spring/bank/customer/CustomerManagerImpl.java
@@ -0,0 +1,45 @@
+package com.example.spring.bank.customer;
+
+import java.util.Optional;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import com.example.spring.bank.account.Account;
+
+import jakarta.transaction.Transactional;
+
+@Service
+public class CustomerManagerImpl implements CustomerManager {
+
+ @Autowired
+ private CustomerRepository customerRepository;
+
+ @Override
+ @Transactional
+ public Customer create(Customer customer) {
+ return customerRepository.save(customer);
+ }
+
+ @Override
+ public Optional<Customer> findById(Long customerId) {
+ return customerRepository.findById(customerId);
+ }
+
+ @Override
+ public Iterable<Customer> findAll() {
+ return customerRepository.findAll();
+ }
+
+ @Transactional
+ @Override
+ public void addAccount(Customer customer, Account account) {
+ // May not work is the customer is detached.
+ // customer.getAccounts().add(account);
+
+ // Access the Customer again - so that it would not be a detached entity.
+ customerRepository.findById(customer.getId()).get().getAccounts().add(account);
+ }
+
+ // Other methods
+} \ No newline at end of file
diff --git a/spring-boot/04-bank-jpa-rest/src/main/java/com/example/spring/bank/customer/CustomerRepository.java b/spring-boot/04-bank-jpa-rest/src/main/java/com/example/spring/bank/customer/CustomerRepository.java
new file mode 100644
index 0000000..8695d66
--- /dev/null
+++ b/spring-boot/04-bank-jpa-rest/src/main/java/com/example/spring/bank/customer/CustomerRepository.java
@@ -0,0 +1,7 @@
+package com.example.spring.bank.customer;
+
+import org.springframework.data.repository.ListCrudRepository;
+
+public interface CustomerRepository extends ListCrudRepository<Customer, Long> {
+
+} \ No newline at end of file
diff --git a/spring-boot/04-bank-jpa-rest/src/main/java/com/example/spring/bank/dev/AppInit.java b/spring-boot/04-bank-jpa-rest/src/main/java/com/example/spring/bank/dev/AppInit.java
new file mode 100644
index 0000000..03a60f9
--- /dev/null
+++ b/spring-boot/04-bank-jpa-rest/src/main/java/com/example/spring/bank/dev/AppInit.java
@@ -0,0 +1,44 @@
+package com.example.spring.bank.dev;
+
+import java.math.BigDecimal;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.boot.CommandLineRunner;
+import org.springframework.stereotype.Component;
+
+import com.example.spring.bank.account.Account;
+import com.example.spring.bank.account.AccountManager;
+import com.example.spring.bank.customer.Customer;
+import com.example.spring.bank.customer.CustomerManager;
+
+@Component
+public class AppInit implements CommandLineRunner {
+
+ @Autowired
+ private AccountManager accountManager;
+
+ @Autowired
+ private CustomerManager customerManager;
+
+ @Value("${bankapp.init-testdata}")
+ private boolean initTestData;
+
+ @Override
+ public void run(String... args) throws Exception {
+ // Create test accounts.
+ if (initTestData) {
+ Account acc1 = accountManager.create(new Account(new BigDecimal("0.00")));
+ Account acc2 = accountManager.create(new Account(new BigDecimal("0.00")));
+
+ Customer c1 = customerManager.create(new Customer("Madushi"));
+ Customer c2 = customerManager.create(new Customer("Anuradha"));
+
+ Customer customerSamitha = customerManager.create(new Customer("Samitha"));
+ Account accountSamitha = accountManager.create(new Account(new BigDecimal("0.00")));
+
+ customerManager.addAccount(customerSamitha, accountSamitha);
+ }
+ }
+
+}
diff --git a/spring-boot/04-bank-jpa-rest/src/main/java/com/example/spring/hello/HelloController.java b/spring-boot/04-bank-jpa-rest/src/main/java/com/example/spring/hello/HelloController.java
new file mode 100644
index 0000000..bb287ba
--- /dev/null
+++ b/spring-boot/04-bank-jpa-rest/src/main/java/com/example/spring/hello/HelloController.java
@@ -0,0 +1,14 @@
+package com.example.spring.hello;
+
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+@Controller
+public class HelloController {
+ @RequestMapping("/")
+ @ResponseBody
+ String home() {
+ return "App is running! Access http://host:port/account/{accountNumber}";
+ }
+} \ No newline at end of file
diff --git a/spring-boot/04-bank-jpa-rest/src/main/resources/application.properties b/spring-boot/04-bank-jpa-rest/src/main/resources/application.properties
new file mode 100644
index 0000000..16ae16c
--- /dev/null
+++ b/spring-boot/04-bank-jpa-rest/src/main/resources/application.properties
@@ -0,0 +1,21 @@
+# Possible locations of this file:
+# (Properties defined in locations higher in the list override those defined in lower locations)
+#
+# A /config subdirectory of the current directory
+# The current directory
+# A classpath /config package
+# The classpath root
+#
+
+spring.profiles.active=dev
+
+spring.datasource.url=jdbc:mariadb://localhost:3306/bankdb
+spring.datasource.username=bankdbuser
+spring.datasource.password=abc123
+
+spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MariaDBDialect
+
+spring.jpa.hibernate.ddl-auto=create-drop
+spring.jpa.show-sql=true
+
+bankapp.init-testdata=0
diff --git a/spring-boot/04-bank-jpa-rest/src/main/resources/config/application-default.properties b/spring-boot/04-bank-jpa-rest/src/main/resources/config/application-default.properties
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/spring-boot/04-bank-jpa-rest/src/main/resources/config/application-default.properties
diff --git a/spring-boot/04-bank-jpa-rest/src/main/resources/config/application-dev.properties b/spring-boot/04-bank-jpa-rest/src/main/resources/config/application-dev.properties
new file mode 100644
index 0000000..8dd7a1b
--- /dev/null
+++ b/spring-boot/04-bank-jpa-rest/src/main/resources/config/application-dev.properties
@@ -0,0 +1 @@
+bankapp.init-testdata=1 \ No newline at end of file
diff --git a/spring-boot/04-bank-jpa-rest/src/main/resources/config/application-production.properties b/spring-boot/04-bank-jpa-rest/src/main/resources/config/application-production.properties
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/spring-boot/04-bank-jpa-rest/src/main/resources/config/application-production.properties