M4TCH.AI

M4TCH.AI

Topology & Data Flow

Arquitetura do Sistema

Uma visão geral e profunda da engenharia por trás do M4TCH.AI. O backend foi desenvolvido sobre Node.js (Express), comunicando-se de forma híbrida através de REST e WebSockets (Socket.io). O banco de dados utiliza um modelo relacional focado em performance.

1. Core Stack & Segurança

RUNTIME

Node.js + Express

Servidor modularizado rodando na porta definida via variáveis de ambiente. Utiliza middlewares como cors para políticas de acesso e morgan para logs de requisições HTTP.

SECURITY

Autenticação (JWT)

O acesso às rotas privadas é barrado pelo authMiddleware.js, que valida o token Bearer injetando o req.user no ciclo de vida da requisição. As senhas no banco são armazenadas utilizando hash através da biblioteca bcryptjs.

2. Modelo Relacional de Dados (MySQL)

A arquitetura do banco de dados (m4tch_db) foi desenhada para suportar milhões de interações (swipes) e mensagens sem degradar o cálculo da Inteligência Artificial.

Identidade e Autenticação

  • users: Tabela raiz. Armazena credenciais (email, password_hash), status de verificação e o push_token para notificações.
  • verification_codes: Tabela temporária para gestão de OTP (códigos numéricos via email) e expiração.
  • user_match_profiles: O coração dos dados. Utiliza a flexibilidade do formato LONGTEXT na coluna answers_json, preservando colunas vitais indexadas nativamente (gender, lat, lng, age) para consultas hiper-rápidas.

Interação e Chat

  • user_interactions: Registra todo evento de Swipe. Define se user_from_id deu um 'like' ou 'dislike' em user_to_id.
  • matches: Criada instantaneamente apenas quando ocorre um 'like' mútuo na tabela anterior.
  • messages: Histórico de conversas atrelado diretamente a um match_id.
  • match_scores: Tabela de cache. Salva os eixos calculados (físico, emocional, social) pela CompatibilityEngine para não travar o banco em tempo real.

3. Microsserviços e Ferramentas

WebSockets (Socket.io)

O servidor suporta comunicação TCP bidirecional configurado no arquivo raiz (index.js). Ao logar, o usuário entra em uma sala exclusiva user_${userId}. Usado para broadcast de status, confirmações de match e chat.

Processamento de Imagem (Sharp)

Os uploads de fotos não salvam imagens cruas. A rota /upload-photos captura o arquivo em memória via multer e utiliza a biblioteca sharp para redimensionar (800x800) e converter os arquivos para WebP, economizando banda extrema da CDN.

Push Notifications (Expo)

A integração mobile é feita através do expo-server-sdk. Ao enviar uma mensagem de chat, além do WebSocket, o servidor dispara um alerta silencioso estilizado com o nome do remetente (padrão WhatsApp) direto no SO do usuário.

Transacionais via Nodemailer

O envio de chaves OTP no fluxo de Autenticação utiliza SMTP puro (configurado para servidores cPanel) com disparo de e-mails em formato HTML dinâmico, suportando templates em Inglês ou Português.