# Projeto Modulo 5 # Primeira sprint ## Link do repositório: https://github.com/LeandroFS1/desafio-backend-modulo-05-sistema-pdv-dds-t14-dbe-t05 ## Avisos importantes - Sempre quando der erro, colocar o codigo do erro correto - Nos endpoints sempre o nome do objeto tem que ser igual ao nome da tabela - Na duvida, sempre perguntar ao grupo, trabalho em grupo economiza tempo e dores de cabeça por erros simples - Sempre lembrar de atualizar o codigo com o github antes de começar a codar --- ### Banco de dados:(Leandro) #### O banco de dados será com essas tabelas e seus respectivos conteudos: ##### Usuarios: - Id (Autoincrement) - Nome (Sem restrições, porem seria bom ser obrigatório) - Email (campo unico e obrigatório) - Senha (Obrigatória, criptografada e com caracteres minimos de 8) #### Categorias: - Id (Autoincrement) - Categorias(obrigatório) - Preparar a tabela para futuro relacionamento com produtos --- ## Rotas: ### Listar categorias:(Sergio) - Sem autenticação - Listar categorias uma a uma (lembrar do /:id) ### Cadastrar usuario:(Edvani) - Sem autenticação - Verificar sempre se o email inserido já existe - Verificar se o usuario digitou a senha minima exigida - Caso escolha nome obrigatório, conferir o campo nome - Criptografar a senha ### Efetuar login:(Eduarda) - Sem autenticação - Verificar se o email digitado existe e se está correto - Verificar se a senha foi digitada e se está correta ### Detalhar perfil usuario:(Leo Oliveira) - Com autenticação - Puxar o id do usuario pelo token de autenticação para evitar acesso a outros - Detalhar completamente o usuario ### Editar perfil usuario:(ismael) - Com autenticação - Sempre exigir os campos a serem editados sejam validos - Sempre exigir senha ao trocar dados do usuario ### Efetuar deploy --- # Segunda sprint ## Avisos importantes - Sempre quando der erro, colocar o codigo do erro correto - Nos endpoints sempre o nome do objeto tem que ser igual ao nome da tabela - Na duvida, sempre perguntar ao grupo, trabalho em grupo economiza tempo e dores de cabeça por erros simples - Sempre lembrar de atualizar o codigo com o github antes de começar a codar --- ### Atualizar banco de dados (Leandro) #### Criar as seguintes tabelas: - produtos: - id - descricao - quantidade_estoque - valor - categoria_id - clientes: - id - nome - email (campo único) - cpf (campo único) - cep - rua - numero - bairro - cidade - estado ### Cadastrar produto (Leandro) - Validar os campos obrigatórios: - descricao - quantidade_estoque - valor - categoria_id - A categoria informada na qual o produto será vinculado deverá existir. ### Editar produto (Leandro) - Validar se existe produto para o id enviado como parâmetro na rota. - Validar os campos obrigatórios: - descricao - quantidade_estoque - valor - categoria_id - A categoria informada na qual o produto será vinculado deverá existir. ### Excluir produto (Leandro) - Validar se existe produto para o id enviado como parâmetro na rota. ### Detalhar produto (Sergio) - Validar se existe produto para o id enviado como parâmetro na rota. ### Listar produto (Sergio) - Caso seja enviado o parâmetro do tipo query **categoria_id**, filtrar os produtos de acordo com a categoria, caso o id de categoria informada exista. - Caso não seja informado o parâmetro do tipo query **categoria_id** todos os produtos cadastrados deverão ser retornados. ### Cadastrar cliente (Edvani) - Validar os campos obrigatórios: - nome - email - cpf - O campo e-mail no banco de dados deve ser único para cada registro, não permitindo dois clientes possuírem o mesmo e-mail. - O campo cpf no banco de dados deve ser único para cada registro, não permitindo dois clientes possuírem o mesmo cpf. ### Editar cliente (Ismael) - Validar se existe cliente para o id enviado como parâmetro na rota. - Validar os campos obrigatórios: - nome - email - cpf - O campo e-mail no banco de dados deve ser único para cada registro, não permitindo dois clientes possuírem o mesmo e-mail. - O campo cpf no banco de dados deve ser único para cada registro, não permitindo dois clientes possuírem o mesmo cpf. ### Listar clientes (Eduarda) - listar todos os clientes existentes ### Detalhar cliente (Leo) - Validar se existe cliente para o id enviado como parâmetro na rota. --- # Terceira sprint ## Avisos importantes - Sempre quando der erro, colocar o codigo do erro correto - Nos endpoints sempre o nome do objeto tem que ser igual ao nome da tabela - Na duvida, sempre perguntar ao grupo, trabalho em grupo economiza tempo e dores de cabeça por erros simples - Sempre lembrar de atualizar o codigo com o github antes de começar a codar --- ### Banco de dados (Leandro) #### Criar as tabelas: - pedidos - id - cliente_id - observacao - valor_total - pedido_produtos - id - pedido_id - produto_id - quantidade_produto - valor_produto #### Atualizar a tabela produtos: - Adicionar produto_imagem ### Correção de bugs (Leandro) ### Cadastrar pedidos (Sergio) - Lembre-se: Cada pedido deverá conter ao menos um produto vinculado. - Atenção: As propriedades produto_id e quantidade_produto devem ser informadas dentro de um array e para cada produto deverá ser criado um objeto neste array, como ilustrado no objeto de requisição abaixo. Só deverá ser cadastrado o pedido caso todos produtos vinculados ao pedido realmente existão no banco de dados. #### Itens obrigatórios: - Validar os campos obrigatórios: - cliente_id - pedido_produtos - produto_id - quantidade_produto - Validar se existe cliente para o id enviado no corpo (body) da requisição. - Validar se existe produto para cada produto_id informado dentro do array enviado no corpo (body) da requisição. - Validar se existe a quantidade em estoque de cada produto existente dentro do array, de acordo com a quantidade informada no corpo (body) da requisição. - O pedido deverá ser cadastrado, apenas, se todos os produtos estiverem validados. - Enviar e-mail para o cliente notificando que o pedido foi efetuado com sucesso. ### Listar pedidos (Edvaní) #### Itens obrigatórios: - Caso seja enviado o parâmetro do tipo query **cliente_id**, filtrar os pedidos de acordo com o cliente, caso o id do cliente informado exista. - Caso não seja informado o parâmetro do tipo query **cliente_id** todos os pedidos cadastrados deverão ser retornados. ### Aplicar validação na exclusão de produtos (Leo) #### Itens obrigatórios: - Validar se o produto que está sendo excluído não está vinculado a nenhum pedido, caso estiver, não poderá ser excluído e deverá ser retornada uma mensagem indicando o motivo. ### Aprimorar cadastro/atualização de produtos (Ismael) #### Itens obrigatórios: - O campo `produto_imagem` deve ser opcional, mas, em caso de ser enviado no corpo da requisição deveremos processar a imagem vinculada a essa propriedade e armazenar a imagem em um servidor de armazenamento (Supabase, Blackblaze, etc...) - Armazenar na coluna `produto_imagem` a URL que possibilita visualizar a imagem que foi efetuada upload para o servidor de armazenamento. ### Aprimorar exclusão de produtos (Eduarda) #### Itens obrigatórios: - Na exclusão do produto a imagem vinculada a este produto deverá ser excluída do servidor de armazenamento. # "Apreciando cada passo, mas já sonhando com as próximas conquistas!" ## Fim da api PDV !!