Skip to content

sheilapaiva/docker-fullstack-example

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 

Repository files navigation

🚀 API GraphQL com Node.js, Express, MongoDB e JWT

Este projeto é uma API backend desenvolvida com Node.js, Express e Apollo Server, utilizando GraphQL para gerenciamento de dados e MongoDB como banco de dados.

A aplicação implementa:

  • ✅ Registro de usuários
  • ✅ Login com autenticação JWT
  • ✅ Autorização para acesso a dados protegidos
  • ✅ Hash de senha com bcrypt
  • ✅ Context API do GraphQL
  • ✅ Arquitetura organizada por schema e resolvers

🏗️ Tecnologias Utilizadas

  • Node.js
  • Express
  • Apollo Server (GraphQL)
  • MongoDB + Mongoose
  • JWT (jsonwebtoken)
  • bcryptjs
  • cors

📦 Arquitetura do Projeto

image

🏗 Tecnologias Utilizadas

Backend

  • Node.js
  • Express
  • Apollo Server
  • GraphQL
  • MongoDB
  • Mongoose
  • JWT (jsonwebtoken)
  • bcryptjs
  • dotenv
  • cors

Frontend

  • React
  • Apollo Client (ou fetch/axios)

Infraestrutura

  • Docker
  • Docker Compose

⚙️ Pré-requisitos

Antes de iniciar, você precisa ter instalado:

  • Docker
  • Docker Compose

▶️ Como Executar o Projeto

Na raiz do projeto, execute:

docker-compose up --build

Esse comando irá:

  • Criar a imagem do backend
  • Criar a imagem do frontend
  • Subir o container do MongoDB
  • Criar a rede interna entre os serviços
  • Iniciar todos os containers

🌐 Acessos

Serviço URL
Frontend http://localhost:3000
Backend (GraphQL) http://localhost:5000/graphql
MongoDB (interno) mongodb://mongo:27017

🔁 Fluxo real do usuário

  1. Usuário clica em Registrar

  2. Frontend envia mutation register

  3. Backend:

  • Criptografa senha

  • Salva no MongoDB

  • Gera JWT

  1. Retorna token

  2. Usuário faz login (ou usa token recebido)

  3. Token é enviado no header

  4. Usuário clica em Listar usuários

  5. Backend valida token

  6. Retorna lista de usuários


🖥 PASSO A PASSO NA TELA DO APOLLO

Acesse:

http://localhost:5000/graphql

REGISTRAR USUÁRIO

Cole no Apollo:

mutation {
  register(
    name: "Sheila"
    email: "sheila@email.com"
    password: "123456"
  ) {
    token
  }
}

Clique em ▶ Run

{
  "data": {
    "register": {
      "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
    }
  }
}

LOGIN

Agora rode:

mutation {
  login(
    email: "sheila@email.com"
    password: "123456"
  ) {
    token
  }
}

Clique em ▶ Run

Você receberá outro token.

CONFIGURAR O HEADER

Agora clique em Headers (aba ao lado da query).

Cole:

{
  "Authorization": "Bearer COLE_AQUI_SEU_TOKEN"
}

⚠ Substitua pelo token recebido.

LISTAR USUÁRIOS (Query protegida)

Agora rode:

query {
  users {
    id
    name
    email
  }
}

Clique em ▶ Run

✅ Resultado esperado:

{
  "data": {
    "users": [
      {
        "id": "...",
        "name": "Sheila",
        "email": "sheila@email.com"
      }
    ]
  }
}

🔐 Funcionalidades Implementadas

✅ Registro de Usuário

  • Criptografia de senha com bcrypt
  • Geração de token JWT

✅ Login

  • Validação de email e senha
  • Retorno de token JWT

✅ Autorização

  • Middleware de autenticação
  • Proteção de queries privadas

✅ Listagem de Usuários (Protegida)


📊 Schema GraphQL

type User { id: ID! name: String! email: String! }

type AuthPayload { token: String! }

type Query { users: \[User\] }

String!): AuthPayload login(email: String!, password: String!):
AuthPayload }

🔐 Como Funciona a Autenticação

  1. Usuário realiza registro ou login
  2. Backend gera um JWT
  3. Token é retornado ao frontend
  4. Frontend envia o token no header:

Authorization: Bearer SEU_TOKEN_AQUI

  1. Middleware valida o token
  2. Se válido, permite acesso às rotas protegidas

🐳 Docker

Backend

  • Baseado em imagem Node
  • Instala dependências
  • Expõe porta 5000
  • Executa node src/server.js

Frontend

  • Build da aplicação React
  • Exposto na porta 3000

MongoDB

  • Container oficial do MongoDB
  • Conectado via rede Docker interna

🔄 Fluxo da Aplicação

  1. Usuário acessa o frontend
  2. Frontend envia requisições GraphQL para o backend
  3. Backend valida token (se necessário)
  4. Backend consulta MongoDB
  5. Retorna dados ao frontend

👩‍💻 Autora

Desenvolvido por Sheila Paiva


📄 Licença

MIT License

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors