https://github.com/marcus-soares1/api-com-postgres
Projeto de estudo guiado pelas aulas do OneBitCode para criação de uma API usnado uma integração com banco de dados Postgres com o driver base.
https://github.com/marcus-soares1/api-com-postgres
backend-api database nodejs postgresql
Last synced: 3 months ago
JSON representation
Projeto de estudo guiado pelas aulas do OneBitCode para criação de uma API usnado uma integração com banco de dados Postgres com o driver base.
- Host: GitHub
- URL: https://github.com/marcus-soares1/api-com-postgres
- Owner: marcus-soares1
- License: mit
- Created: 2025-04-29T15:40:20.000Z (about 1 year ago)
- Default Branch: main
- Last Pushed: 2025-05-07T23:46:14.000Z (about 1 year ago)
- Last Synced: 2025-05-08T00:29:14.500Z (about 1 year ago)
- Topics: backend-api, database, nodejs, postgresql
- Language: JavaScript
- Homepage:
- Size: 91.8 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# API de Produtos com Node.js e PostgreSQL




## Descrição do Projeto
Este projeto consiste em uma API RESTful simples para gerenciamento de produtos com integração a um banco de dados. Desenvolvida como um estudo guiado pelas aulas da OneBitCode, a API oferece funcionalidades básicas de operação de dados (CRUD), utilizando Node.js, o framework Express.js.
O objetivo principal deste projeto foi solidificar o entendimento sobre:
- Criação de rotas e controllers com Express.js.
- Interação com um banco de dados relacional (PostgreSQL) utilizando queries SQL diretas.
- Implementação das operações CRUD de forma eficiente e organizada.
- Estrutura básica de uma API RESTful.
- Aprender a utilizar a biblioteca jest em testes unitários, que ajudam a validar se o comportamento das funções está retornando o resultado esperado.
## Observações
Tendo em vista que esse projeto foi criado para o estudo para um caso específico de integração de uma API com banco de dados, e também aproveitei para aprender a utilizar a biblioteca **jest** em teste unitários, existem pontos não tratados propositalmente visando a agilidade no desenvolvimento, como o tratamento de erros e exceções e a arquitetura apropriada. Esses são pontos são tratados em outros projetos.
Assim como já utilizei em outros casos de estudo, seria utilizado a biblioteca **ZOD** para ajudar na validação de dados e o uso de **middlewares de erro** para o tratamento de erros que pudessem aparecer em algum lugar da aplicação.
## Funcionalidades
A API de Produtos oferece os seguintes endpoints:
- **`GET /api/products`**: Lista todos os produtos cadastrados.
- **`GET /api/products/:id`**: Exibe os detalhes de um produto específico, identificado pelo seu ID.
- **`POST /api/products`**: Cadastra um novo produto. Espera um corpo de requisição no formato JSON com os campos: `name` (string, obrigatório), `description` (string), `price` (number, obrigatório), `stockQuantity` (number, obrigatório), e `isActive` (boolean, opcional, default: true).
- **`PUT /api/products/:id`**: Atualiza os dados de um produto existente, identificado pelo seu ID. Espera um corpo de requisição JSON com os campos a serem atualizados.
- **`DELETE /api/products/:id`**: Remove um produto do banco de dados, identificado pelo seu ID.
## Tecnologias Utilizadas
- **Node.js**: Ambiente de execução JavaScript para o backend.
- **Express.js**: Flexível para Node.js simples de se utilizar e adequado para o projeto realizado.
- **PostgreSQL**: Sistema de gerenciamento de banco de dados relacional.
- **`pg`**: Driver PostgreSQL para Node.js, utilizado para interação com o banco de dados.
- **dotenv**: Para gerenciamento de variáveis de ambiente.
- **jest**: Biblioteca utilizada para testes unitários que garantem que o código funciona como deveria.
## Pré-requisitos
Antes de executar o projeto, certifique-se de ter instalado em sua máquina:
- **Node.js** (versão >= 18)
- **npm** (geralmente instalado com o Node.js)
- **PostgreSQL** (com um servidor rodando)
## Configuração e Execução
1. **Clone o repositório:**
```bash
gh repo clone marcus-soares1/api-com-postgres
```
2. **Instale as dependências:**
```bash
npm install
```
3. **Configure as variáveis de ambiente:**
Crie um arquivo `.env` (ou renomeie e edite o arquivo `.env-exemple`) na raiz do projeto com as suas informações de conexão com o banco de dados PostgreSQL. Exemplo:
```env
PORT=porta_da_api
POSTGRE_USER=nome_usuario
POSTGRE_PASSWORD=senha_do_usuario
#HOST=localhost
#POSTGRE_PORT=porta_do_banco
DATABASE_NAME=nome_banco
```
4. **Crie e sincronize o banco de dados:**
Execute o script para criar as tabelas no seu banco de dados PostgreSQL:
```bash
npm run db:sync
```
5. **Realize os testes unitários:**
```bash
npm test
```
6. **Inicie o servidor:**
```bash
npm start
```
Ou, para desenvolvimento com hot-reloading:
```bash
npm run dev
```
O servidor estará rodando em `http://localhost:3000` por padrão, mas é possível mudar a porta através do arquivo de variáveis de ambiente.
## Como Utilizar a API
Você pode interagir com a API utilizando ferramentas como `curl`, Postman, Insomnia ou qualquer outra ferramenta HTTP client. Abaixo estão alguns exemplos:
**Listar todos os produtos:**
```bash
curl http://localhost:3000/api/products
````
**Buscar produto pelo ID:**
```bash
curl http://localhost:3000/api/products/1
````
**Criar um novo produto:**
```bash
curl -X POST -H "Content-Type: application/json" -d '{
"name": "Novo Produto",
"description": "Descrição do novo produto",
"price": 25.99,
"stockQuantity": 100
}' http://localhost:3000/api/products
````
**Atualizar um produto:**
```bash
curl -X PUT -H "Content-Type: application/json" -d '{
"price": 29.99,
"stockQuantity": 150
}' http://localhost:3000/api/products/1
````
**Deletar um produto:**
```bash
curl -X DELETE http://localhost:3000/api/products/1
````