This is a simple microservices voting system. It is composed of 3 microservices:
- Voters Service: A service that allows users to vote between multiple options.
- Admin Service: A service that allows an admin to create a new vote.
- 2x Worker Services: A service that allows to count the votes and to get the results.
- Centeralized Logging Service: A service that allows to log all the requests and responses of the other services.
-
Voting Service
- Description: A service that allows users to vote between multiple options.
- Port: 8080
- Endpoints:
- POST
/votes: Create a new vote. - GET
/votes/{voteId}: Get a vote by id. - GET
/votes/{topicId}/: Get all the votes for a topic. - GET
/votes/{topicId}/{voterId}: Get a vote for a topic by a voter. - PATCH
/votes/{voteId}: Update a vote by id.
- POST
-
Topics Service
- Description: A service that allows an admin to create a new vote, manage topics, voters, votes, and results.
- Port: 8081
- Endpoints:
- GET
/topics: Get all the topics. - GET
/topics/{topicId}: Get a topic by id. - GET
/topics/{topicId}/results: Get the results for a topic. - PATCH
/topics/{topicId}: Update a topic by id. - DELETE
/topics/{topicId}: Delete a topic by id. - POST
/topics: Create a new topic. - GET
/topics/exists: Check if a topic exists.
- GET
-
Voters Service
- Description: A service that allows to create a user and get an id to vote, and validates users ids for other services.
- Port: 8082
- Endpoints:
- POST
/voters: Create a new voter, and return the voter id. - GET
/voters/{voterId}: Get a voter by id, to validate the voter id.
- POST
-
Consumer Service
- Description: A service that takes votes from the message broker and updates the topics database to have the result, it should work as a consumer to the votes channel on RabbitMQ
-
RabbitMQ Message Broker
- Description: A Message broker to share the votes between services.
-
TODO: Centeralized Logging Service
- Description: A service that allows to log all the requests and responses of the other services.
- Port: 8083
- Endpoints:
- GET
/logs: Get all the logs. - GET
/logs/{logId}: Get a log by id.
- GET
