Skip to content
/ mypoint Public

šŸ“œ MyPoint Ć© um sistema de registro de pontos de funcionĆ”rios, utilizando filas com o RabbitMq.

Notifications You must be signed in to change notification settings

venzel/mypoint

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 

Repository files navigation

MyPoint

NPM

šŸ“œ Sobre

MyPoint Ʃ um sistema de registro de pontos de funcionƔrios, utilizando filas com o RabbitMQ.
šŸ‘‰ MyPoint

Qual problema resolve?

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.

šŸ‘¤ Autores

Foto Nome Ativo Dt. inativo AtribuiƧƵes
EnĆ©as EnĆ©as Almeida šŸ”„ - Manager, Arquiteto, FullStack Developer

āš“ Links

šŸ‘‰ 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

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 - 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%

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

Backend

NestJs Typescript Javascript Jest RabbitMq Cognito

  • 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

PersistĆŖncia dos dados

Postgres MongoDB Docker

  • Postgres
  • MongoDB

* Os bancos de dados sĆ£o provenientes de containers do docker.

TypeORM

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
šŸ‘‰ DocumentaĆ§Ć£o oficial do TypeORM

Frontend

VueJs Vuetify Javascript

  • 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

Backend/Frontend

Docker Codeship

  • Docker
  • Codeship (CI/CD)

šŸ‘‰ Link para a faq do Docker
šŸ‘‰ Link para a faq do Codeship

Infraestrutura

Docker PM2 Docker Certbot

  • Nginx
  • PM2
  • Docker
  • Certbot

šŸ‘‰ Link para faq do Nginx
šŸ‘‰ Link para faq do PM2
šŸ‘‰ Link para faq do Docker
šŸ‘‰ Link para faq do Certbot

Recursos e tƩcnicas utilizadas

  • 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

Arquitetura

Arquitetura do sistema

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


Filas com o RabbitMQ

RabbitMq

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

Um broker se divide em:

  • 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.

Modelo de comunicaĆ§Ć£o entre Publishes/Subscribes

Diagrama de bloco

Modelo de comunicaĆ§Ć£o entre Request/Response

Diagrama de bloco


Cognito (AutenticaĆ§Ć£o e AutorizaĆ§Ć£o)

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.

Como funciona o Cognito?

Cognito arquitetura

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


EstratƩgia de captura de erros com o Sentry

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:

Sentry erro

šŸ‘‰ Mais informaƧƵes sobre o Sentry
šŸ‘‰ Link oficial do serviƧo


Arquitetura 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.

Diagrama de relacionamentos

Diagrama de relacionamentos

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

Diagrama de relacionamentos

DescriĆ§Ć£o Data de modificaĆ§Ć£o VersĆ£o Link de download
Primeira versĆ£o do documento 04 de abril de 2022 v1 Download

šŸ‘‰ Download do arquivo do Astah

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"
        }
    ]
}

Endpoints do API Gateway (Proxy)

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

Download do projeto do Insomnia

Run in Insomnia}

Swagger

Swagger

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

Diagrama de caso de uso

Diagrama de caso de uso

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

UsuƔrio

  1. O USUƁRIO/ADMIN deve poder efetuar o login/logout;
  2. O USUƁRIO deve poder se cadastrar;
  3. O USUƁRIO deve poder alterar seus dados (nome);
  4. O USUƁRIO deve poder alterar sua senha;
  5. O USUƁRIO/ADMIN deve poder recuperar sua 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;
  9. O ADMIN deve poder buscar por usuƔrios de forma paginada.

Escala

  1. O ADMIN deve poder listar as escalas;
  2. O ADMIN deve poder cadastrar uma escala;
  3. O ADMIN deve poder alterar uma escala;
  4. O ADMIN deve poder deletar uma escala;
  5. O USUƁRIO deve poder visulizar uma escala.

UsuƔrio/Escala

  1. O ADMIN deve poder visualizar uma listagem com usuƔrios e escalas associadas;
  2. O ADMIN deve poder associar uma usuƔrio a uma escala;
  3. O ADMIN deve poder desassociar um ou vƔrios usuƔrios a uma escala.

UsuƔrio/Ponto

  1. O USUƁRIO deve poder cadastrar um ponto.

UsuĆ”rio/RelatĆ³rio

  1. O USUƁRIO deve poder gerar um relatĆ³rio de pontos.

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

Gitflow

  • 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

PadronizaĆ§Ć£o de commits (Conventional Commits)

Branch

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

# 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

Lint com o Sonarlint

SonarLint

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

Prettier

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.

{
    "semi": true,
    "tabWidth": 4,
    "printWidth": 90,
    "singleQuote": true,
    "trailingComma": "es5"
}

šŸ‘‰ Link oficial

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:

Gitflow

šŸ‘‰ Link do arquivo no Lucidchart

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.


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.