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

120 lines
No EOL
3.4 KiB
TypeScript

import { ApiResponseHandler } from "./api-error-handler"
import { getHeader, getHeaderForFormData } from "./header"
import { Theme, ThemeParams } from "./types"
class ThemeApi {
static async getThemes(): Promise<Theme[]> {
try {
const response = await fetch(`/api/v1/ppt/themes/all`, {
method: "GET",
headers: getHeader(),
cache: "no-store",
})
return await ApiResponseHandler.handleResponse(response, "Failed to get themes")
} catch (error) {
console.error("Error getting themes:", error)
throw error
}
}
static async createTheme(theme: ThemeParams) {
try {
const response = await fetch(`/api/v1/ppt/themes/create`, {
method: "POST",
headers: getHeader(),
body: JSON.stringify(theme),
cache: "no-store",
})
return await ApiResponseHandler.handleResponse(response, "Failed to create theme")
}
catch (error) {
console.error("Error creating theme:", error)
throw error
}
}
static async updateTheme(theme: ThemeParams) {
try {
const response = await fetch(`/api/v1/ppt/themes/update/${theme.id}`, {
method: "PATCH",
headers: getHeader(),
body: JSON.stringify(theme),
cache: "no-store",
})
return await ApiResponseHandler.handleResponse(response, "Failed to update theme")
}
catch (error) {
console.error("Error updating theme:", error)
throw error
}
}
static async deleteTheme(themeId: string) {
try {
const response = await fetch(`/api/v1/ppt/themes/delete/${themeId}`, {
method: "DELETE",
headers: getHeader(),
cache: "no-store",
})
return await ApiResponseHandler.handleResponse(response, "Failed to delete theme")
}
catch (error) {
console.error("Error deleting theme:", error)
throw error
}
}
static async generateTheme({ primary, background }: { primary?: string, background?: string }) {
try {
let body = {}
if (primary || background) {
body = {
primary: primary ?? undefined,
background: background ?? undefined,
}
}
const response = await fetch(`/api/v1/ppt/theme/generate`, {
method: "POST",
headers: getHeader(),
body: JSON.stringify(body),
})
return await ApiResponseHandler.handleResponse(response, "Failed to generate theme")
}
catch (error) {
console.error("Error generating theme:", error)
throw error
}
}
static async uploadFont(font: File) {
try {
const formData = new FormData();
formData.append("file", font);
const response = await fetch(`/api/v1/ppt/fonts/upload`, {
method: "POST",
headers: getHeaderForFormData(),
body: formData,
})
return await ApiResponseHandler.handleResponse(response, "Failed to upload font")
}
catch (error) {
console.error("Error uploading font:", error)
throw error
}
}
static async getUserFonts() {
try {
const response = await fetch(`/api/v1/ppt/fonts/uploaded`, {
method: "GET",
headers: getHeader(),
})
return await ApiResponseHandler.handleResponse(response, "Failed to get user fonts")
}
catch (error) {
console.error("Error getting user fonts:", error)
throw error
}
}
}
export default ThemeApi