- Each user request is authenticated by the Auth service (JWT) with a circuit breaker and storage backup token.
- CRUD operations for notes:
- Creating notes.
- Viewing notes.
- Searching notes based on various criteria, using advanced indexes for fast data retrieval.
- Modifying and editing notes.
- Deleting notes.
- Every user action with notes (creation, viewing, editing, deleting) sends a message to RabbitMQ for further statistics aggregation.
- Hexagonal architecture
- Dependency Injection ( uber/fx )
- Transactional outbox (Stats Sender is releasing stats messages from outbox table)
- Stream processing ( create_note stream read, check and write to db by batch insert )
- Circuit breaker ( on auth service )
- Unit tests ( testify/assert/mockgen ) ( in progress integration and e2e tests )
- DDD
- CQRS
- Pre-commit hooks + golangci-lint
- DB optimization ( indexes, batch insert low memory stream, search by text )
make bin-deps
make gen
make up-build
make up-services
make migrate-up
make up
This project is licensed under the terms of the CC BY-NC-SA license.