Files
htwkalender-pwa/frontend/src/api/createFeed.ts
2024-02-23 02:50:01 +01:00

82 lines
1.8 KiB
TypeScript

import { Module } from "../model/module.ts";
export async function createIndividualFeed(modules: Module[]): Promise<string> {
try {
const response = await fetch("/api/createFeed", {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify(modules),
});
if (
response.status === 429 ||
response.status === 500 ||
response.status != 200
) {
return Promise.reject(response.statusText);
}
return await response.json();
} catch (error) {
// Catch possible errors and return an unfilled promise
return Promise.reject(error);
}
}
interface FeedResponse {
modules: FeedModule[];
collectionId: string;
collectionName: string;
id: string;
retrieved: string;
updated: string;
}
interface FeedModule {
course: string;
name: string;
reminder: boolean;
userDefinedName: string;
uuid: string;
}
export async function saveIndividualFeed(
token: string,
modules: Module[],
): Promise<string> {
await fetch("/api/collections/feeds/records/" + token, {
method: "PATCH",
headers: {
"Content-Type": "application/json",
},
body: '{"modules":' + JSON.stringify(modules) + "}",
})
.then(async (response) => {
// parse response.json to FeedResponse
const feedResponse: FeedResponse = await response.json();
return feedResponse;
})
.then((response: FeedResponse) => {
token = response.id;
});
return token;
}
export async function deleteIndividualFeed(token: string): Promise<void> {
await fetch("/api/feed?token=" + token, {
method: "DELETE",
})
.then((response) => {
if (response.ok) {
return Promise.resolve(response);
} else {
return Promise.reject(response);
}
})
.catch((error) => {
return Promise.reject(error);
});
}