import { Injectable, Inject } from '@nestjs/common'; import { HttpClientService } from '../core/http-client.service'; import { Audience, CreateAudienceOptions, AudienceListResponse, AudienceStats, PaginationOptions, } from '../types/audience.types'; import { ValidationError } from '../errors'; @Injectable() export class AudiencesService { constructor( @Inject(HttpClientService) private readonly httpClient: HttpClientService, ) {} async create(options: CreateAudienceOptions): Promise { if (!options.name) { throw new ValidationError('name is required', 'name'); } return this.httpClient.post('/api/audiences', options); } async get(audienceId: string): Promise { if (!audienceId) { throw new ValidationError('audience ID is required', 'audienceId'); } return this.httpClient.get(`/api/audiences/${audienceId}`); } async list(options: PaginationOptions): Promise { const params = new URLSearchParams(); if (options.page) { params.append('page', options.page.toString()); } if (options.limit) { params.append('limit', options.limit.toString()); } const queryString = params.toString(); const endpoint = queryString ? `/api/audiences?${queryString}` : '/api/audiences'; return this.httpClient.get(endpoint); } async getStats(audienceId: string): Promise { if (!audienceId) { throw new ValidationError('audience ID is required', 'audienceId'); } return this.httpClient.get(`/api/audiences/${audienceId}/stats`); } async delete(audienceId: string): Promise { if (!audienceId) { throw new ValidationError('audience ID is required', 'audienceId'); } await this.httpClient.delete(`/api/audiences/${audienceId}`); } }