Skip to content

Web API REST para controle de estacionamento (Teste Parafuzo)

Notifications You must be signed in to change notification settings

parafuzo/test-back-henrique-marques

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

22 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ParkingControl

Web API REST em .NET 5 para controle de estacionamento

API Web criada a partir de desafio de processo seletivo da empresa Parafuzo, que atua com plataforma de intermediação de serviços de facilities management em todo o Brasil.

Para rodar a aplicação, precisa estar com docker desktop instalado e funcionando e rodar os seguintes comandos:

  • docker network create mongoparking
  • docker run -d --rm --name mongo -p 27017:27017 -v mongodbdata:/data/db -e MONGO_INITDB_ROOT_USERNAME=mongoadmin -e MONGO_INITDB_ROOT_PASSWORD=Pass#word1 --network=mongoparking mongo
  • docker run -it --rm -p 8080:80 é MongoDBSettings:Host=mongo -e MongoDBSettings:Password=Pass#word1 --network=mongoparking hfvmarques/parkingcontrol:v4

Talvez dê alguns problemas de timeout quando rodar o comando do mongo, mas é só rodar novamente que ele retoma de onde parou o download;

A aplicação vai rodar em http://localhost:8080/parking;

Endpoints:

  • GET /parking : retorna todas as "reservas";
  • GET /parking/id : retorna a reserva a partir do id;
  • GET /parking?plate=AAA-1234 : retorna histórico de reservas da placa informada;
  • POST /parking { "plate": "AAA-1234" } : insere uma reserva com a placa informada;
  • PUT /parking/id/pay : marca fim da reserva e registra pagamento;
  • PUT /parking/id/out : registra saída do veículo;
  • GET /health/live : verifica a saúde da aplicação;
  • GET /health/ready : verifica a saúde do mongodb;
  • DELETE /parking/id : deleta a reserva a partir do id informado;

Observações:

  • A API foi construída em .NET 5, que é a linguagem/framework que possuo mais familiaridade;
  • O formato dos objetos ficaram da seguinte forma: { "id": 1, "plate": "AAA-1234", "entryDate": "2021-10-25T01:59:43.5822553+00:00", "exitDate": null, "paid": false, "left": false }
  • Dito isso, eu realizei várias tentativas e testes porém não consegui que o método GET /parking?plate=AAA-1234 retorne naquele formato do desafio que vocês me enviaram;
  • Como solicitado pelo desafio, o método PUT /parking/id/out só registra a saída se o pagamento já tiver sido efetuado. Porém eu tentei mas também não consegui que ele emitisse uma mensagem. A regra é que o método simplesmente não faça nada caso não haja pagamento;
  • Método POST retorna mensagem "Não é um formato válido de placa", caso a placa não esteja no formato "AAA-1234";
  • Criei o método DELETE apenas para propósitos de desenvolvimento, para não ter que ficar excluindo o container do mongodb cada vez que precisasse dele vazio. Acredito que seja interessante que ele não exista em modo de produção;
  • Como solicitado no teste, a aplicação está rodando em container do docker, assim como o mongodb, porém não consegui, apesar de diversas tentativas, configurar o docker-compose para rodar os dois no mesmo container;

Foram construídos 13 testes unitários:

  • GetParkingAsync_WithUnexistingParking_ReturnsNotFound;
  • GetParkingAsync_WithExistingParking_ReturnsExpectedParking;
  • GetParkingsAsync_WithExistingParkings_ReturnsAllParkings;
  • GetParkingsAsync_WithMatchingPlates_ReturnsMatchingParkings;
  • GetParkings_WithExistingParkings_ReturnsAllParkings;
  • CreateParkingAsync_WithParkingToCreate_ReturnsCreatedParking;
  • UpdateParkingOutAsync_WithExistingParking_ReturnsNoContent;
  • UpdateParkingOutAsync_WithUnpaidParking_ReturnsNoContent;
  • UpdateParkingOutAsync_WithUnexistingParking_ReturnsNotFound;
  • UpdateParkingPayAsync_WithExistingParking_ReturnsNoContent;
  • UpdateParkingPayAsync_WithUnexistingParking_ReturnsNotFound;
  • DeleteParkingAsync_WithExistingParking_ReturnsNoContent;
  • DeleteParkingAsync_WithUnexistingParking_ReturnsNotFound;

About

Web API REST para controle de estacionamento (Teste Parafuzo)

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C# 98.2%
  • Dockerfile 1.8%