import { V2AudienceEngine } from '../engine/V2AudienceEngine' /** * Implementação de ContactRepository dentro do audience-module. * Fornece os métodos que o AudienceModule/StaticAudienceExecutor esperam. */ export class SupabaseContactRepository { private supabase: any private engine: V2AudienceEngine constructor(params: { supabaseClient: any; clickhouseClient?: any; debug?: boolean; logger?: any }) { this.supabase = params.supabaseClient this.engine = new V2AudienceEngine({ supabaseClient: params.supabaseClient, clickhouseClient: params.clickhouseClient, debug: params.debug, logger: params.logger }) } async getContactIdsByAudienceCriteriaV2( organizationId: string, projectId: string, criteria: any ): Promise> { return this.engine.getContactIdsByAudienceCriteriaV2(organizationId, projectId, criteria) } async matchesContactByAudienceCriteriaV2( organizationId: string, projectId: string, criteria: any, contactId: string, triggerEvent?: { event_id?: string; event_name?: string; event_timestamp?: string } ): Promise { return this.engine.matchesContactByAudienceCriteriaV2( organizationId, projectId, criteria, contactId, triggerEvent ) } async findByIds(organizationId: string, projectId: string, ids: string[]) { const { data, error } = await this.supabase .from('contacts') .select('*') .eq('organization_id', organizationId) .eq('project_id', projectId) .in('id', ids) if (error) throw error return { data, error: null } } }