Maveric's assignment for fullstack developers. Candidates are expected to complete this assignment within 2 days.
Fork this repository and add the webapp and services code as specified in the README section. Once you are done with the assignment please share the link to your forked repository with our HR team.
Candidates are expected to containerise the entire application and update the /artefacts/scripts/docker-compose.yml file such that executing docker-compose up
command should bring up the entire application along with all the dependencies like db etc.
Note
Pay special attention to the below mentioned points:
- Adhere to JAVA and JavaScript coding best practices. Follow google coding standards
- There must be no critical or blocking SonarQube and SonarLint errors
- Separate feature branches must be there for individual features/endpoints. For example account creation, updation deletion etc must be implemented in their respective branches
- Follow proper folder structure. For frontend seggregrate code based on features where as for springboot services follow the folder structure show in the account-service
- JUNIT and Mockito test cases are a must for backend code with 80% code coverage (eureka and gateway services the exception)
- Every microservice must include a postman collection to test all the endpoints of that particular service
- Endpoints must be testable from both via spring cloud gateway as well as ip:port of the respective service
- All the API request and response must be logged with the proper Correlation ID. Same corelation id needs to be passed across interdependent services for tracing the chained service calls
- Feign client must be used for service to service communication (AccountService->BalanceService)
- All the app components spring cloud gateway, eureka service, Core Microservices, MongoDb, MySQL, webapp must be containerised. Volume mounting to be done whereever necessary
- Pagination needs to be handled for all the list apis as mentioned in the swagger
- API implementation must exactly adhere to the swagger specification (Request, Response, path,query params, error codes etc). There should not be any deviations.
- Data models must have proper validation
- Error handling should be taken care for all the endpoints as per the swagger file
- Look and feel of the webapp should match the Maveric branding guidelines as shown in the wireframe. Pay attention to fonts, spacing, button colors. Check the artefacts/resources folder for the necessary resources needed for the webapp
- Webapp and all the services must have a README file listing the commands and all the dependencies to run the application
Tip
Bonus points for:
- Securing the APIs via JWT token & implementing the login page
- Using Vault for storing application configuration securely
Build a web application called Maveric Bank enabling bank customers to manage their account information i.e, customer profile, account balance and transaction information.
Follow below mentioned Techstack, Architecture, ER diagram, Wireframe and Swagger to build the application. Check the artefacts folder of this repo for resources and documentation
Below is the techstack that we will be using in order to build this application
Application Component | Tech stack |
---|---|
Front end | Angular/ReactJs/VueJs, Jest/Jasmine, Cucumber, Mocha, Chai |
Backend | Java 17, Spring 3.2.2, Maven, Junit, Mockito |
Architecture | Microservice based architecture |
SCM | Git, Github |
Deployment | Docker, DockerCompose |
API Gateway | Spring Cloud Gateway |
Service Discovery | Eureka Server |
Logging | Lombok/SLF4J/Log4J |
Database | MongoDb/MySQL |
Backend | Java 17, Spring 3.2.2 |
StaticCodeAnalysis | SonarQube |
API Testing | Postman |
API Documentation | Swagger/OpenAPI spec |
Service name | Port number | Git repo / Folder name | Description |
---|---|---|---|
user-service | 3005 | user-service | Service for managing users |
account-service | 3010 | account-service | Service for managing accounts |
balance-service | 3015 | balance-service | Service for managing balances |
transaction-service | 3020 | transaction-service | Service for managing transactions |
eureka-service | 8761 | eureka-service | Service for enabling service discovery |
gateway-service | 8000 | gateway-service | Service for cloud gateway |
maveric-bank-webapp | 8080 | maveric- bank-webapp | Angular/ReactJs/VueJs web application |
![ER-Diag](https://private-user-images.githubusercontent.com/9525282/299713540-6551a03b-db57-413a-8b1c-5d48851def7b.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjIxMDc4MjYsIm5iZiI6MTcyMjEwNzUyNiwicGF0aCI6Ii85NTI1MjgyLzI5OTcxMzU0MC02NTUxYTAzYi1kYjU3LTQxM2EtOGIxYy01ZDQ4ODUxZGVmN2IucG5nP1gtQW16LUFsZ29yaXRobT1BV1M0LUhNQUMtU0hBMjU2JlgtQW16LUNyZWRlbnRpYWw9QUtJQVZDT0RZTFNBNTNQUUs0WkElMkYyMDI0MDcyNyUyRnVzLWVhc3QtMSUyRnMzJTJGYXdzNF9yZXF1ZXN0JlgtQW16LURhdGU9MjAyNDA3MjdUMTkxMjA2WiZYLUFtei1FeHBpcmVzPTMwMCZYLUFtei1TaWduYXR1cmU9YmJmMTZhMmIwZmFjMjI3NzY5YzA5MjlhNWZlMTQ3MjA5YjFhYTFkMmNlODIzNzY4ZTM3YWQ5NDdlYmNmMmU1NiZYLUFtei1TaWduZWRIZWFkZXJzPWhvc3QmYWN0b3JfaWQ9MCZrZXlfaWQ9MCZyZXBvX2lkPTAifQ.ScnYz5G8EUcum70BYHxe0WWXDRsH-KnnvBbXU6j6I6o)
Page | Route |
---|---|
Login | /login |
Dashboard | /dashboard/{customerId} |
Note
Login page is optional. Consider implementing this page only if you are securing your APIs via JWT token
Tip
Bonus points for:
- Identifying the reusable components within the pages
- Organising application code based on the features