MyPoint Ʃ um sistema de registro de pontos de funcionƔrios, utilizando filas com o RabbitMQ.
š MyPoint
O registro de ponto ocorre geralmente sempre aos mesmos horĆ”rios por todos os funcionĆ”rios de uma empresa, gerando um stress no servidor de banco de dados, com isso, a tĆ©cnica de utilizaĆ§Ć£o de filas se enquandra como uma soluĆ§Ć£o para resolver o devido problema.
Foto | Nome | Ativo | Dt. inativo | AtribuiƧƵes |
---|---|---|---|---|
EnĆ©as Almeida | š„ | - | Manager, Arquiteto, FullStack Developer |
š Git do backend š (privado)
š Git do frontend š (privado)
š Swagger de QA
š Swagger de ProduĆ§Ć£o
š Sistema em QA
š Sistema em produĆ§Ć£o
š VS Code (Settings, Keybinds, Theme e Plugins)
š Ferramentas & ServiƧos
š FAQ Geral
- Levantamento do problema a ser resolvido (Briefing);
- Levantamento dos requisitos funcionais;
- DefiniĆ§Ć£o da arquitetura utilizada;
- DefiniĆ§Ć£o das tecnologias utilizadas;
- DefiniĆ§Ć£o das atribuiƧƵes e cronograma de estimativas no desenvolvimento das atividades;
- CriaĆ§Ć£o do diagrama de relacionamentos e testes de hipĆ³teses;
- Desenvolvimento da documentaĆ§Ć£o e diagramas explicativos no Git;
- DiagramaĆ§Ć£o das telas (UX Design);
- ConfiguraƧƵes dos ambientes de QA e ProduĆ§Ć£o;
- Desenvolvimento do MVP.
10.1. Desenvolvimento da backend;
10.2. Desenvolvimento do frontend;
10.3. IntegraĆ§Ć£o do frontend com o backend.
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 | - | 70% |
DiagramaĆ§Ć£o das telas (UX Design) | 13 | - | 0% |
ConfiguraĆ§Ć£o do ambiente de QA e produĆ§Ć£o | 5 | - | 0% |
Desenvolvimento do backend | 21 | - | 0% |
Desenvolvimento do frontend | 21 | - | 0% |
IntegraĆ§Ć£o do backend com o frontend | 21 | - | 0% |
- 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
- NestJs
- RabbitMQ
- Cognito (AWS)
- Typescript / Javascript
- TypeORM / Postgres / MongoDB
- Testes com mƩtricas de coverages (Jest)
š Link para a documentaĆ§Ć£o no git do backend
š Link da documentaĆ§Ć£o oficial do NestJs
š Link da documentaĆ§Ć£o oficial do RabbitMQ
- Postgres
- MongoDB
* Os bancos de dados sĆ£o provenientes de containers do docker.
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
š DocumentaĆ§Ć£o oficial do TypeORM
- VueJs
- Vuetify
- Javascript
š Link para a documentaĆ§Ć£o no git do frontend
š Link da documentaĆ§Ć£o oficial do VueJs
š Link da documentaĆ§Ć£o oficial do Vuetify
- Docker
- Codeship (CI/CD)
š Link para a faq do Docker
š Link para a faq do Codeship
- Nginx
- PM2
- Docker
- Certbot
š Link para faq do Nginx
š Link para faq do PM2
š Link para faq do Docker
š Link para faq do Certbot
- MicroserviƧos
- Filas com RabbitMQ
- Authorization/Authentication com o Cognito
- Interceptors
- Transformers
- Validators
- Captura de errors com o Sentry
- PadronizaĆ§Ć£o de commits (Conventional commits)
- Swagger
- Upload
- PadronizaĆ§Ć£o de cĆ³digo (Sonarlint)
- Yarn como gerenciamento de pacotes
- Makefile
DescriĆ§Ć£o | Data de modificaĆ§Ć£o | VersĆ£o | Link de download |
---|---|---|---|
Primeira versĆ£o do documento | 01 de abril de 2022 | v1 | Download |
š Link do arquivo no Lucidchart
A utilizaĆ§Ć£o de filas permitem desacoplar vĆ”rios componentes da aplicaĆ§Ć£o.
Cada componente somente precisa se conectar ao broker, e pode permanecer sem necessidade de conhecer a existĆŖncia, localizaĆ§Ć£o ou detalhes da implementaĆ§Ć£o de outros componentes.
A Ćŗnica coisa que precisa ser compartilhada entre os componentes Ć© o protocolo de mensagens.
š DocumentaĆ§Ć£o oficial do RabbitMQ
š Imagem oficial no Docker
š Tutorial de download do RabbitMQ
-
Broker Server: Processo do lado do servidor, responsĆ”vel por gerenciar a publicaĆ§Ć£o, assinatura e entrega das mensagens aos clientes.
-
Broker Client API: Ć disponibilizado em um package especĆfico para cada linguagem (JavaScript, Java, Go, etc), fornecendo uma API para acessar o broker, a partir de aplicaƧƵes clientes.
O Cognito Ć© um serviƧo da Amazon fornece autenticaĆ§Ć£o, autorizaĆ§Ć£o e gerenciamento de usuĆ”rios para aplicaƧƵes Web e mĆ³veis. Os usuĆ”rios podem fazer login diretamente com um nome de usuĆ”rio e uma senha ou por meio de terceiros, como o Facebook, a Amazon, o Google ou a Apple.
Etapa 1 - o usuĆ”rio do aplicativo faz login por meio de um grupo de usuĆ”rios e recebe tokens desse grupo apĆ³s uma autenticaĆ§Ć£o bem-sucedida;
Etapa 2 - Em seguida, a aplicaĆ§Ć£o troca os tokens do grupo de usuĆ”rios por credenciais da AWS por meio de um grupo de identidades;
Etapa 3 - Por fim, o usuĆ”rio da aplicaĆ§Ć£o pode usar essas credenciais para acessar rotas privadas da API.
š Mais informaƧƵes sobre o Cognito
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
š Link oficial do serviƧo
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.
- 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.
DescriĆ§Ć£o | Data de modificaĆ§Ć£o | VersĆ£o | Link de download |
---|---|---|---|
Segunda versĆ£o do documento | 01 de abril de 2022 | v2 | Download |
š Download do arquivo do Astah
DIAGRAMA DETALHADO
DescriĆ§Ć£o | Data de modificaĆ§Ć£o | VersĆ£o | Link de download |
---|---|---|---|
Primeira versĆ£o do documento | 04 de abril de 2022 | v1 | Download |
JSON
{
"USERS": [
{
"id": 1,
"name": "Vanessa"
},
{
"id": 2,
"name": "Tiago"
}
],
"POINTS": [
{
"id": 1,
"user_id": 1,
"point": "21-03-2022 13:34"
},
{
"id": 2,
"user_id": 2,
"point": "21-03-2022 13:37"
}
],
"SCALES": [
{
"id": 100,
"name": "HorƔrio completo"
},
{
"id": 200,
"name": "HorĆ”rio meio dia manhĆ£"
},
{
"id": 300,
"name": "HorƔrio meio dia Tarde"
}
],
"BREAKS": [
{
"id": 1,
"scale_id": 100,
"time_start": "08:00",
"time_end": "12:00"
},
{
"id": 2,
"scale_id": 100,
"time_start": "13:00",
"time_end": "17:00"
},
{
"id": 3,
"scale_id": 200,
"time_start": "08:00",
"time_end": "12:00"
},
{
"id": 4,
"scale_id": 300,
"time_start": "13:00",
"time_end": "17:00"
}
],
"NOTIFICATIONS": [
{
"id": 1,
"user_id": 1,
"notification": "Vanessa efetuou uma marcaĆ§Ć£o de ponto!",
"created_at": "21-03-2022 13:34"
},
{
"id": 1,
"user_id": 2,
"notification": "Tiago efetuou uma marcaĆ§Ć£o de ponto!",
"created_at": "21-03-2022 13:37"
}
]
}
Path | MĆ©todo | Token | Role | DescriĆ§Ć£o |
---|---|---|---|---|
USER | ||||
/account | GET | ALL | Efetua login | |
/account | POST | ALL | Cria um usuƔrio | |
/password-recover | POST | ALL | Recupera a senha | |
/users | GET | š„ | ADMIN | Lista todos os usuĆ”rios |
/users/{id} | GET | š„ | ADMIN | Exibe um usuĆ”rio |
/users/{id} | DELETE | š„ | USER | Deleta um usuĆ”rio |
/users/{id} | PUT | š„ | USER | Edita um usuĆ”rio |
/user-status-toggler/{id} | PATCH | š„ | ADMIN | Altera o status do usuĆ”rio |
/find-user?name={name}... | GET | š„ | ADMIN | Busca por usuĆ”rio |
SCALE | ||||
/scales | GET | š„ | ADMIN | Lista as ecalas |
/scales | POST | š„ | ADMIN | Cria uma escala |
/scales/{id} | PUT | š„ | ADMIN | Altera uma escala |
/scales/{id} | DELETE | š„ | ADMIN | Delete uma escala |
/scales/{id} | GET | š„ | USER | Exibe uma escala |
USER/SCALE | ||||
/manager-user-escale | GET | š„ | ADMIN | Lista usuĆ”rios e ecalas |
/manager-user-escale/{1} | UPDATE | š„ | ADMIN | Editar escalas do usuĆ”rio |
/manager-user-escale/{1} | DELETE | š„ | ADMIN | Deleta escala do usuĆ”rio |
POINT | ||||
/points | POST | š„ | USER | Cria um ponto |
REPORT | ||||
/reports | GET | š„ | USER | Exibe o relatĆ³rio |
Endpoints da API Rest
Endponts do Frontend
O Swagger Ć© um framework composto por diversas ferramentas que, independente da linguagem, auxilia a descriĆ§Ć£o, consumo e visualizaĆ§Ć£o de serviƧos de uma API REST.
š Link do Swagger de QA
š Link do Swagger de ProduĆ§Ć£o
š Link oficial da documentaĆ§Ć£o do Swagger
DescriĆ§Ć£o | Data de modificaĆ§Ć£o | VersĆ£o | Link de download |
---|---|---|---|
Primeira versĆ£o do documento | 03 de abril de 2022 | v1 | Download |
š Download do arquivo do Astah
Requisitos funcionais
- O USUĆRIO/ADMIN deve poder efetuar o login/logout;
- O USUĆRIO deve poder se cadastrar;
- O USUĆRIO deve poder alterar seus dados (nome);
- O USUĆRIO deve poder alterar sua senha;
- O USUĆRIO/ADMIN deve poder recuperar sua senha;
- O ADMIN deve poder visualizar os usuƔrios do sistema;
- O ADMIN deve poder deletar um usuƔrio do sistema;
- O ADMIN deve poder desabilitar/habilitar um usuƔrio do sistema;
- O ADMIN deve poder buscar por usuƔrios de forma paginada.
- O ADMIN deve poder listar as escalas;
- O ADMIN deve poder cadastrar uma escala;
- O ADMIN deve poder alterar uma escala;
- O ADMIN deve poder deletar uma escala;
- O USUĆRIO deve poder visulizar uma escala.
- O ADMIN deve poder visualizar uma listagem com usuƔrios e escalas associadas;
- O ADMIN deve poder associar uma usuƔrio a uma escala;
- O ADMIN deve poder desassociar um ou vƔrios usuƔrios a uma escala.
- O USUĆRIO deve poder cadastrar um ponto.
- O USUĆRIO deve poder gerar um relatĆ³rio de pontos.
O Gitflow Ć© um fluxo de trabalho que auxilia o desenvolvimento contĆnuo de software entre a equipe envolvida.
š Mais informaƧƵes
- 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)
* 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
Conventional Commits Ć© uma convenĆ§Ć£o de mensagens de commits. Essa convenĆ§Ć£o descrevendo os recursos, correƧƵes e alteraƧƵes importantes feitas nas mensagens.
Ć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. |
# Exemplo 1
git commit -m "šŖ² fix: corrige bug da listagem de usuĆ”rios."
# Exemplo 2
git commit -m "āļø feat: cria o mĆ³dulo de pontos."
š Mais informaƧƵes
O Sonarlint Ć© um plugin detector, em tempo real, de cĆ³digos mal escritos, que geram dificuldades de manutenĆ§Ć£o, bugs e vulnerabilidades. O SonarLint possui tambĆ©m as seguintes categoriazaƧƵes de cĆ³digos: Minor, Major, Critical e Blocker.
š Mais informaƧƵes
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.
{
"semi": true,
"tabWidth": 4,
"printWidth": 90,
"singleQuote": true,
"trailingComma": "es5"
}
š Link oficial
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
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.
Fontes de referĆŖncias
š Curso na Udemy sobre NestJs, RabbitMQ e Cognito
š Curso na Udemy sobre VueJs e Vuetify
š Github privado sobre Vuetify
š Curso na Udemy sobre VueJs
š Artigo na Medium criando uma API Rest em NestJs
š Exemplo de uma API Rest NestJs de AutorizaĆ§Ć£o e AutenticaĆ§Ć£o com JWT
Ā© Documento de autoria de EnĆ©as Almeida.