A real-time voting system where users can create a poll and other users can cast their votes. The system generates a ranking among the options and updates the votes in real-time.
- Docker;
- Node.js;
- Clone the repository;
- Install dependencies (
npm install
); - Setup PostgreSQL and Redis (
docker compose up -d
); - Copy
.env.example
file (cp .env.example .env
); - Run application (
npm run dev
); - Run tests (
npm run test
); - Test it by yourself! (Chose any API Client you like to test the routes).
Create a new poll.
{
"title": "Qual a melhor linguagem de programação?",
"options": [
"JavaScript",
"Java",
"PHP",
"C#",
"Todas são boas, a questão é o programador!"
]
}
{
"pollId": "194cef63-2ccf-46a3-aad1-aa94b2bc89b0"
}
Return data from a single poll.
{
"poll": {
"id": "e4365599-0205-4429-9808-ea1f94062a5f",
"title": "Qual a melhor linguagem de programação?",
"options": [
{
"id": "4af3fca1-91dc-4c2d-b6aa-897ad5042c84",
"title": "JavaScript",
"score": 1
},
{
"id": "780b8e25-a40e-4301-ab32-77ebf8c79da8",
"title": "Java",
"score": 0
},
{
"id": "539fa272-152b-478f-9f53-8472cddb7491",
"title": "PHP",
"score": 0
},
{
"id": "ca1d4af3-347a-4d77-b08b-528b181fe80e",
"title": "C#",
"score": 0
}
]
}
}
Add a vote to specific poll.
{
"pollOptionId": "31cca9dc-15da-44d4-ad7f-12b86610fe98"
}
{
"pollOptionId": "da9601cc-0b58-4395-8865-113cbdc42089",
"votes": 2
}
This project was made in colaboration with Rockeseat, most of the code is from them, I've just made some improvemnts and added some features, like Domain Driven Design and unit tests.