Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/thenriquedb/polls-api
Esta API permite aos usuários criar enquetes e visualizar seus resultados em tempo real.
https://github.com/thenriquedb/polls-api
docker fastify nodejs redis solid-principles
Last synced: about 2 months ago
JSON representation
Esta API permite aos usuários criar enquetes e visualizar seus resultados em tempo real.
- Host: GitHub
- URL: https://github.com/thenriquedb/polls-api
- Owner: thenriquedb
- Created: 2024-02-06T14:57:36.000Z (11 months ago)
- Default Branch: master
- Last Pushed: 2024-02-16T14:41:56.000Z (10 months ago)
- Last Synced: 2024-02-17T15:52:34.382Z (10 months ago)
- Topics: docker, fastify, nodejs, redis, solid-principles
- Language: TypeScript
- Homepage:
- Size: 75.2 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Polls
A API de Enquetes é uma aplicação simples desenvolvida durante o evento NLW Expert da Rocketseat, e posteriormente refatorada para aplicar os principais conceitos SOLID, visando melhorar a estrutura e organização da base de código.
Esta API permite aos usuários criar enquetes e visualizar seus resultados em tempo real.
## Tecnlogias
- **Node**.js: Ambiente de execução JavaScript do lado do servidor.
- **Fastify**: Um framework web leve e eficiente para Node.js.
- **Prisma**: ORM para manipulação de dados, facilitando a interação com o banco de dados.
- **PostgreSQL**: Banco de dados relacional utilizado para armazenar os dados das enquetes.
- **Redis**: Sistema de cache utilizado para armazenar e distribuir os resultados em tempo real.
- **WebSocket**: Protocolo de comunicação bidirecional em tempo real para envio das informações ao cliente.## Instalação
> Certifique-se de ter o Node.js, Docker e Docker Compose instalados em sua máquina.
1. Clone este repositório:
```bash
git clone https://github.com/thenriquedb/polls-api/
```
2. Acesse o diretório do projeto:
```bash
cd polls-api
```
3. Instale as depedências:
```bash
npm install # or yarn
```
4. Execute o Docker Compose:
```bash
docker-compose up
```
5. Execute o projeto
```bash
npm run dev # ou yarn dev
```
A API estará disponível em **http://localhost:3333**.## Endpoints
### POST ``/polls``
**Request body**
```json
{
"title": string,
"options": string[],
}
```**Response**
```json
{
"pollId": UUID
}
```### GET ``/polls/:pollId``
**Response**
```json
{
"poll": {
"id": UUID,
"title": string,
"options": {
"id": UUID,
"title": string,
"score": number
}[]
}
}
```### POST ``/polls/:pollId/votes``
**Request body**
```json
{
"pollOptionId": UUID
}
```### WEBSOCKET ``/polls/:pollId/results``
```json
{
"pollOptionId": string,
"votes": number
}
```## Estrutura do projeto
```bash
.
└── poll-api/
├── prisma
└── src/
├── infra/
│ ├── http/
│ │ ├── controllers
│ │ ├── app.ts # HTTP app configure
│ │ └── server.ts # Run server
│ └── storage/
│ ├── prisma.ts # Prisma config file
│ └── redis.ts # Redis singleton
├── repository # manage data access logic
│ └── example-repository
├── use-cases # bussines rules
│ └── example-use-case/
│ ├── example-use-case.ts
│ ├── index.ts
│ └── make-example-use-case.ts # Factory to build use-case
└── util # common utilitaries
```