├── README.md ├── .gitignore ├── .DS_Store ├── src ├── .DS_Store ├── config │ └── dbConnect.js ├── app.js ├── models │ ├── Cliente.js │ ├── Produto.js │ └── Pedido.js ├── routes │ ├── index.js │ ├── pedidosRoutes.js │ ├── clientesRoutes.js │ └── produtosRoutes.js └── controllers │ ├── clientesController.js │ ├── pedidosController.js │ └── produtosController.js ├── server.js ├── Dockerfile ├── docker-compose.yml └── package.json /README.md: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | -------------------------------------------------------------------------------- /.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafaballerini/lanchonete/HEAD/.DS_Store -------------------------------------------------------------------------------- /src/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafaballerini/lanchonete/HEAD/src/.DS_Store -------------------------------------------------------------------------------- /server.js: -------------------------------------------------------------------------------- 1 | import app from './src/app.js' 2 | 3 | const port = process.env.PORT || 3000; 4 | 5 | 6 | app.listen(port, () => { 7 | console.log(`Servidor escutando em http://localhost:${port}`) 8 | }) 9 | -------------------------------------------------------------------------------- /src/config/dbConnect.js: -------------------------------------------------------------------------------- 1 | import mongoose from "mongoose" 2 | 3 | mongoose.connect("mongodb+srv://rafaballerini:PosTech1404@lanchonete.oen1zg8.mongodb.net/?"); 4 | 5 | let db = mongoose.connection; 6 | 7 | export default db; -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM node:14 2 | 3 | # Define o diretório de trabalho dentro do contêiner 4 | WORKDIR /Users/rafaellaballerini/documents/Pós Tech/Fase 1/Tech Challenge/api-lanchonete 5 | COPY package*.json ./ 6 | RUN npm install 7 | COPY . . 8 | EXPOSE 3000 9 | CMD [ "npm", "run dev" ] 10 | -------------------------------------------------------------------------------- /src/app.js: -------------------------------------------------------------------------------- 1 | import express from "express"; 2 | import db from "./config/dbConnect.js" 3 | import routes from "./routes/index.js" 4 | 5 | db.on("error", console.log.bind(console, 'Erro de conexão')) 6 | db.once("open", () => { 7 | console.log('conexão com o banco feita com sucesso') 8 | }) 9 | 10 | const app = express(); 11 | app.use(express.json()) 12 | routes(app); 13 | 14 | export default app -------------------------------------------------------------------------------- /docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: "3" 2 | services: 3 | db: 4 | image: mongo 5 | environment: 6 | - MONGO_INITDB_ROOT_USERNAME=rafaballerini 7 | - MONGO_INITDB_ROOT_PASSWORD=PosTech1404 8 | ports: 9 | - "27017:27017" 10 | app: 11 | build: 12 | context: . 13 | dockerfile: Dockerfile 14 | ports: 15 | - "3000:3000" 16 | depends_on: 17 | - db 18 | -------------------------------------------------------------------------------- /src/models/Cliente.js: -------------------------------------------------------------------------------- 1 | import mongoose from "mongoose"; 2 | 3 | const clienteSchema = new mongoose.Schema( 4 | { 5 | cpf: {type: String, required: true}, 6 | nome: {type: String, required: true}, 7 | email: {type: String, required: true} 8 | }, 9 | { 10 | versionKey: false 11 | } 12 | ) 13 | 14 | const clientes = mongoose.model("clientes", clienteSchema) 15 | 16 | export default clientes; -------------------------------------------------------------------------------- /src/routes/index.js: -------------------------------------------------------------------------------- 1 | import express from "express"; 2 | import livros from "./pedidosRoutes.js" 3 | import clientes from "./clientesRoutes.js" 4 | import produtos from "./produtosRoutes.js" 5 | 6 | const routes = (app) => { 7 | app.route('/').get((req, res) => { 8 | res.status(200).send({titulo: "Lanchonete"}) 9 | }) 10 | 11 | app.use( 12 | express.json(), 13 | livros, 14 | clientes, 15 | produtos 16 | ) 17 | } 18 | 19 | export default routes -------------------------------------------------------------------------------- /src/models/Produto.js: -------------------------------------------------------------------------------- 1 | import mongoose from "mongoose"; 2 | 3 | const produtoSchema = new mongoose.Schema( 4 | { 5 | nome: {type: String, required: true}, 6 | categoria: {type: String, required: true}, 7 | preco: {type: Number, required: true}, 8 | descricao: {type: String}, 9 | imagem: {type: String} 10 | }, 11 | { 12 | versionKey: false 13 | } 14 | ); 15 | 16 | const produtos = mongoose.model('produtos', produtoSchema); 17 | 18 | export default produtos; -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "api-lanchonete", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "type": "module", 7 | "scripts": { 8 | "dev": "nodemon server.js", 9 | "test": "echo \"Error: no test specified\" && exit 1" 10 | }, 11 | "keywords": [], 12 | "author": "", 13 | "license": "ISC", 14 | "devDependencies": { 15 | "nodemon": "^2.0.15" 16 | }, 17 | "dependencies": { 18 | "express": "^4.17.3", 19 | "mongoose": "^6.2.6" 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/routes/pedidosRoutes.js: -------------------------------------------------------------------------------- 1 | import express from "express"; 2 | import PedidoController from "../controllers/pedidosController.js"; 3 | 4 | const router = express.Router(); 5 | 6 | router 7 | .get("/pedidos", PedidoController.listarPedidos) 8 | .get("/pedidos/:id", PedidoController.listarPedidoPorId) 9 | .post("/pedidos", PedidoController.cadastrarPedido) 10 | .put("/pedidos/:id", PedidoController.atualizarPedido) 11 | .delete("/pedidos/:id", PedidoController.excluirPedido) 12 | 13 | export default router; -------------------------------------------------------------------------------- /src/models/Pedido.js: -------------------------------------------------------------------------------- 1 | import mongoose from "mongoose"; 2 | 3 | const pedidoSchema = new mongoose.Schema( 4 | { 5 | produtos: {type: [mongoose.Schema.Types.ObjectId], ref: 'produtos', required: true}, 6 | cliente: {type: mongoose.Schema.Types.ObjectId, ref: 'clientes', required: true}, 7 | status: {type: String, required: true}, 8 | tempoEspera: {type: Date} 9 | }, 10 | { 11 | versionKey: false 12 | } 13 | ); 14 | 15 | const pedidos = mongoose.model('pedidos', pedidoSchema); 16 | 17 | export default pedidos; -------------------------------------------------------------------------------- /src/routes/clientesRoutes.js: -------------------------------------------------------------------------------- 1 | import express from "express"; 2 | import ClienteController from "../controllers/clientesController.js"; 3 | 4 | const router = express.Router(); 5 | 6 | router 7 | .get("/clientes", ClienteController.listarClientes) 8 | .get("/clientes/:cpf", ClienteController.listarClientePorCPF) 9 | .post("/clientes", ClienteController.cadastrarCliente) 10 | .put("/clientes/:cpf", ClienteController.atualizarCliente) 11 | .delete("/clientes/:cpf", ClienteController.excluirCliente) 12 | 13 | export default router; -------------------------------------------------------------------------------- /src/routes/produtosRoutes.js: -------------------------------------------------------------------------------- 1 | import express from "express"; 2 | import ProdutoController from "../controllers/produtosController.js"; 3 | 4 | const router = express.Router(); 5 | 6 | router 7 | .get("/produtos", ProdutoController.listarProdutos) 8 | .get("/produtos/:id", ProdutoController.listarProdutoPorId) 9 | .get("/produtos/buscar/:categoria", ProdutoController.listarProdutoPorCategoria) 10 | .post("/produtos", ProdutoController.cadastrarProduto) 11 | .put("/produtos/:id", ProdutoController.atualizarProduto) 12 | .delete("/produtos/:id", ProdutoController.excluirProduto) 13 | 14 | export default router; -------------------------------------------------------------------------------- /src/controllers/clientesController.js: -------------------------------------------------------------------------------- 1 | import clientes from "../models/Cliente.js"; 2 | 3 | class ClienteController { 4 | 5 | static listarClientes = (req, res) => { 6 | clientes.find((err, clientes) => { 7 | res.status(200).json(clientes) 8 | }) 9 | } 10 | 11 | static listarClientePorCPF = (req, res) => { 12 | const cpf = req.params.cpf; 13 | 14 | clientes.findOne({cpf: cpf}, (err, clientes) => { 15 | if(err) { 16 | res.status(400).send({message: `${err.message} - CPF não localizado.`}) 17 | } else { 18 | res.status(200).send(clientes); 19 | } 20 | }) 21 | } 22 | 23 | static cadastrarCliente = (req, res) => { 24 | let cliente = new clientes(req.body); 25 | 26 | cliente.save((err) => { 27 | 28 | if(err) { 29 | res.status(500).send({message: `${err.message} - falha ao cadastrar Cliente.`}) 30 | } else { 31 | res.status(201).send(cliente.toJSON()) 32 | } 33 | }) 34 | } 35 | 36 | static atualizarCliente = (req, res) => { 37 | const cpf = req.params.cpf; 38 | 39 | clientes.findOneAndUpdate(cpf, {$set: req.body}, (err) => { 40 | if(!err) { 41 | res.status(200).send({message: 'Cliente atualizado com sucesso'}) 42 | } else { 43 | res.status(500).send({message: err.message}) 44 | } 45 | }) 46 | } 47 | 48 | static excluirCliente = (req, res) => { 49 | const cpf = req.params.cpf; 50 | 51 | clientes.findOneAndDelete(cpf, (err) => { 52 | if(!err){ 53 | res.status(200).send({message: 'Cliente removido com sucesso'}) 54 | } else { 55 | res.status(500).send({message: err.message}) 56 | } 57 | }) 58 | } 59 | 60 | } 61 | 62 | export default ClienteController -------------------------------------------------------------------------------- /src/controllers/pedidosController.js: -------------------------------------------------------------------------------- 1 | import pedidos from "../models/Pedido.js"; 2 | 3 | class PedidoController { 4 | 5 | static listarPedidos = (req, res) => { 6 | pedidos.find() 7 | .populate('cliente') 8 | .populate('produtos') 9 | .exec((err, pedidos) => { 10 | res.status(200).json(pedidos) 11 | }) 12 | } 13 | 14 | static listarPedidoPorId = (req, res) => { 15 | const id = req.params.id; 16 | 17 | pedidos.findById(id) 18 | .populate('cliente', 'nome') 19 | .exec((err, pedidos) => { 20 | if(err) { 21 | res.status(400).send({message: `${err.message} - Id do pedido não localizado.`}) 22 | } else { 23 | res.status(200).send(pedidos); 24 | } 25 | }) 26 | } 27 | 28 | static cadastrarPedido = (req, res) => { 29 | let pedido = new pedidos(req.body); 30 | 31 | pedido.save((err) => { 32 | 33 | if(err) { 34 | res.status(500).send({message: `${err.message} - falha ao cadastrar pedido.`}) 35 | } else { 36 | res.status(201).send(pedido.toJSON()) 37 | } 38 | }) 39 | } 40 | 41 | static atualizarPedido = (req, res) => { 42 | const id = req.params.id; 43 | 44 | pedidos.findByIdAndUpdate(id, {$set: req.body}, (err) => { 45 | if(!err) { 46 | res.status(200).send({message: 'Pedido atualizado com sucesso'}) 47 | } else { 48 | res.status(500).send({message: err.message}) 49 | } 50 | }) 51 | } 52 | 53 | static excluirPedido = (req, res) => { 54 | const id = req.params.id; 55 | 56 | pedidos.findByIdAndDelete(id, (err) => { 57 | if(!err){ 58 | res.status(200).send({message: 'Pedido removido com sucesso'}) 59 | } else { 60 | res.status(500).send({message: err.message}) 61 | } 62 | }) 63 | } 64 | } 65 | 66 | export default PedidoController -------------------------------------------------------------------------------- /src/controllers/produtosController.js: -------------------------------------------------------------------------------- 1 | import produtos from "../models/Produto.js"; 2 | 3 | class ProdutoController { 4 | 5 | static listarProdutos = (req, res) => { 6 | produtos.find((err, produtos) => { 7 | res.status(200).json(produtos) 8 | }) 9 | } 10 | 11 | static listarProdutoPorId = (req, res) => { 12 | const id = req.params.id; 13 | 14 | produtos.findById(id, (err, produtos) => { 15 | if(err) { 16 | res.status(400).send({message: `${err.message} - ID não localizado.`}) 17 | } else { 18 | res.status(200).send(produtos); 19 | } 20 | }) 21 | } 22 | 23 | static cadastrarProduto = (req, res) => { 24 | let produto = new produtos(req.body); 25 | 26 | produto.save((err) => { 27 | 28 | if(err) { 29 | res.status(500).send({message: `${err.message} - falha ao cadastrar Produto.`}) 30 | } else { 31 | res.status(201).send(produto.toJSON()) 32 | } 33 | }) 34 | } 35 | 36 | static atualizarProduto = (req, res) => { 37 | const id = req.params.id; 38 | 39 | produtos.findByIdAndUpdate(id, {$set: req.body}, (err) => { 40 | if(!err) { 41 | res.status(200).send({message: 'Produto atualizado com sucesso'}) 42 | } else { 43 | res.status(500).send({message: err.message}) 44 | } 45 | }) 46 | } 47 | 48 | static excluirProduto = (req, res) => { 49 | const id = req.params.id; 50 | 51 | produtos.findByIdAndDelete(id, (err) => { 52 | if(!err){ 53 | res.status(200).send({message: 'Produto removido com sucesso'}) 54 | } else { 55 | res.status(500).send({message: err.message}) 56 | } 57 | }) 58 | } 59 | 60 | static listarProdutoPorCategoria = (req, res) => { 61 | const categoria = req.params.categoria; 62 | 63 | produtos.findOne({categoria: categoria}, (err, produtos) => { 64 | if(err) { 65 | res.status(400).send({message: `${err.message} - Categoria não localizado.`}) 66 | } else { 67 | res.status(200).send(produtos); 68 | } 69 | }) 70 | } 71 | 72 | } 73 | 74 | export default ProdutoController --------------------------------------------------------------------------------