Skip to content

A full-stack blog project featuring an interactive "black hole" UI, built with Node.js, React/TS, and Docker

Notifications You must be signed in to change notification settings

jvpiires/singularity

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 

Repository files navigation

Portfolio & Blog API Backend

Node.js TypeScript Express.js PostgreSQL JWT

Este repositório contém o código-fonte do backend para um sistema de portfólio e blog pessoal. A API foi construída com foco em segurança, escalabilidade e boas práticas de desenvolvimento, utilizando Node.js, Express e TypeScript.

✨ Features

  • Autenticação com JWT: Sistema seguro de registro e login usando JSON Web Tokens.
  • Autorização por Nível de Acesso (RBAC): Distinção de permissões entre usuários comuns (user) e administradores (admin).
  • CRUD Completo de Posts: Usuários podem criar, ler, atualizar e deletar seus próprios posts.
  • CRUD Completo de Usuários: Administradores podem listar e deletar usuários.
  • Upload de Imagem de Perfil: Usuários podem fazer upload de uma foto de perfil no registro e na edição, utilizando multer.
  • Paginação: Listagens de posts e usuários são paginadas para melhor performance.
  • Validação de Dados: Validação robusta de todas as entradas da API com Zod.
  • Respostas Enriquecidas: Uso de JOIN para incluir dados do autor nos posts, otimizando o trabalho do frontend.

🛠️ Stack de Tecnologias

A API foi construída utilizando as seguintes tecnologias e bibliotecas:

Categoria Tecnologias
Backend Node.js Express.js
Linguagem TypeScript
Banco de Dados PostgreSQL
Validação Zod
Autenticação JWT Bcrypt
Upload de Arquivos Multer
Dev Tools Nodemon ts-node dotenv

📂 Fluxo de Pastas

A estrutura do projeto foi organizada visando a separação de responsabilidades, facilitando a manutenção e escalabilidade.

/
├── public/                 # Arquivos públicos acessíveis pela web.
│   └── uploads/            # Onde as imagens de perfil são salvas.
├── src/                    # ❤️ Coração do projeto com o código-fonte TypeScript.
│   ├── config/             # Configurações de bibliotecas (ex: multer).
│   ├── db/                 # Configuração da conexão com o banco de dados.
│   ├── middleware/         # Funções que interceptam requisições (autenticação, autorização).
│   ├── routes/             # Definição de todos os endpoints da API.
│   ├── schemas/            # Schemas de validação com Zod.
│   ├── utils/              # Funções "helpers" reutilizáveis (ex: paginação).
│   └── index.ts            # Ponto de entrada da aplicação que inicia o servidor.
├── .env                    # Arquivo com as variáveis de ambiente (segredos).
├── package.json            # Define os scripts e dependências do projeto.
└── tsconfig.json           # Configurações do compilador TypeScript.

🚀 Começando

Siga os passos abaixo para rodar o projeto localmente.

Pré-requisitos

Instalação

  1. Clone o repositório:

    git clone [https://seu-repositorio.com/projeto.git](https://seu-repositorio.com/projeto.git)
    cd projeto
  2. Instale as dependências:

    npm install
  3. Configure o Banco de Dados: Execute os scripts SQL que criamos para gerar as tabelas users e posts no seu banco de dados PostgreSQL.

  4. Configure as Variáveis de Ambiente: Crie um arquivo .env na raiz do projeto e preencha com base no exemplo abaixo:

    # Configuração do Banco de Dados
    DATABASE_URL="postgresql://SEU_USUARIO:SUA_SENHA@localhost:5432/SEU_BANCO"
    
    # Configuração da Aplicação
    PORT=3000
    APP_URL=http://localhost:3000
    
    # Segredo para o JWT
    JWT_SECRET="SEU_SEGREDO_SUPER_SECRETO_E_LONGO_AQUI"
  5. Rode o servidor em modo de desenvolvimento:

    npm run dev

    O servidor estará rodando em http://localhost:3000.

⚙️ Fluxo das Rotas (API Endpoints)

Autenticação

Endpoint Método Descrição Proteção
/api/register POST Registra um novo usuário com imagem opcional. Público
/api/login POST Autentica um usuário e retorna um token JWT. Público

Usuários

Endpoint Método Descrição Proteção
/api/users GET Lista todos os usuários (com paginação). Admin
/api/users/me PATCH Atualiza os dados do usuário logado (inclui imagem). Usuário
/api/users/:id DELETE Deleta um usuário específico. Admin

Posts

Endpoint Método Descrição Proteção
/api/posts GET Lista todos os posts ou filtra por usuário (paginado). Público
/api/posts/:id GET Busca um post específico pelo seu ID. Público
/api/posts POST Cria um novo post. Usuário
/api/posts/:id PATCH Atualiza um post existente. Dono do Post
/api/posts/:id DELETE Deleta um post. Dono ou Admin

🔑 Meios de Autenticação

Para acessar as rotas protegidas, você deve primeiro obter um token JWT através da rota /api/login.

Após receber o token, inclua-o no cabeçalho Authorization de todas as requisições para rotas protegidas, utilizando o esquema Bearer.

Exemplo: Authorization: Bearer seu_token_jwt_aqui

About

A full-stack blog project featuring an interactive "black hole" UI, built with Node.js, React/TS, and Docker

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published