- Analyze business requirements and technical details
- Clarify questions with the customer
- Create system design diagram
- Create entity relationship diagram
- Setup NestJS monorepo
- Create Prisma schema file based on ERD
- Create Dockerfile for service app and worker app
- Create docker-compose.yml file
- Connect to external BTC-to-UAH API
- Configure Prometheus and prom-client
- Create endpoints
- GET /rate
- POST /rate
- GET /emails
- POST /emails
- DELETE /emails
- GET /metrics
- Collect metrics
- subscribe email count
- unsubscribe email count
- send email success count
- send email error count
- exchange rate gauge
- Get exchange rate every hour
- Get exchange rate at 9 AM Kyiv time
- Use CQRS pattern
- Use Nodemailer for mailing
- Use Bull for task queuing
- Use Cron/Interval for task scheduling
- Use Pino for logging
- Add unit tests
- localhost:3001 -> Service App (/api -> Swagger Docs)
- localhost:3002 -> Worker App
- localhost:9090 -> Prometheus
- localhost:6379 -> Redis
- localhost:5432 -> PostgreSQL
- localhost:5555 -> Prisma Studio (npm run db:studio, only in local dev)