Antes da aula 15 minutos para o teste de autoestudo!

Autoestudo Link
Consultas em SQL - Parte II Click
Trabalhando com várias tabelas em bancos de dados Click
Entendendo chave primária e estrangeira nos bancos de dados Click
SQL for beginners: how to get started with JOINS Click
Tutorial SQL Click

https://www.canva.com/design/DAGkfHG5WKA/_5wjtV4ktzJyDAmY416EKQ/view

Estrutura do Projeto

Primeiro, vamos criar a estrutura de pastas do nosso projeto:

npm init -y

Agora, vamos instalar as dependências necessárias:

npm i pg dotenv

Configuração do Ambiente

Primeiro, vamos configurar o arquivo .env na raiz do projeto:

DB_HOST=aws-0-us-east-2.pooler.supabase.com
DB_USER=postgres.bneyjtztnmlmanmigjqe
DB_PASSWORD=BthvPWst9Ub8IbtI
DB_NAME=postgres
DB_PORT=6543

Configuração da Conexão com o Banco de Dados

Agora, vamos criar o arquivo de configuração da conexão com o banco de dados em config/database.js:

const { Pool } = require('pg');
require('dotenv').config();

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,
});

// Função para testar a conexão
async function testConnection() {
  const client = await pool.connect();
  try {
    await client.query('SELECT NOW()');
    console.log('Conexão com o banco de dados PostgreSQL estabelecida com sucesso!');
    return true;
  } catch (error) {
    console.error('Erro ao conectar ao banco de dados PostgreSQL:', error);
    return false;
  } finally {
    client.release();
  }
}

// Função para executar uma consulta SQL
async function query(text, params) {
  const client = await pool.connect();
  try {
    const result = await client.query(text, params);
    return result;
  } catch (error) {
    console.error('Erro ao executar consulta:', error);
    throw error;
  } finally {
    client.release();
  }
}

module.exports = {
  pool,
  testConnection,
  query
};

Vamos criar a Infraestrutura do banco

*-- Criando tabela de categorias*
CREATE TABLE IF NOT EXISTS categorias (
  id SERIAL PRIMARY KEY,
  nome VARCHAR(100) NOT NULL,
  descricao TEXT
);

*-- Criando tabela de fornecedores*
CREATE TABLE IF NOT EXISTS fornecedores (
  id SERIAL PRIMARY KEY,
  nome VARCHAR(100) NOT NULL,
  contato VARCHAR(100),
  telefone VARCHAR(20)
);

*-- Criando tabela de produtos*
CREATE TABLE IF NOT EXISTS produtos (
  id SERIAL PRIMARY KEY,
  nome VARCHAR(100) NOT NULL,
  preco DECIMAL(10, 2) NOT NULL,
  estoque INTEGER DEFAULT 0,
  categoria_id INTEGER REFERENCES categorias(id),
  fornecedor_id INTEGER REFERENCES fornecedores(id)
);

Criando o Modelo de Produto

Agora, vamos criar o arquivo models/produto.js: