| Autoestudo | Click |
|---|---|
| O que é Node JS? | Link |
| Javascript: Fetch DELETE and PUT requests | Link |
| Use JavaScript to execute an API DELETE request | Link |
| Como sair do zero em Node.js em apenas uma aula | Link |
| Projeto Individual (Parte 2) - Conectando Banco de Dados e Servidor + Arquitetura MVC | Link |
https://www.canva.com/design/DAGkfPt7N2A/Rzqtyum2SB77RoAACs9aZQ/view
.env
DB_HOST=aws-0-us-east-2.pooler.supabase.com
DB_USER=postgres.bneyjtztnmlmanmigjqe
DB_PASSWORD=BthvPWst9Ub8IbtI
DB_NAME=postgres
DB_PORT=6543
src/index.js
require('dotenv').config();
const express = require('express');
const app = express();
const categoriaRoutes = require('./routes/categoriaRoutes');
app.use(express.json());
app.use('/categorias', categoriaRoutes);
app.listen(3000, () => console.log('Servidor rodando na porta 3000'));
src/database.js
const { Pool } = require('pg');
const pool = new Pool({
host: process.env.DB_HOST,
user: process.env.DB_USER,
password: process.env.DB_PASSWORD,
database: process.env.DB_NAME,
port: process.env.DB_PORT,
});
module.exports = pool;
src/models/Categoria.js
class Categoria {
constructor({ id = null, nome, descricao }) {
this.id = id;
this.nome = nome;
this.descricao = descricao;
}
}
module.exports = Categoria;
src/repositories/CategoriaRepository.js
const db = require('../database');
const Categoria = require('../models/Categoria');
class CategoriaRepository {
async findAll() {
const result = await db.query('SELECT * FROM categorias');
return result.rows.map(row => new Categoria(row));
}
async findById(id) {
const result = await db.query('SELECT * FROM categorias WHERE id = $1', [id]);
if (result.rows.length === 0) return null;
return new Categoria(result.rows[0]);
}
async create(categoria) {
const { nome, descricao } = categoria;
const result = await db.query(
'INSERT INTO categorias (nome, descricao) VALUES ($1, $2) RETURNING *',
[nome, descricao]
);
return new Categoria(result.rows[0]);
}
async update(id, categoria) {
const { nome, descricao } = categoria;
const result = await db.query(
'UPDATE categorias SET nome = $1, descricao = $2 WHERE id = $3 RETURNING *',
[nome, descricao, id]
);
return new Categoria(result.rows[0]);
}
async delete(id) {
await db.query('DELETE FROM categorias WHERE id = $1', [id]);
}
}
module.exports = new CategoriaRepository();
src/services/CategoriaService.js
const CategoriaRepository = require('../repositories/CategoriaRepository');
class CategoriaService {
getAll() {
return CategoriaRepository.findAll();
}
getById(id) {
return CategoriaRepository.findById(id);
}
create(data) {
return CategoriaRepository.create(data);
}
update(id, data) {
return CategoriaRepository.update(id, data);
}
delete(id) {
return CategoriaRepository.delete(id);
}
}
module.exports = new CategoriaService();
src/controllers/CategoriaController.js
const CategoriaService = require('../services/CategoriaService');
module.exports = {
async index(req, res) {
const categorias = await CategoriaService.getAll();
res.json(categorias);
},
async show(req, res) {
const { id } = req.params;
const categoria = await CategoriaService.getById(id);
if (!categoria) return res.status(404).json({ error: 'Categoria não encontrada' });
res.json(categoria);
},
async store(req, res) {
const nova = await CategoriaService.create(req.body);
res.status(201).json(nova);
},
async update(req, res) {
const { id } = req.params;
const atualizada = await CategoriaService.update(id, req.body);
res.json(atualizada);
},
async delete(req, res) {
const { id } = req.params;
await CategoriaService.delete(id);
res.status(204).send();
}
};
src/routes/categoriaRoutes.js
const express = require('express');
const router = express.Router();
const CategoriaController = require('../controllers/CategoriaController');
router.get('/', CategoriaController.index);
router.get('/:id', CategoriaController.show);
router.post('/', CategoriaController.store);
router.put('/:id', CategoriaController.update);
router.delete('/:id', CategoriaController.delete);
module.exports = router;
rest.http