presenton/servers/nextjs/app/(presentation-generator)/services/api/presentation-generation.ts

229 lines
5.9 KiB
TypeScript

import { getHeader, getHeaderForFormData } from "./header";
import { IconSearch, ImageGenerate, ImageSearch, PreviousGeneratedImagesResponse } from "./params";
import { ApiResponseHandler } from "./api-error-handler";
import { getApiUrl } from "@/utils/api";
export class PresentationGenerationApi {
static async uploadDoc(documents: File[]) {
const formData = new FormData();
documents.forEach((document) => {
formData.append("files", document);
});
try {
const response = await fetch(
getApiUrl(`/api/v1/ppt/files/upload`),
{
method: "POST",
headers: getHeaderForFormData(),
body: formData,
cache: "no-cache",
}
);
return await ApiResponseHandler.handleResponse(response, "Failed to upload documents");
} catch (error) {
console.error("Upload error:", error);
throw error;
}
}
static async decomposeDocuments(
documentKeys: string[],
language?: string | null
) {
try {
const response = await fetch(
getApiUrl(`/api/v1/ppt/files/decompose`),
{
method: "POST",
headers: getHeader(),
body: JSON.stringify({
file_paths: documentKeys,
language: language ?? null,
}),
cache: "no-cache",
}
);
return await ApiResponseHandler.handleResponse(response, "Failed to decompose documents");
} catch (error) {
console.error("Error in Decompose Files", error);
throw error;
}
}
static async createPresentation({
content,
n_slides,
file_paths,
language,
tone,
verbosity,
instructions,
include_table_of_contents,
include_title_slide,
web_search,
}: {
content: string;
n_slides: number | null;
file_paths?: string[];
language: string | null;
tone?: string | null;
verbosity?: string | null;
instructions?: string | null;
include_table_of_contents?: boolean;
include_title_slide?: boolean;
web_search?: boolean;
}) {
try {
const response = await fetch(
getApiUrl(`/api/v1/ppt/presentation/create`),
{
method: "POST",
headers: getHeader(),
body: JSON.stringify({
content,
n_slides,
file_paths,
language,
tone,
verbosity,
instructions,
include_table_of_contents,
include_title_slide,
web_search,
}),
cache: "no-cache",
}
);
return await ApiResponseHandler.handleResponse(response, "Failed to create presentation");
} catch (error) {
console.error("error in presentation creation", error);
throw error;
}
}
static async editSlide(
slide_id: string,
prompt: string
) {
try {
const response = await fetch(
getApiUrl(`/api/v1/ppt/slide/edit`),
{
method: "POST",
headers: getHeader(),
body: JSON.stringify({
id: slide_id,
prompt,
}),
cache: "no-cache",
}
);
return await ApiResponseHandler.handleResponse(response, "Failed to update slide");
} catch (error) {
console.error("error in slide update", error);
throw error;
}
}
static async updatePresentationContent(body: any) {
try {
const response = await fetch(
getApiUrl(`/api/v1/ppt/presentation/update`),
{
method: "PATCH",
headers: getHeader(),
body: JSON.stringify(body),
cache: "no-cache",
}
);
return await ApiResponseHandler.handleResponse(response, "Failed to update presentation content");
} catch (error) {
console.error("error in presentation content update", error);
throw error;
}
}
static async presentationPrepare(presentationData: any) {
try {
const response = await fetch(
getApiUrl(`/api/v1/ppt/presentation/prepare`),
{
method: "POST",
headers: getHeader(),
body: JSON.stringify(presentationData),
cache: "no-cache",
}
);
return await ApiResponseHandler.handleResponse(response, "Failed to prepare presentation");
} catch (error) {
console.error("error in data generation", error);
throw error;
}
}
// IMAGE AND ICON SEARCH
static async generateImage(imageGenerate: ImageGenerate) {
try {
const response = await fetch(
getApiUrl(`/api/v1/ppt/images/generate?prompt=${imageGenerate.prompt}`),
{
method: "GET",
headers: getHeader(),
cache: "no-cache",
}
);
return await ApiResponseHandler.handleResponse(response, "Failed to generate image");
} catch (error) {
console.error("error in image generation", error);
throw error;
}
}
static getPreviousGeneratedImages = async (): Promise<PreviousGeneratedImagesResponse[]> => {
try {
const response = await fetch(
getApiUrl(`/api/v1/ppt/images/generated`),
{
method: "GET",
headers: getHeader(),
}
);
return await ApiResponseHandler.handleResponse(response, "Failed to get previous generated images");
} catch (error) {
console.error("error in getting previous generated images", error);
throw error;
}
}
static async searchIcons(iconSearch: IconSearch) {
try {
const response = await fetch(
getApiUrl(`/api/v1/ppt/icons/search?query=${iconSearch.query}&limit=${iconSearch.limit}`),
{
method: "GET",
headers: getHeader(),
cache: "no-cache",
}
);
return await ApiResponseHandler.handleResponse(response, "Failed to search icons");
} catch (error) {
console.error("error in icon search", error);
throw error;
}
}
}