Skip to content

Git-Lucas/Back-End_Challenge_20210221

Repository files navigation

Back-End Challenge 20210221

O projeto se refere ao desenvolvimento de uma REST API, com importação de dados automática, diária e limitada, a partir de outra API (base de aproximadamente 7 mil registros e 11 tabelas), que importa e exibe os dados de forma paginada; e protegida com token de autenticação Bearer. Tecnologias utilizadas: C#, .NET 7, ASP.NET API, Authentication Jwt Bearer, Unit Test Controller, Entity Framework, SQL Server, Docker, Clean Architecture, Hexagonal Architecture.

Getting Started

  1. Para criar e inicar os contêiners necessários à aplicação, no caminho "Back-End_Challenge_20210221", rode:

    docker-compose up
  2. Acesse a página inicial da aplicação em "http://localhost:5211";

  3. Para geração do token de autenticação, necessário para utilização do LaunchersController, acesse o Swagger em "http://localhost:5211/swagger/index.html", e acesse o endpoint que gera um token válido ("validToken"). Posteriormente, em "Authorize", cole o token:

    Bearer {token}

Aplicação

Sistema CRON

O sistema de atualização dos dados foi feito utilizando ferramentas nativas do .NET, que cria / atualiza a base existente, seguindo as seguintes regras:

  • Os dados são cadastrados com requisições paginadas e limitadas da API externa: 100 registros a cada 5 minutos;
  • O limite de requisições são 2000 ao dia;

API

Modelo de Dados:

Para a definição do modelo, este arquivo JSON foi consultado, para definição dos campos e tabelas utilizados no projeto. Além destes, 2 campos adicionais eram criados para controle interno dos "launchers":

  • imported_t: campo do tipo Date com a dia e hora que foi importado;
  • status: campo do tipo Enum com os possíveis valores "Draft" (importado), "Trash" (apagado na base de dados interna) e "Published" (editado na base de dados interna);

Endpoints REST API

  • GET /: Retornar uma mensagem "REST Back-end Challenge 20201209 Running"
  • PUT /launchers/:launchId: Será responsável por receber atualizações realizadas
  • DELETE /launchers/:launchId: Remover o launch da base
  • GET /launchers/:launchId: Obter a informação somente de um launch da base de dados
  • GET /launchers: Listar os launchers da base de dados de maneira paginada

Segurança

Foi utilizado o JWT (Json Web Token), para realizar as autenticações das requisições à API de Launchers.

Paginação

Resposta da API para visualização ou edição de registro excluído da base de dados:

Testes

Um projeto "Test" foi adicionado com referência ao projeto principal, para adição do arquivo responsável pelo teste unitário do "LaunchersConttroller".

Docker

Aplicação, banco de dados e ferramentas de observabilidade rodando em Container Docker.

Observabilidade

A observabilidade foi adicionada à aplicação através da integração com Prometheus e Grafana. Com isso, é possível monitorar métricas da aplicação e visualizar gráficos em dashboards.

Configuração Prometheus

O Prometheus foi adicionado à aplicação para coletar e expor métricas através do endpoint padrão /metrics.

No arquivo docker-compose.yml, foi configurado um serviço do Prometheus que coleta as métricas da aplicação e as expõe para o Grafana.

Arquivo de configuração (prometheus/prometheus.yml):

O Prometheus coleta métricas da aplicação no endpoint /metrics.

Configuração Grafana

O Grafana foi configurado para visualização das métricas coletadas pelo Prometheus. Dashboards pré-configurados foram adicionados para facilitar a visualização das principais métricas.

Dashboards e Datasources

  • Os arquivos de provisionamento foram incluídos para configurar automaticamente as fontes de dados e dashboards no Grafana.
  • Fonte de dados: Prometheus.
  • Porta do Grafana: 3000.

Acesse o Grafana através de http://localhost:3000 e utilize as seguintes credenciais padrão:

  • Usuário: admin
  • Senha: admin

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors