@reachy/audience-module 1.0.0
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.
- package/PUBLISH.md +157 -0
- package/README.md +96 -0
- package/dist/AudienceModule.d.ts +38 -0
- package/dist/AudienceModule.d.ts.map +1 -0
- package/dist/AudienceModule.js +145 -0
- package/dist/AudienceModule.js.map +1 -0
- package/dist/builders/CriteriaParser.d.ts +11 -0
- package/dist/builders/CriteriaParser.d.ts.map +1 -0
- package/dist/builders/CriteriaParser.js +66 -0
- package/dist/builders/CriteriaParser.js.map +1 -0
- package/dist/builders/QueryBuilder.d.ts +12 -0
- package/dist/builders/QueryBuilder.d.ts.map +1 -0
- package/dist/builders/QueryBuilder.js +177 -0
- package/dist/builders/QueryBuilder.js.map +1 -0
- package/dist/executors/StaticAudienceExecutor.d.ts +9 -0
- package/dist/executors/StaticAudienceExecutor.d.ts.map +1 -0
- package/dist/executors/StaticAudienceExecutor.js +64 -0
- package/dist/executors/StaticAudienceExecutor.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +27 -0
- package/dist/index.js.map +1 -0
- package/dist/types/index.d.ts +101 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +3 -0
- package/dist/types/index.js.map +1 -0
- package/package.json +37 -0
package/PUBLISH.md
ADDED
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
# Como Publicar o @reachy/audience-module no NPM
|
|
2
|
+
|
|
3
|
+
## 📦 Pré-requisitos
|
|
4
|
+
|
|
5
|
+
1. Conta no [npmjs.com](https://www.npmjs.com)
|
|
6
|
+
2. Configurar autenticação local
|
|
7
|
+
|
|
8
|
+
## 🚀 Passo a Passo
|
|
9
|
+
|
|
10
|
+
### 1. Fazer Login no NPM
|
|
11
|
+
|
|
12
|
+
```bash
|
|
13
|
+
cd /Users/vitorhugo/reachy/audience-module
|
|
14
|
+
npm login
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
Será solicitado:
|
|
18
|
+
- Username
|
|
19
|
+
- Password
|
|
20
|
+
- Email
|
|
21
|
+
- OTP (se tiver 2FA habilitado)
|
|
22
|
+
|
|
23
|
+
### 2. Verificar se o Nome está Disponível
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
npm view @reachy/audience-module
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
Se retornar erro 404, o nome está disponível! ✅
|
|
30
|
+
|
|
31
|
+
Se já existir, você precisa:
|
|
32
|
+
- Mudar o nome no `package.json`, ou
|
|
33
|
+
- Publicar sem escopo: `audience-module` (não recomendado)
|
|
34
|
+
|
|
35
|
+
### 3. Atualizar Informações do Pacote
|
|
36
|
+
|
|
37
|
+
Edite `/Users/vitorhugo/reachy/audience-module/package.json`:
|
|
38
|
+
|
|
39
|
+
```json
|
|
40
|
+
{
|
|
41
|
+
"name": "@reachy/audience-module",
|
|
42
|
+
"version": "1.0.0",
|
|
43
|
+
"repository": {
|
|
44
|
+
"type": "git",
|
|
45
|
+
"url": "https://github.com/seu-usuario/audience-module.git"
|
|
46
|
+
},
|
|
47
|
+
"bugs": {
|
|
48
|
+
"url": "https://github.com/seu-usuario/audience-module/issues"
|
|
49
|
+
},
|
|
50
|
+
"homepage": "https://github.com/seu-usuario/audience-module#readme"
|
|
51
|
+
}
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
### 4. Build Final
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
cd /Users/vitorhugo/reachy/audience-module
|
|
58
|
+
|
|
59
|
+
# Limpar dist antiga
|
|
60
|
+
npm run clean
|
|
61
|
+
|
|
62
|
+
# Build
|
|
63
|
+
npm run build
|
|
64
|
+
|
|
65
|
+
# Verificar arquivos que serão publicados
|
|
66
|
+
npm pack --dry-run
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
### 5. Publicar
|
|
70
|
+
|
|
71
|
+
```bash
|
|
72
|
+
# Primeira publicação
|
|
73
|
+
npm publish --access public
|
|
74
|
+
|
|
75
|
+
# Ou se já existir, apenas atualizar versão
|
|
76
|
+
npm version patch # 1.0.0 -> 1.0.1
|
|
77
|
+
npm publish
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
### 6. Verificar Publicação
|
|
81
|
+
|
|
82
|
+
```bash
|
|
83
|
+
npm view @reachy/audience-module
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
## 📝 Versionamento Semântico
|
|
87
|
+
|
|
88
|
+
```bash
|
|
89
|
+
# Patch (1.0.0 -> 1.0.1) - Correções de bugs
|
|
90
|
+
npm version patch
|
|
91
|
+
|
|
92
|
+
# Minor (1.0.0 -> 1.1.0) - Novas features
|
|
93
|
+
npm version minor
|
|
94
|
+
|
|
95
|
+
# Major (1.0.0 -> 2.0.0) - Breaking changes
|
|
96
|
+
npm version major
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
Após cada `npm version`, faça:
|
|
100
|
+
|
|
101
|
+
```bash
|
|
102
|
+
npm publish
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
## 🔄 Atualizar no reachy-api
|
|
106
|
+
|
|
107
|
+
Depois de publicar no NPM:
|
|
108
|
+
|
|
109
|
+
```bash
|
|
110
|
+
cd /Users/vitorhugo/reachy/reachy-api
|
|
111
|
+
|
|
112
|
+
# Atualizar package.json para usar a versão do NPM
|
|
113
|
+
# Mudar de: "file:../audience-module"
|
|
114
|
+
# Para: "^1.0.0"
|
|
115
|
+
|
|
116
|
+
# Ou instalar diretamente
|
|
117
|
+
npm install @reachy/audience-module@latest
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
## 🏷️ Tags (Opcional)
|
|
121
|
+
|
|
122
|
+
Para versões beta ou canary:
|
|
123
|
+
|
|
124
|
+
```bash
|
|
125
|
+
# Publicar como beta
|
|
126
|
+
npm publish --tag beta
|
|
127
|
+
|
|
128
|
+
# Instalar beta
|
|
129
|
+
npm install @reachy/audience-module@beta
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
## 🔐 Organização no NPM
|
|
133
|
+
|
|
134
|
+
Se quiser criar uma organização "@reachy":
|
|
135
|
+
|
|
136
|
+
1. Acesse https://www.npmjs.com/org/create
|
|
137
|
+
2. Crie a organização "reachy"
|
|
138
|
+
3. Adicione membros da equipe
|
|
139
|
+
4. Publique pacotes sob @reachy/
|
|
140
|
+
|
|
141
|
+
## ⚠️ Importante
|
|
142
|
+
|
|
143
|
+
- ✅ Sempre faça `npm run build` antes de publicar
|
|
144
|
+
- ✅ Teste localmente antes (`npm pack` e instalar o .tgz)
|
|
145
|
+
- ✅ Use versionamento semântico
|
|
146
|
+
- ✅ Documente mudanças no README
|
|
147
|
+
- ❌ Não publique com `node_modules/` (já está no `.npmignore`)
|
|
148
|
+
- ❌ Não publique `src/` se não quiser expor TypeScript
|
|
149
|
+
|
|
150
|
+
## 📊 Status do Pacote
|
|
151
|
+
|
|
152
|
+
Depois de publicar, você verá no NPM:
|
|
153
|
+
- Versão atual
|
|
154
|
+
- Downloads por semana
|
|
155
|
+
- Link do repositório
|
|
156
|
+
- README renderizado
|
|
157
|
+
|
package/README.md
ADDED
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
# @reachy/audience-module
|
|
2
|
+
|
|
3
|
+
Módulo reutilizável para consultas e criação de audiences em múltiplos projetos Reachy.
|
|
4
|
+
|
|
5
|
+
## 🚀 Instalação
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install @reachy/audience-module
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## 📋 Uso Básico
|
|
12
|
+
|
|
13
|
+
```typescript
|
|
14
|
+
import { AudienceModule } from '@reachy/audience-module'
|
|
15
|
+
import { ContactRepository } from './repositories/contactRepository'
|
|
16
|
+
import { AudienceRepository } from './repositories/audienceRepository'
|
|
17
|
+
|
|
18
|
+
// Criar instância do módulo
|
|
19
|
+
const audienceModule = new AudienceModule({
|
|
20
|
+
enableDebugLogs: true
|
|
21
|
+
})
|
|
22
|
+
|
|
23
|
+
// Configurar repositórios necessários
|
|
24
|
+
audienceModule.setRepositories({
|
|
25
|
+
contactRepository: new ContactRepository(),
|
|
26
|
+
audienceRepository: new AudienceRepository()
|
|
27
|
+
})
|
|
28
|
+
|
|
29
|
+
// Executar query de audiência
|
|
30
|
+
const result = await audienceModule.executeQuery(
|
|
31
|
+
{
|
|
32
|
+
filters: [
|
|
33
|
+
{
|
|
34
|
+
id: '1',
|
|
35
|
+
operator: 'AND',
|
|
36
|
+
conditions: [
|
|
37
|
+
{ field: 'city', operator: 'equals', value: 'São Paulo' },
|
|
38
|
+
{ field: 'opted_in', operator: 'equals', value: true }
|
|
39
|
+
]
|
|
40
|
+
}
|
|
41
|
+
]
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
organizationId: 'org-123',
|
|
45
|
+
projectId: 'proj-456',
|
|
46
|
+
pagination: { page: 1, limit: 50 }
|
|
47
|
+
}
|
|
48
|
+
)
|
|
49
|
+
|
|
50
|
+
console.log(`Encontrados ${result.count} contatos`)
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
## 🔧 Features
|
|
54
|
+
|
|
55
|
+
- ✅ Suporte a múltiplos formatos de critérios
|
|
56
|
+
- ✅ Query builder otimizado
|
|
57
|
+
- ✅ Execução de audiences estáticas e live
|
|
58
|
+
- ✅ Validação de critérios
|
|
59
|
+
- ✅ Type-safe com TypeScript
|
|
60
|
+
- ✅ Fácil integração com Supabase
|
|
61
|
+
|
|
62
|
+
## 📖 API
|
|
63
|
+
|
|
64
|
+
### AudienceModule
|
|
65
|
+
|
|
66
|
+
#### `executeQuery(criteria, options)`
|
|
67
|
+
|
|
68
|
+
Executa uma query de audiência e retorna os resultados.
|
|
69
|
+
|
|
70
|
+
#### `getContactCount(criteria, options)`
|
|
71
|
+
|
|
72
|
+
Retorna apenas a contagem de contatos (mais rápido).
|
|
73
|
+
|
|
74
|
+
#### `getContactIds(criteria, organizationId, projectId)`
|
|
75
|
+
|
|
76
|
+
Retorna apenas os IDs dos contatos.
|
|
77
|
+
|
|
78
|
+
#### `validateCriteria(criteria)`
|
|
79
|
+
|
|
80
|
+
Valida se os critérios são válidos.
|
|
81
|
+
|
|
82
|
+
## 📦 Build
|
|
83
|
+
|
|
84
|
+
```bash
|
|
85
|
+
npm run build
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
## 🔗 Links
|
|
89
|
+
|
|
90
|
+
- [Repository](https://github.com/reachy/audience-module)
|
|
91
|
+
- [Issues](https://github.com/reachy/audience-module/issues)
|
|
92
|
+
|
|
93
|
+
## 📄 License
|
|
94
|
+
|
|
95
|
+
MIT
|
|
96
|
+
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { AudienceCriteria, AudienceQueryOptions, AudienceExecutionResult, AudienceBuilderConfig, CreateAudienceData, UpdateAudienceData } from './types';
|
|
2
|
+
export declare class AudienceModule {
|
|
3
|
+
private audienceRepository;
|
|
4
|
+
private memberRepository;
|
|
5
|
+
private contactRepository;
|
|
6
|
+
private staticExecutor;
|
|
7
|
+
constructor(config?: AudienceBuilderConfig);
|
|
8
|
+
setRepositories(repositories: {
|
|
9
|
+
contactRepository?: any;
|
|
10
|
+
audienceRepository?: any;
|
|
11
|
+
memberRepository?: any;
|
|
12
|
+
}): void;
|
|
13
|
+
executeQuery(criteria: string | AudienceCriteria, options: AudienceQueryOptions): Promise<AudienceExecutionResult>;
|
|
14
|
+
getContactCount(criteria: string | AudienceCriteria, options: Omit<AudienceQueryOptions, 'pagination'>): Promise<number>;
|
|
15
|
+
getContactIds(criteria: string | AudienceCriteria, organizationId: string, projectId: string): Promise<Set<string>>;
|
|
16
|
+
createAudience(data: CreateAudienceData): Promise<{
|
|
17
|
+
data: any;
|
|
18
|
+
error: null;
|
|
19
|
+
}>;
|
|
20
|
+
updateAudience(id: string, updateData: UpdateAudienceData, organizationId: string, projectId: string): Promise<{
|
|
21
|
+
data: any;
|
|
22
|
+
error: null;
|
|
23
|
+
}>;
|
|
24
|
+
getAudienceById(id: string, organizationId: string, projectId: string): Promise<any>;
|
|
25
|
+
deleteAudience(id: string): Promise<any>;
|
|
26
|
+
addMembers(audienceId: string, contactIds: string[], organizationId: string, projectId: string, origin?: 'realtime' | 'backfill'): Promise<any>;
|
|
27
|
+
getMembers(audienceId: string, organizationId: string, projectId: string, pagination?: {
|
|
28
|
+
page?: number;
|
|
29
|
+
limit?: number;
|
|
30
|
+
}): Promise<any>;
|
|
31
|
+
validateCriteria(criteria: string | AudienceCriteria): {
|
|
32
|
+
valid: boolean;
|
|
33
|
+
errors: string[];
|
|
34
|
+
};
|
|
35
|
+
getAudienceType(criteria: string | AudienceCriteria): 'static' | 'live';
|
|
36
|
+
private executeLiveQuery;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=AudienceModule.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AudienceModule.d.ts","sourceRoot":"","sources":["../src/AudienceModule.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,gBAAgB,EAChB,oBAAoB,EACpB,uBAAuB,EACvB,qBAAqB,EACrB,kBAAkB,EAClB,kBAAkB,EACnB,MAAM,SAAS,CAAA;AAuBhB,qBAAa,cAAc;IACzB,OAAO,CAAC,kBAAkB,CAAK;IAC/B,OAAO,CAAC,gBAAgB,CAAK;IAC7B,OAAO,CAAC,iBAAiB,CAAK;IAC9B,OAAO,CAAC,cAAc,CAAwB;gBAElC,MAAM,GAAE,qBAA0B;IAa9C,eAAe,CAAC,YAAY,EAAE;QAC5B,iBAAiB,CAAC,EAAE,GAAG,CAAA;QACvB,kBAAkB,CAAC,EAAE,GAAG,CAAA;QACxB,gBAAgB,CAAC,EAAE,GAAG,CAAA;KACvB;IAoBK,YAAY,CAChB,QAAQ,EAAE,MAAM,GAAG,gBAAgB,EACnC,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,uBAAuB,CAAC;IAc7B,eAAe,CACnB,QAAQ,EAAE,MAAM,GAAG,gBAAgB,EACnC,OAAO,EAAE,IAAI,CAAC,oBAAoB,EAAE,YAAY,CAAC,GAChD,OAAO,CAAC,MAAM,CAAC;IAQZ,aAAa,CACjB,QAAQ,EAAE,MAAM,GAAG,gBAAgB,EACnC,cAAc,EAAE,MAAM,EACtB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAoBjB,cAAc,CAAC,IAAI,EAAE,kBAAkB;;;;IA8BvC,cAAc,CAClB,EAAE,EAAE,MAAM,EACV,UAAU,EAAE,kBAAkB,EAC9B,cAAc,EAAE,MAAM,EACtB,SAAS,EAAE,MAAM;;;;IAmCb,eAAe,CAAC,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;IAUrE,cAAc,CAAC,EAAE,EAAE,MAAM;IAczB,UAAU,CACd,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,EAAE,EACpB,cAAc,EAAE,MAAM,EACtB,SAAS,EAAE,MAAM,EACjB,MAAM,GAAE,UAAU,GAAG,UAAuB;IAkBxC,UAAU,CACd,UAAU,EAAE,MAAM,EAClB,cAAc,EAAE,MAAM,EACtB,SAAS,EAAE,MAAM,EACjB,UAAU,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE;IAqBhD,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,gBAAgB;;;;IAQpD,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,gBAAgB,GAAG,QAAQ,GAAG,MAAM;YAYzD,gBAAgB;CA6B/B"}
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AudienceModule = void 0;
|
|
4
|
+
const StaticAudienceExecutor_1 = require("./executors/StaticAudienceExecutor");
|
|
5
|
+
const CriteriaParser_1 = require("./builders/CriteriaParser");
|
|
6
|
+
class AudienceModule {
|
|
7
|
+
constructor(config = {}) {
|
|
8
|
+
this.staticExecutor = new StaticAudienceExecutor_1.StaticAudienceExecutor();
|
|
9
|
+
if (config.enableDebugLogs) {
|
|
10
|
+
console.log('🔧 AudienceModule configurado:', config);
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
setRepositories(repositories) {
|
|
14
|
+
if (repositories.contactRepository) {
|
|
15
|
+
this.contactRepository = repositories.contactRepository;
|
|
16
|
+
this.staticExecutor.setContactRepository(repositories.contactRepository);
|
|
17
|
+
}
|
|
18
|
+
if (repositories.audienceRepository) {
|
|
19
|
+
this.audienceRepository = repositories.audienceRepository;
|
|
20
|
+
}
|
|
21
|
+
if (repositories.memberRepository) {
|
|
22
|
+
this.memberRepository = repositories.memberRepository;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
async executeQuery(criteria, options) {
|
|
26
|
+
const parsed = CriteriaParser_1.CriteriaParser.parse(criteria);
|
|
27
|
+
const type = CriteriaParser_1.CriteriaParser.getAudienceType(parsed);
|
|
28
|
+
if (type === 'static') {
|
|
29
|
+
return this.staticExecutor.execute(parsed, options);
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
return this.executeLiveQuery(parsed, options);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
async getContactCount(criteria, options) {
|
|
36
|
+
const parsed = CriteriaParser_1.CriteriaParser.parse(criteria);
|
|
37
|
+
return this.staticExecutor.executeCount(parsed, options);
|
|
38
|
+
}
|
|
39
|
+
async getContactIds(criteria, organizationId, projectId) {
|
|
40
|
+
if (!this.contactRepository) {
|
|
41
|
+
throw new Error('ContactRepository não configurado');
|
|
42
|
+
}
|
|
43
|
+
const parsed = CriteriaParser_1.CriteriaParser.parse(criteria);
|
|
44
|
+
return this.contactRepository.getContactIdsByAudienceCriteriaV2(organizationId, projectId, parsed);
|
|
45
|
+
}
|
|
46
|
+
async createAudience(data) {
|
|
47
|
+
if (!this.audienceRepository) {
|
|
48
|
+
throw new Error('AudienceRepository não configurado');
|
|
49
|
+
}
|
|
50
|
+
const validation = CriteriaParser_1.CriteriaParser.validate(data.criteria);
|
|
51
|
+
if (!validation.valid) {
|
|
52
|
+
throw new Error(`Critérios inválidos: ${validation.errors.join(', ')}`);
|
|
53
|
+
}
|
|
54
|
+
const { data: audience, error } = await this.audienceRepository.create(data);
|
|
55
|
+
if (error)
|
|
56
|
+
throw error;
|
|
57
|
+
const type = CriteriaParser_1.CriteriaParser.getAudienceType(data.criteria);
|
|
58
|
+
if (type === 'static') {
|
|
59
|
+
const count = await this.getContactCount(data.criteria, {
|
|
60
|
+
organizationId: data.organization_id,
|
|
61
|
+
projectId: data.project_id
|
|
62
|
+
});
|
|
63
|
+
await this.audienceRepository.updateCount(audience.id, count);
|
|
64
|
+
audience.count = count;
|
|
65
|
+
}
|
|
66
|
+
return { data: audience, error: null };
|
|
67
|
+
}
|
|
68
|
+
async updateAudience(id, updateData, organizationId, projectId) {
|
|
69
|
+
if (!this.audienceRepository) {
|
|
70
|
+
throw new Error('AudienceRepository não configurado');
|
|
71
|
+
}
|
|
72
|
+
if (updateData.criteria) {
|
|
73
|
+
const validation = CriteriaParser_1.CriteriaParser.validate(updateData.criteria);
|
|
74
|
+
if (!validation.valid) {
|
|
75
|
+
throw new Error(`Critérios inválidos: ${validation.errors.join(', ')}`);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
const { data: audience, error } = await this.audienceRepository.update(id, updateData);
|
|
79
|
+
if (error)
|
|
80
|
+
throw error;
|
|
81
|
+
if (updateData.criteria) {
|
|
82
|
+
const type = CriteriaParser_1.CriteriaParser.getAudienceType(updateData.criteria);
|
|
83
|
+
if (type === 'static') {
|
|
84
|
+
const count = await this.getContactCount(updateData.criteria, {
|
|
85
|
+
organizationId,
|
|
86
|
+
projectId
|
|
87
|
+
});
|
|
88
|
+
await this.audienceRepository.updateCount(id, count);
|
|
89
|
+
audience.count = count;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
return { data: audience, error: null };
|
|
93
|
+
}
|
|
94
|
+
async getAudienceById(id, organizationId, projectId) {
|
|
95
|
+
if (!this.audienceRepository) {
|
|
96
|
+
throw new Error('AudienceRepository não configurado');
|
|
97
|
+
}
|
|
98
|
+
return this.audienceRepository.findById(id, organizationId, projectId);
|
|
99
|
+
}
|
|
100
|
+
async deleteAudience(id) {
|
|
101
|
+
if (!this.audienceRepository) {
|
|
102
|
+
throw new Error('AudienceRepository não configurado');
|
|
103
|
+
}
|
|
104
|
+
return this.audienceRepository.delete(id);
|
|
105
|
+
}
|
|
106
|
+
async addMembers(audienceId, contactIds, organizationId, projectId, origin = 'backfill') {
|
|
107
|
+
if (!this.memberRepository) {
|
|
108
|
+
throw new Error('MemberRepository não configurado');
|
|
109
|
+
}
|
|
110
|
+
return this.memberRepository.bulkUpsert(audienceId, organizationId, projectId, contactIds, origin);
|
|
111
|
+
}
|
|
112
|
+
async getMembers(audienceId, organizationId, projectId, pagination) {
|
|
113
|
+
if (!this.memberRepository) {
|
|
114
|
+
throw new Error('MemberRepository não configurado');
|
|
115
|
+
}
|
|
116
|
+
return this.memberRepository.listMembers(audienceId, organizationId, projectId, pagination);
|
|
117
|
+
}
|
|
118
|
+
validateCriteria(criteria) {
|
|
119
|
+
const parsed = CriteriaParser_1.CriteriaParser.parse(criteria);
|
|
120
|
+
return CriteriaParser_1.CriteriaParser.validate(parsed);
|
|
121
|
+
}
|
|
122
|
+
getAudienceType(criteria) {
|
|
123
|
+
const parsed = CriteriaParser_1.CriteriaParser.parse(criteria);
|
|
124
|
+
return CriteriaParser_1.CriteriaParser.getAudienceType(parsed);
|
|
125
|
+
}
|
|
126
|
+
async executeLiveQuery(_criteria, options) {
|
|
127
|
+
const startTime = Date.now();
|
|
128
|
+
if (!this.memberRepository) {
|
|
129
|
+
throw new Error('MemberRepository não configurado para audiences live');
|
|
130
|
+
}
|
|
131
|
+
const { data: members, count } = await this.memberRepository.listMembers('', options.organizationId, options.projectId, options.pagination);
|
|
132
|
+
const contactIds = new Set(members?.map((m) => m.id) || []);
|
|
133
|
+
return {
|
|
134
|
+
contactIds,
|
|
135
|
+
contacts: members || [],
|
|
136
|
+
count: count || 0,
|
|
137
|
+
metadata: {
|
|
138
|
+
executionTime: Date.now() - startTime,
|
|
139
|
+
criteriaType: 'live'
|
|
140
|
+
}
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
exports.AudienceModule = AudienceModule;
|
|
145
|
+
//# sourceMappingURL=AudienceModule.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AudienceModule.js","sourceRoot":"","sources":["../src/AudienceModule.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { AudienceCriteria } from '../types';
|
|
2
|
+
export declare class CriteriaParser {
|
|
3
|
+
static parse(criteria: string | AudienceCriteria): AudienceCriteria;
|
|
4
|
+
private static normalizeCriteria;
|
|
5
|
+
static getAudienceType(criteria: AudienceCriteria): 'static' | 'live';
|
|
6
|
+
static validate(criteria: AudienceCriteria): {
|
|
7
|
+
valid: boolean;
|
|
8
|
+
errors: string[];
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=CriteriaParser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CriteriaParser.d.ts","sourceRoot":"","sources":["../../src/builders/CriteriaParser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAK3C,qBAAa,cAAc;IAIzB,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,GAAG,gBAAgB,GAAG,gBAAgB;IAoBnE,OAAO,CAAC,MAAM,CAAC,iBAAiB;IA4BhC,MAAM,CAAC,eAAe,CAAC,QAAQ,EAAE,gBAAgB,GAAG,QAAQ,GAAG,MAAM;IAQrE,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,GAAG;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE;CAqBlF"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CriteriaParser = void 0;
|
|
4
|
+
class CriteriaParser {
|
|
5
|
+
static parse(criteria) {
|
|
6
|
+
let parsed;
|
|
7
|
+
if (typeof criteria === 'string') {
|
|
8
|
+
try {
|
|
9
|
+
parsed = JSON.parse(criteria);
|
|
10
|
+
}
|
|
11
|
+
catch (error) {
|
|
12
|
+
console.error('❌ Erro ao fazer parse de critérios:', error);
|
|
13
|
+
throw new Error('Critérios inválidos');
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
else {
|
|
17
|
+
parsed = criteria;
|
|
18
|
+
}
|
|
19
|
+
return this.normalizeCriteria(parsed);
|
|
20
|
+
}
|
|
21
|
+
static normalizeCriteria(criteria) {
|
|
22
|
+
if (criteria.filters && Array.isArray(criteria.filters)) {
|
|
23
|
+
return {
|
|
24
|
+
...criteria,
|
|
25
|
+
conditions: criteria.filters.map(filter => ({
|
|
26
|
+
groupId: filter.id,
|
|
27
|
+
operator: filter.operator,
|
|
28
|
+
conditions: filter.conditions.map(cond => ({
|
|
29
|
+
field: cond.field,
|
|
30
|
+
operator: cond.operator,
|
|
31
|
+
value: cond.value,
|
|
32
|
+
customFieldKey: cond.customFieldKey,
|
|
33
|
+
logicalOperator: cond.logicalOperator
|
|
34
|
+
}))
|
|
35
|
+
}))
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
if (criteria.groups) {
|
|
39
|
+
return criteria;
|
|
40
|
+
}
|
|
41
|
+
return criteria;
|
|
42
|
+
}
|
|
43
|
+
static getAudienceType(criteria) {
|
|
44
|
+
const liveTypes = ['live-actions', 'live-page-visit', 'live-referrer', 'live-page-count'];
|
|
45
|
+
return liveTypes.includes(criteria.type || '') ? 'live' : 'static';
|
|
46
|
+
}
|
|
47
|
+
static validate(criteria) {
|
|
48
|
+
const errors = [];
|
|
49
|
+
if (!criteria || typeof criteria !== 'object') {
|
|
50
|
+
errors.push('Critérios devem ser um objeto');
|
|
51
|
+
return { valid: false, errors };
|
|
52
|
+
}
|
|
53
|
+
const hasConditions = criteria.conditions && Array.isArray(criteria.conditions);
|
|
54
|
+
const hasFilters = criteria.filters && Array.isArray(criteria.filters);
|
|
55
|
+
const hasGroups = criteria.groups && Array.isArray(criteria.groups);
|
|
56
|
+
if (!hasConditions && !hasFilters && !hasGroups) {
|
|
57
|
+
errors.push('Critérios devem conter conditions, filters ou groups');
|
|
58
|
+
}
|
|
59
|
+
return {
|
|
60
|
+
valid: errors.length === 0,
|
|
61
|
+
errors
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
exports.CriteriaParser = CriteriaParser;
|
|
66
|
+
//# sourceMappingURL=CriteriaParser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CriteriaParser.js","sourceRoot":"","sources":["../../src/builders/CriteriaParser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { AudienceCriteria } from '../types';
|
|
2
|
+
export declare class QueryBuilder {
|
|
3
|
+
static buildFilters(query: any, criteria: AudienceCriteria, organizationId: string, projectId: string): any;
|
|
4
|
+
private static applyAudienceCriteria;
|
|
5
|
+
private static applyGroupsCriteria;
|
|
6
|
+
private static applyFiltersCriteria;
|
|
7
|
+
private static applyConditionsCriteria;
|
|
8
|
+
private static applyCondition;
|
|
9
|
+
private static buildConditionString;
|
|
10
|
+
private static mapFieldToColumn;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=QueryBuilder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"QueryBuilder.d.ts","sourceRoot":"","sources":["../../src/builders/QueryBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAK3C,qBAAa,YAAY;IAIvB,MAAM,CAAC,YAAY,CAAC,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,GAAG;IAW3G,OAAO,CAAC,MAAM,CAAC,qBAAqB;IAmBpC,OAAO,CAAC,MAAM,CAAC,mBAAmB;IA8BlC,OAAO,CAAC,MAAM,CAAC,oBAAoB;IAuCnC,OAAO,CAAC,MAAM,CAAC,uBAAuB;IAoBtC,OAAO,CAAC,MAAM,CAAC,cAAc;IAwC7B,OAAO,CAAC,MAAM,CAAC,oBAAoB;IAyCnC,OAAO,CAAC,MAAM,CAAC,gBAAgB;CAoBhC"}
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.QueryBuilder = void 0;
|
|
4
|
+
class QueryBuilder {
|
|
5
|
+
static buildFilters(query, criteria, organizationId, projectId) {
|
|
6
|
+
query = query
|
|
7
|
+
.eq('organization_id', organizationId)
|
|
8
|
+
.eq('project_id', projectId);
|
|
9
|
+
return this.applyAudienceCriteria(query, criteria);
|
|
10
|
+
}
|
|
11
|
+
static applyAudienceCriteria(query, criteria) {
|
|
12
|
+
if (criteria.groups && Array.isArray(criteria.groups)) {
|
|
13
|
+
return this.applyGroupsCriteria(query, criteria.groups);
|
|
14
|
+
}
|
|
15
|
+
if (criteria.filters && Array.isArray(criteria.filters)) {
|
|
16
|
+
return this.applyFiltersCriteria(query, criteria.filters);
|
|
17
|
+
}
|
|
18
|
+
if (criteria.conditions && Array.isArray(criteria.conditions)) {
|
|
19
|
+
return this.applyConditionsCriteria(query, criteria.conditions);
|
|
20
|
+
}
|
|
21
|
+
return query;
|
|
22
|
+
}
|
|
23
|
+
static applyGroupsCriteria(query, groups) {
|
|
24
|
+
const orConditions = [];
|
|
25
|
+
for (const group of groups) {
|
|
26
|
+
if (!group.rules || !Array.isArray(group.rules))
|
|
27
|
+
continue;
|
|
28
|
+
const groupConditions = [];
|
|
29
|
+
for (const rule of group.rules) {
|
|
30
|
+
const condition = this.buildConditionString(rule);
|
|
31
|
+
if (condition) {
|
|
32
|
+
groupConditions.push(condition);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
if (groupConditions.length > 0) {
|
|
36
|
+
orConditions.push(groupConditions.join(','));
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
if (orConditions.length > 0) {
|
|
40
|
+
query = query.or(orConditions.join(','));
|
|
41
|
+
}
|
|
42
|
+
return query;
|
|
43
|
+
}
|
|
44
|
+
static applyFiltersCriteria(query, filters) {
|
|
45
|
+
const orGroups = filters.filter(f => f.operator === 'OR');
|
|
46
|
+
const andGroups = filters.filter(f => f.operator !== 'OR');
|
|
47
|
+
if (orGroups.length > 0) {
|
|
48
|
+
const orConditions = [];
|
|
49
|
+
for (const filterGroup of orGroups) {
|
|
50
|
+
const groupConditions = [];
|
|
51
|
+
for (const condition of filterGroup.conditions) {
|
|
52
|
+
const condStr = this.buildConditionString(condition);
|
|
53
|
+
if (condStr) {
|
|
54
|
+
groupConditions.push(condStr);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
if (groupConditions.length > 0) {
|
|
58
|
+
orConditions.push(groupConditions.join(','));
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
if (orConditions.length > 0) {
|
|
62
|
+
query = query.or(orConditions.join(','));
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
for (const filterGroup of andGroups) {
|
|
66
|
+
for (const condition of filterGroup.conditions) {
|
|
67
|
+
query = this.applyCondition(query, condition);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
return query;
|
|
71
|
+
}
|
|
72
|
+
static applyConditionsCriteria(query, conditions) {
|
|
73
|
+
for (const group of conditions) {
|
|
74
|
+
if (group.operator === 'OR') {
|
|
75
|
+
const orConditions = group.conditions.map((c) => this.buildConditionString(c)).filter(Boolean);
|
|
76
|
+
if (orConditions.length > 0) {
|
|
77
|
+
query = query.or(orConditions.join(','));
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
for (const condition of group.conditions) {
|
|
82
|
+
query = this.applyCondition(query, condition);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
return query;
|
|
87
|
+
}
|
|
88
|
+
static applyCondition(query, condition) {
|
|
89
|
+
const { field, operator, value } = condition;
|
|
90
|
+
const dbField = this.mapFieldToColumn(field, condition.customFieldKey);
|
|
91
|
+
switch (operator) {
|
|
92
|
+
case 'equals':
|
|
93
|
+
case 'eq':
|
|
94
|
+
return query.eq(dbField, value);
|
|
95
|
+
case 'not_equals':
|
|
96
|
+
case 'neq':
|
|
97
|
+
return query.neq(dbField, value);
|
|
98
|
+
case 'contains':
|
|
99
|
+
case 'ilike':
|
|
100
|
+
return query.ilike(dbField, `%${value}%`);
|
|
101
|
+
case 'not_contains':
|
|
102
|
+
return query.not.ilike(dbField, `%${value}%`);
|
|
103
|
+
case 'starts_with':
|
|
104
|
+
return query.ilike(dbField, `${value}%`);
|
|
105
|
+
case 'ends_with':
|
|
106
|
+
return query.ilike(dbField, `%${value}`);
|
|
107
|
+
case 'greater_than':
|
|
108
|
+
case 'gt':
|
|
109
|
+
return query.gt(dbField, value);
|
|
110
|
+
case 'less_than':
|
|
111
|
+
case 'lt':
|
|
112
|
+
return query.lt(dbField, value);
|
|
113
|
+
case 'is_empty':
|
|
114
|
+
return query.or(`${dbField}.is.null,${dbField}.eq.`);
|
|
115
|
+
case 'is_not_empty':
|
|
116
|
+
return query.not.is(dbField, null);
|
|
117
|
+
default:
|
|
118
|
+
console.warn(`⚠️ Operador desconhecido: ${operator}`);
|
|
119
|
+
return query;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
static buildConditionString(condition) {
|
|
123
|
+
const { field, operator, value } = condition;
|
|
124
|
+
if (!field || !operator)
|
|
125
|
+
return null;
|
|
126
|
+
const dbField = this.mapFieldToColumn(field, condition.customFieldKey);
|
|
127
|
+
switch (operator) {
|
|
128
|
+
case 'equals':
|
|
129
|
+
case 'eq':
|
|
130
|
+
return `${dbField}.eq.${value}`;
|
|
131
|
+
case 'not_equals':
|
|
132
|
+
case 'neq':
|
|
133
|
+
return `${dbField}.neq.${value}`;
|
|
134
|
+
case 'contains':
|
|
135
|
+
case 'ilike':
|
|
136
|
+
return `${dbField}.ilike.*${value}*`;
|
|
137
|
+
case 'not_contains':
|
|
138
|
+
return `${dbField}.not.ilike.*${value}*`;
|
|
139
|
+
case 'starts_with':
|
|
140
|
+
return `${dbField}.ilike.${value}*`;
|
|
141
|
+
case 'ends_with':
|
|
142
|
+
return `${dbField}.ilike.*${value}`;
|
|
143
|
+
case 'greater_than':
|
|
144
|
+
case 'gt':
|
|
145
|
+
return `${dbField}.gt.${value}`;
|
|
146
|
+
case 'less_than':
|
|
147
|
+
case 'lt':
|
|
148
|
+
return `${dbField}.lt.${value}`;
|
|
149
|
+
case 'is_empty':
|
|
150
|
+
return `${dbField}.is.null`;
|
|
151
|
+
case 'is_not_empty':
|
|
152
|
+
return `${dbField}.not.is.null`;
|
|
153
|
+
default:
|
|
154
|
+
return null;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
static mapFieldToColumn(field, customFieldKey) {
|
|
158
|
+
if (field === 'custom_field' && customFieldKey) {
|
|
159
|
+
return `properties->>${customFieldKey}`;
|
|
160
|
+
}
|
|
161
|
+
const fieldMap = {
|
|
162
|
+
email: 'email',
|
|
163
|
+
name: 'name',
|
|
164
|
+
phone: 'phone',
|
|
165
|
+
city: 'city',
|
|
166
|
+
state: 'state',
|
|
167
|
+
country: 'country',
|
|
168
|
+
created_at: 'created_at',
|
|
169
|
+
updated_at: 'updated_at',
|
|
170
|
+
opted_in: 'opted_in',
|
|
171
|
+
is_subscribed: 'is_subscribed'
|
|
172
|
+
};
|
|
173
|
+
return fieldMap[field] || field;
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
exports.QueryBuilder = QueryBuilder;
|
|
177
|
+
//# sourceMappingURL=QueryBuilder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"QueryBuilder.js","sourceRoot":"","sources":["../../src/builders/QueryBuilder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { AudienceCriteria, AudienceQueryOptions, AudienceExecutionResult } from '../types';
|
|
2
|
+
export declare class StaticAudienceExecutor {
|
|
3
|
+
private contactRepository;
|
|
4
|
+
constructor(contactRepository?: any);
|
|
5
|
+
setContactRepository(repository: any): void;
|
|
6
|
+
execute(criteria: AudienceCriteria, options: AudienceQueryOptions): Promise<AudienceExecutionResult>;
|
|
7
|
+
executeCount(criteria: AudienceCriteria, options: Omit<AudienceQueryOptions, 'pagination'>): Promise<number>;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=StaticAudienceExecutor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StaticAudienceExecutor.d.ts","sourceRoot":"","sources":["../../src/executors/StaticAudienceExecutor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,MAAM,UAAU,CAAA;AAS1F,qBAAa,sBAAsB;IACjC,OAAO,CAAC,iBAAiB,CAAK;gBAElB,iBAAiB,CAAC,EAAE,GAAG;IAOnC,oBAAoB,CAAC,UAAU,EAAE,GAAG;IAO9B,OAAO,CACX,QAAQ,EAAE,gBAAgB,EAC1B,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,uBAAuB,CAAC;IAmE7B,YAAY,CAChB,QAAQ,EAAE,gBAAgB,EAC1B,OAAO,EAAE,IAAI,CAAC,oBAAoB,EAAE,YAAY,CAAC,GAChD,OAAO,CAAC,MAAM,CAAC;CAInB"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.StaticAudienceExecutor = void 0;
|
|
4
|
+
const CriteriaParser_1 = require("../builders/CriteriaParser");
|
|
5
|
+
class StaticAudienceExecutor {
|
|
6
|
+
constructor(contactRepository) {
|
|
7
|
+
this.contactRepository = contactRepository;
|
|
8
|
+
}
|
|
9
|
+
setContactRepository(repository) {
|
|
10
|
+
this.contactRepository = repository;
|
|
11
|
+
}
|
|
12
|
+
async execute(criteria, options) {
|
|
13
|
+
const startTime = Date.now();
|
|
14
|
+
try {
|
|
15
|
+
if (!this.contactRepository) {
|
|
16
|
+
throw new Error('ContactRepository não foi configurado. Use setContactRepository() antes de executar.');
|
|
17
|
+
}
|
|
18
|
+
const parsed = CriteriaParser_1.CriteriaParser.parse(criteria);
|
|
19
|
+
const validation = CriteriaParser_1.CriteriaParser.validate(parsed);
|
|
20
|
+
if (!validation.valid) {
|
|
21
|
+
console.error('❌ Critérios inválidos:', validation.errors);
|
|
22
|
+
return {
|
|
23
|
+
contactIds: new Set(),
|
|
24
|
+
contacts: [],
|
|
25
|
+
count: 0,
|
|
26
|
+
metadata: {
|
|
27
|
+
executionTime: Date.now() - startTime,
|
|
28
|
+
criteriaType: 'static'
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
const contactIds = await this.contactRepository.getContactIdsByAudienceCriteriaV2(options.organizationId, options.projectId, parsed);
|
|
33
|
+
let contacts;
|
|
34
|
+
if (options.includeCount || options.pagination) {
|
|
35
|
+
const { page = 1, limit = 10 } = options.pagination || {};
|
|
36
|
+
const contactIdsArray = Array.from(contactIds);
|
|
37
|
+
if (contactIdsArray.length > 0) {
|
|
38
|
+
const paginatedIds = contactIdsArray.slice((page - 1) * limit, page * limit);
|
|
39
|
+
const { data } = await this.contactRepository.findByIds(options.organizationId, options.projectId, paginatedIds);
|
|
40
|
+
contacts = data || [];
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
return {
|
|
44
|
+
contactIds,
|
|
45
|
+
contacts,
|
|
46
|
+
count: contactIds.size,
|
|
47
|
+
metadata: {
|
|
48
|
+
executionTime: Date.now() - startTime,
|
|
49
|
+
criteriaType: 'static'
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
catch (error) {
|
|
54
|
+
console.error('❌ Erro ao executar audiência estática:', error);
|
|
55
|
+
throw error;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
async executeCount(criteria, options) {
|
|
59
|
+
const result = await this.execute(criteria, { ...options, includeCount: true });
|
|
60
|
+
return result.count;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
exports.StaticAudienceExecutor = StaticAudienceExecutor;
|
|
64
|
+
//# sourceMappingURL=StaticAudienceExecutor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StaticAudienceExecutor.js","sourceRoot":"","sources":["../../src/executors/StaticAudienceExecutor.ts"],"names":[],"mappings":";;;AACA,+DAA2D;AAQ3D,MAAa,sBAAsB;IAGjC,YAAY,iBAAuB;QACjC,IAAI,CAAC,iBAAiB,GAAG,iBAAiB,CAAA;IAC5C,CAAC;IAKD,oBAAoB,CAAC,UAAe;QAClC,IAAI,CAAC,iBAAiB,GAAG,UAAU,CAAA;IACrC,CAAC;IAKD,KAAK,CAAC,OAAO,CACX,QAA0B,EAC1B,OAA6B;QAE7B,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QAE5B,IAAI,CAAC;YACH,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC;gBAC5B,MAAM,IAAI,KAAK,CAAC,sFAAsF,CAAC,CAAA;YACzG,CAAC;YAED,MAAM,MAAM,GAAG,+BAAc,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;YAC7C,MAAM,UAAU,GAAG,+BAAc,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;YAElD,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;gBACtB,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAE,UAAU,CAAC,MAAM,CAAC,CAAA;gBAC1D,OAAO;oBACL,UAAU,EAAE,IAAI,GAAG,EAAE;oBACrB,QAAQ,EAAE,EAAE;oBACZ,KAAK,EAAE,CAAC;oBACR,QAAQ,EAAE;wBACR,aAAa,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;wBACrC,YAAY,EAAE,QAAQ;qBACvB;iBACF,CAAA;YACH,CAAC;YAED,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,iCAAiC,CAC/E,OAAO,CAAC,cAAc,EACtB,OAAO,CAAC,SAAS,EACjB,MAAM,CACP,CAAA;YAED,IAAI,QAA2B,CAAA;YAE/B,IAAI,OAAO,CAAC,YAAY,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;gBAC/C,MAAM,EAAE,IAAI,GAAG,CAAC,EAAE,KAAK,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,UAAU,IAAI,EAAE,CAAA;gBACzD,MAAM,eAAe,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;gBAE9C,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC/B,MAAM,YAAY,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,KAAK,EAAE,IAAI,GAAG,KAAK,CAAC,CAAA;oBAE5E,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,SAAS,CACrD,OAAO,CAAC,cAAc,EACtB,OAAO,CAAC,SAAS,EACjB,YAAY,CACb,CAAA;oBAED,QAAQ,GAAG,IAAI,IAAI,EAAE,CAAA;gBACvB,CAAC;YACH,CAAC;YAED,OAAO;gBACL,UAAU;gBACV,QAAQ;gBACR,KAAK,EAAE,UAAU,CAAC,IAAI;gBACtB,QAAQ,EAAE;oBACR,aAAa,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;oBACrC,YAAY,EAAE,QAAQ;iBACvB;aACF,CAAA;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,wCAAwC,EAAE,KAAK,CAAC,CAAA;YAC9D,MAAM,KAAK,CAAA;QACb,CAAC;IACH,CAAC;IAKD,KAAK,CAAC,YAAY,CAChB,QAA0B,EAC1B,OAAiD;QAEjD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,GAAG,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAA;QAC/E,OAAO,MAAM,CAAC,KAAK,CAAA;IACrB,CAAC;CACF;AA9FD,wDA8FC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { AudienceModule } from './AudienceModule';
|
|
2
|
+
export { CriteriaParser } from './builders/CriteriaParser';
|
|
3
|
+
export { QueryBuilder } from './builders/QueryBuilder';
|
|
4
|
+
export { StaticAudienceExecutor } from './executors/StaticAudienceExecutor';
|
|
5
|
+
export * from './types';
|
|
6
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AACtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAA;AAC3E,cAAc,SAAS,CAAA"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.StaticAudienceExecutor = exports.QueryBuilder = exports.CriteriaParser = exports.AudienceModule = void 0;
|
|
18
|
+
var AudienceModule_1 = require("./AudienceModule");
|
|
19
|
+
Object.defineProperty(exports, "AudienceModule", { enumerable: true, get: function () { return AudienceModule_1.AudienceModule; } });
|
|
20
|
+
var CriteriaParser_1 = require("./builders/CriteriaParser");
|
|
21
|
+
Object.defineProperty(exports, "CriteriaParser", { enumerable: true, get: function () { return CriteriaParser_1.CriteriaParser; } });
|
|
22
|
+
var QueryBuilder_1 = require("./builders/QueryBuilder");
|
|
23
|
+
Object.defineProperty(exports, "QueryBuilder", { enumerable: true, get: function () { return QueryBuilder_1.QueryBuilder; } });
|
|
24
|
+
var StaticAudienceExecutor_1 = require("./executors/StaticAudienceExecutor");
|
|
25
|
+
Object.defineProperty(exports, "StaticAudienceExecutor", { enumerable: true, get: function () { return StaticAudienceExecutor_1.StaticAudienceExecutor; } });
|
|
26
|
+
__exportStar(require("./types"), exports);
|
|
27
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,mDAAiD;AAAxC,gHAAA,cAAc,OAAA;AACvB,4DAA0D;AAAjD,gHAAA,cAAc,OAAA;AACvB,wDAAsD;AAA7C,4GAAA,YAAY,OAAA;AACrB,6EAA2E;AAAlE,gIAAA,sBAAsB,OAAA;AAC/B,0CAAuB"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
export interface AudienceCriteria {
|
|
2
|
+
type?: string;
|
|
3
|
+
conditions?: Array<{
|
|
4
|
+
groupId?: string;
|
|
5
|
+
operator?: 'AND' | 'OR';
|
|
6
|
+
conditions?: Array<{
|
|
7
|
+
field: string;
|
|
8
|
+
operator: string;
|
|
9
|
+
value: any;
|
|
10
|
+
customFieldKey?: string;
|
|
11
|
+
logicalOperator?: 'AND' | 'OR';
|
|
12
|
+
}>;
|
|
13
|
+
}>;
|
|
14
|
+
groups?: Array<{
|
|
15
|
+
id?: string;
|
|
16
|
+
operator?: 'AND' | 'OR';
|
|
17
|
+
rules?: Array<{
|
|
18
|
+
kind?: string;
|
|
19
|
+
field?: string;
|
|
20
|
+
operator?: string;
|
|
21
|
+
value?: any;
|
|
22
|
+
eventName?: string;
|
|
23
|
+
customFieldKey?: string;
|
|
24
|
+
}>;
|
|
25
|
+
}>;
|
|
26
|
+
filters?: Array<{
|
|
27
|
+
id: string;
|
|
28
|
+
operator: string;
|
|
29
|
+
conditions: Array<{
|
|
30
|
+
id: string;
|
|
31
|
+
field: string;
|
|
32
|
+
value: string;
|
|
33
|
+
operator: string;
|
|
34
|
+
logicalOperator: string;
|
|
35
|
+
customFieldKey?: string;
|
|
36
|
+
}>;
|
|
37
|
+
}>;
|
|
38
|
+
segmentType?: string;
|
|
39
|
+
config?: {
|
|
40
|
+
name?: string;
|
|
41
|
+
type?: string;
|
|
42
|
+
pageUrl?: string;
|
|
43
|
+
isActive?: boolean;
|
|
44
|
+
eventType?: string;
|
|
45
|
+
pageCount?: string;
|
|
46
|
+
timeFrame?: string;
|
|
47
|
+
conditions?: any[];
|
|
48
|
+
description?: string;
|
|
49
|
+
referrerUrl?: string;
|
|
50
|
+
behaviorCriteria?: {
|
|
51
|
+
engaged?: boolean;
|
|
52
|
+
purchased?: boolean;
|
|
53
|
+
visitedPages?: boolean;
|
|
54
|
+
};
|
|
55
|
+
};
|
|
56
|
+
live_options?: {
|
|
57
|
+
include_past_behavior?: boolean;
|
|
58
|
+
window_days?: number;
|
|
59
|
+
[key: string]: any;
|
|
60
|
+
};
|
|
61
|
+
isActive?: boolean;
|
|
62
|
+
[key: string]: any;
|
|
63
|
+
}
|
|
64
|
+
export interface AudienceQueryOptions {
|
|
65
|
+
organizationId: string;
|
|
66
|
+
projectId: string;
|
|
67
|
+
pagination?: {
|
|
68
|
+
page?: number;
|
|
69
|
+
limit?: number;
|
|
70
|
+
};
|
|
71
|
+
includeCount?: boolean;
|
|
72
|
+
}
|
|
73
|
+
export interface AudienceExecutionResult {
|
|
74
|
+
contactIds: Set<string>;
|
|
75
|
+
contacts?: any[];
|
|
76
|
+
count: number;
|
|
77
|
+
metadata?: {
|
|
78
|
+
executionTime: number;
|
|
79
|
+
criteriaType: string;
|
|
80
|
+
cacheHit?: boolean;
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
export interface AudienceBuilderConfig {
|
|
84
|
+
enableCache?: boolean;
|
|
85
|
+
cacheTimeout?: number;
|
|
86
|
+
enableDebugLogs?: boolean;
|
|
87
|
+
}
|
|
88
|
+
export interface CreateAudienceData {
|
|
89
|
+
name: string;
|
|
90
|
+
description?: string;
|
|
91
|
+
criteria: AudienceCriteria;
|
|
92
|
+
organization_id: string;
|
|
93
|
+
project_id: string;
|
|
94
|
+
user_id: string;
|
|
95
|
+
}
|
|
96
|
+
export interface UpdateAudienceData {
|
|
97
|
+
name?: string;
|
|
98
|
+
description?: string;
|
|
99
|
+
criteria?: AudienceCriteria;
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":""}
|
package/package.json
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@reachy/audience-module",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Módulo reutilizável para consultas e criação de audiences",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"types": "dist/index.d.ts",
|
|
7
|
+
"scripts": {
|
|
8
|
+
"build": "tsc",
|
|
9
|
+
"watch": "tsc --watch",
|
|
10
|
+
"clean": "rm -rf dist",
|
|
11
|
+
"prepublishOnly": "npm run clean && npm run build"
|
|
12
|
+
},
|
|
13
|
+
"keywords": [
|
|
14
|
+
"audience",
|
|
15
|
+
"query",
|
|
16
|
+
"contacts",
|
|
17
|
+
"segmentation",
|
|
18
|
+
"reachy"
|
|
19
|
+
],
|
|
20
|
+
"author": "Reachy Team",
|
|
21
|
+
"license": "MIT",
|
|
22
|
+
"peerDependencies": {
|
|
23
|
+
"@supabase/supabase-js": "^2.x"
|
|
24
|
+
},
|
|
25
|
+
"devDependencies": {
|
|
26
|
+
"@types/node": "^20.0.0",
|
|
27
|
+
"typescript": "^5.0.0"
|
|
28
|
+
},
|
|
29
|
+
"repository": {
|
|
30
|
+
"type": "git",
|
|
31
|
+
"url": "https://github.com/reachy/audience-module.git"
|
|
32
|
+
},
|
|
33
|
+
"publishConfig": {
|
|
34
|
+
"access": "public"
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|