import ky from "ky"; import Activity, {ActivityUpdate} from "../models/activity"; import Period, {PeriodUpdate} from "../models/period"; import Item, {ItemUpdate} from "../models/item"; 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 {Promise} */ async listActivities() { const data = await k.get("/api/activity/").json(); return data.activities.map(d => new Activity(d)); } /** * List periods * * @returns {Promise<{>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 {Promise} */ async findActivity(id) { const data = await k.get(`/api/activity/${id}`).json(); return new Activity(data.activity); } /** * Find period * * @param {string} id * @returns {Promise} */ 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 {Promise} */ 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 {Promise} */ 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 {Promise} */ 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 {Promise} */ 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 {Promise} */ async deleteActivity(id) { const data = await k.delete(`/api/activity/${id}`).json(); return new Activity(data.activity); } /** * Update an period * * @param {string} id * @returns {Promise} */ async deletePeriod(id) { const data = await k.delete(`/api/period/${id}`).json(); return new Period(data.period); } /** * Get items * * @param {string} id * @returns {Promise} */ async listItems() { const data = await k.get(`/api/item/`).json(); return data.items } /** * Get an item * * @param {string} id * @returns {Promise} */ async getItem(id) { const data = await k.get(`/api/item/${id}`).json(); return data.item } /** * Post an item * * @param {Item} item * @returns {Promise} */ async postItem(item) { const data = await k.post(`/api/item/`, json(item)).json(); return data.item } /** * Delete an item * * @param {string} id * @param {ItemUpdate} updates * @returns {Promise} */ async updateItem(id, ...updates) { const data = await k.patch(`/api/item/${id}`, json(updates)).json(); return data.item } /** * Delete an item * * @param {string} id * @returns {Promise} */ async deleteItem(id) { const data = await k.delete(`/api/item/${id}`).json(); return data.item } } const slApi = new StuffLogAPI(); export default slApi;