- Você deve ter um virtual environment ativado:
- Na pasta do projeto rode:
python -m venv venv
- Para ativar o ambiente virtual rode:
source venv/bin/activate
- Para instalar as dependências no ambiente virtual rode:
pip install -r requirements.txt
- Para iniciar o projeto na porta 5002 rode:
python manage.py runserver 5002
- Pronto! A API já está rodando.
- Na pasta do projeto rode:
POST /api/accounts/
- criando um admin
// REQUEST
{
"username": "admin",
"password": "1234",
"is_superuser": true,
"is_staff": true
}
// RESPONSE STATUS -> HTTP 201
{
"id": 1,
"username": "admin",
"is_superuser": true,
"is_staff": true
}
- Endpoint para realizar o login e obter um token de autenticação.
POST /api/login/
- obtendo um token para o usuário
// REQUEST
{
"username": "admin",
"password": "1234"
}
// REQUEST STATUS -> HTTP 200
{
"token": "0f500a8c2f2f8d5e77ad86b3a8d373a0528d8812"
}
-
Níveis representam um andar dentro de um estacionamento.
-
As informações para criação de um nível devem especificar a quantidade de vagas para cada tipo de veículo (carro e moto).
-
As informações para criação de um nível devem especificar uma fill_priority, ou seja, uma prioridade de preenchimento. Este valor será utilizado nas regras de negócio, para que o sistema consiga definir qual a próxima vaga a ser preenchida.
-
Somente um usuário com um token de administrador pode fazer o request para criar um nível POST /api/levels/.
POST /api/levels/
- criando um novo nível
// REQUEST
// Header -> Authorization: Token <token-do-admin>
{
"name": "floor 1",
"fill_priority": 2,
"motorcycle_spaces": 20,
"car_spaces": 50
}
// RESPONSE STATUS -> HTTP 201
{
"id": 1,
"name": "floor 1",
"fill_priority": 2,
"available_spaces": {
"available_motorcycle_spaces": 20,
"available_car_spaces": 50
}
}
-
A quantidade disponível de vagas (para cada tipo de veículo) é exibida quando o servidor envia informações sobre os níveis.
-
Há uma rota específica para listar todos os níveis
GET /api/levels/
- listando os níveis
// RESPONSE STATUS -> HTTP 200
[
{
"id": 1,
"name": "floor 1",
"fill_priority": 5,
"available_spaces": {
"available_motorcycle_spaces": 20,
"available_car_spaces": 50
}
},
{
"id": 2,
"name": "floor 2",
"fill_priority": 3,
"available_spaces": {
"available_motorcycle_spaces": 10,
"available_car_spaces": 30
}
}
]
-
Há uma equação para calcular o valor a ser pago para cada veículo.
-
A equação tem o seguinte formato:
Onde:
-
a
- representa o coeficiente linear -
b
- o coeficiente angular da equação. -
t
- o número de horas que o veículo permaneceu no estacionamento -
V
- é o valor a ser pago (em centavos) -
É necessário que um usuário com token de administrador forneça os coeficientes para a equação que determina o valor a ser pago por cada veículo.
POST /api/pricings/
- criando uma nova precificação:
// REQUEST
// Header -> Authorization: Token <token-do-admin>
{
"a_coefficient": 100,
"b_coefficient": 100
}
// RESPONSE STATUS -> HTTP 201
{
"id": 1,
"a_coefficient": 100,
"b_coefficient": 100
}
-
No momento de determinar o valor a ser pago para cada veículo, o sistema utiliza a última precificação inserida para fazer o cálculo.
-
Se não houver nenhuma precificação salva no sistema, o sistema não criará registros de entrada no estacionamento. Nesse caso será devolvida uma resposta com código HTTP 404.
- Para criar um registro de entrada de veículo no estacionamento, deve-se utilizar um request POST na url /api/vehicles/.
POST /api/vehicles/
- criando um novo registro de entrada:
// REQUEST
{
"vehicle_type": "car",
"license_plate": "AYO1029"
}
// RESPONSE STATUS -> HTTP 201
{
"id": 1,
"license_plate": "AYO1029",
"vehicle_type": "car",
"arrived_at": "2021-01-25T17:16:25.727541Z",
"paid_at": null,
"amount_paid": null,
"space": {
"id": 2,
"variety": "car",
"level_name": "floor 1"
}
}
-
As únicas informações necessárias para completar o POST são o vehicle_type (tipo de veículo) e a license_plate (placa). O resto das informações são determinadas pelo próprio sistema.
-
No momento da criação do registro de entrada, será atribuída uma vaga de acordo com o tipo do veículo e a prioridade de preenchimento de cada andar. O sistema escolherá uma vaga qualquer do andar que tiver o menor valor de fill_priority. Se houver 2 ou mais níveis com o mesmo valor de fill_priority, o sistema terá liberdade para optar por qualquer um deles.
-
Se não houver nenhum nível ao cadastrar um registro de entrada, o sistema não poderá criar o registro de entrada no estacionamento. Nesse caso será devolvida uma resposta com código HTTP 404.
-
Se não houver vagas disponíveis, o sistema não poderá criar registros de entrada no estacionamento. Nesse caso será devolvida uma resposta com código HTTP 404.
PUT /api/vehicles/<int:vehicle_id>/
- registrando a saída e pagamento do veículo:
// REPONSE STATUS -> HTTP 200
{
"license_plate": "AYO1029",
"vehicle_type": "car",
"arrived_at": "2021-01-21T19:36:55.364610Z",
"paid_at": "2021-01-21T19:37:23.016452Z",
"amount_paid": 100,
"space": null
}
-
Para pagar o estacionamento de um determinado veículo, basta enviar um request
PUT /api/vehcles/<int:vehicle_id>/
colocando o vehicle_id como parâmetro URL. -
As informações
paid_at
eamount_paid
serão calculadas pelo próprio sistema. -
Este request deve ocasionar a liberação da vaga ocupada pelo veículo. Portanto, deve ser possível observar
space: null