Este projeto é o backend do QuickChat, projetado para fornecer funcionalidades de comunicação em tempo real e gerenciamento de conversas. Ele permite a troca de mensagens, criação de salas de chat e autenticação de usuários.
A QuickChat API é uma API robusta e escalável desenvolvida para suportar aplicações de chat em tempo real. Seu principal objetivo é facilitar a comunicação instantânea entre usuários, gerenciar salas de conversas e persistir dados de chat de forma eficiente. Possui funcionalidades como:
- Comunicação em Tempo Real: Envio e recebimento instantâneo de mensagens.
- Gerenciamento de Salas de Chat: Criação e acesso a conversas específicas.
- Autenticação Segura: Proteção de rotas e recursos através de JSON Web Tokens (JWT).
- Persistência de Dados: Armazenamento de informações de chat e mensagens em um banco de dados NoSQL.
Este projeto foi construído utilizando as seguintes tecnologias principais:
- Node.js: Plataforma de execução JavaScript assíncrona.
- TypeScript: Superconjunto tipado de JavaScript que melhora a segurança e manutenibilidade do código.
- Express.js: Framework web rápido e minimalista para Node.js, utilizado para construir a API RESTful.
- Socket.IO: Biblioteca para comunicação bidirecional e em tempo real baseada em eventos.
- Google Firebase (Firestore): Banco de dados NoSQL baseado em nuvem para armazenamento de dados de chat e mensagens.
- JSON Web Token (JWT): Padrão para criação de tokens de acesso seguros para autenticação.
- Dotenv: Módulo para carregar variáveis de ambiente de um arquivo
.env. - CORS: Middleware para habilitar o Cross-Origin Resource Sharing.
- TSX: Ferramenta para executar arquivos TypeScript diretamente, sem compilação prévia, facilitando o desenvolvimento.
Siga os passos abaixo para configurar e executar a QuickChat API em seu ambiente local:
Certifique-se de ter o Node.js e o npm (ou Yarn) instalados em sua máquina.
- Node.js: Download e Instalação
- npm: Geralmente vem com o Node.js.
-
Clone o Repositório:
git clone https://github.com/Bruno2202/quickchat-api.git cd quickchat-api -
Instale as Dependências:
npm install # ou yarn install -
Configuração do Ambiente (
.env): Crie um arquivo.envna raiz do projeto com suas credenciais do Firebase e a chave secreta JWT. Um exemplo está disponível em.env.example.# Firebase Configuration (obtenha do console do Firebase) FIREBASE_API_KEY=sua_api_key FIREBASE_AUTH_DOMAIN=seu_auth_domain FIREBASE_PROJECT_ID=seu_project_id FIREBASE_STORAGE_BUCKET=seu_storage_bucket FIREBASE_MESSAGING_SENDER_ID=seu_messaging_sender_id FIREBASE_APP_ID=seu_app_id FIREBASE_MEASUREMENT_ID=seu_measurement_id # Chave Secreta para JWT (gerar uma string longa e aleatória) JWT_SECRET=sua_chave_secreta_jwt_bem_segura
- Para obter as credenciais do Firebase, acesse o Console do Firebase, selecione seu projeto, vá em "Configurações do projeto" (ícone de engrenagem) e na seção "Seus apps", clique em "Web" (se ainda não tiver um, adicione um novo app web). As configurações estarão lá.
- Para
JWT_SECRET, gere uma string complexa para garantir a segurança dos seus tokens.
Para iniciar o servidor em modo de desenvolvimento (com recarregamento automático):
npm run dev
# ou yarn devA API estará rodando em http://localhost:3000.
A estrutura de diretórios do projeto é organizada para seguir princípios de separação de responsabilidades (SRP) e modularidade, facilitando a navegação e a manutenção:
.
├── src/
│ ├── bll/ # Business Logic Layer: Contém a lógica de negócio e validações
│ │ ├── AuthBll.ts # Lógica de autenticação
│ │ └── ChatBll.ts # Lógica de gerenciamento de chats e mensagens
│ ├── config/ # Arquivos de configuração da aplicação
│ │ └── firebaseConfig.ts # Inicialização e configuração do Firebase
│ ├── controllers/ # Controladores da API: Lidam com requisições HTTP e delegam para a BLL
│ │ ├── AuthController.ts # Gerencia requisições de autenticação
│ │ └── ChatController.ts # Gerencia requisições de chat
│ ├── dal/ # Data Access Layer: Interage diretamente com o banco de dados (Firestore)
│ │ └── ChatDal.ts # Operações de CRUD para chats e mensagens
│ ├── middlewares/ # Middlewares Express para processamento de requisições
│ │ └── AuthMiddleware.ts # Middleware de autenticação JWT
│ ├── models/ # Modelos de dados (schemas) da aplicação
│ │ ├── ChatModel.ts # Modelo para estrutura de um chat
│ │ ├── MessageModel.ts # Modelo para estrutura de uma mensagem
│ │ └── UserModel.ts # Modelo para estrutura de um usuário
│ ├── routes/ # Definição das rotas da API
│ │ ├── AuthRoutes.ts # Rotas de autenticação
│ │ ├── ChatRoutes.ts # Rotas de chat
│ │ ├── HealthRoutes.ts # Rota de health check
│ │ └── index.ts # Roteador principal que agrega todas as rotas
│ └── index.ts # Ponto de entrada principal da aplicação (configuração do servidor, Socket.IO)
├── .env.example # Exemplo do arquivo de variáveis de ambiente
├── package.json # Metadados do projeto e lista de dependências
├── package-lock.json # Versões exatas das dependências (gerado pelo npm)
└── tsconfig.json # Configuração do compilador TypeScript
Contribuições são bem-vindas! Se você deseja contribuir para o projeto, siga estas diretrizes:
- Fork o repositório.
- Crie uma branch para sua feature (
git checkout -b feature/minha-feature). - Faça suas alterações e commit-as com mensagens claras e descritivas.
- Certifique-se de que o código compile sem erros (
npm run dev) e que as funcionalidades existentes não foram quebradas. - Envie suas alterações para o seu fork (
git push origin feature/minha-feature). - Abra um Pull Request (PR) para a branch
maindeste repositório.
Este projeto está licenciado sob a Licença ISC.
Este README foi gerado automaticamente pelo README.ai.