Este é o backend para uma aplicação de chat em tempo real que permite aos usuários enviar mensagens, criar salas de chat e gerenciar amizades. A aplicação é projetada para suportar chats individuais e em grupo, com várias funcionalidades adicionais para melhorar a experiência do usuário.
- Node
- Fastify
- Prisma ORM
- Postgrest
- Tsup
- Zod
-
Clone o repositório:
git clone https://github.com/devmarcosantonio/chat
-
Abre o projeto e instale todas as depedências do projeto:
npm install
-
Crie um arquivo .env e configure as variáveis ambientes (Use ".env.exemple" como referência).
-
Suba o banco de dados com docker compose.
docker compose up -d
-
Rode todas as migrates do banco de dados (o banco de dados deve está rodando).
npx prisma migrate deploy
-
Rodar o sistema
npm run dev
-
Se quiser fazer os testes, você pode digitar:
npm run test
- Usuários podem criar uma conta e fazer login.
- Usuários podem atualizar seu perfil (nome de usuário, avatar, etc.).
- Usuários podem fazer logout da conta.
- Usuários podem adicionar e remover amigos.
- Usuários podem enviar e receber mensagens em tempo real.
- Usuários podem entrar em diferentes salas de chat.
- Usuários podem ver uma lista de participantes em cada sala de chat.
- Usuários recebem notificações para novas mensagens quando a janela do chat não está aberta.
- Usuários podem enviar e receber emojis nas mensagens.
- Usuários podem ver o status de digitação de outros ("Usuário está digitando...").
- Usuários podem enviar e receber arquivos de mídia (ex.: imagens, vídeos).
- Usuários podem ver o horário de envio das mensagens.
- Usuários podem verificar quais usuários estão online ou offline.
- Usuários podem criar salas de chat em grupo.
- Usuários podem adicionar ou remover membros das salas de chat em grupo.
- Usuários podem designar administradores para as salas de chat em grupo.
- Usuários podem enviar convites para outros usuários participarem de uma sala de chat em grupo.
- O sistema permite buscar mensagens dentro de uma sala de chat.
- O sistema suporta o envio de mensagens de áudio.
- O sistema exibe a quantidade de mensagens não lidas.
- O sistema é responsivo para uso em dispositivos móveis.
- Usuários podem fixar mensagens importantes em uma sala de chat.
- O sistema permite a criação de canais públicos e privados.
- Implementar endpoints para criação de conta (registro).
- Implementar endpoints para login e logout.
- Criar um sistema para atualizações de perfil (nome de usuário, avatar, etc.).
- Implementar a lógica para adicionar e remover amigos.
- Adicionar validação e tratamento de erros para operações de usuário.
- Implementar a lógica para envio de mensagens em tempo real (WebSockets ou similar).
- Implementar a lógica para recepção de mensagens em tempo real.
- Criar um sistema para gerenciar salas de chat (criação, entrada, saída).
- Implementar funcionalidade para listar participantes em cada sala de chat.
- Implementar um sistema de notificações para novas mensagens.
- Adicionar suporte para envio e recebimento de emojis nas mensagens.
- Implementar o status de digitação ("Usuário está digitando...").
- Adicionar suporte para envio e recebimento de arquivos de mídia (imagens, vídeos).
- Implementar exibição de timestamps das mensagens.
- Criar lógica para mostrar quais usuários estão online ou offline.
- Implementar lógica para criação de salas de chat em grupo.
- Adicionar funcionalidade para adicionar ou remover membros das salas de chat em grupo.
- Implementar um sistema para designar administradores para salas de chat em grupo.
- Criar lógica para enviar convites para participar de salas de chat em grupo.
- Implementar um sistema para buscar mensagens em uma sala de chat.
- Adicionar suporte para envio de mensagens de áudio.
- Implementar um contador de mensagens não lidas.
- Garantir que o sistema seja responsivo para dispositivos móveis.
- Implementar funcionalidade para fixar mensagens importantes em uma sala de chat.
- Criar lógica para criação de canais públicos e privados.
- Implementar autenticação de usuário (JWT ou OAuth).
- Garantir que todas as operações sensíveis estejam protegidas e autenticadas.
- Adicionar criptografia para senhas e dados sensíveis.
- Criar testes unitários e de integração para todas as funcionalidades.
- Documentar a API usando Swagger ou ferramentas similares.
- Implementar monitoramento e registro de logs para identificar e resolver problemas em produção.
- Configurar ambientes de desenvolvimento e produção.
- Implementar CI/CD para automatizar a implantação.
- Configurar o banco de dados e criar as migrações necessárias.
- ID: Identificador único do usuário.
- Apelido: Nome unico de usuário.
- Nome: Nome do usuário (deve ser único).
- Email: Endereço de email do usuário (para login).
- Senha: Senha do usuário (armazenada de forma segura).
- Status: Indica se o usuário está online/offline.
- Data de Criação: Data em que o usuário foi registrado.
- ID: Identificador único das configurações.
- ID do Usuário: Referência ao usuário.
- Preferências de Notificação: Configurações sobre como e quando o usuário deseja receber notificações.
- Tema: Preferências de tema (claro/escuro).
ID: Identificador único da amizade. ID do Usuário 1: Referência ao primeiro usuário. ID do Usuário 2: Referência ao segundo usuário. Data de Criação: Data em que a amizade foi estabelecida.
- ID: Identificador único da mensagem.
- Texto: Conteúdo da mensagem.
- ID do Remetente: Referência ao usuário que enviou a mensagem.
- ID do Destinatário: Referência ao usuário que receberá a mensagem (opcional).
- Timestamp: Data e hora em que a mensagem foi enviada.
- ID: Identificador único da mensagem.
- Texto: Conteúdo da mensagem.
- ID do Remetente: Referência ao usuário que enviou a mensagem.
- ID do canal/grupo: Referência ao grupo (opcional).
- Timestamp: Data e hora em que a mensagem foi enviada.
- ID: Identificador único do canal/grupo.
- Nome: Nome do canal ou grupo.
- Descrição: Descrição do canal ou grupo (opcional).
- Criador: Referência ao usuário que criou o canal/grupo.
- Data de Criação: Data em que o canal/grupo foi criado.
- Membros: Lista de usuários que são membros do canal/grupo.
- ID: Identificador único da participação.
- ID do Usuário: Referência ao usuário que é membro do grupo.
- ID do Canal/Grupo: Referência ao grupo em que o usuário é membro.
- Data de Adição: Data em que o usuário foi adicionado ao grupo.
- ID: Identificador único da notificação.
- Texto: Conteúdo da notificação.
- ID do Usuário: Referência ao usuário que receberá a notificação.
- Timestamp: Data e hora em que a notificação foi criada.
- Lida: Booleano para indicar se a notificação foi lida.