EventBuzz_Console/src/services/api/events.ts

76 lines
2.4 KiB
TypeScript

import { api } from './client';
import type { Event, EventDashboardAnalytics } from './types';
interface ListParams {
organization?: string;
status?: string;
type?: string;
page?: number;
limit?: number;
recordKind?: 'event' | 'activity';
activitySubtype?: 'qna' | 'quiz' | 'poll';
enrich?: boolean;
}
export const eventsApi = {
list(params?: ListParams) {
const sp = new URLSearchParams();
if (params?.organization) sp.set('organization', params.organization);
if (params?.status) sp.set('status', params.status);
if (params?.type) sp.set('type', params.type);
if (params?.page != null) sp.set('page', String(params.page));
if (params?.limit != null) sp.set('limit', String(params.limit));
if (params?.recordKind) sp.set('recordKind', params.recordKind);
if (params?.activitySubtype) sp.set('activitySubtype', params.activitySubtype);
if (params?.enrich) sp.set('enrich', '1');
const q = sp.toString();
return api.get<{ events: Event[]; total: number; page: number; limit: number }>(
`/events${q ? `?${q}` : ''}`
);
},
get(id: string, opts?: { enrich?: boolean }) {
const q = opts?.enrich ? '?enrich=1' : '';
return api.get<Event>(`/events/${id}${q}`);
},
create(payload: Partial<Event>) {
return api.post<Event>('/events', payload);
},
update(id: string, payload: Partial<Event>) {
return api.put<Event>(`/events/${id}`, payload);
},
remove(id: string) {
return api.delete<unknown>(`/events/${id}`);
},
analytics(id: string) {
return api.get<EventDashboardAnalytics>(`/events/${id}/analytics`);
},
duplicate(id: string) {
return api.post<Event>(`/events/${id}/duplicate`, {});
},
generateFromAi(payload: { description: string; organization?: string | null }) {
return api.post<Event>('/events/generate-from-ai', payload);
},
aiExtractPreview(payload: { description: string; organization?: string | null }) {
return api.post<{
gaps: { id: string; prompt: string }[];
mergedPreview: Record<string, unknown>;
}>('/events/ai-extract-preview', payload);
},
/** Forms + microsites with resolved hrefs for emailer CTA pickers */
emailerLinkTargets(eventId: string) {
return api.get<{
forms: { id: string; name: string; href: string }[];
microsites: { id: string; name: string; href: string }[];
}>(`/events/${eventId}/emailer-link-targets`);
},
};