API de sistema para loja de veículos
License | MIT |
---|
Video demonstrativo 🎞️: https://www.youtube.com/watch?v=iAdb1s6fVd8
Online 🌐: https://uprevendas-api.herokuapp.com/api/
Requests Insominia: https://github.com/MikaelSantilio/uprevendas-api/blob/master/Insomnia_2021-01-30.json
A API representa um sistema de loja de veículos. As principais entidades são: Carro, Conta bancária, Compra e Venda. As classes de usuários cadastrados no sistema são: Cliente, Funcionário e Gerente.
Uma compra só pode ser realizada por um usuário Gerente
Para o registro de uma compra é necessário um Fornecedor (Que precisa ser um usuário Cliente), um Comprador (Que precisa ser um usuário Gerente), os dados válidos de um carro, o valor da compra e uma conta bancária com saldo suficiente.
Uma venda só pode ser realizada por um usuário Gerente ou usuário Funcionário
Para o registro de uma Venda é necessário um Vendedor (Que pode ser um usuário Gerente ou Funcionário), um carro disponível no estoque, uma conta bancária, o valor da venda e um Cliente com saldo suficiente.
api/carros/
Na listagem de carros, se o usuário estiver autenticado e for Gerente os links mostrados serão de detalhes, edição e exclusão do carro. Senão apenas o link de detalhes será mostrado.
{
"id": 2,
"brand": "Fiat",
"model": "Toro",
"version": "1.8 16V EVO FLEX ENDURANCE AT6",
"min_sale_value": 89890.0,
"links": [
{
"type": "GET",
"rel": "self",
"uri": "https://uprevendas-api.herokuapp.com/api/carros/2/"
},
{
"type": "PUT",
"rel": "carro_atualizacao",
"uri": "https://uprevendas-api.herokuapp.com/api/carros/2/"
},
{
"type": "DELETE",
"rel": "carro_exclusao",
"uri": "https://uprevendas-api.herokuapp.com/api/carros/2/"
}
]
}
api/contas-bancarias/
Na listagem de contas bancárias, se o usuário estiver autenticado e for Funcionário os links mostrados serão de detalhes e de relacionamentos com vendas e com compras. Se for Gerente serão mostrados além dos links do Funcionário os links de atualização e exclusão da conta bancária.
{
"id": 1,
"bank": "Banco do Brasil",
"balance": 503121.5,
"links": [
{
"type": "GET",
"rel": "self",
"uri": "https://uprevendas-api.herokuapp.com/api/contas-bancarias/1/"
},
{
"type": "GET",
"rel": "conta_compras",
"uri": "https://uprevendas-api.herokuapp.com/api/comprar/?bank_account=1"
},
{
"type": "GET",
"rel": "conta_vendas",
"uri": "https://uprevendas-api.herokuapp.com/api/vender/?bank_account=1"
},
{
"type": "PUT",
"rel": "conta_atualizacao",
"uri": "https://uprevendas-api.herokuapp.com/api/contas-bancarias/1/"
},
{
"type": "DELETE",
"rel": "conta_exclusao",
"uri": "https://uprevendas-api.herokuapp.com/api/contas-bancarias/1/"
}
]
}
api/perfil/
Na listagem de usuários, se o usuário que fez a request estiver autenticado e for Funcionário ou Gerente será mostrado os links de acordo com cada objeto da lista. Se o objeto da lista for Gerente será mostrado os links para a listagem das compras e para listagem das vendas dele.
Se for Funcionário será mostrado o link para a listagem das vendas dele.
Se for um objeto Cliente será mostrado o link para as compras e vendas que o objeto ele estava envolvido.
{
"id": 10,
"username": "adriana.sabrina",
"email": "adriana.sabrina@gmail.com",
"is_employee": false,
"is_customer": true,
"is_store_manager": false,
"links": [
{
"type": "GET",
"rel": "cliente_compras",
"uri": "https://uprevendas-api.herokuapp.com/api/comprar/?provider=10"
},
{
"type": "GET",
"rel": "cliente_vendas",
"uri": "https://uprevendas-api.herokuapp.com/api/vender/?customer=10"
}
]
}
api/compra/
Na listagem de compras, se o usuário estiver autenticado e for Funcionário ou Gerente será mostrado o link de detalhes da compra.
{
"created_at": "2021-01-28T21:11:07.838353-03:00",
"value": 260000.0,
"links": [
{
"type": "GET",
"rel": "self",
"uri": "https://uprevendas-api.herokuapp.com/api/comprar/1/"
}
]
}
api/venda/
Na listagem de vendas, se o usuário estiver autenticado e for Funcionário ou Gerente será mostrado o link de detalhes da venda.
{
"created_at": "2021-01-28T21:40:23.624668-03:00",
"value": 30000.0,
"links": [
{
"type": "GET",
"rel": "self",
"uri": "https://uprevendas-api.herokuapp.com/api/vender/1/"
}
]
}
api/carros
A listagem de carros é pública assim como a listagem de marcas (carros/marcas), modelos(carros/modelos) e caracteristicas pre-definidas(carros/choices) dos carros a fim da utilização em filtros e formulários.
A criação de marcas e modelos é permitida apenas a usuários do tipo Funcionário ou Gerente e a criação de carros diretamente por essa rota está permitida apenas ao Gerente.
api/contas-bancarias
A listagem de contas bancárias é permitida apenas a usuários do tipo Funcionário ou Gerente. A criação, edição e exclusão de contas está permitida apenas ao Gerente.
api/compra
A listagem de compras é permitida apenas a usuários do tipo Funcionário ou Gerente. O registro de compras está permitida apenas ao Gerente.
api/venda
A listagem e registro de vendas é permitida apenas a usuários do tipo Funcionário ou Gerente.
Os filtros disponíveis para listagem de carros são: 'brand', 'model', 'car_type', 'color' e 'transmission'
As ordenações disponíveis para listagem de carros são: 'min_sale_value', 'mileage', 'year' e 'version'
O filtro disponível para listagem de contas é: 'bank'
A ordenação disponível para listagem de contas é: 'balance'
Os filtros disponíveis para listagem de compras são: 'provider', 'car', 'buyer_for' e 'bank_account'
As ordenações disponíveis para listagem de compras são: 'value', 'created_at' e 'updated_at'
Os filtros disponíveis para listagem de vendas são: 'customer', 'car', 'seller' e 'bank_account'
As ordenações disponíveis para listagem de vendas são: 'value', 'created_at' e 'updated_at'
Os filtros disponíveis para listagem de usuários são: 'is_employee', 'is_customer', 'is_store_manager' e 'is_seller'
Utilizado JWT através da biblioteca Simple JWT
SIMPLE_JWT = {
'ACCESS_TOKEN_LIFETIME': timedelta(minutes=60),
'REFRESH_TOKEN_LIFETIME': timedelta(days=1),
'AUTH_HEADER_TYPES': ('JWT',),
'AUTH_TOKEN_CLASSES': ('rest_framework_simplejwt.tokens.AccessToken',),
}
A paginação na listagem de objetos foi definida como 5 por página.
A limitação de request para usuários não autenticados é de 50 por dia e para usuários autenticados é de 500 por dia.
"DEFAULT_THROTTLE_RATES": {
"anon": "50/day",
"user": "500/day"
}
A forma de documentação utilizada é Swagger, disponível no link: https://uprevendas-api.herokuapp.com/api/swagger/
Para rodar este projeto no modo de desenvolvimento, você vai precisar de um ambiente com Python 3.8.x instalado. Para usar o banco de dados, você vai precisar ter o PostgreSQL instalado ou rodando em um container.
- Clone o repositório e entre na pasta:
$ git clone https://github.com/MikaelSantilio/uprevendas-api
$ cd uprevendas-api
- Crie um ambiente virtual:
$ python3.8 -m venv <virtual env path>
- Ative o ambiente virtual que você acabou de criar:
$ source <virtual env path>/bin/activate
- Instale os pacotes de desenvolvimento local:
$ pip install -r requirements/local.txt
- Defina as variáveis de ambiente a seguir:
export DJANGO_DEBUG=True
export DJANGO_ALLOWED_HOSTS=127.0.0.1,0.0.0.0
export POSTGRES_HOST=<POSTGRES_HOST>
export POSTGRES_PORT=<POSTGRES_PORT>
export POSTGRES_DB=<DB_NAME>
export POSTGRES_USER=<POSTGRES_USER>
export POSTGRES_PASSWORD=<POSTGRES_PASSWORD>
export DATABASE_URL="postgres://${POSTGRES_USER}:${POSTGRES_PASSWORD}@${POSTGRES_HOST}:${POSTGRES_PORT}/${POSTGRES_DB}"
Para ajudar com as configurações das variáveis de ambiente, você tem algumas opções:
- Crie um arquivo
.env
na raíz do seu projeto e defina todas as variáveis necessárias dentro dele. Então você so precisa terDJANGO_READ_DOT_ENV_FILE=True
em sua máquina e todas as variáveis serão lidas.- Use um gerenciador de ambientes como o direnv
- Execute as migrações:
$ python manage.py migrate
- Rode o servidor de desenvolvimento:
$ python manage.py runserver 0.0.0.0:8000
Mais em: https://cookiecutter-django.readthedocs.io/en/latest/developing-locally.html
@MikaelSantilio |
---|