Desafio para vaga de dev Python Pleno na TINS
Considerando o sql em anexo, temos o seguinte levantamento de requisitos para um dos nossos clientes:
Ele precisa cadastrar os clientes e quantos endereços ele tiver;
Um, e somente um dos endereços será o endereço padrão;
O cadastro do endereço deverá consumir a API do viacep (https://viacep.com.br/) para preencher os campos após informar o CEP, de forma que somente o CEP (por exemplo, "77001-572"), o titulo (por exemplo, "Casa da sogra") e o número (por exemplo, "25") serão preenchidos de fato pelo cliente;
O cadastro de produto deverá ter um código de 6 dígitos;
Por fim teremos uma tela de pedido, onde pesquisamos o cliente pelo CPF ou pelo nome, e mostramos todas as informações cadastradas dele. Temos um campo com o endereço padrão do usuário já selecionado, mostrando todas as informações desse endereço, mas com a possibilidade de selecionar um outro endereço do cliente. e também um campo de pesquisa de produtos para adicionar ao pedido tanto pelo código, como pela descrição, que ao adicionar, será mostrado numa tabela abaixo. Abaixo da tabela, mostrar o valor do pedido naquele instante. Importante que o código do pedido tenha sempre 11 dígitos;
No final dessa tela, um botão para "enviar" pedido, que será enviado para o e-mail cadastrado do cliente. As informações de SMTP deverá constar no arquivo de configuração.
Para todos esses cadastros, é necessário o CRUD completo. sendo que na listagem de produtos e clientes é necessário um filtro sendo para produto por código e descrição e para o cliente por CPF e nome;
Como já está nos requisitos da vaga, essa aplicação de ser feita em django, utilizando qualquer template desde que não seja o padrão.
Será considerado um PLUS se conseguir entregar o sistema rodando em docker.
- Clone o arquivo
.env.example
com o nome de.env
- Preencha todas as variáveis
-
- A variável
SECRET_KEY
pode ser gerada em djecrety.
- A variável
-
- A variável
DEBUG
pode ser inicializada comoTRUE
para ver os relatórios de erros, ouFALSE
para ignorar.
- A variável
-
- A variável
ALLOWED_HOSTS
é uma lista de hosts autorizados e pode ser inicializada comlocalhost,127.0.0.1,0.0.0.0
.
- A variável
-
- Banco de dados:
-
-
- Banco Local:
-
-
-
-
- A variável
SQLITE_URL
pode ser deixado como padrãosqlite:///local-dev-sqlite.db
.
- A variável
-
-
-
-
-
- A variável
DATABASE_URL
pode ser inicializada comSQLITE_URL
caso for usar banco local.
- A variável
-
-
-
-
- Se for usar PostgreSQL:
-
-
-
-
- A variável
MYSQL_HOST
pode ser inicializada comdb
, caso esteja conectando a um banco externo, insira o ip de acesso.
- A variável
-
-
-
-
-
- A variável
MYSQL_ROOT_PASSWORD
pode ser inicializada com a senha root padrão do banco.
- A variável
-
-
-
-
-
- A variável
MYSQL_USER
pode ser inicializada com o usuario do banco.
- A variável
-
-
-
-
-
- A variável
MYSQL_PASSWORD
pode ser inicializada com a senha do banco.
- A variável
-
-
-
-
-
- A variável
MYSQL_DATABASE
pode ser inicializada com o nome do banco.
- A variável
-
-
-
-
-
- A variável
PGADMIN_DEFAULT_PASSWORD
pode ser inicializada com a senha de acesso ao PgAdmin.
- A variável
-
-
-
-
-
- A variável
MYSQL_PORT
pode ser inicializada com a porta para acessar o PgAdmin.
- A variável
-
-
-
-
-
- A variável
DATABASE_URL
pode ser inicializada commysql://user:password@host:port/dbname
oumysql://$MYSQL_USER:$MYSQL_PASSWORD@$MYSQL_HOST:$MYSQL_PORT/$MYSQL_DATABASE
.
- A variável
-
-
-
- A variável
APP_PORT
pode ser inicializada com a porta para acessar a aplicação, o padrão é8000
.
- A variável
-
- A variável
RABBITMQ_HOST
pode ser inicializada comrabbitmq
, caso esteja conectando a um rabbitmq externo, insira o ip de acesso.
- A variável
-
- A variável
RABBITMQ_USER
pode ser inicializada com o usuario do rabbitmq.
- A variável
-
- A variável
RABBITMQ_PASSWORD
pode ser inicializada com a senha do rabbitmq.
- A variável
-
- A variável
RABBITMQ_PORT_1
pode ser inicializada com uma das portas para acessar o RabbitMQ, o padrão é5672
.
- A variável
-
- A variável
RABBITMQ_PORT_2
pode ser inicializada com uma das portas para acessar o RabbitMQ, o padrão é15672
.
- A variável
-
- A variável
EMAIL_HOST
pode ser inicializada com o host do provedor de email, exemplosmtp.gmail.com
.
- A variável
-
- A variável
EMAIL_HOST_USER
pode ser inicializada com o usuário do provedor de email.
- A variável
-
- A variável
EMAIL_HOST_PASSWORD
pode ser inicializada com a senha do provedor de email.
- A variável
- Instale o Docker.
- Caso queira criar um usuário administrador, execute o seguinte comando
docker compose run app python manage.py createsuperuser
- Agora para iniciar a aplicação execute
docker compose up -d
- Acesse localhost:8000
- Instale o Python versão ^3.10 ou superiore, em seguida, instale o Poetry.
- Acesse a pasta do projeto e execute o comando
poetry install
- Em seguida, acesse o ambiente virtual com
poetry shell
- Em seguida, execute o comando
./manage.py migrate
para realizar todas as migrações em banco de dados. - Caso queira criar um usuário administrador, execute o seguinte comando
./manage.py createsuperuser
- Agora para iniciar a aplicação execute
./manage.py runserver
- Acesse localhost:8000
- Crie o usuário administrador
- Acesse admin-site
- O cliente pode pesquisar o cep inserido e ter as informações coletadas da api viacep
- Apenas um endereço pode ser marcado como default
- O campo
Cod Cliente
pode ser pesquisado por cpf ou nome.