This is a clickstream app based on Nodejs, Sqlite & Apache Kafka. The app records events like add to cart
, delete item from cart
etc. We have docker-compose to run the application locally.
![Screenshot 2024-09-03 at 12 04 43 PM](https://private-user-images.githubusercontent.com/20081129/364086259-ccf1736c-55a3-4d29-9264-9f17e3ff7d95.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk0NTA0NzEsIm5iZiI6MTczOTQ1MDE3MSwicGF0aCI6Ii8yMDA4MTEyOS8zNjQwODYyNTktY2NmMTczNmMtNTVhMy00ZDI5LTkyNjQtOWYxN2UzZmY3ZDk1LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTMlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjEzVDEyMzYxMVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWRjZTEwYWY5MjMwMzQxYTRhOGE5NzM2YTg2ZGFhNTg2NjhiODg1M2Y5OGVkNzQ5Y2ZlMTM5ZmEzMTJmYjBhMjYmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.easpGsbBxtkAaHvDLp-dAR2iIOAhnfFAUn2sU2EUP40)
- Click streaming for multiple apis
- Co-partitioned topics for Kafka Streaming (
Work in progress
) - Sqlite to persist DB with mount volumes
- JWT authentication
- Docker-compose to run the application
- E-commerce APIs like Login, Add To cart / delete, Checkout, Order Placed, Shipping
- Nodejs
- Sqlite3
- Docker & docker-compose
- Kafka cli
- Sqlite cli
https://www.postman.com/galactic-eclipse-361945/workspace/raptor9372/collection/1877749-0652fb9c-cd1d-4f1b-a822-8928d3f62119?action=share&creator=1877749
![Screenshot 2024-09-03 at 11 51 14 AM](https://private-user-images.githubusercontent.com/20081129/364086034-fa2c1642-323c-4c3e-9aa6-fd407d4073b8.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk0NTA0NzEsIm5iZiI6MTczOTQ1MDE3MSwicGF0aCI6Ii8yMDA4MTEyOS8zNjQwODYwMzQtZmEyYzE2NDItMzIzYy00YzNlLTlhYTYtZmQ0MDdkNDA3M2I4LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTMlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjEzVDEyMzYxMVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPThhMmFhMzJmNmIyMWQzYTk1YTAzZjExY2U3ZTRlY2QwZjU1YTE1MmY2ZTIxZWNjNTFlNTM4MWZjZjkyZTU1YzcmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.EDPl8Gan3poRb5UGORuFGx_Ef4-1U3ynMJW5PkCtwMY)
The base URL for the application that runs with docker is localhost:5001
. The port 5000 is sometimes occupied in macos.
API | Endpoint |
---|---|
Login | POST localhost:5001/public/authenticate |
Add Product | POST {{base-url}}/cart/add |
Get Cart Items | GET {{base-url}}/cart |
Checkout | POST {{base-url}}/cart/checkout/:cartId |
Create Order | POST {{base-url}}/orders/create |
Get Order | GET {{base-url}}/orders/:orderId |
Delete Cart Item | DELETE {{base-url}}/cart/delete/:cartItemId |
- Clone repository
git clone [email protected]:amol9372/click-stream-app.git
-
Install Sqlite client or cli in your local machine
-
In the
docker-compose.yaml
file, change the path for mount volumes for nodejsapp
service. Add the path to db folder which contains reference data & db file.
volumes:
- <path>/db:/usr/src/app/db
- Run the docker-compose commands
> docker-compose build
> docker-compose up
Import above postman collection to hit the apis.
The postman collection has variables for token
& base-url
to facilitate api testing. Once a login is successful, a token is generated & saved in postman collection variables to be used in all other APIs.
In order to place an order hit the APIs in below order:
![Screenshot 2024-09-03 at 12 57 53 PM](https://private-user-images.githubusercontent.com/20081129/364086343-d4b9ae21-3b84-4c34-a686-cfed8a24f546.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk0NTA0NzEsIm5iZiI6MTczOTQ1MDE3MSwicGF0aCI6Ii8yMDA4MTEyOS8zNjQwODYzNDMtZDRiOWFlMjEtM2I4NC00YzM0LWE2ODYtY2ZlZDhhMjRmNTQ2LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTMlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjEzVDEyMzYxMVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTQ2ZjY4YjQ2ODE1ZDc1MTcwN2E3MjRhNTVmNDQwZWY4NGRiNmE4NGI0NzkwYzE1MjU4MTI0NGJlNmY0YWY5YzEmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.0HyZlHoCNKm_QsLxeIoJEAq0A9Ukygp0fMdPY0T38y8)
Make sure you have installed kafka cli tools
in your local system.
Once installed, we need to verify events are published to the topic or not
- List of topics
kafka-topics --bootstrap-server localhost:9092 --list
- Consume data from a particular topic
kafka-console-consumer --bootstrap-server localhost:9092 --topic click_stream_auth --from-beginning --property print.key=true