Pular para o conteúdo principal

Modelo de Dados

Introdução ao documento

Este documento descreve o modelo de dados persistido localmente pelo serviço, com foco em entidades Sequelize, migrações e regras observáveis em runtime. Evidência: src/models/otp.ts:18 Evidência: src/models/groupLinkDispatchQueue.ts:60

Versionamento

  • Versão do documento: 2.0.0.
  • Última atualização: 2026-03-18. Evidência: codex-promts.md:125

Referencial teórico

  • Sequelize Model Definition.
  • Mermaid ER Diagram. Evidência: src/models/otp.ts:2 Evidência: src/models/groupLinkDispatchQueue.ts:2

Entidades/tabelas principais

1) Otp (model Sequelize)

Campos observados:

  • phoneNumber (STRING, obrigatório).
  • code (STRING, obrigatório).
  • validUntil (DATE, obrigatório).
  • createdAt e updatedAt implícitos do Sequelize. Evidência: src/models/otp.ts:19 Evidência: src/models/otp.ts:27 Evidência: src/models/otp.ts:33

2) GroupLinkDispatchQueue (model Sequelize)

Campos observados:

  • id (INTEGER, PK, auto incremento).
  • templateId, phone, name, groupName, enrollId (obrigatórios).
  • status (STRING, default pending).
  • attempts (default 0), maxAttempts (default 5).
  • availableAt (default NOW), processingStartedAt, sentAt, lastError.
  • Índice em (status, availableAt). Evidência: src/models/groupLinkDispatchQueue.ts:62 Evidência: src/models/groupLinkDispatchQueue.ts:67 Evidência: src/models/groupLinkDispatchQueue.ts:87 Evidência: src/models/groupLinkDispatchQueue.ts:92 Evidência: src/models/groupLinkDispatchQueue.ts:102 Evidência: src/models/groupLinkDispatchQueue.ts:123

Relacionamentos e cardinalidade

  • Não há relacionamento explícito (FK) entre Otp e GroupLinkDispatchQueue no código atual.
  • GroupLinkDispatchQueue.enrollId referencia um identificador externo de matrícula (string), sem constraint local. Evidência: src/models/otp.ts:18 Evidência: src/models/groupLinkDispatchQueue.ts:83 Evidência: src/workers/groupLinkDispatchWorker.ts:106

Campos críticos (PK, FK, unique, status, timestamps)

  • PK: GroupLinkDispatchQueue.id.
  • FK: não identificada em models/migrations.
  • Unique: não identificada em models/migrations.
  • Status de fila: pending, processing, sent, failed.
  • Timestamps: createdAt e updatedAt em GroupLinkDispatchQueue; validUntil governa expiração de OTP. Evidência: src/models/groupLinkDispatchQueue.ts:4 Evidência: src/models/groupLinkDispatchQueue.ts:65 Evidência: src/models/groupLinkDispatchQueue.ts:56 Evidência: src/routes/otp.ts:37

Constraints e enums

  • GroupLinkDispatchStatus tipa os estados aceitos na camada TypeScript.
  • maxAttempts mínimo operacional é forçado para >= 1 no enfileiramento.
  • Delay negativo é normalizado para 0 no enfileiramento. Evidência: src/models/groupLinkDispatchQueue.ts:4 Evidência: src/services/groupLinkDispatchQueue.ts:34 Evidência: src/services/groupLinkDispatchQueue.ts:33

Divergências entre modelo e runtime

  • A migration cria tabela Otps, enquanto o model aponta para Otp.
  • Não há migration versionada para GroupLinkDispatchQueue; a tabela depende de db.sync() em runtime. Evidência: src/migrations/20240807154411-create-otp.mjs:5 Evidência: src/models/otp.ts:33 Evidência: src/server.ts:79 Evidência: src/models/groupLinkDispatchQueue.ts:122

ERD Mermaid

Evidência: src/models/otp.ts:19 Evidência: src/models/groupLinkDispatchQueue.ts:62

Pendências

  • Confirmar se a tabela de OTP em produção usa Otp ou Otps para evitar inconsistência entre ambientes.
  • Confirmar estratégia de migração para GroupLinkDispatchQueue (atualmente sem migration dedicada). Evidência: src/migrations/20240807154411-create-otp.mjs:5 Evidência: src/models/otp.ts:33 Evidência: src/models/groupLinkDispatchQueue.ts:122