1
resposta

[Dúvida] É possível eu utilizar o mesmo método (do controller) para popular o banco de dados com o método post, em diferentes tabelas ?

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 ?

1 resposta

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!