https://github.com/felipesantos92dev/nodejs-postgresql-alunos
Projeto backend de API restfull integrando NodeJS e banco de dados PostgreSQL
https://github.com/felipesantos92dev/nodejs-postgresql-alunos
Last synced: about 1 month ago
JSON representation
Projeto backend de API restfull integrando NodeJS e banco de dados PostgreSQL
- Host: GitHub
- URL: https://github.com/felipesantos92dev/nodejs-postgresql-alunos
- Owner: FelipeSantos92Dev
- Created: 2024-04-13T14:25:00.000Z (about 1 year ago)
- Default Branch: main
- Last Pushed: 2024-04-17T03:44:28.000Z (about 1 year ago)
- Last Synced: 2024-04-17T08:25:44.902Z (about 1 year ago)
- Language: JavaScript
- Size: 29.3 KB
- Stars: 0
- Watchers: 1
- Forks: 3
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# 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
```bash
sudo su - postgres
psql
``````sql
CREATE DATABASE users_pg_dev;
```2. Criar um arquivo `.env` na raiz do projeto para armazenar as variáveis de ambiente
```env
DB_USER=user
DB_PASSWORD=password
DB_HOST=localhost
DB_PORT=5432
DB_NAME=database
```3. Instalar a biblioteca `pg-promise` para integração com o banco de dados PostgreSQL
```bash
npm install pg-promise
```4. Criar um arquivo `database/index.js` na raiz do projeto para configurar a conexão com o banco de dados
```javascript
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);
});
}
```5. Importar a função `createConnection` no arquivo `server.js` e chamar a função para testar a conexão com o banco de dados
```javascript
import createConnection from "./database/index.js";createConnection();
```6. Criação da tabela `users` no arquivo `database/create-tables.sql`
```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
);
```7. Atualizar configurações de conexão com o banco de dados no arquivo `database/index.js`
```javascript
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;
```8. Implementação dos métodos CRUD para a tabela `users` no arquivo `UsersRepository.js`
```javascript
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",
);
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);
}
}
```9. Implementação de métodos assíncronos no arquivo `users.controller.js`
## Autor
[Felipe Santos](https://github.com/FelipeSantos92Dev)
## Links Úteis
- [NodeJS](https://nodejs.org/en/)
- [NPM](https://www.npmjs.com/)
- [Express](https://expressjs.com/)
- [Nodemon](https://nodemon.io/)
- [Git](https://git-scm.com/)