From 8f72d9f83176596cca1d19908bcec73d2f74819a Mon Sep 17 00:00:00 2001 From: Egor Date: Sat, 31 Jan 2026 18:02:39 +0300 Subject: [PATCH] Update adminBroadcasts.ts --- src/api/adminBroadcasts.ts | 63 ++++++++++++++++++++++++++++++++++++-- 1 file changed, 61 insertions(+), 2 deletions(-) diff --git a/src/api/adminBroadcasts.ts b/src/api/adminBroadcasts.ts index 6f60fc0..26760c1 100644 --- a/src/api/adminBroadcasts.ts +++ b/src/api/adminBroadcasts.ts @@ -1,6 +1,8 @@ import apiClient from './client'; // Types +export type BroadcastChannel = 'telegram' | 'email' | 'both'; + export interface BroadcastFilter { key: string; label: string; @@ -21,6 +23,10 @@ export interface BroadcastFiltersResponse { custom_filters: BroadcastFilter[]; } +export interface EmailFiltersResponse { + filters: BroadcastFilter[]; +} + export interface TariffForBroadcast { id: number; name: string; @@ -55,6 +61,24 @@ export interface BroadcastCreateRequest { media?: BroadcastMedia; } +export interface EmailBroadcastCreateRequest { + target: string; + subject: string; + html_content: string; +} + +export interface CombinedBroadcastCreateRequest { + channel: BroadcastChannel; + target: string; + // Telegram fields + message_text?: string; + selected_buttons?: string[]; + media?: BroadcastMedia; + // Email fields + email_subject?: string; + email_html_content?: string; +} + export interface Broadcast { id: number; target_type: string; @@ -79,6 +103,10 @@ export interface Broadcast { created_at: string; completed_at: string | null; progress_percent: number; + // New fields for channel support + channel?: BroadcastChannel; + email_subject?: string | null; + email_html_content?: string | null; } export interface BroadcastListResponse { @@ -105,7 +133,7 @@ export interface MediaUploadResponse { } export const adminBroadcastsApi = { - // Get all available filters with counts + // Get all available filters with counts (for Telegram) getFilters: async (): Promise => { const response = await apiClient.get( '/cabinet/admin/broadcasts/filters', @@ -113,6 +141,14 @@ export const adminBroadcastsApi = { return response.data; }, + // Get email filters with counts + getEmailFilters: async (): Promise => { + const response = await apiClient.get( + '/cabinet/admin/broadcasts/email-filters', + ); + return response.data; + }, + // Get tariffs for filtering getTariffs: async (): Promise => { const response = await apiClient.get( @@ -140,12 +176,35 @@ export const adminBroadcastsApi = { return response.data; }, - // Create and start broadcast + // Preview email broadcast (get recipients count) + previewEmail: async (target: string): Promise => { + const response = await apiClient.post( + '/cabinet/admin/broadcasts/email-preview', + { + target, + }, + ); + return response.data; + }, + + // Create and start broadcast (Telegram only - legacy) create: async (data: BroadcastCreateRequest): Promise => { const response = await apiClient.post('/cabinet/admin/broadcasts', data); return response.data; }, + // Create email broadcast + createEmail: async (data: EmailBroadcastCreateRequest): Promise => { + const response = await apiClient.post('/cabinet/admin/broadcasts/email', data); + return response.data; + }, + + // Create combined broadcast (Telegram, Email, or Both) + createCombined: async (data: CombinedBroadcastCreateRequest): Promise => { + const response = await apiClient.post('/cabinet/admin/broadcasts/send', data); + return response.data; + }, + // Get list of broadcasts list: async (limit = 20, offset = 0): Promise => { const response = await apiClient.get('/cabinet/admin/broadcasts', {