Ataide / mm2-laravel-test

Teste técnico de desenvolvimento de uma APi utilizando Laravel.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

MM2 Softawre - Defafio técnico.

Laravel Logo

Build Status Total Downloads Latest Stable Version License

Instrução de Instalação

Ferramentas e versões utilizadas:

  • NodeJs v16.20.0
  • docker v20.10.22
  • docker-compose v2.14.2

Depois de fazer o clone do projeto, podemos ver que a pasta vendor foi adicionado ao repositório, favor desconsiderar em uma eventual analise técnica, isso só deu pra facilitar o levante dos containers que e nosso único comando a ser dado.

Dentro da pasta do projeto:

$ docker-compose up -d --build

Depois de instalar os containers, devemos rodas as migrations com o comando:

$  ./vendor/bin/sail artisan migrate

Agora devemos rodar os seeds.

$ ./vendor/bin/sail artisan db:seed

Agora podemos acessar o sistema que está disponivel em:

Já o painel do Rabbitmq está disponível em:

Na Pasta raiz do projeto tem a collection do postman com as rotas e seus payload.

Sobre o desenvolvimento

Fico feliz em poder novamente ter um contato com esse framework fantástico. A Aplicação foi iniciada de forma padrão seguindo as sugestões da documentação ofical do laravel para o started kit.

Features:

  • Autenticação (via Token usando JWT).
  • Listagem de colaboradores.
  • Listagem de escalas de trabalho.
  • Cadastro de uma escala.
  • Cadastro de um colaborador.
  • Edição de dados de um colaborador.
  • Exclusão de um colaborador(hard delete).
  • Deve ser possível também buscar colaboradores pelo nome, documento, matrícula.
  • Utiliza banco de dados relacional, mysql.
  • As únicas rotas públicas da aplicação deverá ser o login
  • Cada colaborador só poderá ter uma escala vinculada
  • Desafio extra (Fila com RabbitMq)
  • Receber um registro de ponto com as seguintes informações:
    • Horário do registro
    • Latitude e longitude do registro(Por GeoLocalizacao ou manual.)
    • Enviar para uma fila e depois ser consumida e gravado no banco de dados:
    • Foto (selfie) do registro - opcional
  • Você pode utilizar um endpoint na sua API que irá enviar as informações de registro para uma fila RabbitMQ.
  • Essa fila será consumida e as informações gravadas no banco de dados que pode ser no seu banco relacional da aplicação,
  • Crie um desenho da sua arquitetura para apresentar sua solução
  • Dê preferência para rodar tudo com um docker compose ou equivalente

Teste

Para rodar os teste bastas executar o comando:

$ ./vendor/bin/sail test

Extra - Queue - RabbitMq

O registro de ponto nunca é adicionado diretamente no banco de dados pela api nem pelo front. O metodo store dos controllers tanto da api quanto do front enviam essa as informações do registro de ponto para um Job Queueable que adiciona a uma fila do RabbitMQ e existe uma rota da api "/api/start-queue" que chama um "worker" pra ler essa fila e gravar no banco de dados. Foi realizado essa abordagem simples para exemplificar o propósito do teste.

Considerações Finais

Desde de já agradeço a oportunidade de participar do processo seletivo, e ficarei feliz em poder explicar todo o desenvolvimento do projeto e todo o functionamento dele e as decisões tomadas durante todo o processo.

Agradeço atenção. Ataide Bastos.

About

Teste técnico de desenvolvimento de uma APi utilizando Laravel.


Languages

Language:PHP 55.8%Language:JavaScript 34.0%Language:Blade 10.2%Language:CSS 0.0%