53 lines
1.7 KiB
JavaScript
53 lines
1.7 KiB
JavaScript
const BASE = "/api";
|
|
|
|
async function request(path, options = {}) {
|
|
const res = await fetch(`${BASE}${path}`, {
|
|
headers: { "Content-Type": "application/json" },
|
|
...options
|
|
});
|
|
if (!res.ok) {
|
|
let message = `Fehler ${res.status}`;
|
|
try {
|
|
const body = await res.json();
|
|
if (body.error) message = body.error;
|
|
} catch (_) {
|
|
/* ignore */
|
|
}
|
|
throw new Error(message);
|
|
}
|
|
if (res.status === 204) return null;
|
|
return res.json();
|
|
}
|
|
|
|
export const api = {
|
|
people: {
|
|
list: () => request("/people"),
|
|
create: (data) => request("/people", { method: "POST", body: JSON.stringify(data) }),
|
|
update: (id, data) =>
|
|
request(`/people/${id}`, { method: "PUT", body: JSON.stringify(data) }),
|
|
remove: (id) => request(`/people/${id}`, { method: "DELETE" })
|
|
},
|
|
projects: {
|
|
list: () => request("/projects"),
|
|
create: (data) => request("/projects", { method: "POST", body: JSON.stringify(data) }),
|
|
update: (id, data) =>
|
|
request(`/projects/${id}`, { method: "PUT", body: JSON.stringify(data) }),
|
|
remove: (id) => request(`/projects/${id}`, { method: "DELETE" })
|
|
},
|
|
tasks: {
|
|
list: () => request("/tasks"),
|
|
create: (data) => request("/tasks", { method: "POST", body: JSON.stringify(data) }),
|
|
update: (id, data) =>
|
|
request(`/tasks/${id}`, { method: "PUT", body: JSON.stringify(data) }),
|
|
remove: (id) => request(`/tasks/${id}`, { method: "DELETE" })
|
|
},
|
|
absences: {
|
|
list: () => request("/absences"),
|
|
create: (data) => request("/absences", { method: "POST", body: JSON.stringify(data) }),
|
|
remove: (id) => request(`/absences/${id}`, { method: "DELETE" })
|
|
},
|
|
capacity: {
|
|
get: (from, to) => request(`/capacity?from=${from}&to=${to}`)
|
|
}
|
|
};
|