dreihochdrei/src/partyApi.ts
2023-03-23 11:11:45 +01:00

58 lines
2.1 KiB
TypeScript

import { APIEndPoint, PartyStatus, SelfStatus, UpdatableSelfStatus } from "./PartyContext";
let debugMode = false;
export const enableDebugMode = () => {
debugMode = true;
};
export const parseURI = (uri: string): APIEndPoint | undefined => {
const x = uri.match(/https?:\/\/(?<partyName>\w+)\.(?<host>.+)\/(?<token>.+)/);
if (x === null || x.groups === undefined) return;
const partyName = x.groups["partyName"];
const token = x.groups["token"];
if (!partyName || !token) return;
return { partyName, token };
};
const apiUrl = (apiEndPoint: APIEndPoint): string => {
return `https://party.leafbla.de/api/${apiEndPoint.partyName}/${apiEndPoint.token}`;
};
export const getSelfStatusRequest = async (apiEndpoint: APIEndPoint): Promise<SelfStatus> => {
if (debugMode) return debugData["me"];
const result = await fetch(`${apiUrl(apiEndpoint)}/me`);
if (!result.ok) throw new Error("Error sending getSelfRequest");
const data = await result.json();
return data as SelfStatus;
};
export const getPartyStatusRequest = async (apiEndpoint: APIEndPoint): Promise<PartyStatus> => {
if (debugMode) return debugData["status"];
const result = await fetch(`${apiUrl(apiEndpoint)}/status`);
if (!result.ok) throw new Error("Error sending getPartyRequest");
const data = await result.json();
return data as PartyStatus;
};
export const modifySelfRequest = async (apiEndpoint: APIEndPoint, payload: UpdatableSelfStatus): Promise<SelfStatus> => {
if (debugMode) return debugData["me"];
const result = await fetch(`${apiUrl(apiEndpoint)}/me`, { method: "PATCH", body: JSON.stringify(payload), headers: { "Content-Type": "application/json" } });
if (!result.ok) throw new Error("Error sending modifySelfRequest");
const data = await result.json();
return data as SelfStatus;
};
const debugData: { me: SelfStatus, status: PartyStatus } = {
me: {
coming: "maybe",
grammatical_gender: "f",
name: "Test user",
token: "testusertoken",
extra: {},
},
status: {
definitely_coming: 10,
maybe_coming: 5,
}
};