|
1 | 1 | // src/services/projectService.ts |
2 | 2 | import { useProjectStore } from "../stores/projectStore"; |
3 | | -import { TokenStorage } from "./authService"; |
4 | | -import type { ApiResponse } from "../types/auth"; |
5 | | - |
6 | | -const API_BASE_URL = |
7 | | - import.meta.env.VITE_API_BASE_URL || "http://localhost:8080"; |
| 3 | +import { apiFetch } from "../utils/apiClients"; |
8 | 4 |
|
9 | 5 | export async function createProject(name: string, description: string) { |
10 | | - const accessToken = TokenStorage.getAccessToken(); |
11 | | - |
12 | | - const response = await fetch(`${API_BASE_URL}/api/projects`, { |
| 6 | + // apiFetch는 이미 토큰 갱신 및 에러 처리를 포함하고 있음 |
| 7 | + // 응답: {success: true, data: {id, name, description, ...}} -> apiFetch가 data 부분만 반환 |
| 8 | + const project = await apiFetch("/api/projects", { |
13 | 9 | method: "POST", |
14 | 10 | headers: { |
15 | 11 | "Content-Type": "application/json", |
16 | | - ...(accessToken && { Authorization: `Bearer ${accessToken}` }), |
17 | 12 | }, |
18 | 13 | body: JSON.stringify({ name, description }), |
19 | | - credentials: "include", |
20 | 14 | }); |
21 | 15 |
|
22 | | - const data: ApiResponse = await response.json(); |
23 | | - |
24 | | - if (!data.success || !data.data) { |
25 | | - const errorMsg = data.error?.message || "프로젝트 생성 실패"; |
26 | | - const fields = data.error?.fields; |
27 | | - |
28 | | - // 필드별 에러가 있으면 사용자에게 친절하게 표시 |
29 | | - if (fields) { |
30 | | - const fieldErrors = Object.values(fields).join(", "); |
31 | | - throw new Error(fieldErrors || errorMsg); |
32 | | - } |
33 | | - |
34 | | - throw new Error(errorMsg); |
35 | | - } |
36 | | - |
37 | | - useProjectStore.getState().loadProject(data.data); |
38 | | - return data.data; |
| 16 | + // project는 이미 unwrapped된 {id, name, description, createdAt, updatedAt} |
| 17 | + useProjectStore.getState().loadProject(project); |
| 18 | + return project; |
39 | 19 | } |
0 commit comments