Giter VIP home page Giter VIP logo

desafio_final_nodejs_xpe's Introduction

DESAFIO FINAL DO BOOTCAMP NODEJS DA PÓS-GRADUAÇÃO


Enunciado

O desafio consiste em desenvolver uma API para controle de uma livraria online. A API deverá gerenciar os cadastros de livros, autores, clientes e vendas. Também deverá gerenciar as informações da página de venda de cada livro com suas informações e avaliações de leitores. Além disso, a API deverá ter controle de acesso aos endpoints, consultando o usuário que deseja fazer a requisição em uma tabela de usuários no banco de dados. Também será preciso desenvolver testes para a aplicação.


Atividades

  • [🦉] 01 - Criação do banco de dados relacional:
    • [🌌] - Tabela: clientes

      • cliente_id(SERIAL, não nulo) – chave primária da tabela. Identificador único do registro, gerado automaticamente.
      • nome (VARCHAR, não nulo) – nome do cliente.
      • e-mail (VARCHAR, não nulo) – e-mail do cliente. Observação: será utilizado para autenticar o cliente na API, juntamente com o campo de senha.
      • senha (VARCHAR, não nulo) – senha do usuário.
      • telefone (VARCHAR, não nulo) – telefone do cliente.
      • endereco (VARCHAR, não nulo) – endereço do cliente.
    • [🌌] - Tabela: autores

      • autor_id (SERIAL, não nulo) – chave primária da tabela. Identificador único do registro, gerado automaticamente.
      • nome (VARCHAR, não nulo) – nome do autor.
      • e-mail (VARCHAR, não nulo) – e-mail do autor.
      • telefone (VARCHAR, não nulo) – telefone do autor.
    • [🌌] - Tabela: livros

      • livro_id (SERIAL, não nulo) – chave primária da tabela. Identificador único do registro, gerado automaticamente.
      • nome (STRING, não nulo) – nome do livro.
      • valor (NUMERIC, não nulo) – valor do livro.
      • estoque (INT, não nulo) – estoque do livro.
      • autor_id (INT, não nulo) – chave estrangeira para a tabela de autores. Faz referência a um autor.
    • [🌌] - Tabela vendas

      • venda_id (SERIAL, não nulo) – chave primária da tabela. Identificador único do registro, gerado automaticamente.
      • valor (NUMERIC, não nulo) – valor da venda (pega o valor do livro vendido no momento da venda).
      • data (DATE, não nulo) – data da venda.
      • cliente_id (INT, não nulo) – chave estrangeira para a tabela de clientes. Faz referência a um cliente.
      • livro_id (INT, não nulo) – chave estrangeira para a tabela de livros. Faz referência a um livro.

  • [🦉] 02 - Criação do banco de dados NoSQL:
    - A propriedade “livroId” serve para manter uma referência do id do livro do banco relacional. As propriedades “descricao”, “páginas” e “editora” dizem respeito ao livro em questão. A propriedade “avaliacoes" é uma lista de avaliações realizadas pelos clientes, possuindo o nome do cliente, a nota dada por ele e a descrição da sua avaliação.

  • [] 03 - Desenvolvimento dos endpoints:
    • [🌌] 01 - Enpoints do Cliente:

      • [😎] 01 - Cadastrar um cliente:

      • [😎] 02 - Atualização de um cliente:

        • Método HTTP e URL: PUT - http://localhost:3000/cliente
        • Parâmetros: objeto JSON com o id do cliente que será atualizado, o nome, email, senha, telefone e endereço que serão atualizados.
      • [😎] 03 - Exclusão de um cliente:

      • [😎] 04 - Consultar os clientes cadastrados:

        • retornar todos os clientes, com todas as informações exceto o campo de senha, que não deve ser retornado neste endpoint.
        • Método HTTP e URL: GET - http://localhost:3000/cliente
      • [😎] 05 - Consultar um cliente em específico:

        • Pegar o id do cliente e retornar um objeto JSON com suas informações, com todas as informações exceto o campo de senha, que não deve ser retornado neste endpoint.
        • Método HTTP e URL: GET - http://localhost:3000/cliente/{clienteId}
        • Parâmetros: id do cliente passado diretamente na URL, exemplo de um id de valor 15 passado na URL: http://localhost:3000/cliente/15


    • [🌌] 02 - Enpoints do Autor:

      • [😎] 01 - Cadastrar um autor:

      • [😎] 02 - Atualização de um autor:

        • Método HTTP e URL: PUT - http://localhost:3000/autor
        • Parâmetros: objeto JSON com o id do autor que será atualizado, o nome, e-mail e telefone que serão atualizados.
      • [😎] 03 - Exclusão de um autor:

      • [😎] 04 - Consultar os autores cadastrados:

      • [😎] 05 - Consultar um autor em específico:

    • [🌌] 03 - Enpoints do Livro:

      • [😎] 01 - Cadastrar um livro:

        • Método HTTP e URL: POST - http://localhost:3000/livro
        • Parâmetros: objeto JSON com o nome, valor e id do autor, que são utilizados para salvar o registro no PostgreSQL. Os demais registros que são inseridos na collection “livroInfo” serão inseridos em outro endpoint.
      • [😎] 02 - Atualização de um livro:

        • Método HTTP e URL: PUT - http://localhost:3000/livro
        • Parâmetros: objeto JSON com o id do livro que será atualizado, o valor do livro que será atualizado. O endpoint não deve permitir que o nome e autor do livro sejam alterados, evitando assim possíveis inconsistências.
      • [😎] 03 - Exclusão de um livro:

      • [😎] 04 - Consultar um livro em específico:

        • Pegar o id do livro e retornar um objeto JSON com suas informações.
        • Método HTTP e URL: GET - http://localhost:3000/livro/{livroId}
        • Observações: retornar as informações do PostgreSQL e do MongoDB. Este endpoint seria utilizado na aplicação web quando o usuário selecionasse um livro em específico na listagem, sendo redirecionado para a página dele, com todas as suas informações e avaliações.
        • Parâmetros: id do livro passado diretamente na URL, exemplo de um id de valor 15 passado na URL: http://localhost:3000/livro/15
      • [😎] 05 - Consultar os livros cadastrados:

        • Retornar todos os livros, com todas as informações.
        • Método HTTP e URL: GET - http://localhost:3000/autor
        • Observações: este endpoint e o próximo devem retornar somente os dados do banco relacional, pois eles serão utilizados somente na listagem dos livros. Caso o usuário queira detalhar mais informações a respeito de um livro em específico, estes dados são obtidos no endpoint anterior.
      • [😎] 06 - Consultar os livros cadastrados de um autor em específico:

        • Pegar o id do autor na URL e retornar uma lista de seus livros, sendo cada venda representado por um objeto JSON com todas as propriedades.
        • Método HTTP e URL: GET - http://localhost:3000/livro?autorId={autorId}
        • Parâmetros: id do livro passado diretamente na URL, exemplo de um id de valor 15 passado na URL: http:/ localhost:3000/livro?autorId=15 (Sugestão: pode ser usada a mesma estrutura do endpoint do item 5, que consulta todos os livros, só que aqui nesse caso ele receberia um parâmetro para filtrar o autor).
      • [😎] 07 - Cadastrar informações do livro:

        • Método HTTP e URL: POST – http://localhost:3000/livro/info
        • Parâmetros: objeto JSON com o “livroId” do livro que terá as informações cadastradas e as propriedades a serem salvas no MongoDB.
      • [😎] 08 - Atualizar informações do livro:

        • Método HTTP e URL: PUT – http://localhost:3000/livro/info
        • Parâmetros: objeto JSON com o “livroId” do livro que terá as informações atualizadas, e as propriedades a serem salvas no MongoDB.
      • [😎] 09 - Excluir informações do livro:

      • [😎] 10 -Cadastrar uma avaliação:

        • Método HTTP e URL: POST – http://localhost:3000/livro/{livroId}/avaliacao
        • Observações: este endpoint deverá buscar no MongoDB o registro referente ao livro em questão pela propriedade “livroId” e inserir a avaliação no array de avaliações.
      • [😎] 11 - Excluir uma avaliação:

    • [😎] 04 - Enpoints da Venda:

      • [😎] 01 - Cadastrar uma venda:

        • Método HTTP e URL: POST - - http://localhost:3000/venda
        • Parâmetros: objeto JSON com a data em que a venda foi realizada, o id do cliente que comprou o livro e o id do livro comprado. O valor da venda neste endpoint é buscada da tabela do livro e inserida no registro da venda. A ideia desta ação é salvar o valor exato do livro no momento da venda, evitando que futuras alterações no valor de um livro impacte nas vendas já realizadas daquele livro.
        • Observação: antes de cadastrar a venda é necessário verificar se o livro tem estoque maior que zero. Se tiver, o endpoint deve permitir a inserção do registro e deve atualizar o estoque do livro, diminuindo em uma unidade. Se não tiver estoque, um erro deve ser retornado ao usuário informando o que ocorreu.
      • [😎] 02 - Consultar um venda em específico:

      • [😎] 03 - Consultar as vendas:

      • [😎] 04 - Consultar as vendas de um cliente em específico:

        • Pegar o id do cliente na URL e retornar uma lista das suas vendas, sendo cada venda representado por um objeto JSON com todas as propriedades.
        • Método HTTP e URL: GET - http://localhost:3000/venda?clienteId={clienteId}
        • Parâmetros: id do venda passado diretamente na URL, exemplo de um id de valor 15 passado na URL: http://localhost:3000/venda?clienteId=15 (Sugestão: pode ser usada a mesma estrutura do endpoint do item 3, que consulta todas as vendas, só que aqui nesse caso ele receberia um parâmetro para filtrar o cliente).
      • [😎] 05 - Consultar as vendas de um livro em específico:

        • Pegar o id do livro na URL e retornar uma lista das suas vendas, sendo cada venda representado por um objeto JSON com todas as propriedades.
        • Método HTTP e URL: GET - http://localhost:3000/venda?livroId={livroId}
        • Parâmetros: id do venda passado diretamente na URL, exemplo de um id de valor 15 passado na URL: http://localhost:3000/venda?livroId=15 (Sugestão: pode ser usada a mesma estrutura do endpoint do item 3, que consulta todas as vendas, só que aqui nesse caso ele receberia um parâmetro para filtrar o livro).
      • [😎] 06 - Consultar as vendas de um autor em específico:

        • Pegar o id do livro na URL e retornar uma lista das suas vendas, sendo cada venda representado por um objeto JSON com todas as propriedades.
        • Método HTTP e URL: GET - http://localhost:3000/venda?autorId={autorId}
        • Parâmetros: id do livro passado diretamente na URL, exemplo de um id de valor 15 passado na URL: http://localhost:3000/venda?livroId=15 (Sugestão: pode ser usada a mesma estrutura do endpoint do item 3, que consulta todas as vendas, só que aqui nesse caso ele receberia um parâmetro para filtrar o livro).



desafio_final_nodejs_xpe's People

Contributors

anasousa314 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.