feat: client 객체 생성

This commit is contained in:
2025-03-06 09:44:24 +09:00
parent d0901ebf6c
commit 86b0a644cf
4 changed files with 147 additions and 12 deletions
+1
View File
@@ -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",
+80
View File
@@ -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();
+1
View File
@@ -0,0 +1 @@
export { client } from "./client";