feat: client 객체 생성
This commit is contained in:
@@ -12,6 +12,7 @@
|
||||
"@common/assets": "workspace:*",
|
||||
"@common/components": "workspace:*",
|
||||
"@tanstack/react-table": "^8.21.2",
|
||||
"axios": "^1.8.1",
|
||||
"chart.js": "^4.4.8",
|
||||
"next": "15.1.7",
|
||||
"react-chartjs-2": "^5.3.0",
|
||||
|
||||
@@ -0,0 +1,80 @@
|
||||
import axios from "axios";
|
||||
import type { AxiosInstance, InternalAxiosRequestConfig } from "axios";
|
||||
|
||||
interface ApiResponse<T = unknown> {
|
||||
data: T;
|
||||
status: number;
|
||||
message?: string;
|
||||
}
|
||||
|
||||
interface RequestData {
|
||||
[key: string]: unknown;
|
||||
}
|
||||
|
||||
class Client {
|
||||
private static instance: Client;
|
||||
private axiosInstance: AxiosInstance;
|
||||
|
||||
private constructor() {
|
||||
this.axiosInstance = axios.create({
|
||||
baseURL: process.env.NEXT_PUBLIC_API_URL,
|
||||
headers: {
|
||||
"Content-Type": "application/json",
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
public static getInstance(): Client {
|
||||
if (!Client.instance) {
|
||||
Client.instance = new Client();
|
||||
}
|
||||
return Client.instance;
|
||||
}
|
||||
|
||||
public async get<T>(
|
||||
url: string,
|
||||
config?: InternalAxiosRequestConfig,
|
||||
): Promise<ApiResponse<T>> {
|
||||
const response = await this.axiosInstance.get<ApiResponse<T>>(url, config);
|
||||
return response.data;
|
||||
}
|
||||
|
||||
public async post<T>(
|
||||
url: string,
|
||||
data?: RequestData,
|
||||
config?: InternalAxiosRequestConfig,
|
||||
): Promise<ApiResponse<T>> {
|
||||
const response = await this.axiosInstance.post<ApiResponse<T>>(
|
||||
url,
|
||||
data,
|
||||
config,
|
||||
);
|
||||
return response.data;
|
||||
}
|
||||
|
||||
public async put<T>(
|
||||
url: string,
|
||||
data?: RequestData,
|
||||
config?: InternalAxiosRequestConfig,
|
||||
): Promise<ApiResponse<T>> {
|
||||
const response = await this.axiosInstance.put<ApiResponse<T>>(
|
||||
url,
|
||||
data,
|
||||
config,
|
||||
);
|
||||
return response.data;
|
||||
}
|
||||
|
||||
public async delete<T>(
|
||||
url: string,
|
||||
config?: InternalAxiosRequestConfig,
|
||||
): Promise<ApiResponse<T>> {
|
||||
const response = await this.axiosInstance.delete<ApiResponse<T>>(
|
||||
url,
|
||||
config,
|
||||
);
|
||||
return response.data;
|
||||
}
|
||||
}
|
||||
|
||||
export const client = Client.getInstance();
|
||||
@@ -0,0 +1 @@
|
||||
export { client } from "./client";
|
||||
Reference in New Issue
Block a user