diff --git a/surfsense_web/lib/apis/chats-api.service.api.ts b/surfsense_web/lib/apis/chats-api.service.api.ts new file mode 100644 index 000000000..65dd88413 --- /dev/null +++ b/surfsense_web/lib/apis/chats-api.service.api.ts @@ -0,0 +1,114 @@ +import { ResearchMode } from "@/components/chat/types"; +import { Message } from "@ai-sdk/react"; +import { + chatDetails, + chatSummary, + createChatRequest, + CreateChatRequest, + deleteChatRequest, + DeleteChatRequest, + getChatDetailsRequest, + GetChatDetailsRequest, + getChatsBySearchSpaceRequest, + GetChatsBySearchSpaceRequest, + deleteChatResponse, + UpdateChatRequest, + updateChatRequest, +} from "@/contracts/types/chat.types"; +import { z } from "zod"; +import { baseApiService } from "./base-api.service"; + +export class ChatApiService { + fetchChatDetails = async ( + request: GetChatDetailsRequest + ) => { + // Validate the request + const parsedRequest = getChatDetailsRequest.safeParse(request); + + if (!parsedRequest.success) { + throw new Error(`Invalid request: ${parsedRequest.error.message}`); + } + + return baseApiService.get(`/api/v1/chats/${request.id}`, chatDetails); + }; + + fetchChatsBySearchSpace = async ( + request: GetChatsBySearchSpaceRequest + )=> { + // Validate the request + const parsedRequest = getChatsBySearchSpaceRequest.safeParse(request); + + if (!parsedRequest.success) { + throw new Error(`Invalid request: ${parsedRequest.error.message}`); + } + + return baseApiService.get( + `/api/v1/chats?search_space_id=${request.search_space_id}`, + z.array(chatSummary) + ); + }; + + deleteChat = async (request: DeleteChatRequest) => { + // Validate the request + const parsedRequest = deleteChatRequest.safeParse(request); + + if (!parsedRequest.success) { + throw new Error(`Invalid request: ${parsedRequest.error.message}`); + } + + + return baseApiService.delete(`/api/v1/chats/${request.id}`, undefined, deleteChatResponse); + }; + + createChat = async ( + request: CreateChatRequest + ) => { + // Validate the request + const parsedRequest = createChatRequest.safeParse(request); + + if (!parsedRequest.success) { + throw new Error(`Invalid request: ${parsedRequest.error.message}`); + } + + const { type, title, initial_connectors, messages, search_space_id } = + parsedRequest.data; + + return baseApiService.post( + `/api/v1/chats`, + { + type, + title, + initial_connectors, + messages, + search_space_id, + }, + chatSummary + ); + }; + + updateChat = async ( + request: UpdateChatRequest + ) => { + // Validate the request + const parsedRequest = updateChatRequest.safeParse(request); + + if (!parsedRequest.success) { + throw new Error(`Invalid request: ${parsedRequest.error.message}`); + } + + const { type, title, initial_connectors, messages, search_space_id, id } = + parsedRequest.data; + + return baseApiService.put( + `/api/v1/chats/${id}`, + { + type, + title, + initial_connectors, + messages, + search_space_id, + }, + chatSummary + ); + }; +}