frontend/app/utils/api.ts (95 lines of code) (raw):

import axios from "axios"; import Cookies from "js-cookie"; const API = "/api"; const API_IS_LOGGED_IN = `${API}/isLoggedIn`; const API_DELIVERABLES = `/deliverables${API}`; export const isLoggedIn = async (): Promise<PlutoUser> => { try { const { status, data } = await axios.get<PlutoUser>(`${API_IS_LOGGED_IN}`); if (status === 200) { return data; } throw new Error(`Could not retrieve who is logged in. ${status}`); } catch (error) { console.error(error); throw error; } }; export const getProjectDeliverableSummary = async ( projectId: number ): Promise<DeliverablesCount | null> => { try { const response = await axios.get<DeliverablesCount>( `${API_DELIVERABLES}/bundle/${projectId}/count` ); return response.data; } catch (err) { if (err.response && err.response.status == 404) { console.info(`Project ${projectId} has no deliverable bundle`); return null; } console.error("Could not load deliverable summary: ", err); throw err; } }; export const getProjectDeliverables = async ( projectId: number ): Promise<Deliverable[]> => { try { const response = await axios.get<Deliverable[]>( `${API_DELIVERABLES}/deliverables?project_id=${projectId}` ); if (response?.status === 200) { return response?.data; } if (response?.status === 404) { throw ""; } throw "Could not fetch Project deliverables"; } catch (error) { if (error?.response?.status === 404) { return Promise.reject(); } console.error(error); return Promise.reject(error); } }; export const createProjectDeliverable = async ( projectId: number, commissionId: number, name: string ): Promise<Deliverable | number> => { const csrftoken = Cookies.get("csrftoken"); if (!csrftoken) { console.warn("Could not find a csrf token! Request will probably fail"); } try { const response = await axios.post<Deliverable>( `${API_DELIVERABLES}/bundle/new?autoname=true`, { pluto_core_project_id: projectId, commission_id: commissionId, name: name, }, { headers: { "X-CSRFToken": csrftoken, }, validateStatus: (status) => status == 200 || status == 201 || status == 409, } ); if (response.status == 200) { return response.data; } else if (response.status == 409) { //conflict - the given bundle already exists, so just return the project id return projectId; } throw "Could not create Project deliverable"; } catch (error) { if (error?.response?.status === 404) { return Promise.reject(); } console.error(error); return Promise.reject(error); } };