No curso a Ju criou os métodos para criar, atualizar, deletar e listar usuários, é possível eu utilizar dos mesmos métodos para outra entidade, com atributos diferentes ?
No curso a Ju criou os métodos para criar, atualizar, deletar e listar usuários, é possível eu utilizar dos mesmos métodos para outra entidade, com atributos diferentes ?
Olá, Kaine.
Tudo bem?
Sim, é possível reutilizar os métodos do controller para diferentes entidades, mas você precisará fazer algumas adaptações. No caso do Sequelize, você pode criar funções genéricas que recebam o modelo da entidade como parâmetro. Dessa forma, você pode usar a mesma lógica para diferentes tabelas.
Aqui está um exemplo prático de como você pode fazer isso:
// Função genérica para criar um registro
const createEntity = async (Model, data) => {
try {
const entity = await Model.create(data);
return entity;
} catch (error) {
console.error('Erro ao criar entidade:', error);
throw error;
}
};
// Função genérica para atualizar um registro
const updateEntity = async (Model, id, data) => {
try {
const entity = await Model.findByPk(id);
if (entity) {
await entity.update(data);
return entity;
} else {
throw new Error('Entidade não encontrada');
}
} catch (error) {
console.error('Erro ao atualizar entidade:', error);
throw error;
}
};
// Função genérica para deletar um registro
const deleteEntity = async (Model, id) => {
try {
const entity = await Model.findByPk(id);
if (entity) {
await entity.destroy();
return true;
} else {
throw new Error('Entidade não encontrada');
}
} catch (error) {
console.error('Erro ao deletar entidade:', error);
throw error;
}
};
// Função genérica para listar registros
const listEntities = async (Model) => {
try {
const entities = await Model.findAll();
return entities;
} catch (error) {
console.error('Erro ao listar entidades:', error);
throw error;
}
};
E no seu controller, você pode chamar essas funções passando o modelo adequado:
const User = require('../models/User');
const Product = require('../models/Product');
// Exemplo de uso para a entidade User
app.post('/users', async (req, res) => {
try {
const user = await createEntity(User, req.body);
res.status(201).json(user);
} catch (error) {
res.status(500).json({ error: error.message });
}
});
// Exemplo de uso para a entidade Product
app.post('/products', async (req, res) => {
try {
const product = await createEntity(Product, req.body);
res.status(201).json(product);
} catch (error) {
res.status(500).json({ error: error.message });
}
});
Desse modo, você consegue reutilizar a lógica de CRUD para diferentes entidades, apenas passando o modelo correspondente.
Espero ter ajudado e bons estudos!