import ky from "ky"; import Activity, {ActivityUpdate} from "../models/activity"; import Period, {PeriodUpdate} from "../models/period"; function json(data) { return { body: JSON.stringify(data), headers: { "Content-Type": "application/json", }, credentials: "include", } } const k = ky.create({ credentials: "include", }) export class StuffLogAPI { async checkSession() { return await k.get("/api/user/").json(); } async login(username, password) { return await k.post("/api/user/login", json({username,password})).json(); } async register(username, password) { return await k.post("/api/user/register", json({username,password})).json(); } async logout() { return await k.post("/api/user/logout").json(); } /** * List activities * * @returns {Activity[]} */ async listActivities() { const data = await k.get("/api/activity/").json(); return data.activities.map(d => new Activity(d)); } /** * List periods * * @returns {{periods: Period[], activities: Activity[]}} */ async listPeriods() { const data = await k.get("/api/period/").json(); return data.periods.map(d => new Period(d)); } /** * Find activity * * @param {string} id * @returns {Activity} */ async findActivity(id) { const data = await k.get(`/api/activity/${id}`).json(); return new Activity(data.activity); } /** * Find period * * @param {string} id * @returns {Period} */ async findPeriod(id) { const data = await k.get(`/api/period/${id}`).json(); return new Period(data.period); } /** * Create a new activity * * @param {Activity} activity * @returns {Activity} */ async postActivity(activity) { const data = await k.post(`/api/activity/`, json(activity)).json(); return new Activity(data.activity); } /** * Create a new period * * @param {Period} period * @returns {Period} */ async postPeriod(period) { const data = await k.post(`/api/period/`, json(period)).json(); return new Period(data.period); } /** * Update an activity * * @param {string} id * @param {ActivityUpdate[]} updates * @returns {Activity} */ async patchActivity(id, ...updates) { const data = await k.patch(`/api/activity/${id}`, json(updates)).json(); return new Activity(data.activity); } /** * Update an period * * @param {string} id * @param {PeriodUpdate[]} updates * @returns {Period} */ async patchPeriod(id, ...updates) { const data = await k.patch(`/api/period/${id}`, json(updates)).json(); return new Period(data.period); } /** * Update an activity * * @param {string} id * @returns {Activity} */ async deleteActivity(id) { const data = await k.delete(`/api/activity/${id}`).json(); return new Activity(data.activity); } /** * Update an period * * @param {string} id * @returns {Period} */ async deletePeriod(id) { const data = await k.delete(`/api/period/${id}`).json(); return new Period(data.period); } } const slApi = new StuffLogAPI(); export default slApi;