https://github.com/eneas-almeida/bekid
đ BeKid Ă© uma aplicação com o objetivo de realizar o mapeamento de emoçÔes para o auxĂlio no combate ao bullying escolar. API fullstack em NodeJs com VueJs.
https://github.com/eneas-almeida/bekid
apirest docker docker-compose gitflow jest nodejs postgres redis typeorm typescript uml
Last synced: 3 months ago
JSON representation
đ BeKid Ă© uma aplicação com o objetivo de realizar o mapeamento de emoçÔes para o auxĂlio no combate ao bullying escolar. API fullstack em NodeJs com VueJs.
- Host: GitHub
- URL: https://github.com/eneas-almeida/bekid
- Owner: eneas-almeida
- License: mit
- Created: 2021-11-19T15:40:23.000Z (over 4 years ago)
- Default Branch: master
- Last Pushed: 2022-08-09T00:27:57.000Z (almost 4 years ago)
- Last Synced: 2025-02-22T03:19:16.704Z (over 1 year ago)
- Topics: apirest, docker, docker-compose, gitflow, jest, nodejs, postgres, redis, typeorm, typescript, uml
- Homepage:
- Size: 5.69 MB
- Stars: 0
- Watchers: 2
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Bekid
[](https://github.com/venzel/bekid-backend/blob/master/LICENSE)
> **BeKid** Ă© uma aplicação para o mapeamento de emoçÔes e auxĂlio no combate ao bullying escolar.
đ bekid.app

## đ€ Autores
| Foto | Nome | Ativo | Dt. inativo | AtribuiçÔes |
| ------------------------------------------------- | ------------------------------------------- | ----- | ----------- | ----------------------------- |
|  | [EnĂ©as Almeida](https://github.com/venzel/) | đ„ | - | Manager, Arquiteto, FullStack |
|  | [Joab Maia](https://github.com/JoabMaia/) | đ„ | - | Manager and System Analyst |
## â Links
đ [Git do backend](https://github.com/venzel/bekid-backend) đ (privado)
đ [Git do frontend](https://github.com/venzel/bekid-frontend) đ (privado)
đ [Sistema em QA](https://qa.bekid.app)
đ [Sistema em Produção](https://bekid.app)
đ [FAQ Geral](./media/faq/FAQ.md)
## Etapas de desenvolvimento
1. Levantamento do problema a ser resolvido **(Briefing)**;
2. Levantamento dos requisitos funcionais;
3. Definição da arquitetura utilizada;
4. Definição das tecnologias utilizadas;
5. Definição das atribuiçÔes e cronograma de estimativas no desenvolvimento das atividades;
6. Criação do diagrama de relacionamentos e testes de hipóteses;
7. Desenvolvimento da documentação e diagramas explicativos no Git;
8. Diagramação das telas (UX Design);
9. ConfiguraçÔes dos ambientes de QA e Produção;
10. Desenvolvimento do MVP.
10.1. Desenvolvimento da backend;
10.2. Desenvolvimento do frontend;
10.3. Integração do frontend com o backend.
## â Cronograma de estimativas no desenvolvimento das atividades
| Atividade | Esforço (Fibonacci) | Finalizado? | Execução |
| ------------------------------------------------------- | ------------------- | ----------- | -------- |
| Levantamento do problema a ser resolvido **(Briefing)** | 3 | đ„ | 100% |
| Levantamento dos requisitos funcionais | 1 | đ„ | 100% |
| Definição das tecnologias utilizadas | 1 | đ„ | 100% |
| Criação da documentação no Git | 13 | đ„ | 100% |
| Diagramação das telas (UX Design) | 13 | đ„ | 100% |
| Configuração do ambiente de QA e produção | 5 | đ„ | 100% |
| Desenvolvimento do backend | 21 | đ„ | 100% |
| Desenvolvimento do frontend | 21 | đ„ | 100% |
| Integração do backend com o frontend | 21 | đ„ | 100% |
### Significados dos esforços na escala Fibonacci
- **Esforço 1** - Representa >= 1 hora e <= 7 horas.
- **Esforço 3** - Representa > 21 horas e <= 35 horas.
- **Esforço 5** - Representa > 35 horas e <= 42 horas.
- **Esforço 13** - Representa > 49 horas e <= 70 horas.
- **Esforço 21** - Representam horas não determinadas.
đ [Mais sobre a metodologia de esforço Fibonacci](./media/docs/fibonacci.md)
## Backend
- NodeJs/Express
- Typescript / Javascript
- TypeORM / Postgres / MongoDB / Redis
- Testes com métricas de coverages (**Jest**)
đ [Link para a documentação no git do backend](./backend/README.md)
## PersistĂȘncia dos dados
- Postgres
- MongoDB
- Redis
\* Os bancos de dados sĂŁo provenientes de containers do docker.
### TypeORM
O **TypeORM** Ă© um ORM que pode ser utilizado em plataformas como o Node, NestJs, dentre outras, e que possibilita o desenvolvimento tanto com JavaScript como com TypeScript. O TypeORM foi inspirado no Hibernate e Entity Framework, oferece suporte a Decorators e trabalha com bancos de dados como PostgreSQL, Microsoft SQL Server, e atualmente com MongoDB.
đ [Mais informaçÔes sobre o TypeORM na Medium](https://medium.com/@matheusbessa_44838/orm-no-nodejs-com-typeorm-a3b3d8a22240)
đ [Documentação oficial do TypeORM](https://typeorm.io/)
## Frontend
- VueJs
- Vuetify
- Javascript
đ [Link para a documentação no git do frontend](./frontend/README.md)
đ [Link da documentação oficial do VueJs](https://vuejs.org/guide/introduction.html)
đ [Link da documentação oficial do Vuetify](https://vuetifyjs.com/en/introduction/why-vuetify/#feature-guides)
### Telas do sistema (UX)
| Descrição | Data de modificação | Versão | Link de download |
| -------------- | ------------------- | ------ | -------------------------------- |
| Segunda versĂŁo | 08 de abril de 2022 | v2 | [Download](./media/ux/ux-v1.pdf) |
đ [Link do arquivo PDF](./media/ux/ux-v1.pdf)
### Prints do sistema
## Backend/Frontend
- Docker
- Codeship (**CI/CD**)
đ [Link para a faq do Docker](./media/faq/geral/docker-commands.md)
đ [Link para a faq do Codeship](./media/faq/geral/codeship.md)
## Infraestrutura
- Nginx
- PM2
- Docker
- Certbot
đ [Link para faq do Nginx](./media/faq/geral/nginx-install-and-configure.md)
đ [Link para faq do PM2](./media/faq/geral/pm2-configurations.md)
đ [Link para faq do Docker](./media/faq/geral/docker-commands.md)
đ [Link para faq do Certbot](./media/faq/geral/certbot.md)
## Arquitetura
### Organização do backend (Feature by Package)
**Feature by Package** Ă© uma arquitetura que utiliza conceitos do **DDD (Domain Driven Design)**, com o objetivo de tornar o cĂłdigo mais **flexĂvel**, **escalĂĄvel** e de **manutenção simples**.
### Vantagens da arquitetura
- **Manutenção**: Facilita o engajamento de multiplas equipe e colaboradores em um projeto;
- **EscalĂĄvel**: Facilita refatoramento do cĂłdigo monolĂtico para uma uma estrura de microserviços;
- **SOLID**: Facilita a aplicação de todos os princĂpios do SOLID;
- **Git**: Melhora o gerenciamento dos commits, evitando conflitos e etc;
- **Testes**: Facilita o desenvolvimento de testes de unidade e integração.
### Estratégia de captura de erros com o Sentry
O **Sentry** é um serviço open source para logar erros da aplicação.
A aplicação é configurada para que sempre que ocorrer um erro do tipo 500, a exceção seja capturada e catalogada no Sentry, indicando exatamente a linha que ocorreu o erro, assim como dados de data e hora, tornando mais fåcil a identificação de bugs, como mostra no exemplo abaixo:
đ [Mais informaçÔes sobre o Sentry](https://blog.locaweb.com.br/temas/codigo-aberto/voce-consegue-prever-os-bugs-de-sua-aplicacao/)
đ [Link oficial do serviço](https://sentry.io)
## Tests com métricas coverages
Estrutura de mĂłdulos do backend
- Models
- Infra
- Dtos
- Repositories
- Containers
- Providers
- UseCases (Middlewares, Controllers, Services, Validators)
Estrutura de arquivos dos mĂłdulos do backend
```
âââ containers
â  âââ index.ts
âââ dtos
â  âââ ICreateVoteDTO.ts
â  âââ IDeleteVoteDTO.ts
âââ infra
â  âââ http
â  â  âââ routes
â  â  âââ VoteRoutes.ts
â  âââ typeorm
â  âââ postgres
â  âââ entities
â  â  âââ VotePostgresEntity.ts
â  âââ repositories
â  âââ VotePostgresRepository.ts
âââ models
â  âââ entities
â  âââ IVoteEntity.ts
â  âââ VoteInMemoryEntity.ts
âââ repositories
â  âââ IVoteRepository.ts
â  âââ VoteInMemoryRepository.ts
âââ useCases
âââ CreateVote
â  âââ CreateVoteController.ts
â  âââ CreateVoteMiddleware.ts
â  âââ CreateVoteService.ts
â  âââ CreateVoteValidator.ts
âââ DeleteVote
â  âââ DeleteVoteController.ts
â  âââ DeleteVoteMiddleware.ts
â  âââ DeleteVoteService.ts
â  âââ DeleteVoteValidator.ts
âââ ListVote
âââ ListVoteController.ts
âââ ListVoteMiddleware.ts
âââ ListVoteService.tsâââ containers
â  âââ index.ts
âââ dtos
â  âââ ICreateVoteDTO.ts
â  âââ IDeleteVoteDTO.ts
âââ infra
â  âââ http
â  â  âââ routes
â  â  âââ VoteRoutes.ts
â  âââ typeorm
â  âââ postgres
â  âââ entities
â  â  âââ VotePostgresEntity.ts
â  âââ repositories
â  âââ VotePostgresRepository.ts
âââ models
â  âââ entities
â  âââ IVoteEntity.ts
â  âââ VoteInMemoryEntity.ts
âââ repositories
â  âââ IVoteRepository.ts
â  âââ VoteInMemoryRepository.ts
âââ useCases
âââ CreateVote
â  âââ CreateVoteController.ts
â  âââ CreateVoteMiddleware.ts
â  âââ CreateVoteService.ts
â  âââ CreateVoteValidator.ts
âââ DeleteVote
â  âââ DeleteVoteController.ts
â  âââ DeleteVoteMiddleware.ts
â  âââ DeleteVoteService.ts
â  âââ DeleteVoteValidator.ts
âââ ListVote
âââ ListVoteController.ts
âââ ListVoteMiddleware.ts
âââ ListVoteService.ts
```
## Diagrama de relacionamentos
| Descrição | Data de modificação | Versão | Link de download |
| -------------------------- | ------------------- | ------ | ------------------------------------------- |
| Quarta versĂŁo do documento | 01 de abril de 2022 | v4 | [Download](./media/diagrams/diagram-v4.png) |
| Quinta versĂŁo do documento | 25 de maio de 2022 | v5 | [Download](./media/diagrams/diagram-v5.png) |
đ [Download do arquivo do Astah](./media/diagrams/diagram-relational-v2.asta)
JSON
```json
{
"USERS": [
{
"id": 1,
"name": "Vanessa",
"role": "ADMIN"
},
{
"id": 2,
"name": "tiago",
"role": "MANAGER"
},
{
"id": 3,
"name": "alex",
"role": "USER"
},
{
"id": 4,
"name": "liz",
"role": "USER"
}
],
"GROUPS": [
{
"id": 1,
"manager_id": 2,
"name": "4 serie fundamental - turma A",
"users": []
},
{
"id": 2,
"manager_id": 2,
"name": "5 serie fundamental - turma A",
"users": []
}
],
"GROUP_QUEUE": [
{
"id": 1,
"group_id": 2,
"user_id": 1,
"created_at": "26-12-2021"
}
],
"GROUPS_USERS": [
{
"group_id": 1,
"user_id": 2,
"created_at": "26-12-2021"
},
{
"group_id": 1,
"user_id": 3,
"created_at": "26-12-2021"
},
{
"group_id": 1,
"user_id": 4,
"created_at": "26-12-2021"
}
],
"CAMPAIGNS": [
{
"id": 1,
"group_id": 1,
"manager_id": 1,
"name": "Primeira dinamica em grupo",
"expiration": null
},
{
"id": 2,
"group_id": 1,
"manager_id": 1,
"name": "Segunda dinamica em grupo",
"expiration": "28-12-2021"
}
],
"CAMPAIGN_QUEUE": [
{
"id": 1,
"campaign_id": 1,
"user_id": 2,
"created_at": "26-12-2021"
},
{
"id": 2,
"campaign_id": 1,
"user_id": 3,
"created_at": "26-12-2021"
},
{
"id": 3,
"campaign_id": 1,
"user_id": 4,
"created_at": "26-12-2021"
}
],
"EMOTIONS": [
{
"id": 1,
"slug": "alegre",
"name": "Alegre"
},
{
"id": 2,
"slug": "triste",
"name": "Triste"
},
{
"id": 3,
"slug": "raiva",
"name": "Raiva"
},
{
"id": 4,
"slug": "medo",
"name": "Medo"
}
],
"ACTORS": [
{
"id": 1,
"name": "Colega",
"slug": "colega"
},
{
"id": 2,
"name": "Pai",
"slug": "pai"
},
{
"id": 3,
"name": "Padastro",
"slug": "padastro"
},
{
"id": 4,
"name": "MĂŁe",
"slug": "mae"
},
{
"id": 5,
"name": "Madastra",
"slug": "madastra"
},
{
"id": 6,
"name": "IrmĂŁo",
"slug": "irmao"
},
{
"id": 7,
"name": "Escola",
"slug": "escola"
}
],
"REASONS": [
{
"id": 1,
"emotion_id": 2,
"description": "Me apelidaram"
},
{
"id": 2,
"emotion_id": 2,
"description": "Bateram em mim"
},
{
"id": 3,
"emotion_id": 2,
"description": "Meu pai esta doente"
},
{
"id": 4,
"emotion_id": 2,
"description": "Cai da bicicleta"
}
],
"VOTES": [
{
"id": 1,
"campaign_id": 1,
"emotion_id": 1,
"user_id": 2
},
{
"id": 2,
"campaign_id": 1,
"emotion_id": 1,
"user_id": 3
}
],
"VOTES_ACTORS": [
{
"id": 1,
"vote_id": 1,
"actor_id": 1,
"user_id": 2
},
{
"id": 2,
"vote_id": 1,
"actor_id": 1,
"user_id": 2
}
],
"VOTES_REASONS": [
{
"id": 1,
"vote_id": 1,
"user_id": 2,
"reason_id": 1
},
{
"id": 1,
"vote_id": 1,
"user_id": 2,
"reason_id": 2
},
{
"id": 1,
"vote_id": 1,
"user_id": 2,
"reason_id": 3
}
],
"VOTES_COMMENTS": [
{
"id": 1,
"vote_id": 1,
"user_id": 2,
"message": "Estou com fome"
}
]
}
```
Requisitos funcionais
- **ADMIN**: Ă o gestor master do sistema, ator que tem acesso irrestrito ao painel administrativo.
- **GERENTE**: Ă considerado o professor, ator que irĂĄ gerir os alunos (usuĂĄrios).
- **USUĂRIO**: Ă considerado o aluno, ator que paticipa da campanha e realia o voto.
### UsuĂĄrio/Gerente/Admin
1. O **USUĂRIO/GERENTE/ADMIN** deve poder efetuar o **login/logout**;
2. O **USUĂRIO/GERENTE** deve poder se **cadastrar**;
3. O **USUĂRIO/GERENTE** deve poder **alterar o perfil** (nome);
4. O **USUĂRIO/GERENTE** deve poder **alterar a senha**;
5. O **USUĂRIO/GERENTE/ADMIN** deve poder **recuperar a senha**;
6. O **ADMIN** deve poder **visualizar os usuĂĄrios** do sistema;
7. O **ADMIN** deve poder **deletar um usuĂĄrio** do sistema;
8. O **ADMIN** deve poder **desabilitar/habilitar um usuĂĄrio** do sistema.
### Emotion
1. O **ADMIN** deve poder **criar um emotion**;
2. O **ADMIN** deve poder **alterar um emotion**;
3. O **ADMIN** deve poder **habilitar/desabilitar um emotion**;
4. O **ADMIN** deve poder **deletar um emotion**.
### RazĂŁo
1. O **ADMIN** deve poder **criar uma razĂŁo**;
2. O **ADMIN** deve poder **alterar uma razĂŁo**;
3. O **ADMIN** deve poder **habilitar/desabilitar uma razĂŁo**;
4. O **ADMIN** deve poder **deletar uma razĂŁo**.
### Ator
1. O **ADMIN** deve poder **criar um ator**;
2. O **ADMIN** deve poder **alterar um ator**;
3. O **ADMIN** deve poder **habilitar/desabilitar um ator**;
4. O **ADMIN** deve poder **deletar um ator**.
### Grupo
1. O **GERENTE** deve poder **criar um grupo**;
2. O **GERENTE** deve poder **alterar um grupo**;
3. O **GERENTE** deve poder **deletar um grupo**;
4. O **GERENTE** deve poder **enviar uma solicitação para USUĂRIO entrar em um grupo**;
5. O **GERENTE** deve poder **remover um USUĂRIO de um grupo**.
### Campanha
1. O **GERENTE** deve poder **criar uma campanha**;
2. O **GERENTE** deve poder **alterar uma campanha**;
3. O **GERENTE** deve poder **deletar uma campanha**;
4. O **GERENTE** deve poder **iniciar uma campanha**;
5. O **GERENTE** deve poder **finalizar uma campanha**.
### UsuĂĄrio
1. O **USUĂRIO** deve poder **aceitar/negar a solicitação da entrada em um grupo**;
2. O **USUĂRIO** deve poder **efetuar uma votação**;
Endpoints do backend (API)
| Path | Método | Token | Role | Descrição |
| -------------------------------------------------------------------------------------------------------------------- | ------ | ----- | ------------------ | ------------------------------- |
| **USER/MANAGER/ADMIN** |
| [/login](https://bekid.app/api/v1/login) | POST | | ALL | Efetua login |
| [/users](https://bekid.app/api/v1/users) | POST | | USER/MANAGER | Cria uma conta |
| [/users](https://bekid.app/api/v1/users) | GET | | ADMIN | Lista usuĂĄrios |
| [/users/{id}](https://bekid.app/api/v1/users/1) | GET | | ADMIN | Exibe usuĂĄrio |
| [/users/{id}](https://bekid.app/api/v1/users/1) | PUT | | ADMIN | Atualiza usuĂĄrio |
| [/users/{id}](https://bekid.app/api/v1/users/1) | DELETE | | ADMIN | Deleta usuĂĄrio |
| [/change_password](https://bekid.app/api/v1/change_password) | PUT | | USER/MANAGER/ADMIN | Altera senha |
| [/forgot_password](https://bekid.app/api/v1/forgot_password) | PUT | | USER/MANAGER/ADMIN | Esqueceu a senha |
| [/reset_password](https://bekid.app/api/v1/reset_password) | PATCH | | USER/MANAGER/ADMIN | Reseta a senha |
| [/change_avatar](https://bekid.app/api/v1/change_avatar) | PATCH | | USER/MANAGER/ADMIN | Altera avatar |
| [/change_profile](https://bekid.app/api/v1/change_profile) | PUT | | USER/MANAGER/ADMIN | Altera o perfil |
| [/toggle_role/{id}](https://bekid.app/api/v1/toggle_role/1) | PATCH | | ADMIN | Alterna a patente |
| [/toggle_allow/{id}](https://bekid.app/api/v1/toggle_allow/1) | PATCH | | ADMIN | Alterna o status |
| **EMOTION** |
| [/emotions](https://bekid.app/api/v1/emotions) | POST | | ADMIN | Cria emotion |
| [/emotions](https://bekid.app/api/v1/emotions) | GET | | ADMIN | Lista emotions |
| [/emotions/{id}](https://bekid.app/api/v1/emotions/1) | GET | | ADMIN | Exibe emotion |
| [/emotions/{id}](https://bekid.app/api/v1/emotions/1) | PUT | | ADMIN | Atualiza emotion |
| [/emotions/{id}](https://bekid.app/api/v1/emotions/1) | DELETE | | ADMIN | Deleta emotion |
| **REASON** |
| [/reasons](https://bekid.app/api/v1/reasons) | POST | | ADMIN | Cria motivo |
| [/reasons](https://bekid.app/api/v1/reasons) | GET | | ADMIN | Lista motivos |
| [/reasons/{id}](https://bekid.app/api/v1/reasons/1) | GET | | ADMIN | Exibe motivo |
| [/reasons/{id}](https://bekid.app/api/v1/reasons/1) | PUT | | ADMIN | Atualiza motivo |
| [/reasons/{id}](https://bekid.app/api/v1/reasons/1) | DELETE | | ADMIN | Deleta motivo |
| **ACTOR** |
| [/actors](https://bekid.app/api/v1/actors) | POST | | ADMIN | Cria ator |
| [/actors](https://bekid.app/api/v1/actors) | GET | | ADMIN | Lista ators |
| [/actors/{id}](https://bekid.app/api/v1/actors/1) | GET | | ADMIN | Exibe ator |
| [/actors/{id}](https://bekid.app/api/v1/actors/1) | PUT | | ADMIN | Atualiza ator |
| [/actors/{id}](https://bekid.app/api/v1/actors/1) | DELETE | | ADMIN | Deleta ator |
| **GROUP** |
| [/groups](https://bekid.app/api/v1/groups) | POST | | MANAGER | Cria grupo |
| [/groups](https://bekid.app/api/v1/groups) | GET | | MANAGER | Lista grupos |
| [/groups/{id}](https://bekid.app/api/v1/groups/1) | GET | | MANAGER | Exibe grupo |
| [/groups/{id}](https://bekid.app/api/v1/groups/1) | PUT | | MANAGER | Atualiza grupo |
| [/groups/{id}](https://bekid.app/api/v1/groups/1) | DELETE | | MANAGER | Deleta grupo |
| **GROUP_QUEUE** |
| [/invite_user_in_group...](https://bekid.app/api/v1/invite_user_in_group?group_id=2&user_id=2) | GET | | MANAGER | Convida usuĂĄrio para um grupo |
| [/delete_invite_user_in_group...](https://bekid.app/api/v1/delete_invite_user_in_group?group_queue_id=2) | GET | | MANAGER | Deleta convite usuĂĄrio p/ grupo |
| [/monitore_group_queue](https://bekid.app/api/v1/monitore_group_queue) | GET | | MANAGER | Monitora a fila de grupos |
| **CAMPAIGN** |
| [/campaigns](https://bekid.app/api/v1/campaigns) | POST | | MANAGER | Cria campanha |
| [/campaigns](https://bekid.app/api/v1/campaigns) | GET | | MANAGER | Lista campanhas |
| [/campaigns/{id}](https://bekid.app/api/v1/campaigns/1) | GET | | MANAGER | Exibe campanha |
| [/campaigns/{id}](https://bekid.app/api/v1/campaigns/1) | PUT | | MANAGER | Atualiza campanha |
| [/campaigns/{id}](https://bekid.app/api/v1/campaigns/1) | DELETE | | MANAGER | Deleta campanha |
| **CAMPAIGN_QUEUE** |
| [/monitore_campaign_queue](https://bekid.app/api/v1/monitore_campaign_queue) | GET | | MANAGER | Monitora fila de campanhas |
| **VOTES** |
| [/votes?campaign_id={id}&emotion_id={id}](https://bekid.app/api/v1/add_one_user_in_group_queue?group_id=2&user_id=2) | PUT | | USER | Cria voto |
| [/votes](https://bekid.app/api/v1/votes) | GET | | USER | Lista votos |
| [/votes/{id}](https://bekid.app/api/v1/votes/1) | DELETE | | USER | Deleta voto |
| **VOTE_ACTOR** |
| [/votes_actors](https://bekid.app/api/v1/votes_actors) | PUT | | USER | Associa o ator ao voto |
| [/votes_actors](https://bekid.app/api/v1/votes_actors) | GET | | USER | Lista os associaçÔes |
| **VOTE_REASON** |
| [/votes_reasos](https://bekid.app/api/v1/votes_reasons) | PUT | | USER | Associa o motivo ao voto |
| [/votes_reasos](https://bekid.app/api/v1/votes_reasons) | GET | | USER | Lista os motivos |
| **VOTE_COMMENT** |
| [/votes_comments](https://bekid.app/api/v1/votes_comments) | PUT | | USER | Associa comentĂĄrio ao voto |
| [/votes_comments](https://bekid.app/api/v1/votes_comments) | GET | | USER | Lista os comentĂĄrios |
## Download do projeto no Insomnia
[](https://insomnia.rest/run/?label=Bekid&uri=https%3A%2F%2Fraw.githubusercontent.com%2Fvenzel%2Fbekid-backend%2Fmaster%2./media/insomnia/Insomnia_2022-04-08.json)
## CI/CD
### Gitflow
O Gitflow Ă© um fluxo de trabalho que auxilia o desenvolvimento contĂnuo de software entre a equipe envolvida.
đ Mais informaçÔes
## Branchs
- **user** - Envia commits apenas para o prĂłprio user, exemplo: tiago-feature-21.
- **develop** - Recebe merges dos users. (**Ambiente de QA**)
- **master** đ - Recebe merges da develop, no final de uma release. (**Ambiente de produção**)
### Diretrizes
\* A branch **master** đ Ă© bloqueada para receber commits de usuĂĄrios.
\* A branch **master** representa o software em **produção**.
\* A branch **develop** representa o software em **QA**.
\* Fica determinado que sempre que um merge request na branch develop for aprovado ou reprovado, a branch do usuĂĄrio **NĂO** serĂĄ deletada, a fim de manter o histĂłrico de branchs.
đ [Documentação completa do gitflow - passo a passo](./media/docs/gitflow.md)
## Padronização de commits (Conventional Commits)
**Conventional Commits** é uma convenção de mensagens de commits. Essa convenção descrevendo os recursos, correçÔes e alteraçÔes importantes feitas nas mensagens.
### Flags utilizadas:
| Ăcone | Flag | Descrição |
| ----- | ------------ | -------------------------------------------------------------------------------------------------------- |
| đȘČ | **fix** | Correção de bug para o usuĂĄrio. |
| âïž | **feat** | Desenvolvimento de uma nova funcionalidade. |
| đ | **docs** | AlteraçÔes na documentação. |
| âïž | **refactor** | Refatoração de um bloco de cĂłdigo. |
| đ
| **style** | Formatação, falta de ponto e vĂrgula, etc. |
| đ§ | **perf** | Uma mudança de cĂłdigo que melhora o desempenho. |
| đš | **build** | AlteraçÔes que afetam o sistema de compilação ou dependĂȘncias externas (escopos de exemplo: gulp e npm). |
| đȘ | **ci** | AlteraçÔes em arquivos e scripts de configuração de CI (escopos de exemplo: Travis, Circle e Codeship). |
| đ§Ș | **test** | Adicionando testes ausentes ou corrigindo testes existentes. |
### Exemplos de commits utilizando a padronização
```bash
# Exemplo 1
git commit -m "đȘČ fix: corrige bug da listagem de usuĂĄrios."
```
```bash
# Exemplo 2
git commit -m "âïž feat: cria o mĂłdulo de pontos."
```
đ [Mais informaçÔes](https://www.conventionalcommits.org/en/v1.0.0/)
## Prettier
O **Prettier** é um formatador de código que visa ajudar os desenvolvedores a escrever aplicaçÔes que são mais fåceis de entender e mais uniformizadas entre as diversas formas de programar que existem.
Arquivo **.prettierrc** na raiz do projeto.
```json
{
"semi": true,
"tabWidth": 4,
"printWidth": 90,
"singleQuote": true,
"trailingComma": "es5"
}
```
đ [Link oficial](https://prettier.io)
## Pipeline
O **Codeship** Ă© um serviço de entrega contĂnua hospedado que se concentra na velocidade, confiabilidade e simplicidade. Em nossa arquitetura, o Codeship Ă© integrado com o Github, ele identifica automaticamente quando um commit Ă© realizado e dĂĄ sequĂȘncia na entrega para os ambientes prĂ© configurados, como demonstra na imagem abaixo:

đ [Link do arquivo no Lucidchart](https://lucid.app/documents/view/e3f44502-6734-49bd-bb02-aa1b2c4c54da)
### Etapas
1 - **Lint**: Nessa etapa Ă© verificada as regras do Sonarlint;
2 - **Test**: Nessa etapa Ă© realizado os testes unitĂĄrios;
3 - **Build**: Nessa etapa é realizado o build da aplicação.
© Documento de autorias de Enéas Almeida e Joab Maia.