@greatapps/greatagents 0.0.1 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (97) hide show
  1. package/package.json +1 -1
  2. package/scripts/README.md +272 -0
  3. package/scripts/agents/create_table.sql +46 -0
  4. package/scripts/channels/create_table.sql +48 -0
  5. package/scripts/companies/create_table.sql +49 -0
  6. package/scripts/conversations/add_messages_reference.sql +42 -0
  7. package/scripts/conversations/create_table.sql +55 -0
  8. package/scripts/conversations_tags/create_table.sql +39 -0
  9. package/scripts/credentials/create_table.sql +63 -0
  10. package/scripts/leads/create_table.sql +63 -0
  11. package/scripts/leads_channels/create_table.sql +41 -0
  12. package/scripts/leads_tags/create_table.sql +39 -0
  13. package/scripts/messages/create_table.sql +44 -0
  14. package/scripts/missions/create_table.sql +43 -0
  15. package/scripts/objectives/create_table.sql +49 -0
  16. package/scripts/objectives_tools/create_table.sql +52 -0
  17. package/scripts/tags/create_table.sql +38 -0
  18. package/scripts/tools/create_table.sql +43 -0
  19. package/src/modules/{projects → agents}/index.js +2 -2
  20. package/src/modules/agents/properties.js +169 -0
  21. package/src/modules/{pages_blocks_folders → channels}/index.js +2 -2
  22. package/src/modules/channels/properties.js +149 -0
  23. package/src/modules/{experiments → companies}/index.js +3 -3
  24. package/src/modules/companies/properties.js +149 -0
  25. package/src/modules/conversations/index.js +10 -0
  26. package/src/modules/conversations/properties.js +179 -0
  27. package/src/modules/conversations_tags/index.js +10 -0
  28. package/src/modules/{pages_blocks_folders → conversations_tags}/properties.js +33 -39
  29. package/src/modules/credentials/index.js +10 -0
  30. package/src/modules/credentials/properties.js +270 -0
  31. package/src/modules/leads/index.js +10 -0
  32. package/src/modules/leads/properties.js +253 -0
  33. package/src/modules/leads_channels/index.js +10 -0
  34. package/src/modules/leads_channels/properties.js +104 -0
  35. package/src/modules/{domains_redirects → leads_tags}/index.js +3 -3
  36. package/src/modules/{projects_domains → leads_tags}/properties.js +32 -13
  37. package/src/modules/messages/index.js +10 -0
  38. package/src/modules/messages/properties.js +114 -0
  39. package/src/modules/{base_domains → missions}/index.js +3 -3
  40. package/src/modules/missions/properties.js +129 -0
  41. package/src/modules/objectives/index.js +10 -0
  42. package/src/modules/objectives/properties.js +160 -0
  43. package/src/modules/objectives_tools/index.js +10 -0
  44. package/src/modules/objectives_tools/properties.js +145 -0
  45. package/src/modules/{pages → tags}/index.js +2 -2
  46. package/src/modules/{base_domains → tags}/properties.js +49 -30
  47. package/src/modules/{domains → tools}/index.js +2 -2
  48. package/src/modules/tools/properties.js +120 -0
  49. package/src/product.js +30 -50
  50. package/src/shared/llmModels.js +17 -0
  51. package/src/shared/parameters.js +0 -1
  52. package/src/shared/query.js +0 -2
  53. package/src/shared/responses.js +0 -2
  54. package/src/modules/conversions/index.js +0 -12
  55. package/src/modules/conversions/properties.js +0 -47
  56. package/src/modules/conversions/responses.js +0 -57
  57. package/src/modules/conversions/routes.js +0 -120
  58. package/src/modules/conversions_resume/index.js +0 -10
  59. package/src/modules/conversions_resume/properties.js +0 -46
  60. package/src/modules/domains/properties.js +0 -75
  61. package/src/modules/domains_redirects/properties.js +0 -64
  62. package/src/modules/experiments/properties.js +0 -129
  63. package/src/modules/experiments_variations/index.js +0 -10
  64. package/src/modules/experiments_variations/properties.js +0 -193
  65. package/src/modules/integrations_accounts/index.js +0 -11
  66. package/src/modules/integrations_accounts/properties.js +0 -140
  67. package/src/modules/integrations_pages_elements/index.js +0 -12
  68. package/src/modules/integrations_pages_elements/properties.js +0 -283
  69. package/src/modules/pages/properties.js +0 -170
  70. package/src/modules/pages_blocks_models/index.js +0 -12
  71. package/src/modules/pages_blocks_models/properties.js +0 -91
  72. package/src/modules/pages_editor_photos/index.js +0 -10
  73. package/src/modules/pages_editor_photos/properties.js +0 -138
  74. package/src/modules/pages_editor_photos_folders/index.js +0 -10
  75. package/src/modules/pages_editor_photos_folders/properties.js +0 -92
  76. package/src/modules/projects/properties.js +0 -120
  77. package/src/modules/projects_domains/index.js +0 -10
  78. package/src/modules/projects_users/index.js +0 -10
  79. package/src/modules/projects_users/properties.js +0 -66
  80. package/src/modules/templates/index.js +0 -10
  81. package/src/modules/templates/properties.js +0 -86
  82. package/src/modules/templates_blocks/index.js +0 -10
  83. package/src/modules/templates_blocks/properties.js +0 -76
  84. package/src/modules/templates_blocks_folders/index.js +0 -11
  85. package/src/modules/templates_blocks_folders/properties.js +0 -54
  86. package/src/modules/templates_categories/index.js +0 -12
  87. package/src/modules/templates_categories/properties.js +0 -100
  88. package/src/modules/templates_categories_links/index.js +0 -12
  89. package/src/modules/templates_categories_links/properties.js +0 -63
  90. package/src/modules/templates_groups/index.js +0 -11
  91. package/src/modules/templates_groups/properties.js +0 -42
  92. package/src/modules/views/index.js +0 -12
  93. package/src/modules/views/properties.js +0 -44
  94. package/src/modules/views/responses.js +0 -57
  95. package/src/modules/views/routes.js +0 -56
  96. package/src/modules/views_resume/index.js +0 -10
  97. package/src/modules/views_resume/properties.js +0 -46
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@greatapps/greatagents",
3
- "version": "0.0.1",
3
+ "version": "0.1.1",
4
4
  "description": "Schemas para GreatAgents",
5
5
  "main": "./src/product.js",
6
6
  "type": "module"
@@ -0,0 +1,272 @@
1
+ # Scripts PostgreSQL - GreatAgents
2
+
3
+ Sistema de scripts SQL para criação e manutenção do banco de dados PostgreSQL do projeto GreatAgents.
4
+
5
+ ## Introdução
6
+
7
+ O **gagents-schemas** é um sistema de definição e implementação de esquemas de banco de dados para o GreatAgents. O sistema funciona em duas camadas complementares:
8
+
9
+ - **Schemas JavaScript** (`src/modules/`): Definem a estrutura canônica dos dados, propriedades, validações e interfaces
10
+ - **Scripts SQL** (`scripts/`): Implementam essas estruturas no PostgreSQL com comandos DDL otimizados
11
+
12
+ Os scripts SQL são gerados e mantidos em sincronia com os schemas JavaScript, garantindo consistência entre a definição lógica dos dados e sua implementação física no banco.
13
+
14
+ ### Propósito
15
+
16
+ Este diretório contém scripts SQL PostgreSQL prontos para produção que criam todas as tabelas necessárias para o funcionamento do sistema GreatAgents, incluindo índices otimizados, comentários de documentação e referências de integridade.
17
+
18
+ ## Arquitetura do Sistema
19
+
20
+ ### Schemas JavaScript como Fonte da Verdade
21
+
22
+ Os schemas JavaScript em [`src/modules/`](../src/modules/) definem:
23
+ - Estrutura dos dados e tipos de campos
24
+ - Validações e restrições
25
+ - Relacionamentos entre entidades
26
+ - Configurações de cache e parâmetros
27
+ - Interfaces de usuário e labels
28
+
29
+ ### Scripts SQL como Implementação
30
+
31
+ Os scripts SQL em [`scripts/`](.) implementam:
32
+ - Comandos `CREATE TABLE` com tipos PostgreSQL correspondentes
33
+ - Índices otimizados para consultas frequentes
34
+ - Chaves estrangeiras e integridade referencial
35
+ - Comentários detalhados de documentação
36
+ - Execução segura com `CREATE IF NOT EXISTS`
37
+
38
+ ### Sincronização
39
+
40
+ A relação entre os módulos garante que:
41
+ - Cada schema JavaScript tem um script SQL correspondente
42
+ - Os tipos de dados são consistentes entre as duas representações
43
+ - As modificações nos schemas refletem automaticamente nos scripts
44
+ - A estrutura permanece sincronizada em todas as camadas
45
+
46
+ ## Estrutura dos Dados
47
+
48
+ O sistema GreatAgents é organizado em **17 módulos** distribuídos em duas categorias:
49
+
50
+ ### Módulos Principais (13)
51
+
52
+ | Módulo | Descrição | Dependências |
53
+ |--------|-----------|--------------|
54
+ | [`accounts`](accounts/) | Contas/organizações do sistema | - |
55
+ | [`agents`](agents/) | Agentes de IA e suas configurações | accounts |
56
+ | [`channels`](channels/) | Canais de comunicação (WhatsApp, Telegram, etc.) | accounts, credentials |
57
+ | [`companies`](companies/) | Empresas dos leads | - |
58
+ | [`conversations`](conversations/) | Conversas entre usuários e agentes | accounts, agents, leads_channels |
59
+ | [`credentials`](credentials/) | Credenciais de autenticação para integrações | accounts |
60
+ | [`leads`](leads/) | Leads/contatos do sistema | accounts, companies |
61
+ | [`messages`](messages/) | Mensagens das conversas | accounts, conversations |
62
+ | [`missions`](missions/) | Missões/tarefas complexas dos agentes | accounts, agents |
63
+ | [`objectives`](objectives/) | Objetivos específicos dentro das missões | accounts, agents, missions |
64
+ | [`tags`](tags/) | Sistema de tags para categorização | accounts |
65
+ | [`tools`](tools/) | Ferramentas disponíveis para os agentes | accounts, credentials |
66
+ | [`users`](users/) | Usuários do sistema | accounts |
67
+
68
+ ### Tabelas de Relacionamento (4)
69
+
70
+ | Módulo | Descrição | Relaciona |
71
+ |--------|-----------|-----------|
72
+ | [`conversations_tags`](conversations_tags/) | Tags das conversas | conversations ↔ tags |
73
+ | [`leads_channels`](leads_channels/) | Canais dos leads | leads ↔ channels |
74
+ | [`leads_tags`](leads_tags/) | Tags dos leads | leads ↔ tags |
75
+ | [`objectives_tools`](objectives_tools/) | Ferramentas dos objetivos | objectives ↔ tools |
76
+
77
+ ### Categorização Funcional
78
+
79
+ **Núcleo do Sistema:**
80
+ - `accounts` - Base organizacional
81
+ - `users` - Gestão de usuários
82
+ - `credentials` - Autenticação
83
+
84
+ **Agentes e IA:**
85
+ - `agents` - Agentes de IA
86
+ - `missions` - Tarefas complexas
87
+ - `objectives` - Objetivos específicos
88
+ - `tools` - Ferramentas disponíveis
89
+
90
+ **Comunicação:**
91
+ - `channels` - Canais de comunicação
92
+ - `conversations` - Conversas
93
+ - `messages` - Mensagens
94
+
95
+ **Gestão de Leads:**
96
+ - `leads` - Contatos
97
+ - `companies` - Empresas
98
+ - `leads_channels` - Associações lead-canal
99
+
100
+ **Organização:**
101
+ - `tags` - Sistema de categorização
102
+ - `conversations_tags` - Tags de conversas
103
+ - `leads_tags` - Tags de leads
104
+
105
+ ## Como Usar
106
+
107
+ ### Pré-requisitos
108
+
109
+ - PostgreSQL 12 ou superior
110
+ - Permissões para criação de tabelas e índices
111
+ - Cliente `psql` ou ferramenta equivalente
112
+
113
+ ### Instalação Rápida
114
+
115
+ Execute todos os scripts de uma vez:
116
+
117
+ ```bash
118
+ # Navegar para o diretório de scripts
119
+ cd gagents-schemas/scripts
120
+
121
+ # Executar todos os 17 scripts
122
+ for module in accounts agents channels companies conversations conversations_tags credentials leads leads_channels leads_tags messages missions objectives objectives_tools tags tools users; do
123
+ echo "Criando tabela: $module"
124
+ psql -d sua_base_dados -f "$module/create_table.sql"
125
+ done
126
+ ```
127
+
128
+ ### Instalação Respeitando Dependências
129
+
130
+ Para uma nova instalação, execute na ordem recomendada:
131
+
132
+ ```bash
133
+ # 1. Tabelas base (sem dependências)
134
+ psql -d sua_base_dados -f accounts/create_table.sql
135
+ psql -d sua_base_dados -f tags/create_table.sql
136
+ psql -d sua_base_dados -f companies/create_table.sql
137
+
138
+ # 2. Tabelas dependentes de accounts
139
+ psql -d sua_base_dados -f users/create_table.sql
140
+ psql -d sua_base_dados -f credentials/create_table.sql
141
+ psql -d sua_base_dados -f agents/create_table.sql
142
+ psql -d sua_base_dados -f leads/create_table.sql
143
+
144
+ # 3. Tabelas com múltiplas dependências
145
+ psql -d sua_base_dados -f tools/create_table.sql
146
+ psql -d sua_base_dados -f channels/create_table.sql
147
+ psql -d sua_base_dados -f missions/create_table.sql
148
+ psql -d sua_base_dados -f leads_channels/create_table.sql
149
+
150
+ # 4. Tabelas de nível superior
151
+ psql -d sua_base_dados -f conversations/create_table.sql
152
+ psql -d sua_base_dados -f messages/create_table.sql
153
+ psql -d sua_base_dados -f objectives/create_table.sql
154
+
155
+ # 5. Tabelas de relacionamento
156
+ psql -d sua_base_dados -f conversations_tags/create_table.sql
157
+ psql -d sua_base_dados -f leads_tags/create_table.sql
158
+ psql -d sua_base_dados -f objectives_tools/create_table.sql
159
+ ```
160
+
161
+ ### Execução Individual
162
+
163
+ Para executar scripts específicos:
164
+
165
+ ```bash
166
+ # Exemplo: criar apenas a tabela de agentes
167
+ psql -d sua_base_dados -f agents/create_table.sql
168
+
169
+ # Exemplo: recriar múltiplas tabelas
170
+ psql -d sua_base_dados -f accounts/create_table.sql
171
+ psql -d sua_base_dados -f agents/create_table.sql
172
+ psql -d sua_base_dados -f conversations/create_table.sql
173
+ ```
174
+
175
+ ### Verificação da Instalação
176
+
177
+ Após a execução, verifique se todas as tabelas foram criadas:
178
+
179
+ ```sql
180
+ -- Verificar contagem de tabelas criadas
181
+ SELECT COUNT(*) as total_tabelas
182
+ FROM information_schema.tables
183
+ WHERE table_schema = 'public'
184
+ AND table_name IN (
185
+ 'accounts', 'agents', 'channels', 'companies', 'conversations',
186
+ 'conversations_tags', 'credentials', 'leads', 'leads_channels',
187
+ 'leads_tags', 'messages', 'missions', 'objectives',
188
+ 'objectives_tools', 'tags', 'tools', 'users'
189
+ );
190
+ -- Resultado esperado: 17
191
+
192
+ -- Verificar integridade referencial
193
+ SELECT
194
+ tc.table_name,
195
+ kcu.column_name,
196
+ ccu.table_name AS tabela_referenciada,
197
+ ccu.column_name AS coluna_referenciada
198
+ FROM information_schema.table_constraints AS tc
199
+ JOIN information_schema.key_column_usage AS kcu
200
+ ON tc.constraint_name = kcu.constraint_name
201
+ JOIN information_schema.constraint_column_usage AS ccu
202
+ ON ccu.constraint_name = tc.constraint_name
203
+ WHERE tc.constraint_type = 'FOREIGN KEY'
204
+ ORDER BY tc.table_name;
205
+ ```
206
+
207
+ ## Informações Técnicas
208
+
209
+ ### Características dos Scripts
210
+
211
+ **Execução Segura:**
212
+ - Todos os scripts usam `CREATE IF NOT EXISTS`
213
+ - Podem ser executados múltiplas vezes sem riscos
214
+ - Não há perda de dados em re-execuções
215
+
216
+ **Índices Automáticos:**
217
+ - Todos os índices usam `CREATE INDEX IF NOT EXISTS`
218
+ - Índices otimizados para consultas frequentes
219
+ - Cobertura de chaves estrangeiras e campos de busca
220
+
221
+ **Documentação Integrada:**
222
+ - Comentários detalhados em todas as tabelas e colunas
223
+ - Descrição do propósito de cada campo
224
+ - Explicação de relacionamentos e dependências
225
+
226
+ ### Campos Automáticos Padrão
227
+
228
+ Todas as tabelas incluem os seguintes campos automáticos:
229
+
230
+ ```sql
231
+ id SERIAL PRIMARY KEY, -- Chave primária auto-incremento
232
+ deleted BOOLEAN DEFAULT false NOT NULL, -- Exclusão lógica
233
+ datetime_add TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL, -- Data de criação
234
+ datetime_alt TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL, -- Data de alteração
235
+ datetime_del TIMESTAMP NULL -- Data de exclusão lógica
236
+ ```
237
+
238
+ ### Convenções de Nomenclatura
239
+
240
+ **Tabelas:** Snake case no plural (`conversations`, `leads_tags`)
241
+ **Colunas:** Snake case no singular (`id_account`, `datetime_add`)
242
+ **Índices:** Prefixo `idx_` + nome da tabela + campo(s) (`idx_agents_id_account`)
243
+ **Chaves estrangeiras:** Prefixo `id_` + nome da tabela referenciada (`id_account`, `id_conversation`)
244
+
245
+ ### Tipos de Dados Utilizados
246
+
247
+ | Tipo PostgreSQL | Uso | Exemplo |
248
+ |------------------|-----|---------|
249
+ | `SERIAL` | Chaves primárias auto-incremento | `id` |
250
+ | `INTEGER` | Chaves estrangeiras e números | `id_account`, `verified` |
251
+ | `VARCHAR(n)` | Textos com limite definido | `name VARCHAR(100)` |
252
+ | `TEXT` | Textos longos sem limite | `prompt`, `content` |
253
+ | `BOOLEAN` | Valores verdadeiro/falso | `deleted` |
254
+ | `TIMESTAMP` | Datas e horários | `datetime_add` |
255
+
256
+ ### Relacionamentos e Integridade
257
+
258
+ **Cascata de Exclusão:**
259
+ - Configurada com `ON DELETE CASCADE` onde apropriado
260
+ - Garante limpeza automática de registros dependentes
261
+
262
+ **Restrições de Integridade:**
263
+ - Todas as chaves estrangeiras são validadas
264
+ - Campos obrigatórios definidos com `NOT NULL`
265
+ - Valores padrão configurados onde aplicável
266
+
267
+ ### Compatibilidade
268
+
269
+ **PostgreSQL:** 12, 13, 14, 15, 16+
270
+ **Encoding:** UTF-8
271
+ **Timezone:** Suporte completo a fusos horários
272
+ **Collation:** Compatível com diferentes locales
@@ -0,0 +1,46 @@
1
+ -- =====================================================
2
+ -- Script de criação da tabela AGENTS
3
+ -- =====================================================
4
+ -- Descrição: Tabela que armazena informações dos agentes de IA
5
+ -- Dependências: accounts
6
+ -- =====================================================
7
+
8
+ -- Cria a tabela agents
9
+ CREATE TABLE IF NOT EXISTS agents (
10
+ -- Propriedades automáticas (padrão para todas as tabelas)
11
+ id SERIAL PRIMARY KEY,
12
+ deleted BOOLEAN DEFAULT false NOT NULL,
13
+ datetime_add TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL,
14
+ datetime_alt TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL,
15
+ datetime_del TIMESTAMP NULL,
16
+
17
+ -- Propriedades específicas da tabela agents
18
+ id_account INTEGER NOT NULL,
19
+ title VARCHAR(255) NOT NULL,
20
+ photo VARCHAR(255),
21
+ prompt TEXT,
22
+ llm_model VARCHAR(255),
23
+ delayTyping INTEGER DEFAULT 0 NOT NULL,
24
+ waitingTime INTEGER DEFAULT 0 NOT NULL
25
+ );
26
+
27
+ -- Cria índices para otimização de consultas
28
+ CREATE INDEX IF NOT EXISTS idx_agents_deleted ON agents(deleted);
29
+ CREATE INDEX IF NOT EXISTS idx_agents_id_account ON agents(id_account);
30
+ CREATE INDEX IF NOT EXISTS idx_agents_title ON agents(title);
31
+ CREATE INDEX IF NOT EXISTS idx_agents_llm_model ON agents(llm_model);
32
+
33
+ -- Adiciona comentários para documentação
34
+ COMMENT ON TABLE agents IS 'Tabela que armazena informações dos agentes de IA do sistema';
35
+ COMMENT ON COLUMN agents.id IS 'Identificador único do agente (chave primária)';
36
+ COMMENT ON COLUMN agents.deleted IS 'Flag indicando se o registro foi excluído logicamente';
37
+ COMMENT ON COLUMN agents.datetime_add IS 'Data e hora de criação do registro';
38
+ COMMENT ON COLUMN agents.datetime_alt IS 'Data e hora da última alteração do registro';
39
+ COMMENT ON COLUMN agents.datetime_del IS 'Data e hora da exclusão lógica do registro';
40
+ COMMENT ON COLUMN agents.id_account IS 'Referência para a conta proprietária do agente';
41
+ COMMENT ON COLUMN agents.title IS 'Nome/título do agente';
42
+ COMMENT ON COLUMN agents.photo IS 'URL ou caminho para a foto/avatar do agente';
43
+ COMMENT ON COLUMN agents.prompt IS 'Prompt base/personalidade do agente para interações';
44
+ COMMENT ON COLUMN agents.llm_model IS 'Modelo de linguagem utilizado pelo agente (referência para enum de modelos)';
45
+ COMMENT ON COLUMN agents.delayTyping IS 'Delay em milissegundos para simular digitação humana';
46
+ COMMENT ON COLUMN agents.waitingTime IS 'Tempo de espera em milissegundos antes de responder';
@@ -0,0 +1,48 @@
1
+ -- =====================================================
2
+ -- Script de criação da tabela CHANNELS
3
+ -- =====================================================
4
+ -- Descrição: Tabela que armazena informações dos canais de comunicação
5
+ -- Dependências: accounts, credentials
6
+ -- =====================================================
7
+
8
+ -- Cria a tabela channels
9
+ CREATE TABLE IF NOT EXISTS channels (
10
+ -- Propriedades automáticas (padrão para todas as tabelas)
11
+ id SERIAL PRIMARY KEY,
12
+ deleted BOOLEAN DEFAULT false NOT NULL,
13
+ datetime_add TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL,
14
+ datetime_alt TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL,
15
+ datetime_del TIMESTAMP NULL,
16
+
17
+ -- Propriedades específicas da tabela channels
18
+ id_account INTEGER NOT NULL,
19
+ title VARCHAR(255) NOT NULL,
20
+ provider VARCHAR(50) NOT NULL DEFAULT 'web-chat',
21
+ url VARCHAR(255),
22
+ active BOOLEAN DEFAULT true NOT NULL,
23
+ id_credential INTEGER REFERENCES credentials(id) ON DELETE SET NULL,
24
+ handle VARCHAR(255)
25
+ );
26
+
27
+ -- Cria índices para otimização de consultas
28
+ CREATE INDEX IF NOT EXISTS idx_channels_deleted ON channels(deleted);
29
+ CREATE INDEX IF NOT EXISTS idx_channels_id_account ON channels(id_account);
30
+ CREATE INDEX IF NOT EXISTS idx_channels_provider ON channels(provider);
31
+ CREATE INDEX IF NOT EXISTS idx_channels_active ON channels(active);
32
+ CREATE INDEX IF NOT EXISTS idx_channels_id_credential ON channels(id_credential);
33
+ CREATE INDEX IF NOT EXISTS idx_channels_handle ON channels(handle);
34
+
35
+ -- Adiciona comentários para documentação
36
+ COMMENT ON TABLE channels IS 'Tabela que armazena informações dos canais de comunicação (WhatsApp, Telegram, etc.)';
37
+ COMMENT ON COLUMN channels.id IS 'Identificador único do canal (chave primária)';
38
+ COMMENT ON COLUMN channels.deleted IS 'Flag indicando se o registro foi excluído logicamente';
39
+ COMMENT ON COLUMN channels.datetime_add IS 'Data e hora de criação do registro';
40
+ COMMENT ON COLUMN channels.datetime_alt IS 'Data e hora da última alteração do registro';
41
+ COMMENT ON COLUMN channels.datetime_del IS 'Data e hora da exclusão lógica do registro';
42
+ COMMENT ON COLUMN channels.id_account IS 'Referência para a conta proprietária do canal';
43
+ COMMENT ON COLUMN channels.title IS 'Nome/título do canal';
44
+ COMMENT ON COLUMN channels.provider IS 'Tipo de provedor do canal (0=WhatsApp, 1=Telegram, 2=Discord, etc.)';
45
+ COMMENT ON COLUMN channels.url IS 'URL de conexão ou webhook do canal';
46
+ COMMENT ON COLUMN channels.active IS 'Flag indicando se o canal está ativo';
47
+ COMMENT ON COLUMN channels.id_credential IS 'Referência para as credenciais de autenticação do canal';
48
+ COMMENT ON COLUMN channels.handle IS 'Identificador único do canal no provedor (ex: número do WhatsApp, bot token, etc.)';
@@ -0,0 +1,49 @@
1
+ -- =====================================================
2
+ -- Script de criação da tabela COMPANIES
3
+ -- =====================================================
4
+ -- Descrição: Tabela que armazena informações das empresas associadas aos leads
5
+ -- Dependências: accounts, leads
6
+ -- =====================================================
7
+
8
+ -- Cria a tabela companies
9
+ CREATE TABLE IF NOT EXISTS companies (
10
+ -- Propriedades automáticas (padrão para todas as tabelas)
11
+ id SERIAL PRIMARY KEY,
12
+ deleted BOOLEAN DEFAULT false NOT NULL,
13
+ datetime_add TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL,
14
+ datetime_alt TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL,
15
+ datetime_del TIMESTAMP NULL,
16
+
17
+ -- Propriedades específicas da tabela companies
18
+ id_account INTEGER NOT NULL,
19
+ id_lead INTEGER REFERENCES leads(id) ON DELETE CASCADE,
20
+ name VARCHAR(255),
21
+ domain VARCHAR(255),
22
+ notes TEXT,
23
+ industry VARCHAR(255),
24
+ size VARCHAR(255)
25
+ );
26
+
27
+ -- Cria índices para otimização de consultas
28
+ CREATE INDEX IF NOT EXISTS idx_companies_deleted ON companies(deleted);
29
+ CREATE INDEX IF NOT EXISTS idx_companies_id_account ON companies(id_account);
30
+ CREATE INDEX IF NOT EXISTS idx_companies_id_lead ON companies(id_lead);
31
+ CREATE INDEX IF NOT EXISTS idx_companies_name ON companies(name);
32
+ CREATE INDEX IF NOT EXISTS idx_companies_domain ON companies(domain);
33
+ CREATE INDEX IF NOT EXISTS idx_companies_industry ON companies(industry);
34
+ CREATE INDEX IF NOT EXISTS idx_companies_size ON companies(size);
35
+
36
+ -- Adiciona comentários para documentação
37
+ COMMENT ON TABLE companies IS 'Tabela que armazena informações das empresas associadas aos leads';
38
+ COMMENT ON COLUMN companies.id IS 'Identificador único da empresa (chave primária)';
39
+ COMMENT ON COLUMN companies.deleted IS 'Flag indicando se o registro foi excluído logicamente';
40
+ COMMENT ON COLUMN companies.datetime_add IS 'Data e hora de criação do registro';
41
+ COMMENT ON COLUMN companies.datetime_alt IS 'Data e hora da última alteração do registro';
42
+ COMMENT ON COLUMN companies.datetime_del IS 'Data e hora da exclusão lógica do registro';
43
+ COMMENT ON COLUMN companies.id_account IS 'Referência para a conta proprietária da empresa';
44
+ COMMENT ON COLUMN companies.id_lead IS 'Referência para o lead associado à empresa';
45
+ COMMENT ON COLUMN companies.name IS 'Nome da empresa';
46
+ COMMENT ON COLUMN companies.domain IS 'Domínio/website da empresa';
47
+ COMMENT ON COLUMN companies.notes IS 'Notas e observações sobre a empresa';
48
+ COMMENT ON COLUMN companies.industry IS 'Setor/indústria da empresa';
49
+ COMMENT ON COLUMN companies.size IS 'Tamanho da empresa (pequena, média, grande, etc.)';
@@ -0,0 +1,42 @@
1
+ -- Script para conectar tabela conversations com tabela messages
2
+ -- Adiciona campo id_last_message e cria foreign key constraint
3
+ --
4
+ -- Autor: Sistema GAgents
5
+ -- Data: 2025-01-14
6
+ -- Descrição: Conecta conversations com messages através do campo id_last_message
7
+
8
+ -- =====================================================
9
+ -- 1. Adicionar campo id_last_message na tabela conversations
10
+ -- =====================================================
11
+ -- Campo nullable para permitir conversas sem mensagens ainda
12
+ ALTER TABLE conversations
13
+ ADD COLUMN IF NOT EXISTS id_last_message INTEGER;
14
+
15
+ -- =====================================================
16
+ -- 2. Criar foreign key constraint
17
+ -- =====================================================
18
+ -- Conecta conversations.id_last_message → messages.id
19
+ -- ON DELETE SET NULL: se a mensagem for deletada, apenas remove a referência
20
+ ALTER TABLE conversations
21
+ ADD CONSTRAINT IF NOT EXISTS fk_conversations_last_message
22
+ FOREIGN KEY (id_last_message) REFERENCES messages(id) ON DELETE SET NULL;
23
+
24
+ -- =====================================================
25
+ -- 3. Criar índice para otimização de consultas
26
+ -- =====================================================
27
+ -- Melhora performance em consultas que filtram por id_last_message
28
+ CREATE INDEX IF NOT EXISTS idx_conversations_last_message
29
+ ON conversations(id_last_message);
30
+
31
+ -- =====================================================
32
+ -- Comentários sobre o uso:
33
+ -- =====================================================
34
+ -- Este campo permite:
35
+ -- - Identificar rapidamente a última mensagem de uma conversa
36
+ -- - Otimizar consultas de listagem de conversas com preview da última mensagem
37
+ -- - Manter integridade referencial com comportamento seguro (SET NULL)
38
+ --
39
+ -- Exemplo de uso:
40
+ -- SELECT c.*, m.content as last_message_content
41
+ -- FROM conversations c
42
+ -- LEFT JOIN messages m ON c.id_last_message = m.id;
@@ -0,0 +1,55 @@
1
+ -- =====================================================
2
+ -- Script de criação da tabela CONVERSATIONS
3
+ -- =====================================================
4
+ -- Descrição: Tabela que armazena informações das conversas entre usuários e agentes
5
+ -- Dependências: accounts, agents, channels
6
+ -- =====================================================
7
+
8
+ -- Cria a tabela conversations
9
+ CREATE TABLE IF NOT EXISTS conversations (
10
+ -- Propriedades automáticas (padrão para todas as tabelas)
11
+ id SERIAL PRIMARY KEY,
12
+ deleted BOOLEAN DEFAULT false NOT NULL,
13
+ datetime_add TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL,
14
+ datetime_alt TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL,
15
+ datetime_del TIMESTAMP NULL,
16
+
17
+ -- Propriedades específicas da tabela conversations
18
+ id_account INTEGER NOT NULL,
19
+ id_agent INTEGER REFERENCES agents(id) ON DELETE SET NULL,
20
+ id_channel INTEGER REFERENCES channels(id) ON DELETE SET NULL,
21
+ id_lead_channel INTEGER REFERENCES leads_channels(id) ON DELETE SET NULL,
22
+ id_assignee INTEGER,
23
+ last_message_at TIMESTAMP,
24
+ id_last_message INTEGER REFERENCES messages(id) ON DELETE SET NULL,
25
+ stop_ai BOOLEAN DEFAULT false NOT NULL,
26
+ status VARCHAR(20) DEFAULT 'open' NOT NULL
27
+ );
28
+
29
+ -- Cria índices para otimização de consultas
30
+ CREATE INDEX IF NOT EXISTS idx_conversations_deleted ON conversations(deleted);
31
+ CREATE INDEX IF NOT EXISTS idx_conversations_id_account ON conversations(id_account);
32
+ CREATE INDEX IF NOT EXISTS idx_conversations_id_agent ON conversations(id_agent);
33
+ CREATE INDEX IF NOT EXISTS idx_conversations_id_channel ON conversations(id_channel);
34
+ CREATE INDEX IF NOT EXISTS idx_conversations_id_lead_channel ON conversations(id_lead_channel);
35
+ CREATE INDEX IF NOT EXISTS idx_conversations_id_assignee ON conversations(id_assignee);
36
+ CREATE INDEX IF NOT EXISTS idx_conversations_status ON conversations(status);
37
+ CREATE INDEX IF NOT EXISTS idx_conversations_last_message_at ON conversations(last_message_at);
38
+ CREATE INDEX IF NOT EXISTS idx_conversations_stop_ai ON conversations(stop_ai);
39
+
40
+ -- Adiciona comentários para documentação
41
+ COMMENT ON TABLE conversations IS 'Tabela que armazena informações das conversas entre usuários e agentes';
42
+ COMMENT ON COLUMN conversations.id IS 'Identificador único da conversa (chave primária)';
43
+ COMMENT ON COLUMN conversations.deleted IS 'Flag indicando se o registro foi excluído logicamente';
44
+ COMMENT ON COLUMN conversations.datetime_add IS 'Data e hora de criação do registro';
45
+ COMMENT ON COLUMN conversations.datetime_alt IS 'Data e hora da última alteração do registro';
46
+ COMMENT ON COLUMN conversations.datetime_del IS 'Data e hora da exclusão lógica do registro';
47
+ COMMENT ON COLUMN conversations.id_account IS 'Referência para a conta proprietária da conversa';
48
+ COMMENT ON COLUMN conversations.id_agent IS 'Referência para o agente responsável pela conversa';
49
+ COMMENT ON COLUMN conversations.id_channel IS 'Referência para o canal onde a conversa está acontecendo';
50
+ COMMENT ON COLUMN conversations.id_lead_channel IS 'Identificador do lead/canal na conversa';
51
+ COMMENT ON COLUMN conversations.id_assignee IS 'Identificador do usuário humano responsável pela conversa';
52
+ COMMENT ON COLUMN conversations.last_message_at IS 'Data e hora da última mensagem na conversa';
53
+ COMMENT ON COLUMN conversations.id_last_message IS 'Identificador da última mensagem na conversa';
54
+ COMMENT ON COLUMN conversations.stop_ai IS 'Flag indicando se o agente de IA deve parar de responder automaticamente';
55
+ COMMENT ON COLUMN conversations.status IS 'Status da conversa (open, closed, pending, etc.)';
@@ -0,0 +1,39 @@
1
+ -- =====================================================
2
+ -- Script de criação da tabela CONVERSATIONS_TAGS
3
+ -- =====================================================
4
+ -- Descrição: Tabela de relacionamento entre conversas e tags (many-to-many)
5
+ -- Dependências: accounts, conversations, tags
6
+ -- =====================================================
7
+
8
+ -- Cria a tabela conversations_tags
9
+ CREATE TABLE IF NOT EXISTS conversations_tags (
10
+ -- Propriedades automáticas (padrão para todas as tabelas)
11
+ id SERIAL PRIMARY KEY,
12
+ deleted BOOLEAN DEFAULT false NOT NULL,
13
+ datetime_add TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL,
14
+ datetime_alt TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL,
15
+ datetime_del TIMESTAMP NULL,
16
+
17
+ -- Propriedades específicas da tabela conversations_tags
18
+ id_account INTEGER NOT NULL,
19
+ id_conversation INTEGER REFERENCES conversations(id) ON DELETE CASCADE,
20
+ id_tag INTEGER REFERENCES tags(id) ON DELETE CASCADE
21
+ );
22
+
23
+ -- Cria índices para otimização de consultas
24
+ CREATE INDEX IF NOT EXISTS idx_conversations_tags_deleted ON conversations_tags(deleted);
25
+ CREATE INDEX IF NOT EXISTS idx_conversations_tags_id_account ON conversations_tags(id_account);
26
+ CREATE INDEX IF NOT EXISTS idx_conversations_tags_id_conversation ON conversations_tags(id_conversation);
27
+ CREATE INDEX IF NOT EXISTS idx_conversations_tags_id_tag ON conversations_tags(id_tag);
28
+ CREATE INDEX IF NOT EXISTS idx_conversations_tags_conversation_tag ON conversations_tags(id_conversation, id_tag);
29
+
30
+ -- Adiciona comentários para documentação
31
+ COMMENT ON TABLE conversations_tags IS 'Tabela de relacionamento entre conversas e tags para categorização';
32
+ COMMENT ON COLUMN conversations_tags.id IS 'Identificador único do relacionamento conversa-tag (chave primária)';
33
+ COMMENT ON COLUMN conversations_tags.deleted IS 'Flag indicando se o registro foi excluído logicamente';
34
+ COMMENT ON COLUMN conversations_tags.datetime_add IS 'Data e hora de criação do registro';
35
+ COMMENT ON COLUMN conversations_tags.datetime_alt IS 'Data e hora da última alteração do registro';
36
+ COMMENT ON COLUMN conversations_tags.datetime_del IS 'Data e hora da exclusão lógica do registro';
37
+ COMMENT ON COLUMN conversations_tags.id_account IS 'Referência para a conta proprietária do relacionamento';
38
+ COMMENT ON COLUMN conversations_tags.id_conversation IS 'Referência para a conversa associada à tag';
39
+ COMMENT ON COLUMN conversations_tags.id_tag IS 'Referência para a tag associada à conversa';
@@ -0,0 +1,63 @@
1
+ -- =====================================================
2
+ -- Script de criação da tabela CREDENTIALS
3
+ -- =====================================================
4
+ -- Descrição: Tabela que armazena credenciais de autenticação para integrações
5
+ -- Dependências: accounts
6
+ -- =====================================================
7
+
8
+ -- Cria a tabela credentials
9
+ CREATE TABLE IF NOT EXISTS credentials (
10
+ -- Propriedades automáticas (padrão para todas as tabelas)
11
+ id SERIAL PRIMARY KEY,
12
+ deleted BOOLEAN DEFAULT false NOT NULL,
13
+ datetime_add TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL,
14
+ datetime_alt TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL,
15
+ datetime_del TIMESTAMP NULL,
16
+
17
+ -- Propriedades específicas da tabela credentials
18
+ id_account INTEGER NOT NULL,
19
+ title VARCHAR(255) NOT NULL,
20
+ integration VARCHAR(50) DEFAULT 'web-chat' NOT NULL,
21
+ authType VARCHAR(20) DEFAULT 'none' NOT NULL,
22
+ userName VARCHAR(255),
23
+ password VARCHAR(255),
24
+ apiKey VARCHAR(255),
25
+ token VARCHAR(255),
26
+ paramName VARCHAR(255),
27
+ refreshToken VARCHAR(255),
28
+ clientSecret VARCHAR(255),
29
+ clientId VARCHAR(255),
30
+ sendIn VARCHAR(255) DEFAULT 'none' NOT NULL,
31
+ scheme VARCHAR(255) DEFAULT 'none' NOT NULL,
32
+ prefix VARCHAR(255)
33
+ );
34
+
35
+ -- Cria índices para otimização de consultas
36
+ CREATE INDEX IF NOT EXISTS idx_credentials_deleted ON credentials(deleted);
37
+ CREATE INDEX IF NOT EXISTS idx_credentials_id_account ON credentials(id_account);
38
+ CREATE INDEX IF NOT EXISTS idx_credentials_integration ON credentials(integration);
39
+ CREATE INDEX IF NOT EXISTS idx_credentials_authType ON credentials(authType);
40
+ CREATE INDEX IF NOT EXISTS idx_credentials_title ON credentials(title);
41
+
42
+ -- Adiciona comentários para documentação
43
+ COMMENT ON TABLE credentials IS 'Tabela que armazena credenciais de autenticação para integrações com serviços externos';
44
+ COMMENT ON COLUMN credentials.id IS 'Identificador único da credencial (chave primária)';
45
+ COMMENT ON COLUMN credentials.deleted IS 'Flag indicando se o registro foi excluído logicamente';
46
+ COMMENT ON COLUMN credentials.datetime_add IS 'Data e hora de criação do registro';
47
+ COMMENT ON COLUMN credentials.datetime_alt IS 'Data e hora da última alteração do registro';
48
+ COMMENT ON COLUMN credentials.datetime_del IS 'Data e hora da exclusão lógica do registro';
49
+ COMMENT ON COLUMN credentials.id_account IS 'Referência para a conta proprietária da credencial';
50
+ COMMENT ON COLUMN credentials.title IS 'Título/nome identificador da credencial';
51
+ COMMENT ON COLUMN credentials.integration IS 'Tipo da integração (web-chat, whatsapp, z-api, evolution-api, telegram, facebook, instagram)';
52
+ COMMENT ON COLUMN credentials.authType IS 'Tipo de autenticação (0=Nenhum, 1=Básico, 2=OAuth2, 3=API Key)';
53
+ COMMENT ON COLUMN credentials.userName IS 'Nome de usuário para autenticação básica';
54
+ COMMENT ON COLUMN credentials.password IS 'Senha para autenticação básica (deve ser criptografada)';
55
+ COMMENT ON COLUMN credentials.apiKey IS 'Chave de API para autenticação por API Key';
56
+ COMMENT ON COLUMN credentials.token IS 'Token de acesso para autenticação por token';
57
+ COMMENT ON COLUMN credentials.paramName IS 'Nome do parâmetro para envio da credencial';
58
+ COMMENT ON COLUMN credentials.refreshToken IS 'Token de renovação para OAuth';
59
+ COMMENT ON COLUMN credentials.clientSecret IS 'Segredo do cliente para OAuth';
60
+ COMMENT ON COLUMN credentials.clientId IS 'ID do cliente para OAuth';
61
+ COMMENT ON COLUMN credentials.sendIn IS 'Local de envio da credencial (0=header, 1=query, 2=body)';
62
+ COMMENT ON COLUMN credentials.scheme IS 'Esquema de autenticação (0=Bearer, 1=Basic, 2=Custom)';
63
+ COMMENT ON COLUMN credentials.prefix IS 'Prefixo para o valor da credencial (ex: "Bearer ", "API-Key ")';