From 11d04ed14f7d933515d3ae1f4892e8e77413c3a6 Mon Sep 17 00:00:00 2001 From: Andy Tael Date: Mon, 2 Sep 2024 10:18:46 -0500 Subject: [PATCH 1/4] Fix README --- cloudbank-v4/README.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/cloudbank-v4/README.md b/cloudbank-v4/README.md index 58367000f..b2d3ef96c 100644 --- a/cloudbank-v4/README.md +++ b/cloudbank-v4/README.md @@ -59,7 +59,7 @@ To run Cloud Bank you need OBaaS version 1.3.0 [Oracle Backend for Spring Boot a kubectl get secret -n azn-server oractl-passwords -o jsonpath='{.data.admin}' | base64 -d ``` -1. Start `oractl` from the `cloudbank-v32` directory and login as the `obaas-admin` user. +1. Start `oractl` from the `cloudbank-v4` directory and login as the `obaas-admin` user. ```text _ _ __ _ ___ @@ -143,12 +143,12 @@ bind --service-name account bind --service-name checks --username account bind --service-name customer bind --service-name testrunner --username account -deploy --service-name account --artifact-path account/target/account-0.0.1-SNAPSHOT.jar --image-version 0.0.1 --liquibase-db admin -deploy --service-name checks --artifact-path checks/target/checks-0.0.1-SNAPSHOT.jar --image-version 0.0.1 -deploy --service-name customer --artifact-path customer/target/customer-0.0.1-SNAPSHOT.jar --image-version 0.0.1 --liquibase-db admin -deploy --service-name creditscore --artifact-path creditscore/target/creditscore-0.0.1-SNAPSHOT.jar --image-version 0.0.1 -deploy --service-name testrunner --artifact-path testrunner/target/testrunner-0.0.1-SNAPSHOT.jar --image-version 0.0.1 -deploy --service-name transfer --artifact-path transfer/target/transfer-0.0.1-SNAPSHOT.jar --image-version 0.0.1 +deploy --service-name account --artifact-path account/target/account-0.0.1-SNAPSHOT.jar --image-version 0.0.1 --liquibase-db admin --java-version ghcr.io/oracle/graalvm-native-image-obaas:21 +deploy --service-name checks --artifact-path checks/target/checks-0.0.1-SNAPSHOT.jar --image-version 0.0.1 --java-version ghcr.io/oracle/graalvm-native-image-obaas:21 +deploy --service-name customer --artifact-path customer/target/customer-0.0.1-SNAPSHOT.jar --image-version 0.0.1 --liquibase-db admin --java-version ghcr.io/oracle/graalvm-native-image-obaas:21 +deploy --service-name creditscore --artifact-path creditscore/target/creditscore-0.0.1-SNAPSHOT.jar --image-version 0.0.1 --java-version ghcr.io/oracle/graalvm-native-image-obaas:21 +deploy --service-name testrunner --artifact-path testrunner/target/testrunner-0.0.1-SNAPSHOT.jar --image-version 0.0.1 --java-version ghcr.io/oracle/graalvm-native-image-obaas:21 +deploy --service-name transfer --artifact-path transfer/target/transfer-0.0.1-SNAPSHOT.jar --image-version 0.0.1 --java-version ghcr.io/oracle/graalvm-native-image-obaas:21 ``` ## Create APISIX Routes From ecd276fcdb9d9fcc2b8e852015b6ea634e4f73b2 Mon Sep 17 00:00:00 2001 From: Andy Tael Date: Mon, 2 Sep 2024 10:46:55 -0500 Subject: [PATCH 2/4] oractl --- cloudbank-v4/README.md | 31 ++++++++++++++++--------------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/cloudbank-v4/README.md b/cloudbank-v4/README.md index b2d3ef96c..1f86b7589 100644 --- a/cloudbank-v4/README.md +++ b/cloudbank-v4/README.md @@ -62,21 +62,22 @@ To run Cloud Bank you need OBaaS version 1.3.0 [Oracle Backend for Spring Boot a 1. Start `oractl` from the `cloudbank-v4` directory and login as the `obaas-admin` user. ```text - _ _ __ _ ___ - / \ |_) _. _. (_ / | | - \_/ |_) (_| (_| __) \_ |_ _|_ - ======================================================================================== - Application Name: Oracle Backend Platform :: Command Line Interface - Application Version: (1.3.0) - :: Spring Boot (v3.3.3) :: - Ask for help: - - Slack: https://oracledevs.slack.com/archives/C03ALDSV272 - - email: obaas_ww@oracle.com - oractl:>connect - ? username obaas-admin - ? password ************* - Credentials successfully authenticated! obaas-admin -> welcome to OBaaS CLI. - oractl:> + _ _ __ _ ___ + / \ |_) _. _. (_ / | | + \_/ |_) (_| (_| __) \_ |_ _|_ + ======================================================================================== + Application Name: Oracle Backend Platform :: Command Line Interface + Application Version: (1.3.0) + :: Spring Boot (v3.3.3) :: + + Ask for help: + - Slack: https://oracledevs.slack.com/archives/C06L9CDGR6Z + - email: obaas_ww@oracle.com + + oractl:>connect + ? username obaas-admin + ? password ************* + obaas-admin -> Welcome! ``` ## Deploy CloudBank From 8a8251af136c752afb46f9852609b44a85ab3c4d Mon Sep 17 00:00:00 2001 From: Andy Tael Date: Wed, 4 Sep 2024 10:45:35 -0500 Subject: [PATCH 3/4] CBV4 updates --- cloudbank-v4/README.md | 17 +++++- .../controller/AccountController.java | 55 +++++++++++++------ .../controller/CustomerController.java | 47 +++++++++++----- .../cloudbank/content/account/cr-accounts.md | 28 ++++++---- .../cloudbank/content/account/deploy.md | 4 +- .../content/check/check-processing.md | 4 +- .../content/check/create-testrunner.md | 4 +- .../cloudbank/content/check/update-account.md | 19 ++++--- .../cloudbank/content/deploy-cli/deploy.md | 4 +- .../cloudbank/content/devenv/oractl.md | 6 +- docs-source/cloudbank/content/saga/deploy.md | 4 +- docs-source/cloudbank/content/saga/deposit.md | 4 +- 12 files changed, 132 insertions(+), 64 deletions(-) diff --git a/cloudbank-v4/README.md b/cloudbank-v4/README.md index 1f86b7589..e20690270 100644 --- a/cloudbank-v4/README.md +++ b/cloudbank-v4/README.md @@ -250,7 +250,7 @@ This is an example of the `customer32` application: 1. Test `customer` service - 1. REST endpoint + 1. GET REST endpoint. ```shell curl -s http://$IP/api/v1/customer | jq @@ -272,6 +272,21 @@ This is an example of the `customer32` application: ] ``` + 1. POST endpoint to create a customer. + + ```shell + curl -i -X POST 'http://$IP/api/v1/customer' -H 'Content-Type: application/json' -d '{"customerId": "bobsmith", "customerName": "Bob SMith", "customerEmail": "bob@smith.com"}' + ``` + + Should return the URI of the created object: + + ```text + HTTP/1.1 201 + Location: http://localhost:8080/api/v1/customer/bobsmith + Content-Length: 0 + Date: Tue, 03 Sep 2024 21:01:25 GMT + ``` + 1. Test `creditscore` service 1. REST endpoint diff --git a/cloudbank-v4/account/src/main/java/com/example/accounts/controller/AccountController.java b/cloudbank-v4/account/src/main/java/com/example/accounts/controller/AccountController.java index c8c64f01a..55a3dc295 100644 --- a/cloudbank-v4/account/src/main/java/com/example/accounts/controller/AccountController.java +++ b/cloudbank-v4/account/src/main/java/com/example/accounts/controller/AccountController.java @@ -37,6 +37,7 @@ public AccountController(AccountRepository accountRepository, JournalRepository /** * Get all Accounts. + * * @return List off accounts */ @GetMapping("/accounts") @@ -46,26 +47,34 @@ public List getAllAccounts() { /** * Create an account. - * @param account Account object - * @return Http Status Code + * + * @param account Account object. + * @return Returns HTTP Status code or the URI of the created object. */ @PostMapping("/account") public ResponseEntity createAccount(@RequestBody Account account) { - try { - Account newAccount = accountRepository.saveAndFlush(account); - URI location = ServletUriComponentsBuilder - .fromCurrentRequest() - .path("/{id}") - .buildAndExpand(newAccount.getAccountId()) - .toUri(); - return ResponseEntity.created(location).build(); - } catch (Exception e) { - return new ResponseEntity<>(account, HttpStatus.INTERNAL_SERVER_ERROR); + boolean exists = accountRepository.existsById(account.getAccountId()); + + if (!exists) { + try { + Account newAccount = accountRepository.saveAndFlush(account); + URI location = ServletUriComponentsBuilder + .fromCurrentRequest() + .path("/{id}") + .buildAndExpand(newAccount.getAccountId()) + .toUri(); + return ResponseEntity.created(location).build(); + } catch (Exception e) { + return new ResponseEntity<>(account, HttpStatus.INTERNAL_SERVER_ERROR); + } + } else { + return new ResponseEntity<>(account, HttpStatus.CONFLICT); } } /** * Find an account by Account Id. + * * @param accountId Account Id * @return An account */ @@ -82,6 +91,7 @@ public ResponseEntity getAccountById(@PathVariable("accountId") long ac /** * Find an account by customer Id. + * * @param customerId Customer Id * @return A list opf Account(s) */ @@ -101,6 +111,7 @@ public ResponseEntity> getAccountsByCustomerId(@PathVariable("cust /** * Delete an Account with specific Id. + * * @param accountId Account ID * @return HTTP Status Code */ @@ -116,6 +127,7 @@ public ResponseEntity deleteAccount(@PathVariable("accountId") long /** * Get transactions (Journal) for an Account Id. + * * @param accountId Account Id * @return List of Journal object(s) */ @@ -135,21 +147,28 @@ public ResponseEntity> getTransactions(@PathVariable("accountId") /** * Create a Journal entry. + * * @param journalEntry Journal object * @return HTTP Status Code */ @PostMapping("/account/journal") public ResponseEntity postSimpleJournalEntry(@RequestBody Journal journalEntry) { - try { - Journal newJournalEntry = journalRepository.saveAndFlush(journalEntry); - return new ResponseEntity<>(newJournalEntry, HttpStatus.CREATED); - } catch (Exception e) { - return new ResponseEntity<>(null, HttpStatus.INTERNAL_SERVER_ERROR); + boolean exists = journalRepository.existsById(journalEntry.getJournalId()); + if (!exists) { + try { + Journal newJournalEntry = journalRepository.saveAndFlush(journalEntry); + return new ResponseEntity<>(newJournalEntry, HttpStatus.CREATED); + } catch (Exception e) { + return new ResponseEntity<>(null, HttpStatus.INTERNAL_SERVER_ERROR); + } + } else { + return new ResponseEntity<>(journalEntry, HttpStatus.CONFLICT); } } /** * Find Journal entries by Account Id. + * * @param accountId Account Id * @return Journal object(s) */ @@ -160,12 +179,14 @@ public List getJournalEntriesForAccount(@PathVariable("accountId") long /** * Clears the Journal Entry. + * * @param journalId Journal Id * @return HTTP Status Code */ @PostMapping("/account/journal/{journalId}/clear") public ResponseEntity clearJournalEntry(@PathVariable long journalId) { try { + boolean exists = journalRepository.existsById(journalId); Optional data = journalRepository.findById(journalId); if (data.isPresent()) { Journal newJournalEntry = data.get(); diff --git a/cloudbank-v4/customer/src/main/java/com/example/customer/controller/CustomerController.java b/cloudbank-v4/customer/src/main/java/com/example/customer/controller/CustomerController.java index f1df71032..29e697b7b 100644 --- a/cloudbank-v4/customer/src/main/java/com/example/customer/controller/CustomerController.java +++ b/cloudbank-v4/customer/src/main/java/com/example/customer/controller/CustomerController.java @@ -3,11 +3,13 @@ package com.example.customer.controller; +import java.net.URI; import java.util.List; import java.util.Optional; import com.example.customer.model.Customers; import com.example.customer.repository.CustomersRepository; +import lombok.extern.slf4j.Slf4j; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.DeleteMapping; @@ -19,9 +21,11 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseStatus; import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.servlet.support.ServletUriComponentsBuilder; @RestController @RequestMapping("/api/v1") +@Slf4j public class CustomerController { final CustomersRepository customersRepository; @@ -44,6 +48,7 @@ public List findByCustomerByName(@PathVariable String customerName) { /** * Get Customer with specific ID. + * * @param id The CustomerId * @return If the customers is found, a customer and HTTP Status code. */ @@ -60,6 +65,7 @@ public ResponseEntity getCustomerById(@PathVariable("id") String id) /** * Get customer that contains an email. + * * @param email of the customer * @return Returns a customer if found */ @@ -70,27 +76,40 @@ public List getCustomerByEmail(@PathVariable("email") String email) { /** * Create a customer. - * @param customer Customer object with the customer details - * @return Returns a HTTP Status code + * + * @param customer Customer object with the customer details. + * @return Returns HTTP Status code or the URI of the created object. */ @PostMapping("/customer") public ResponseEntity createCustomer(@RequestBody Customers customer) { - try { - Customers newCustomer = customersRepository.save(new Customers( - customer.getCustomerId(), - customer.getCustomerName(), - customer.getCustomerEmail(), - customer.getCustomerOtherDetails())); - return new ResponseEntity<>(newCustomer, HttpStatus.CREATED); + boolean exists = customersRepository.existsById(customer.getCustomerId()); - } catch (Exception e) { - return new ResponseEntity<>(null, HttpStatus.INTERNAL_SERVER_ERROR); + if (!exists) { + try { + Customers newCustomer = customersRepository.saveAndFlush(new Customers( + customer.getCustomerId(), + customer.getCustomerName(), + customer.getCustomerEmail(), + customer.getCustomerOtherDetails())); + + URI location = ServletUriComponentsBuilder + .fromCurrentRequest() + .path("/{id}") + .buildAndExpand(newCustomer.getCustomerId()) + .toUri(); + return ResponseEntity.created(location).build(); + } catch (Exception e) { + return new ResponseEntity<>(null, HttpStatus.INTERNAL_SERVER_ERROR); + } + } else { + return new ResponseEntity<>(customer, HttpStatus.CONFLICT); } } /** * Update a specific Customer (ID). - * @param id The id of the customer + * + * @param id The id of the customer * @param customer A customer object * @return A Http Status code */ @@ -114,6 +133,7 @@ public ResponseEntity updateCustomer(@PathVariable("id") String id, @ /** * Delete a specific customer (ID). + * * @param customerId the Id of the customer to be deleted * @return A Http Status code */ @@ -129,11 +149,12 @@ public ResponseEntity deleteCustomer(@PathVariable("customerId") Str /** * Method isn't implemented. + * * @param amount Loan amount * @return A Http Status */ @PostMapping("/customer/applyLoan/{amount}") - public ResponseEntity applyForLoan(@PathVariable ("amount") long amount) { + public ResponseEntity applyForLoan(@PathVariable("amount") long amount) { try { // Check Credit Rating // Amount vs Rating approval? diff --git a/docs-source/cloudbank/content/account/cr-accounts.md b/docs-source/cloudbank/content/account/cr-accounts.md index ac51173f9..8bc83a67d 100644 --- a/docs-source/cloudbank/content/account/cr-accounts.md +++ b/docs-source/cloudbank/content/account/cr-accounts.md @@ -111,7 +111,7 @@ weight = 7 Now we want to create an endpoint to create a new account. Open `AccountController.java` and add a new `createAccount` method. This method should return `ResponseEntity` this will allow you to return the account object, but also gives you access to set headers, status code and so on. The method needs to take an `Account` as an argument. Add the `RequestBody` annotation to the argument to tell Spring Boot that the input data will be in the HTTP request's body. - Inside the method, you should use the `saveAndFlush` method on the JPA Repository to save a new instance of `Account` in the database. The `saveAndFlush` method returns the created object. If the save was successful, return the created object and set the HTTP Status Code to 201 (Created). If there is an error, set the HTTP Status Code to 500 (Internal Server Error). + Inside the method, you should use the `saveAndFlush` method on the JPA Repository to save a new instance of `Account` in the database. The `saveAndFlush` method returns the created object. If the save was successful, return the URI to the created object and set the HTTP Status Code to 201 (Created). If the object already exists set the HTTP Status code to 409 (Conflict). If there is an error, set the HTTP Status Code to 500 (Internal Server Error). Here's what the new method (and imports) should look like: @@ -130,16 +130,22 @@ weight = 7 @PostMapping("/account") public ResponseEntity createAccount(@RequestBody Account account) { - try { - Account newAccount = accountRepository.saveAndFlush(account); - URI location = ServletUriComponentsBuilder - .fromCurrentRequest() - .path("/{id}") - .buildAndExpand(newAccount.getAccountId()) - .toUri(); - return ResponseEntity.created(location).build(); - } catch (Exception e) { - return new ResponseEntity<>(account, HttpStatus.INTERNAL_SERVER_ERROR); + boolean exists = accountRepository.existsById(account.getAccountId()); + + if (!exists) { + try { + Account newAccount = accountRepository.saveAndFlush(account); + URI location = ServletUriComponentsBuilder + .fromCurrentRequest() + .path("/{id}") + .buildAndExpand(newAccount.getAccountId()) + .toUri(); + return ResponseEntity.created(location).build(); + } catch (Exception e) { + return new ResponseEntity<>(account, HttpStatus.INTERNAL_SERVER_ERROR); + } + } else { + return new ResponseEntity<>(account, HttpStatus.CONFLICT); } } ``` diff --git a/docs-source/cloudbank/content/account/deploy.md b/docs-source/cloudbank/content/account/deploy.md index f2f62acc4..2f339974c 100644 --- a/docs-source/cloudbank/content/account/deploy.md +++ b/docs-source/cloudbank/content/account/deploy.md @@ -123,8 +123,8 @@ weight = 9 \_/ |_) (_| (_| __) \_ |_ _|_ ======================================================================================== Application Name: Oracle Backend Platform :: Command Line Interface - Application Version: (1.2.0) - :: Spring Boot (v3.3.0) :: + Application Version: (1.3.0) + :: Spring Boot (v3.3.3) :: Ask for help: - Slack: https://oracledevs.slack.com/archives/C03ALDSV272 diff --git a/docs-source/cloudbank/content/check/check-processing.md b/docs-source/cloudbank/content/check/check-processing.md index fd4e6708f..1f8f7f361 100644 --- a/docs-source/cloudbank/content/check/check-processing.md +++ b/docs-source/cloudbank/content/check/check-processing.md @@ -419,8 +419,8 @@ Next, you will create the "Check Processing" microservice which you will receive \_/ |_) (_| (_| __) \_ |_ _|_ ======================================================================================== Application Name: Oracle Backend Platform :: Command Line Interface - Application Version: (1.2.0) - :: Spring Boot (v3.3.0) :: + Application Version: (1.3.0) + :: Spring Boot (v3.3.3) :: Ask for help: - Slack: https://oracledevs.slack.com/archives/C03ALDSV272 diff --git a/docs-source/cloudbank/content/check/create-testrunner.md b/docs-source/cloudbank/content/check/create-testrunner.md index 80ed8c0cd..92b915222 100644 --- a/docs-source/cloudbank/content/check/create-testrunner.md +++ b/docs-source/cloudbank/content/check/create-testrunner.md @@ -264,8 +264,8 @@ Next, you will create the "Test Runner" microservice which you will use to simul \_/ |_) (_| (_| __) \_ |_ _|_ ======================================================================================== Application Name: Oracle Backend Platform :: Command Line Interface - Application Version: (1.2.0) - :: Spring Boot (v3.3.0) :: + Application Version: (1.3.0) + :: Spring Boot (v3.3.3) :: Ask for help: - Slack: https://oracledevs.slack.com/archives/C03ALDSV272 diff --git a/docs-source/cloudbank/content/check/update-account.md b/docs-source/cloudbank/content/check/update-account.md index cb76929db..0623aef69 100644 --- a/docs-source/cloudbank/content/check/update-account.md +++ b/docs-source/cloudbank/content/check/update-account.md @@ -113,11 +113,16 @@ Starting with the account service that you built in the previous lab, you will t @PostMapping("/account/journal") public ResponseEntity postSimpleJournalEntry(@RequestBody Journal journalEntry) { - try { - Journal _journalEntry = journalRepository.saveAndFlush(journalEntry); - return new ResponseEntity<>(_journalEntry, HttpStatus.CREATED); - } catch (Exception e) { - return new ResponseEntity<>(null, HttpStatus.INTERNAL_SERVER_ERROR); + boolean exists = journalRepository.existsById(journalEntry.getJournalId()); + if (!exists) { + try { + Journal newJournalEntry = journalRepository.saveAndFlush(journalEntry); + return new ResponseEntity<>(newJournalEntry, HttpStatus.CREATED); + } catch (Exception e) { + return new ResponseEntity<>(null, HttpStatus.INTERNAL_SERVER_ERROR); + } + } else { + return new ResponseEntity<>(journalEntry, HttpStatus.CONFLICT); } } ``` @@ -195,8 +200,8 @@ Starting with the account service that you built in the previous lab, you will t \_/ |_) (_| (_| __) \_ |_ _|_ ======================================================================================== Application Name: Oracle Backend Platform :: Command Line Interface - Application Version: (1.2.0) - :: Spring Boot (v3.3.0) :: + Application Version: (1.3.0) + :: Spring Boot (v3.3.3) :: Ask for help: - Slack: https://oracledevs.slack.com/archives/C03ALDSV272 diff --git a/docs-source/cloudbank/content/deploy-cli/deploy.md b/docs-source/cloudbank/content/deploy-cli/deploy.md index 0badc0779..1ca0f40a2 100644 --- a/docs-source/cloudbank/content/deploy-cli/deploy.md +++ b/docs-source/cloudbank/content/deploy-cli/deploy.md @@ -37,8 +37,8 @@ weight = 4 \_/ |_) (_| (_| __) \_ |_ _|_ ======================================================================================== Application Name: Oracle Backend Platform :: Command Line Interface - Application Version: (1.2.0) - :: Spring Boot (v3.3.0) :: + Application Version: (1.3.0) + :: Spring Boot (v3.3.3) :: Ask for help: - Slack: https://oracledevs.slack.com/archives/C03ALDSV272 diff --git a/docs-source/cloudbank/content/devenv/oractl.md b/docs-source/cloudbank/content/devenv/oractl.md index 22115cfd3..05045cc15 100644 --- a/docs-source/cloudbank/content/devenv/oractl.md +++ b/docs-source/cloudbank/content/devenv/oractl.md @@ -33,13 +33,13 @@ The Oracle Backend for Spring Boot CLI (*oractl*) is used to configure your back \_/ |_) (_| (_| __) \_ |_ _|_ =================================================================== Application Name: Oracle Backend Platform :: Command Line Interface - Application Version: (1.2.0) - :: Spring Boot (v3.3.0) :: + Application Version: (1.3.0) + :: Spring Boot (v3.3.3) :: Ask for help: - Slack: https://oracledevs.slack.com/archives/C06L9CDGR6Z - email: obaas_ww@oracle.com - Build Version: 1.2.0 + Build Version: 1.3.0 ``` diff --git a/docs-source/cloudbank/content/saga/deploy.md b/docs-source/cloudbank/content/saga/deploy.md index d5fb60070..07dbf853d 100644 --- a/docs-source/cloudbank/content/saga/deploy.md +++ b/docs-source/cloudbank/content/saga/deploy.md @@ -48,8 +48,8 @@ The services are now completed, and you are ready to deploy them to the Oracle B \_/ |_) (_| (_| __) \_ |_ _|_ ======================================================================================== Application Name: Oracle Backend Platform :: Command Line Interface - Application Version: (1.2.0) - :: Spring Boot (v3.3.0) :: + Application Version: (1.3.0) + :: Spring Boot (v3.3.3) :: Ask for help: - Slack: https://oracledevs.slack.com/archives/C03ALDSV272 diff --git a/docs-source/cloudbank/content/saga/deposit.md b/docs-source/cloudbank/content/saga/deposit.md index 22d900be5..535d7414e 100644 --- a/docs-source/cloudbank/content/saga/deposit.md +++ b/docs-source/cloudbank/content/saga/deposit.md @@ -1082,8 +1082,8 @@ The services are now completed, and you are ready to deploy them to the Oracle B \_/ |_) (_| (_| __) \_ |_ _|_ ======================================================================================== Application Name: Oracle Backend Platform :: Command Line Interface - Application Version: (1.2.0) - :: Spring Boot (v3.3.0) :: + Application Version: (1.3.0) + :: Spring Boot (v3.3.3) :: Ask for help: - Slack: https://oracledevs.slack.com/archives/C03ALDSV272 From e8d98fe41a929aa5696f14fe1d3217befc454aa4 Mon Sep 17 00:00:00 2001 From: Andy Tael Date: Wed, 4 Sep 2024 10:50:32 -0500 Subject: [PATCH 4/4] Typo fix --- cloudbank-v4/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cloudbank-v4/README.md b/cloudbank-v4/README.md index e20690270..68e2c7af6 100644 --- a/cloudbank-v4/README.md +++ b/cloudbank-v4/README.md @@ -275,7 +275,7 @@ This is an example of the `customer32` application: 1. POST endpoint to create a customer. ```shell - curl -i -X POST 'http://$IP/api/v1/customer' -H 'Content-Type: application/json' -d '{"customerId": "bobsmith", "customerName": "Bob SMith", "customerEmail": "bob@smith.com"}' + curl -i -X POST 'http://$IP/api/v1/customer' -H 'Content-Type: application/json' -d '{"customerId": "bobsmith", "customerName": "Bob Smith", "customerEmail": "bob@smith.com"}' ``` Should return the URI of the created object: