- Watching product prices over time
- Comparing basket price across stores
- Searching for allergens free products
- Rating products and stores
- Searching for similar products
- Event Store for storing historical data about products prices and promotions
- MongoDb for storing projections and users baskets
- Create Basket
- Consumers for product creation events and price changes events
- Auth with JWT
- Refresh tokens handling (in future I'll move storing tokens to Redis or integrate project with OpenId)
- BCrypt for hashing passwords
- Postgres for storing users (I'm considering changing it to noSql - mongoDb, casandra or dynamodb)
- Register
- Login
- Refresh Token
- GetAll/GetUser
- Storing shops location and current price of product
- calculating best basket price in shops near me (coming soon)
- Report new product price
- Postgres for relational data
- Module publishes events for other modules about new products
- I'm considering using apache lucene to enable searching for similar products
- Create Product
- Mark Product As Obsolete
- Add Allergens To Product
- CRUD for Categories
- CRUD for Allergens
.Net7.0 C#11 with Minimal API
Docker - containerization for tests aln local development
Terraform - for infrastructure as code (IaC)
Event Store - storing historical data of products prices
MongoDb - storing projections from historical data
DynamoDb - storing data from shop module
AWS Systems Manager - runtime configuration
JWT.Net - authorisation and authentication
BCrypt.net - password hashing
GitHubAction - CI/CD
RabbitMQ - asynchronous messaging
MassTransit - asynchronous messaging library
PostgreSQL - database with json support
Entity Framework Core - ORM used for product module
OpenTelemetry - Traces, Metrics
Jaeger - Exporter/UI for OpenTelemetry
I'm using Feature Branch Workflow for simplicity and
I encourage you to use it also in your fork.
You can read more about flow here
- docker
- terraform (optional)
- aws account (optional)
- From the tools/docker directory run the command:
docker compose --profiles webapi,jaeger up -d
(look at profiles section) - if you want to run shop module you can create all required resources with terraform from tools/terraform/dev directory
terraform init
terraform apply
- Run ASP and/or Worker Project (add compound configuration in Rider)
- API endpoints: localhost:5000/swagger
- All ports for infrastructure available in docker-compose file
- To connect to pgadmin from docker use:
docker run -p 5050:80 -e "[email protected]" -e "PGADMIN_DEFAULT_PASSWORD=admin" -d dpage/pgadmin4
- all - all containers
- webapi - all except observability
- shops - dynamodb
- users - postgres
- baskets - eventstore, mongodb
- products - postgres
- logs - elasticsearch, kibana
- kibana
- jaeger
- elastic
rabbitmq and redis will run by default