leticiabizaglio / nodejs-students

Projeto backend de API restfull integrando NodeJS e banco de dados PostgreSQL

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Projeto Inicial NodeJS

Descrição

Ponto de partida para desenvolvimento em NodeJS, integrando Express, Nodemon e dotenv para otimizar a produtividade e permitir que desenvolvedores foquem na lógica do aplicativo.

Objetivo

Encorajar boas práticas e fornecer uma base que promova a escalabilidade e manutenção, inspirando a criação de funcionalidades inovadoras e soluções para desafios complexos no ecossistema NodeJS.

Tecnologias

  • NodeJS
  • PostgreSQL
  • NPM
  • Express
  • Nodemon
  • Git

Pré-requisitos

Para executar este projeto é necessário ter instalado:

  • NodeJS
  • PostgreSQL
  • NPM

Instalação

Para instalar o projeto, siga os passos abaixo:

  1. Clone o projeto para sua máquina
  2. Execute o comando npm install para instalar as dependências do projeto
  3. Execute o comando npm run dev para iniciar o projeto

Etapas de integração com o banco de dados PostgreSQL

  1. Criação da base de dados
sudo su - postgres
psql
CREATE DATABASE users_pg_dev;
  1. Criar um arquivo .env na raiz do projeto para armazenar as variáveis de ambiente
DB_USER=user
DB_PASSWORD=password
DB_HOST=localhost
DB_PORT=5432
DB_NAME=database
  1. Instalar a biblioteca pg-promise para integração com o banco de dados PostgreSQL
npm install pg-promise
  1. Criar um arquivo database/index.js na raiz do projeto para configurar a conexão com o banco de dados
import pgp from "pg-promise";
import { config } from "dotenv";

config();

const user = process.env.DB_USER;
const password = process.env.DB_PASSWORD;
const host = process.env.DB_HOST;
const port = process.env.DB_PORT;
const database = process.env.DB_NAME;

const dbURL =
  "postgres://" +
  user +
  ":" +
  password +
  "@" +
  host +
  ":" +
  port +
  "/" +
  database;

export default function createConnection() {
  const db = pgp()(dbURL);

  db.query("SELECT 1 + 1 AS result").then((result) => {
    console.log(result);
  });
}
  1. Importar a função createConnection no arquivo server.js e chamar a função para testar a conexão com o banco de dados
import createConnection from "./database/index.js";

createConnection();
  1. Criação da tabela users no arquivo database/create-tables.sql
CREATE TABLE IF NOT EXISTS users (
  id VARCHAR(36) PRIMARY KEY,
  name VARCHAR(255) NOT NULL,
  email VARCHAR(255) NOT NULL UNIQUE,
  password VARCHAR(255) NOT NULL
);
  1. Atualizar configurações de conexão com o banco de dados no arquivo database/index.js
import pgp from "pg-promise";
import { config } from "dotenv";
import path, { join } from "path";
import { fileURLToPath } from "url";

config();

const user = process.env.DB_USER;
const password = process.env.DB_PASSWORD;
const host = process.env.DB_HOST;
const port = process.env.DB_PORT;
const database = process.env.DB_NAME;

const dbURL =
  "postgres://" +
  user +
  ":" +
  password +
  "@" +
  host +
  ":" +
  port +
  "/" +
  database;

const db = pgp()(dbURL);

export function createConnection() {
  db.query("SELECT 1 + 1 AS result").then((result) => {
    console.log(result);
  });
}

// Captura o caminho do arquivo atual
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);

const filePath = join(__dirname, "create-tables.sql");
const query = new pgp.QueryFile(filePath);

db.query(query);

export default db;
  1. Implementação dos métodos CRUD para a tabela users no arquivo UsersRepository.js
import db from "../../database/index.js";

export default class UsersRepository {
  constructor() {
    this.db = db;
  }

  async getUsers() {
    const allUsers = await this.db.manyOrNone("SELECT * FROM users");
    // console.log(allUsers);
    return allUsers;
  }

  async getUserById(id) {
    const user = await this.db.oneOrNone(
      "SELECT * FROM users WHERE id = $1",
      id
    );
    return user;
  }

  async getUserByEmail(email) {
    const user = await this.db.oneOrNone(
      "SELECT * FROM users WHERE email = $1",
      email
    );
    return user;
  }

  async createUser(user) {
    await this.db.none(
      "INSERT INTO users (id, name, email, password) VALUES ($1, $2, $3, $4)",
      [user.id, user.name, user.email, user.password]
    );
    return user;
  }

  async updateUser(id, name, email, password) {
    const user = await this.getUserById(id);

    if (!user) {
      return null;
    }

    const updatedUser = await this.db.one(
      "UPDATE users SET name = $1, email = $2, password = $3 WHERE id = $4 RETURNING *",
      [name, email, password, id]
    );

    return updatedUser;
  }

  async deleteUser(id) {
    await this.db.none("DELETE FROM users WHERE id = $1", id);
  }
}
  1. Implementação de métodos assíncronos no arquivo users.controller.js

Autor

Felipe Santos

Links Úteis

About

Projeto backend de API restfull integrando NodeJS e banco de dados PostgreSQL


Languages

Language:JavaScript 100.0%