Categorygithub.com/FabricioCosati/onfly-test
repository
0.0.0-20241111124414-1a22373df7f5
Repository: https://github.com/fabriciocosati/onfly-test.git
Documentation: pkg.go.dev

# Packages

No description provided by the author
No description provided by the author

# README

Teste Técnico Onfly

Este é um microserviço feito em GO utilizando as tecnologias:

  • Gin Framework para montar a aplicação REST
  • MySQL como banco de dados da aplicação
  • Docker para montar os containers da aplicação
  • OpenTelemetry para montar os logs de observabilidade da aplicação

Como executar

Configurando o ambiente

Será necessário o Docker para que possa subir a aplicação sem problemas relacionados a sistema operacional ou o GO instalado na máquina.

Ter o Postman instalado não é obrigatório, mas será útil para testar as requisições da aplicação mais facilmente.

Variáveis de ambiente

É necessário ter um arquivo .env.local na raiz do projeto, para que ele reconheça as variáveis de ambiente necessárias para o funcionamento adequado da aplicação.

Você pode utilizar os seguintes valores no .env.local para poder iniciar a aplicação:

LOGS_DIR=logs
TIME_ZONE=America%2FSao_Paulo
SERVER_PORT=:8080
ONFLY_DB_USER=user
ONFLY_DB_PASS=pass
ONFLY_DB_HOST=onfly-db
ONFLY_DB_PORT=3306
ONFLY_DB_NAME=onflydb

O LOGS_DIR será a pasta que ficará os logs de operação e observabilidade, nesse caso terá uma pasta logs na raiz do projeto

O TIME_ZONE será a data padrão do sistema, neste caso utilizando o horário de São Paulo

O SERVER_PORT será o será a porta para rodar o servidor da aplicação (Porta padrão do server, verifique se está disponível para que a aplicação rode sem problemas)

O ONFLY_DB_USER será o usuário do banco de dados

O ONFLY_DB_PASS será a senha do banco de dados

O ONFLY_DB_HOST será o host do banco de dados, nesse caso vamos utilizar o host da imagem do docker que será criada

O ONFLY_DB_PORT será a porta do banco de dados (Porta padrão do banco, verifique se está disponível para que a aplicação rode sem problemas)

O ONFLY_DB_NAME será o nome do banco de dados que vamos utilizar

Executando o Docker

O Docker facilitará para que o projeto seja executado corretamente, pois com ele não será necessário:

  • Ter o GO instalado. O docker já configurará corretamente do Docker Hub
  • Ter o AIR instalado, que é uma ferramenta de Hot Reload muito útil em ambiente de desenvolvimento, ajudando a reiniciar o servidor automaticamente.
  • Ter o MySQL instalado. O docker já configurará a versão correta diretamente do Docker Hub
  • Criar a tabela no banco. O docker também rodará uma migrations que criará a tabela automaticamente, sem que seja necessário fazer isso manualmente

OBS: O arquivo docker-compose está usando as portas 8080 para o servidor e 3306 para o banco de dados, verifique se essas portas estão livres para que a aplicação não tenha problemas.

Será necessário apenas rodar o comando abaixo para ter a aplicação funcionando.

  docker compose up -d

Pronto! Com isso a aplicação já está rodando.

Testes

O projeto possui testes unitários da Repository para verificar se as operações com o banco utilizando GORM estão funcionando perfeitamente, além do mais utilizando go-sqlmock que mocka o banco de dados sem que seja necessário ter uma conexão para funcionar.

Há também o teste do Middleware de logs, neste caso o do log de operações, onde o middleware pega as informações da requisição e salva em uma pasta para futuras análises. Este teste verifica se o LOG foi salvo corretamente na pasta e se os atributos estão corretos.

Por fim tem os testes da Controller onde uma série de verificações é realizada, como ao criar um pedido de viajem por exemplo, o teste engloba tanto o caso de sucesso ao retornar 201 com o objeto na API, quanto o caso de erro, como o de validação, neste caso retornando erro 422 pela API. Há testes da controller para os 4 endpoints do projeto.

Para rodar os testes apenas digite no terminal

  go test -v ./tests

Para que todos os testes sejam executados.

Caso queira rodar apenas de um arquivo em específico, rode

  go test -v ./tests/repository_test.go 

Informações adicionais

O microserviço possui 4 endpoints como foi solicitado na descrição da tarefa

POST - /api/order-service POST

PATCH - /api/order-service/{id} PATCH

GET - /api/order-service/{id} GET ID

GET - /api/order-services?status={status} GET ALL

Exemplo do corpo da requisição POST:

{
  "requester": "Light Yagami",
  "destination": "Tóquio, Japão",
  "goingDate": "2024-12-22",
  "returnDate": "2025-01-20"
}

No caso do POST o ID é automaticamente gerado e o status por padrão será "requested" para não ter o risco de criar um pedido de viajem que já venha aprovado ou cancelado.

Exemplo do corpo da requisição PATCH:

{
  "status": "approved"
}

Também estarei disponibilizando a collection do postman e a variável de ambiente, para facilitar na hora das requisições!

collection