Since Covid-19, there has been a surge in online businesses. Business owners need an easy way to send invoice to their customers. Your starup needs to provide a service that sends invoices to customers. You will be using the microservice architecture to architect the system, ensuring that services are available at scale.
- Integrate third-party authentication for user sign-up and login (e.g., Auth0, Firebase Auth).
- Maintain user profiles with necessary details (e.g., name, email, wallet balance).
- Accept and store invoice-related details from users.
- Generate a downloadable PDF version of the invoice based on a predefined template.
- Accept invoice details and recipient email.
- Provide an abstraction layer over multiple email service providers. If one fails, it should transparently switch to another.
- Recommended Email Providers: SendGrid, Mailgun, SparkPost, Amazon SES.
- Use third-party authentication for user handling.
- Each service should be independent. They should be capable of operating separately and be consumed independently.
- Expose well-documented API endpoints for all services.
- Develop a responsive web-based interface.
- Allow users to:
- Register and log in.
- Add funds to their wallets.
- Create, view, and send invoices.
- Track their wallet's transaction history.
- View the status of sent emails (e.g., sent, delivered, failed).
You can use any of the languange or technology listed below unless otherwise stated:
- Java Springboot
- Node.js & Express (javascript & Typescript)
- Python (Any Python stack)
- MongoDB
- MySQL
- PostGre SQL
- Docker
- React
- Angular
- Include logging to track failures or errors in the system.
- Set up CI/CD pipelines using
Github actions - Use containerization (e.g., Docker, Docker Compose) for services to ensure a consistent development and deployment environment.
- API Design: Clear, consistent, and documented API endpoints.
- Code Quality: Clean, maintainable, and efficient code.
- System Design: Scalable and resilient system architecture.
- Error Handling: Robust handling of possible failures and errors.
- Unit tests both on the backend and frontend
Fork this repository All your changes should be made in a private fork of this repository. When you're done please, please:
Share your fork with the exquisapp user (Settings -> Collaborators -> Add People)
Reply to the email that asked you to do this API exercise, with a link to the repository that the exquis-test user now should have access to.