Note:- If You have already setup JAVA_17 then skip this step
- Java 17 Installation on macOS
brew tap homebrew/cask-versions brew install --cask temurin17
- Set JAVA_17 Env value. Follow step 2 here
How build & run this project?
Install and run DynamoDB on your local machine:
-
Install AWS CLI and Configure
- Install AWS CLI Run following commands
curl "https://awscli.amazonaws.com/AWSCLIV2.pkg" -o "AWSCLIV2.pkg"
sudo installer -pkg ./AWSCLIV2.pkg -target /
- To verify AWS CLI Run following commands
which aws
aws --version
- Configure AWS CLI
aws configure
- Enter AccessKey : "local"
- Enter SecretKey : "12345"
- Enter region : "us-west-2"
- Enter output : "json"
- Reference
- Install AWS CLI Run following commands
-
Install DynamoDB
- Download DynamoDB
- Extract downloaded file
- navigate to the directory where you extracted DynamoDBLocal.jar, and enter the following command.
java -Djava.library.path=./DynamoDBLocal_lib -jar DynamoDBLocal.jar -sharedDb
- Verify DynamoDB
aws dynamodb list-tables --endpoint-url http://localhost:8000
- Create table for Customer
aws dynamodb create-table --cli-input-json file://customer-table-definition.json --endpoint-url http://localhost:8000
- Reference
-
Visualizing the DynamoDB Table data
- Download and Install NoSQL Workbench
- Open NoSQL Workbench and Setup DynamoDB local connection
- Click on
operation builder
- Click on
Add connection
- Click on
DynamoDB Local
- Click on
- Reference
There are a few options to run the application (from more flexible to least)
-
You can just use the SpringBoot run functionality that is default in IntelliJ or SpringTools in Eclipse.
-
Start the service with Maven.
mvn spring-boot:run -Dspring.profiles.active=local
-
Package the jar file and run it
mvn clean package
java -jar ./target/customer-service-exec.jar --spring.profiles.active=local
You can use your favourite REST client (e.g. Postman)
Or you can use curl
curl \
-X POST \
-H "Content-Type: application/json" \
-H "client-id: test" \
-H "Authorization: Bearer <JWT TOKEN>" \
http://localhost:7979/v1/customer-service/add-customer \
-d '{<DATA>}'
curl \
-X GET \
-H "Content-Type: application/json" \
-H "client-id: test" \
-H "Authorization: Bearer <JWT TOKEN>" \
"http://localhost:7979/v1/customer-service/get-customer?id=johndoe"
curl \
-X GET \
-H "Content-Type: application/json" \
-H "client-id: test" \
-H "Authorization: Bearer <JWT TOKEN>" \
"http://localhost:7979/v1/customer-service/delete-customer?id=johndoe"
curl \
-X PUT -i \
-H "client-id: test" \
-H "Authorization: Bearer <JWT TOKEN>" \
http://localhost:7979/v1/customer-service/update-customer \
-d '{<DATA>}'
You can bypass Authentication in local environment by sending header "client-id: test"
curl \
-X POST -i \
-H "Content-Type: application/json" \
-H "client-id: test" \
http://localhost:7979/v1/customer-service/add-customer \
-d '{<DATA>}'
curl \
-X GET -i \
-H "Content-Type: application/json" \
-H "client-id: test" \
"http://localhost:7979/v1/customer-service/get-customer?id=johndoe"
curl \
-X GET -i \
-H "Content-Type: application/json" \
-H "client-id: test" \
"http://localhost:7979/v1/customer-service/delete-customer?id=johndoe"
curl \
-X PUT -i \
-H "Content-Type: application/json" \
-H "client-id: test" \
http://localhost:7979/v1/customer-service/update-customer \
-d '{<DATA>}'
Or send this JWT on local environment
curl \
-X POST -i \
-H "Content-Type: application/json" \
-H "Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJpYXQiOjE2OTc0NTA0NTksImlzcyI6Ind3dy5hY21lLmNvbSIsInN1YiI6ImYxZTMzYWIzLTAyN2YtNDdjNS1iYjA3LThkZDhhYjM3YTJkMyJ9.A2zgvSQ6IK4W0hRnDlPkEMVEMmz6fGGQI-6qzT20PSVS8auoXA7FPA67yK-t-YtXWE2qOsSuzgWWb1TyD0zpS2IZNiJ03augB2zRSYq6cOGVyP5wfllGxJMjc7Bpje6chqOqUetG_2H0I8tnp-qd0GBbShCmK7-ZwV1WXQR6b7fyzSqAxf13TR4gCMiD1A8AnkVJqXlEGJBejhy3ooQ24osxo3QMoWpHFR-8Jr33-9USs8_zesBUdRqEbJLDU_eVBiCDZEOipPHF6o_ZmW1emBQLRc7d24f6W2omi5kzHN4npiOraFkaNeS1QeasOM002GcoHo4ClJslUME_3sEVnw" \
http://localhost:7979/v1/customer-service/add-customer \
-d '{<DATA>}'
curl \
-X GET -i \
-H "Content-Type: application/json" \
-H "Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJpYXQiOjE2OTc0NTA0NTksImlzcyI6Ind3dy5hY21lLmNvbSIsInN1YiI6ImYxZTMzYWIzLTAyN2YtNDdjNS1iYjA3LThkZDhhYjM3YTJkMyJ9.A2zgvSQ6IK4W0hRnDlPkEMVEMmz6fGGQI-6qzT20PSVS8auoXA7FPA67yK-t-YtXWE2qOsSuzgWWb1TyD0zpS2IZNiJ03augB2zRSYq6cOGVyP5wfllGxJMjc7Bpje6chqOqUetG_2H0I8tnp-qd0GBbShCmK7-ZwV1WXQR6b7fyzSqAxf13TR4gCMiD1A8AnkVJqXlEGJBejhy3ooQ24osxo3QMoWpHFR-8Jr33-9USs8_zesBUdRqEbJLDU_eVBiCDZEOipPHF6o_ZmW1emBQLRc7d24f6W2omi5kzHN4npiOraFkaNeS1QeasOM002GcoHo4ClJslUME_3sEVnw" \
"http://localhost:7979/v1/customer-service/get-customer?id=johndoe"
curl \
-X GET -i \
-H "Content-Type: application/json" \
-H "Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJpYXQiOjE2OTc0NTA0NTksImlzcyI6Ind3dy5hY21lLmNvbSIsInN1YiI6ImYxZTMzYWIzLTAyN2YtNDdjNS1iYjA3LThkZDhhYjM3YTJkMyJ9.A2zgvSQ6IK4W0hRnDlPkEMVEMmz6fGGQI-6qzT20PSVS8auoXA7FPA67yK-t-YtXWE2qOsSuzgWWb1TyD0zpS2IZNiJ03augB2zRSYq6cOGVyP5wfllGxJMjc7Bpje6chqOqUetG_2H0I8tnp-qd0GBbShCmK7-ZwV1WXQR6b7fyzSqAxf13TR4gCMiD1A8AnkVJqXlEGJBejhy3ooQ24osxo3QMoWpHFR-8Jr33-9USs8_zesBUdRqEbJLDU_eVBiCDZEOipPHF6o_ZmW1emBQLRc7d24f6W2omi5kzHN4npiOraFkaNeS1QeasOM002GcoHo4ClJslUME_3sEVnw" \
"http://localhost:7979/v1/customer-service/delete-customer?id=johndoe"
curl \
-X PUT -i \
-H "Content-Type: application/json" \
-H "Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJpYXQiOjE2OTc0NTA0NTksImlzcyI6Ind3dy5hY21lLmNvbSIsInN1YiI6ImYxZTMzYWIzLTAyN2YtNDdjNS1iYjA3LThkZDhhYjM3YTJkMyJ9.A2zgvSQ6IK4W0hRnDlPkEMVEMmz6fGGQI-6qzT20PSVS8auoXA7FPA67yK-t-YtXWE2qOsSuzgWWb1TyD0zpS2IZNiJ03augB2zRSYq6cOGVyP5wfllGxJMjc7Bpje6chqOqUetG_2H0I8tnp-qd0GBbShCmK7-ZwV1WXQR6b7fyzSqAxf13TR4gCMiD1A8AnkVJqXlEGJBejhy3ooQ24osxo3QMoWpHFR-8Jr33-9USs8_zesBUdRqEbJLDU_eVBiCDZEOipPHF6o_ZmW1emBQLRc7d24f6W2omi5kzHN4npiOraFkaNeS1QeasOM002GcoHo4ClJslUME_3sEVnw" \
http://localhost:7979/v1/customer-service/update-customer \
-d '{<DATA>}'
Sample Data for POST and PUT requests
{"username": "johndoe", "firstName": "John", "lastName": "Doe", "address": "123 Main Street", "city": "Anytown", "pincode": "12345", "email": "[email protected]"}
{
"alg": "RS256",
"typ": "JWT"
}
Use local-customer-service-public.pem to encode the token on local machine.