diff --git a/src/services/apiRequest.ts b/src/services/apiRequest.ts new file mode 100644 index 0000000..a4127c9 --- /dev/null +++ b/src/services/apiRequest.ts @@ -0,0 +1,117 @@ +'use client' + +import axios, {type AxiosResponse} from "axios"; + +const baseUrl = "" + +const AxiosConfigs = { + authenticated: { + json: () => { + return { + headers: { + 'content-type': 'application/json', + Authorization: `Bearer ${localStorage.getItem('sub')}`, + }, + validateStatus: function (status: number) { + return status < 500; // Resolve only if the status code is less than 500 + } + } + } + }, + standard: { + json: () => { + return { + headers: { + 'content-type': 'application/json' + }, + validateStatus: function (status: number) { + return status < 500; // Resolve only if the status code is less than 500 + } + } + } + } +} + +/** + * Makes an authenticated JSON POST request using axios. + * @param {string} route - The route to send the request to. + * @param {object} body - The request body. + * @returns {Promise>} - The promise that resolves to the response from the server. + */ +async function doAuthenticatedJsonPostReq(route:string, body:object): Promise> { + return await axios.post(baseUrl + route, body, AxiosConfigs.authenticated.json()) +} + +/** + * Makes an authenticated GET request to the specified route using Axios. + * + * @param {string} route - The route to which the GET request is sent. + * @returns {Promise} - A promise that resolves to the Axios response object containing the request data and response details. + */ +async function doAuthenticatedGetReq(route:string): Promise> { + return await axios.get(baseUrl + route, AxiosConfigs.authenticated.json()) +} + +/** + * Performs an authenticated PATCH request to the specified route with the given body. + * + * @param {string} route - The route to send the PATCH request to. + * @param {object} body - The body of the request. + * @returns {Promise>} - A Promise that resolves to the AxiosResponse object containing the response data. + */ +async function doAuthenticatedPatchReq(route:string, body: object): Promise> { + return await axios.patch(baseUrl + route, body, AxiosConfigs.authenticated.json()) +} + +/** + * Sends an authenticated DELETE request to the specified route. + * + * @param {string} route - The route to send the request to. + * + * @return {Promise>} A Promise that resolves to the AxiosResponse object containing the response data. + */ +async function doAuthenticatedDelReq(route:string): Promise> { + return await axios.delete(baseUrl + route, AxiosConfigs.authenticated.json()) +} + +//TODO form/multipart req + + +/** + * Perform a JSON POST request. + * + * @param {string} route - The route to send the request to. + * @param {object} body - The JSON object to send in the request body. + * + * @return {Promise>} - A promise that resolves with the response from the server. + * + * @throws {Error} - If an error occurs during the request. + */ +async function doJsonPostReq(route:string, body: object): Promise> { + return await axios.post(baseUrl + route, body, AxiosConfigs.standard.json()) +} + +/** + * Perform a JSON GET request using Axios. + * + * @param {string} route - The route URL to make the GET request to. + * @returns {Promise>} - A promise that resolves to the AxiosResponse object. + */ +async function doJsonGetReq(route:string): Promise> { + return await axios.get(baseUrl + route, AxiosConfigs.standard.json()); +} + +const ApiRequest = { + authenticated: { + post: {json: doAuthenticatedJsonPostReq}, + patch: {json: doAuthenticatedPatchReq}, + delete: {json: doAuthenticatedDelReq}, + get: {json: doAuthenticatedGetReq} + }, + standard: { + post: {json: doJsonPostReq}, + get: {json: doJsonGetReq} + } +} + +export default ApiRequest; \ No newline at end of file