139 lines
4.0 KiB
JavaScript
139 lines
4.0 KiB
JavaScript
import { D as get } from "./dev.js";
|
|
import "./index-server2.js";
|
|
import { t as token } from "./auth.js";
|
|
//#region src/lib/api.ts
|
|
var BASE = "/api";
|
|
async function request(path, init) {
|
|
const $token = get(token);
|
|
const res = await fetch(BASE + path, {
|
|
...init,
|
|
headers: {
|
|
"Content-Type": "application/json",
|
|
...$token ? { Authorization: `Bearer ${$token}` } : {},
|
|
...init?.headers
|
|
}
|
|
});
|
|
if (res.status === 401 && false);
|
|
if (!res.ok) {
|
|
const error = await res.json().catch(() => ({ error: res.statusText }));
|
|
throw new Error(error.error || res.statusText);
|
|
}
|
|
if (res.status === 204) return {};
|
|
return res.json();
|
|
}
|
|
var api = {
|
|
auth: { login: (email, password) => request("/auth/login", {
|
|
method: "POST",
|
|
body: JSON.stringify({
|
|
email,
|
|
password
|
|
})
|
|
}) },
|
|
admin: {
|
|
courses: {
|
|
list: () => request("/admin/courses"),
|
|
create: (name, semester) => request("/admin/courses", {
|
|
method: "POST",
|
|
body: JSON.stringify({
|
|
name,
|
|
semester
|
|
})
|
|
}),
|
|
listStudents: (course_id) => request(`/admin/courses/${course_id}/students`),
|
|
addStudent: (course_id, name) => request(`/admin/courses/${course_id}/students`, {
|
|
method: "POST",
|
|
body: JSON.stringify({ name })
|
|
}),
|
|
importStudents: (course_id, file) => {
|
|
const formData = new FormData();
|
|
formData.append("file", file);
|
|
return fetch(`${BASE}/admin/courses/${course_id}/students/import`, {
|
|
method: "POST",
|
|
headers: { "Authorization": `Bearer ${get(token)}` },
|
|
body: formData
|
|
}).then((res) => res.json());
|
|
}
|
|
},
|
|
students: {
|
|
delete: (id) => request(`/admin/students/${id}`, { method: "DELETE" }),
|
|
getAttendance: (id) => request(`/admin/students/${id}/attendance`),
|
|
getNotes: (id) => request(`/admin/students/${id}/notes`)
|
|
},
|
|
rooms: {
|
|
list: () => request("/admin/rooms"),
|
|
create: (name, layout) => request("/admin/rooms", {
|
|
method: "POST",
|
|
body: JSON.stringify({
|
|
name,
|
|
layout
|
|
})
|
|
}),
|
|
get: (id) => request(`/admin/rooms/${id}`),
|
|
updateLayout: (id, layout) => request(`/admin/rooms/${id}/layout`, {
|
|
method: "PUT",
|
|
body: JSON.stringify(layout)
|
|
})
|
|
},
|
|
sessions: {
|
|
list: (course_id) => request(`/admin/sessions?course_id=${course_id}`),
|
|
create: (course_id, week_nr, date) => request("/admin/sessions", {
|
|
method: "POST",
|
|
body: JSON.stringify({
|
|
course_id,
|
|
week_nr,
|
|
date
|
|
})
|
|
}),
|
|
getAttendance: (id) => request(`/admin/sessions/${id}/attendance`)
|
|
},
|
|
slots: {
|
|
create: (session_id, tutor_id, start_time, end_time, room_id) => request("/admin/slots", {
|
|
method: "POST",
|
|
body: JSON.stringify({
|
|
session_id,
|
|
tutor_id,
|
|
start_time,
|
|
end_time,
|
|
room_id
|
|
})
|
|
}),
|
|
updateStatus: (id, status) => request(`/admin/slots/${id}/status`, {
|
|
method: "PATCH",
|
|
body: JSON.stringify({ status })
|
|
}),
|
|
delete: (id) => request(`/admin/slots/${id}`, { method: "DELETE" }),
|
|
addAttendance: (id, student_id) => request(`/admin/slots/${id}/attendance`, {
|
|
method: "POST",
|
|
body: JSON.stringify({ student_id })
|
|
}),
|
|
deleteAttendance: (slot_id, student_id) => request(`/admin/slots/${slot_id}/attendance/${student_id}`, { method: "DELETE" }),
|
|
getNotes: (id) => request(`/admin/slots/${id}/notes`),
|
|
upsertNote: (slot_id, student_id, content) => request(`/admin/slots/${slot_id}/notes/${student_id}`, {
|
|
method: "PUT",
|
|
body: JSON.stringify({ content })
|
|
})
|
|
},
|
|
export: {
|
|
sessionCsv: (id) => `${BASE}/admin/export/session/${id}/csv`,
|
|
sessionMd: (id) => `${BASE}/admin/export/session/${id}/md`,
|
|
courseCsv: (id) => `${BASE}/admin/export/course/${id}/csv`,
|
|
courseMd: (id) => `${BASE}/admin/export/course/${id}/md`,
|
|
backup: () => `${BASE}/admin/backup`
|
|
}
|
|
},
|
|
checkin: {
|
|
getInfo: (code) => request(`/api/checkin/${code}`),
|
|
getStudents: (code) => request(`/api/checkin/${code}/students`),
|
|
post: (code, student_id, seat_id) => request("/api/checkin", {
|
|
method: "POST",
|
|
body: JSON.stringify({
|
|
code,
|
|
student_id,
|
|
seat_id
|
|
})
|
|
})
|
|
}
|
|
};
|
|
//#endregion
|
|
export { api as t };
|