base
This commit is contained in:
@@ -0,0 +1,96 @@
|
||||
/**
|
||||
* Copyright (c) 2023-present Plane Software, Inc. and contributors
|
||||
* SPDX-License-Identifier: AGPL-3.0-only
|
||||
* See the LICENSE file for details.
|
||||
*/
|
||||
|
||||
import type { AxiosInstance, AxiosRequestConfig } from "axios";
|
||||
import axios from "axios";
|
||||
|
||||
/**
|
||||
* Abstract base class for making HTTP requests using axios
|
||||
* @abstract
|
||||
*/
|
||||
export abstract class APIService {
|
||||
protected baseURL: string;
|
||||
private axiosInstance: AxiosInstance;
|
||||
|
||||
/**
|
||||
* Creates an instance of APIService
|
||||
* @param {string} baseURL - The base URL for all HTTP requests
|
||||
*/
|
||||
constructor(baseURL: string) {
|
||||
this.baseURL = baseURL;
|
||||
this.axiosInstance = axios.create({
|
||||
baseURL,
|
||||
withCredentials: true,
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Makes a GET request to the specified URL
|
||||
* @param {string} url - The endpoint URL
|
||||
* @param {object} [params={}] - URL parameters
|
||||
* @param {AxiosRequestConfig} [config={}] - Additional axios configuration
|
||||
* @returns {Promise} Axios response promise
|
||||
*/
|
||||
get(url: string, params = {}, config: AxiosRequestConfig = {}) {
|
||||
return this.axiosInstance.get(url, {
|
||||
...params,
|
||||
...config,
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Makes a POST request to the specified URL
|
||||
* @param {string} url - The endpoint URL
|
||||
* @param {object} [data={}] - Request body data
|
||||
* @param {AxiosRequestConfig} [config={}] - Additional axios configuration
|
||||
* @returns {Promise} Axios response promise
|
||||
*/
|
||||
post(url: string, data = {}, config: AxiosRequestConfig = {}) {
|
||||
return this.axiosInstance.post(url, data, config);
|
||||
}
|
||||
|
||||
/**
|
||||
* Makes a PUT request to the specified URL
|
||||
* @param {string} url - The endpoint URL
|
||||
* @param {object} [data={}] - Request body data
|
||||
* @param {AxiosRequestConfig} [config={}] - Additional axios configuration
|
||||
* @returns {Promise} Axios response promise
|
||||
*/
|
||||
put(url: string, data = {}, config: AxiosRequestConfig = {}) {
|
||||
return this.axiosInstance.put(url, data, config);
|
||||
}
|
||||
|
||||
/**
|
||||
* Makes a PATCH request to the specified URL
|
||||
* @param {string} url - The endpoint URL
|
||||
* @param {object} [data={}] - Request body data
|
||||
* @param {AxiosRequestConfig} [config={}] - Additional axios configuration
|
||||
* @returns {Promise} Axios response promise
|
||||
*/
|
||||
patch(url: string, data = {}, config: AxiosRequestConfig = {}) {
|
||||
return this.axiosInstance.patch(url, data, config);
|
||||
}
|
||||
|
||||
/**
|
||||
* Makes a DELETE request to the specified URL
|
||||
* @param {string} url - The endpoint URL
|
||||
* @param {any} [data] - Request body data
|
||||
* @param {AxiosRequestConfig} [config={}] - Additional axios configuration
|
||||
* @returns {Promise} Axios response promise
|
||||
*/
|
||||
delete(url: string, data?: any, config: AxiosRequestConfig = {}) {
|
||||
return this.axiosInstance.delete(url, { data, ...config });
|
||||
}
|
||||
|
||||
/**
|
||||
* Makes a custom request with the provided configuration
|
||||
* @param {object} [config={}] - Axios request configuration
|
||||
* @returns {Promise} Axios response promise
|
||||
*/
|
||||
request(config = {}) {
|
||||
return this.axiosInstance(config);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user