# @reachy/audience-module

Módulo reutilizável para consultas e criação de audiences em múltiplos projetos Reachy.

## 🚀 Instalação

```bash
npm install @reachy/audience-module
```

## 📋 Uso Básico

```typescript
import { AudienceModule } from '@reachy/audience-module'
import { ContactRepository } from './repositories/contactRepository'
import { AudienceRepository } from './repositories/audienceRepository'

// Criar instância do módulo
const audienceModule = new AudienceModule({
  enableDebugLogs: true
})

// Configurar repositórios necessários
audienceModule.setRepositories({
  contactRepository: new ContactRepository(),
  audienceRepository: new AudienceRepository()
})

// Executar query de audiência
const result = await audienceModule.executeQuery(
  {
    filters: [
      {
        id: '1',
        operator: 'AND',
        conditions: [
          { field: 'city', operator: 'equals', value: 'São Paulo' },
          { field: 'opted_in', operator: 'equals', value: true }
        ]
      }
    ]
  },
  {
    organizationId: 'org-123',
    projectId: 'proj-456',
    pagination: { page: 1, limit: 50 }
  }
)

console.log(`Encontrados ${result.count} contatos`)
```

## 🔧 Features

- ✅ Suporte a múltiplos formatos de critérios
- ✅ Query builder otimizado
- ✅ Execução de audiences estáticas e live
- ✅ Validação de critérios
- ✅ Type-safe com TypeScript
- ✅ Fácil integração com Supabase

## 📖 API

### AudienceModule

#### `executeQuery(criteria, options)`

Executa uma query de audiência e retorna os resultados.

#### `getContactCount(criteria, options)`

Retorna apenas a contagem de contatos (mais rápido).

#### `getContactIds(criteria, organizationId, projectId)`

Retorna apenas os IDs dos contatos.

#### `validateCriteria(criteria)`

Valida se os critérios são válidos.

## 📦 Build

```bash
npm run build
```

## 🔗 Links

- [Repository](https://github.com/reachy/audience-module)
- [Issues](https://github.com/reachy/audience-module/issues)

## 📄 License

MIT

