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).createdAteupdatedAtimplí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, defaultpending).attempts(default0),maxAttempts(default5).availableAt(defaultNOW),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
OtpeGroupLinkDispatchQueueno código atual. GroupLinkDispatchQueue.enrollIdreferencia 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:
createdAteupdatedAtemGroupLinkDispatchQueue;validUntilgoverna 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
GroupLinkDispatchStatustipa os estados aceitos na camada TypeScript.maxAttemptsmínimo operacional é forçado para>= 1no enfileiramento.- Delay negativo é normalizado para
0no 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 paraOtp. - Não há migration versionada para
GroupLinkDispatchQueue; a tabela depende dedb.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
OtpouOtpspara 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