Uma API feita com NestJS para controle de estacionamentos.
Link para a descrição do desafio.
API construída em cima do framework NestJS, com o objetivo de gerenciar estacionamentos para carros e motos.
$ yarn install | npm install
Crie um arquivo .env
com os seguintes dados:
DB_HOST='your_db_host'
DB_PORT=your_db_port
DB_USERNAME='your_db_username'
DB_PASSWORD='your_db_password'
DB_DATABASE='your_db_database'
JWT_SECRET='your_jwt_secret'
Porta padrão: 3000
# development
$ yarn start
# watch mode
$ yarn start:dev
# production mode
$ yarn start:prod
# unit tests
$ yarn test
# test coverage
$ yarn test:cov
GET /api
Para ver a documentação de todos os endpoints, basta acessar a interface do Swagger.
POST /auth/login
Simula um processo de login e, caso o valor da senha seja "1234"
, retorna um access_token
.
Body
{
"password": "1234"
}
Response
{
"access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOjEsInVzZXJuYW1lIjoidXNlciAxIiwiaWF0IjoxNjg4NjU1NTYxLCJleHAiOjE2ODg3NDE5NjF9.WTyfBXBCjVycPv9UOKKWcT0gC1DwzGBpHnQ3Rz87L8M"
}
POST /enterprise
Cadastra uma empresa (estacionamento).
Body
{
"name": "Teste",
"cnpj": "00000000000000",
"phone": "99999999999",
"address": "Rua Teste",
"motorbikeParkingSpots": 10,
"carParkingSpots": 5
}
Response
{
"name": "Teste",
"cnpj": "00000000000000",
"phone": "99999999999",
"address": "Rua Teste",
"motorbikeParkingSpots": 10,
"carParkingSpots": 5,
"id": 1
}
POST /vehicle
Cadastra um veículo.
Body
{
"brand": "Marca teste",
"model": "Modelo teste",
"color": "Branco",
"plate": "aaa1a11",
"type": "car" // "car" | "motorbike"
}
Response
{
"brand": "Marca teste",
"model": "Modelo teste",
"color": "Branco",
"plate": "aaa1a11",
"type": "car",
"id": 1
}
POST /record/entry
Cadastra a entrada de um veículo em um estacionamento.
Body
{
"vehicle": 1,
"enterprise": 1,
"timestamp": "2023-08-02T10:00:05.000Z"
}
Response
{
"vehicle": 1,
"enterprise": 1,
"entry_timestamp": "2023-08-02T10:00:05.000Z",
"exit_timestamp": null,
"id": 1
}
POST /record/exit
Adiciona o horário de saída a um registro.
Body
{
"timestamp": "2023-08-02T10:15:30.000Z",
"id": 1
}
Response
{
"affected": 1
}
GET /record/summary
Retorna o resumo da quantidade de entradas e saídas totais de um estacionamento.
Body
{
"enterpriseId": 1
}
Response
{
"entries": 10,
"exits": 5
}
GET /record/summary/hour
Retorna o resumo da quantidade de entradas e saídas de um estacionamento agrupados por hora.
Body
{
"enterpriseId": 1
}
Response
[
{
"hour": "2023-08-02T04:00:00.000Z",
"entries": 4,
"exits": 1
},
{
"hour": "2023-08-02T05:00:00.000Z",
"entries": 2,
"exits": 5
}
]