M2P2-DevinHouse 👨‍💻

Software de gestão de inventário de empresas - DEVinventory

O projeto Back-end desenvolvido durante o Módulo 2, consiste no desenvolvimento de uma API em Python, usando Flask com SQLAlchemy

Requisitos:

  • Utilizar Python
  • Utilizar Flask com SQLAlchemy.
  • Utilizar banco de dados PostgreSQL para armazenar os dados.
  • Utilizar conceito de Migrations.
  • Utilizar GitHub para armazenamento do código
  • Utilizar Trello para organização do projeto
  • Utilizar conceitos de squads, Kanban e Scrum.
  • Utilizar conhecimentos em SQL

Pré requisitos ambiente:

Instalar Python na maquina através do link abaixo: Python 3

Intalar o Poetry através do comando abaixo no cmd do Windows: <curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python>

Configuração ambiente:

  • Executar o comando: poetry config --local virtualenvs.in-project true
  • Executar o comando: poetry install para instalar as dependencias
  • Criar um arquivo .env baseado no arquivo .env_example e colocar os campos necessários.

Executar aplicação:

Executar o comando: poetry run flask run

Criar tabelas no banco:

  • poetry run flask db init
  • poetry run flask db migrate
  • poetry run flask db upgrade

Popular as tabelas do database:

  • poetry run flask populate_db

Endpoints:

INVENTORY

POST/inventory/create

Parametros de entrada:

  • product_category_id (obrigatório)
  • user_id (opcional)
  • product_code (obrigatório)
  • title (obrigatório)
  • value (obrigatório)
  • brand (obrigatório)
  • template (obrigatório)
  • description (obrigatório)

Saída:

  • Sucesso, 201 (created)
  • Error, 400
  • Error premission, 403 (forbidden)

Regras de negócio:

  • Permissão WRITE
  • Todos os campos obrigatórios preenchidos
  • O código do produto deve ser unico
  • Value maior que zero
  • Retornar status 201 quando o item for criado

GET/inventory Parametros de entrada:

  • title (Opcional)

Saída:

  • Sucesso, 200 (OK)
  • Error, 204 (No content)
  • Error premission, 403 (forbidden)

Regras de negócio:

  • Permissão READ
  • Retornar todos que tenham o mesmo titulo (usar like)
  • O código do produto deve ser unico
  • Se não tiver parametros retornar todos os itens
  • Utilizar paginação, retornando 20 itens
  • Se user_id = null retornar id: None e name: "Na empresa"
  • Se nenhum resultado status 204 (No content)
  • Se encontrado o resultado retornar em JSON contendo: id, product_code, title, product_category, user e Status 200 (OK)

GET/inventory/results

Sem parametros de entrada

Saída:

  • Sucesso, 200 (OK)
  • Error premission, 403 (forbidden)

Regras de negócio:

  • Permissão READ
  • Calcular numero de usuários
  • Calcular o número de itens
  • Calcular o valor da soma de todos os itens.
  • Calcular quantos itens estão emprestados para usuários
  • Retornar statísticas e status 200 (OK)

PATCH/inventory

Parametros de entrada:

  • id (obrigatório)
  • Quaisquer camplos (opcional)

Saída:

  • Sucesso, 204 (No Content)
  • Error, 400
  • Error premission, 403 (forbidden)

Regras de negócio:

  • Permissão UPDATE
  • É possível alterar todos os campos exceto: product_category_id e product_code, senão status 400
  • Respeitas as regras de negócio do endpoint POST
  • Ao atualizar item, retornar status 204 (No Content)

USERS

POST/user

Parametros de entrada:

  • city_id (obrigatório)
  • gender_id (obrigatório)
  • role_id (obrigatório)
  • name (obrigatório)
  • age (obrigatório)
  • email (obrigatório)
  • phone (obrigatório)
  • password (obrigatório)
  • cep (obrigatório)
  • street (obrigatório)
  • number_street (obrigatório)
  • district (obrigatório)
  • complement (opcional)
  • landmark (opcional)

Saída:

  • Sucesso, 201 (created)
  • Error, 400
  • Error premission, 403 (forbidden)

Regras de negócio:

  • Permissão READ, WRITE, UPDATE e DELETE (role = Administrador do sistema)
  • Todos os campos obrigatórios preenchidos
  • O email deve ser unico no banco
  • Password criptrografado no banco de dados (regra na models) e conter 8 digitos, sendo pelo menos um caracter especial
  • Telefone deve conter 11 digitos sem letras ou caracter especial
  • Retornar status 201 quando o item for criado

PATCH/user

Parametros de entrada:

  • id (obrigatório)

Saída:

  • Sucesso, 204 (No Content)
  • Error id não encontrado, 404
  • Error premission, 403 (forbidden)

Regras de negócio:

  • Permissão UPDATE
  • Campos preenchidos não podem ser alterados para campos vazios
  • Se id não encontrado retornar erro
  • Respeitar validações das models
  • Retornar status 204 quando o usuário for alterado

POST/user/auth/google

Parametros de entrada:

  • Login google

Saída:

  • Sucesso, 200

Regras de negócio:

  • Usuário deve estar desconectado
  • Utilizar configuração OAuth2
  • Se todas as informações estiverem corretas, retornar url do redirecionamento da aplicação e status 200

POST/user/logout

Saída:

  • Delogado, 202

Regras de negócio:

  • Limpa os dados da sessão: token e validações de login

GET/user/callback

Sem parametros de entrada

Saída:

  • Redirecionamento
  • Cadastro do usuário, caso não seja cadastrado

Regras de negócio:

  • Verificar se o email recebido está cadastrado no banco de dados, senão cadastrar
  • Redirecionar após validação dos valores enviados da url e do client do backend

POST/user/login

Parametros de entrada:

  • email (obrigatório)
  • password (obrigatório)

Saída:

  • Sucesso, 200 (token)
  • Error, 400
  • Error, 401

Regras de negócio:

  • Usuário deve estar desconectado
  • Todos os campos obrigatórios preenchidos
  • O email deve existir no banco
  • Se Password estiver errado, retornar erro ao efetuar login
  • Se todas as informações estiverem corretas, retornar token e status 200

GET/user

Parametros de entrada:

  • Name (Opcional)

Saída:

  • Sucesso, 200 (OK)
  • Error, 204 (No content)
  • Error premission, 403 (forbidden)

Regras de negócio:

  • Permissão READ
  • Retornar todos os usuários tenham o mesmo nome (usar like)
  • Se não tiver parametros retornar todos os usuários de acordo com páginação
  • Utilizar paginação, retornando 20 usuários por página
  • Se nenhum resultado status 204 (No content)
  • Se encontrado o resultado retornar em JSON contendo: id, nome, email, phone, role.name e Status 200 (OK)

Utilizamos oSwagger para a documentação dos endpoints para acessar http://localhost:5000/apidocs/

Tecnologias utilizadas:

Desenvolvedores - DEVinSanes:

Somos os DEVinSanes, time de desenvolvedores full-stak, desenvolvemos o projeto DEVinventory.

Redes Sociais:

Referências: