É o primeiro projeto do back-end, onde praticamos toda a base de criação de uma API vinculada a um banco de dados real.
Ele tem uma particularidade: seus requisitos são implementados ao longo dos exercícios pós aula. Isso significa que caso você siga o desenvolvimento das aulas, quando chegar na data de entrega já terá um projeto funcional.
O que fazer nas sexta-feiras já que o projeto é feito durante a semana com os exercícios pós-aula?
- rever aulas que você não pôde assistir
- fazer exercícios que você deixou para trás
- rever conteúdos que você está com dificuldade
- praticar lógica de programação
- https://www.codewars.com/
- https://leetcode.com/
### Conteúdos abordados - NodeJS - Typescript - Express - SQL e SQLite - Knex - Postman
Para critérios de correção serão considerados rigorosamente a nomenclatura de: Tabelas, colunas e caminhos(path) das requisições. Portando, siga o padrão de nomenclaturas apresentado logo abaixo.
O nome das tabelas e das colunas devem ser em letras minúsculas, sem acento, sem caracteres especiais e em snake_case(caso sejas palavras compostas. exp.: arco_iris). Por isso, siga restritamente a nomeclatura proposta!
O banco de dados deve conter obrigatóriamente quatro tabelas:
- users
- id
- name
- password
- created_at
- products
- id
- name
- price
- description
- image_url
- purchases
- id
- buyer
- total_price
- created_at
purchases_products
- purchase_id
- product_id
- quantity
Nela são mostradas as relações entre as tabelas :
https://dbdiagram.io/d/63c6e8e5296d97641d7a4666
---------------
Os caminhos devem ser definidos em letras minúsculas, sem acento e sem caracteres especiais. Siga conforme o modelo de documentação proposto.
- /users
- /products
- /purchases
O banco de dados deve possuir as tabelas e colunas conforme o diagrama.
- é um simulado de requerimentos em um projeto real e erros de implementação nesse nível deixarão o projeto inválido.
As requisições também devem respeitar o que é esperado, você pode confirmar as estruturas vendo os exemplos de cada endpoint.
- garanta que tanto o body, quanto a resposta e seu status estejam de acordo com o que foi planejado
- [ ] Get all users
- [ ] Create user
- [ ] Create product
- [ ] Get all products funcionalidades 1 e 2
- [ ] Edit product by id
- [ ] Create purchase
- [ ] Delete purchase by id
- [ ] Get purchase by id
3. Documentação no Postman de todos os endpoints (obrigatória para correção), descrevendo os endpoints e colocando os exemplos de respostas
Aqui está uma Documentação para referência (como deve ficar) https://documenter.getpostman.com/view/21151478/2s8ZDeSdbz
Não precisa cadastrar o mesmo nome, email e quaisquer outros valores vistos aqui nos exemplos de saída. Porém, deve-se respeitar rigorosamente a estrutura pedida no banco de dados (nome das tabelas e colunas), nomes das propriedades do corpo e da resposta da API, além do caminho dos endpoints
Retorna todas as pessoas cadastradas.
Dica: atenção com o nome da propriedade createdAt! Ela deve vir em camelCase, apesar de estar em snake_case no banco de dados.
// Request
// GET /users
// Response
// status 200 OK
[
{
id: "u001",
name: "Fulano",
email: "fulano@email.com",
password: "fulano123",
createdAt: "2023-01-15 09:12:42"
},
{
id: "u002",
name: "Ciclana",
email: "ciclana@email.com",
password: "ciclana99",
createdAt: "2023-01-17 12:35:28"
}
]
Cadastra uma nova pessoa.
// Request
// POST /users
// body JSON
{
"id": "u003",
"name": "Astrodev",
"email": "astrodev@email.com",
"password": "astrodev00"
}
// Response
// status 201 CREATED
{
message: "Cadastro realizado com sucesso"
}
Cadastra um novo produto.
// Request
// POST /products
// body JSON
{
"id": "prod003",
"name": "Teclado gamer",
"price": 200,
"description": "Teclado mecânico com numpad",
"imageUrl": "https://picsum.photos/seed/Teclado%20gamer/400"
}
// Response
// status 201 CREATED
{
message: "Produto cadastrado com sucesso"
}
Retorna todos os produtos cadastrados.
// Request
// GET /products
// Response
// status 200 OK
[
{
id: "prod001",
name: "Mouse gamer",
price: 250,
description: "Melhor mouse do mercado!",
imageUrl: "https://picsum.photos/seed/Mouse%20gamer/400"
},
{
id: "prod002",
name: "Monitor",
price: 900,
description: "Monitor LED Full HD 24 polegadas",
imageUrl: "https://picsum.photos/seed/Monitor/400"
},
{
id: "prod003",
name: "Teclado gamer",
price: 200,
description: "Teclado mecânico com numpad",
imageUrl: "https://picsum.photos/seed/Teclado%20gamer/400"
}
]
Caso seja enviada uma query params (name) deve ser retornado o resultado da busca de produtos que contenham o "name" informado em seu nome.
// Request
// query params = name
// GET /products?name=gamer
// Response
// status 200 OK
[
{
id: "prod001",
name: "Mouse gamer",
price: 250,
description: "Melhor mouse do mercado!",
imageUrl: "https://picsum.photos/seed/Mouse%20gamer/400"
},
{
id: "prod003",
name: "Teclado gamer",
price: 200,
description: "Teclado mecânico com numpad",
imageUrl: "https://picsum.photos/seed/Teclado%20gamer/400"
}
]
Edita um produto existente.
// Request
// path params = :id
// PUT /products/prod003
// body JSON
{
"id": "prod0033",
"name": "Teclado gamer RGB",
"price": 300,
"description": "Teclado mecânico com RGB e numpad",
"imageUrl": "https://picsum.photos/seed/Teclado%20gamer%20RGB/400"
}
// Response
// status 200 OK
{
message: "Produto atualizado com sucesso"
}
Cadastra um novo pedido. Como dica, o exercício 1 da aula de Relações em SQL II é uma boa referência.
// Request
// POST /purchases
// body JSON
{
"id": "pur001",
"buyer": "u001",
"products": [
{
"id": "prod001",
"quantity": 2
},
{
"id": "prod002",
"quantity": 1
}
]
}
// Response
// status 201 CREATED
{
message: "Pedido realizado com sucesso"
}
Deleta um pedido existente.
// Request
// path params = :id
// DELETE /purchases/pur002
// Response
// status 200 OK
{
message: "Pedido cancelado com sucesso"
}
Retorna os dados de uma compra, incluindo a lista de produtos da mesma.
// Request
// path params = :id
// GET /purchases/pur001
// Response
// status 200 OK
{
purchaseId: "pur001",
buyerId: "u001",
buyerName: "Fulano",
buyerEmail: "fulano@email.com",
totalPrice: 1400,
createdAt: "2023-01-15 16:24:54",
products: [
{
id: "prod001",
name: "Mouse gamer",
price: 250,
description: "Melhor mouse do mercado!",
imageUrl: "https://picsum.photos/seed/Mouse%20gamer/400",
quantity: 2
},
{
id: "prod002",
name: "Monitor",
price: 900,
description: "Monitor LED Full HD 24 polegadas",
imageUrl: "https://picsum.photos/seed/Monitor/400",
quantity: 1
}
]
}