Giter Site home page Giter Site logo

desafio-tins's Introduction

desafio-tins

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.

Configurando projeto

Configurando as variáveis de ambiente.

  • 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 DEBUG pode ser inicializada como TRUE para ver os relatórios de erros, ou FALSE para ignorar.
    • A variável ALLOWED_HOSTS é uma lista de hosts autorizados e pode ser inicializada com localhost,127.0.0.1,0.0.0.0.
    • Banco de dados:
      • Banco Local:
        • A variável SQLITE_URL pode ser deixado como padrão sqlite:///local-dev-sqlite.db.
        • A variável DATABASE_URL pode ser inicializada com SQLITE_URL caso for usar banco local.
      • Se for usar PostgreSQL:
        • A variável MYSQL_HOST pode ser inicializada com db, caso esteja conectando a um banco externo, insira o ip de acesso.
        • A variável MYSQL_ROOT_PASSWORD pode ser inicializada com a senha root padrão do banco.
        • A variável MYSQL_USER pode ser inicializada com o usuario do banco.
        • A variável MYSQL_PASSWORD pode ser inicializada com a senha do banco.
        • A variável MYSQL_DATABASE pode ser inicializada com o nome do banco.
        • A variável PGADMIN_DEFAULT_PASSWORD pode ser inicializada com a senha de acesso ao PgAdmin.
        • A variável MYSQL_PORT pode ser inicializada com a porta para acessar o PgAdmin.
        • A variável DATABASE_URL pode ser inicializada com mysql://user:password@host:port/dbname ou mysql://$MYSQL_USER:$MYSQL_PASSWORD@$MYSQL_HOST:$MYSQL_PORT/$MYSQL_DATABASE.
    • A variável APP_PORT pode ser inicializada com a porta para acessar a aplicação, o padrão é 8000.
    • A variável RABBITMQ_HOST pode ser inicializada com rabbitmq, caso esteja conectando a um rabbitmq externo, insira o ip de acesso.
    • A variável RABBITMQ_USER pode ser inicializada com o usuario do rabbitmq.
    • A variável RABBITMQ_PASSWORD pode ser inicializada com a senha do rabbitmq.
    • A variável RABBITMQ_PORT_1 pode ser inicializada com uma das portas para acessar o RabbitMQ, o padrão é 5672.
    • A variável RABBITMQ_PORT_2 pode ser inicializada com uma das portas para acessar o RabbitMQ, o padrão é 15672.
    • A variável EMAIL_HOST pode ser inicializada com o host do provedor de email, exemplo smtp.gmail.com.
    • A variável EMAIL_HOST_USER pode ser inicializada com o usuário do provedor de email.
    • A variável EMAIL_HOST_PASSWORD pode ser inicializada com a senha do provedor de email.

Utilizando o Docker

  • 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

Manualmente

  • 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

ADMIN COM JAZZMIN TEMPLATE

  • Crie o usuário administrador
  • Acesse admin-site

Tela de Login

Tela de login

Cadastro de Cliente

Tela de login

  • 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

Cadastro de Produto

Tela de login

Cadastro de Pedido

Tela de login

  • O campo Cod Cliente pode ser pesquisado por cpf ou nome.

Email enviado apos cadastro de pedido

Tela de login

desafio-tins's People

Contributors

talesmm14 avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.