import http from "../http"; import axios from "axios"; export interface MeetingVO { id: number; tenantId: number; creatorId: number; creatorName?: string; title: string; meetingTime: string; participants: string; participantIds?: number[]; tags: string; audioUrl: string; summaryContent: string; analysis?: { overview?: string; keywords?: string[]; chapters?: Array<{ time?: string; title?: string; summary?: string }>; speakerSummaries?: Array<{ speaker?: string; summary?: string }>; keyPoints?: Array<{ title?: string; summary?: string; speaker?: string; time?: string }>; todos?: string[]; }; status: number; createdAt: string; } export interface CreateMeetingCommand { id?: number; title: string; meetingTime: string; participants: string; tags: string; audioUrl?: string; asrModelId: number; summaryModelId?: number; promptId: number; useSpkId?: number; enableTextRefine?: boolean; hotWords?: string[]; } export type MeetingDTO = CreateMeetingCommand; export interface UpdateMeetingBasicCommand { meetingId: number; title?: string; meetingTime?: string; tags?: string; } export type MeetingUpdateBasicDTO = UpdateMeetingBasicCommand; export interface UpdateMeetingSummaryCommand { meetingId: number; summaryContent: string; } export type MeetingUpdateSummaryDTO = UpdateMeetingSummaryCommand; export const getMeetingPage = (params: { current: number; size: number; title?: string; viewType?: 'all' | 'created' | 'involved'; }) => { return http.get( "/api/biz/meeting/page", { params } ); }; export const createMeeting = (data: CreateMeetingCommand) => { return http.post( "/api/biz/meeting", data ); }; export interface RealtimeTranscriptItemDTO { speakerId?: string; speakerName?: string; content: string; startTime?: number; endTime?: number; } export interface RealtimeSocketSessionVO { sessionToken: string; path: string; expiresInSeconds: number; startMessage: Record; } export interface RealtimeSocketSessionRequest { asrModelId: number; mode?: string; language?: string; useSpkId?: number; enablePunctuation?: boolean; enableItn?: boolean; enableTextRefine?: boolean; saveAudio?: boolean; hotwords?: Array<{ hotword: string; weight: number }>; } export const createRealtimeMeeting = (data: CreateMeetingCommand) => { return http.post( "/api/biz/meeting/realtime/start", data ); }; export const appendRealtimeTranscripts = (meetingId: number, data: RealtimeTranscriptItemDTO[]) => { return http.post( `/api/biz/meeting/${meetingId}/realtime/transcripts`, data ); }; export const openRealtimeMeetingSocketSession = ( meetingId: number, data: RealtimeSocketSessionRequest, ) => { return http.post( `/api/biz/meeting/${meetingId}/realtime/socket-session`, data ); }; export const completeRealtimeMeeting = (meetingId: number, data?: { audioUrl?: string }) => { return http.post( `/api/biz/meeting/${meetingId}/realtime/complete`, data || {} ); }; export const deleteMeeting = (id: number) => { return http.delete( `/api/biz/meeting/${id}` ); }; export interface MeetingTranscriptVO { id: number; speakerId: string; speakerName: string; speakerLabel: string; content: string; startTime: number; endTime: number; } export const getMeetingDetail = (id: number) => { return http.get( `/api/biz/meeting/${id}` ); }; export const getTranscripts = (id: number) => { return http.get( `/api/biz/meeting/${id}/transcripts` ); }; export interface MeetingSpeakerUpdateDTO { meetingId: number; speakerId: string; newName: string; label: string; } export interface MeetingTranscriptUpdateDTO { meetingId: number; transcriptId: number; content: string; } export const updateSpeakerInfo = (params: MeetingSpeakerUpdateDTO) => { return http.put( "/api/biz/meeting/speaker", params ); }; export const updateMeetingTranscript = (params: MeetingTranscriptUpdateDTO) => { return http.put( `/api/biz/meeting/${params.meetingId}/transcripts/${params.transcriptId}`, params ); }; export interface MeetingResummaryDTO { meetingId: number; summaryModelId: number; promptId: number; } export const reSummary = (params: MeetingResummaryDTO) => { return http.post( `/api/biz/meeting/${params.meetingId}/summary/regenerate`, params ); }; export const updateMeetingBasic = (data: UpdateMeetingBasicCommand) => { return http.put( `/api/biz/meeting/${data.meetingId}/basic`, data ); }; export const updateMeetingSummary = (data: UpdateMeetingSummaryCommand) => { return http.put( `/api/biz/meeting/${data.meetingId}/summary`, data ); }; export interface UpdateMeetingParticipantsCommand { meetingId: number; participants: string; } export type MeetingParticipantsUpdateDTO = UpdateMeetingParticipantsCommand; export const updateMeetingParticipants = (params: UpdateMeetingParticipantsCommand) => { return http.put( `/api/biz/meeting/${params.meetingId}/participants`, params ); }; export const uploadAudio = (file: File) => { const formData = new FormData(); formData.append("file", file); return http.post( "/api/biz/meeting/upload", formData, { headers: { "Content-Type": "multipart/form-data" } } ); }; export interface MeetingProgress { percent: number; message: string; updateAt: number; } export const getMeetingProgress = (id: number) => { return http.get( `/api/biz/meeting/${id}/progress` ); }; export const downloadMeetingSummary = (id: number, format: 'pdf' | 'word') => { const token = localStorage.getItem("accessToken"); return axios.get(`/api/biz/meeting/${id}/summary/export`, { params: { format }, responseType: 'blob', headers: token ? { Authorization: `Bearer ${token}` } : {} }); };