File size: 4,416 Bytes
e85fa50
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
import axios from 'axios';

// 创建 axios 实例
const api = axios.create({
  baseURL: 'https://samlax12-promptbackend.hf.space/api', // 使用实际后端地址
  headers: {
    'Content-Type': 'application/json'
  }
});

// 请求拦截器,添加认证信息
api.interceptors.request.use(config => {
  const token = localStorage.getItem('authToken');
  if (token) {
    config.headers.Authorization = `Bearer ${token}`;
  }
  return config;
}, error => {
  return Promise.reject(error);
});

// 响应拦截器,处理错误
api.interceptors.response.use(response => {
  return response;
}, error => {
  if (error.response && error.response.status === 401) {
    // 认证失败,清除登录信息并重定向到登录页
    localStorage.removeItem('authToken');
    localStorage.removeItem('user');
    window.location.href = '/login';
  }
  return Promise.reject(error);
});

// 用户认证相关 API
export const authAPI = {
  login: async (username: string, password: string) => {
    const response = await api.post('/auth/login', { username, password });
    // eslint-disable-next-line
    const { token, _id, username: user } = response.data;
    localStorage.setItem('authToken', token);
    localStorage.setItem('user', user);
    return response.data;
  },
  
  getProfile: async () => {
    return api.get('/auth/profile');
  },
  
  logout: () => {
    localStorage.removeItem('authToken');
    localStorage.removeItem('user');
  }
};

// 分类相关 API
export const categoryAPI = {
  getAll: async () => {
    const response = await api.get('/categories');
    return response.data;
  },
  
  create: async (data: { name: string; color: string }) => {
    const response = await api.post('/categories', data);
    return response.data;
  },
  
  update: async (id: string, data: { name: string; color: string }) => {
    const response = await api.put(`/categories/${id}`, data);
    return response.data;
  },
  
  delete: async (id: string) => {
    const response = await api.delete(`/categories/${id}`);
    return response.data;
  }
};

// 提示词组相关 API
export const promptGroupAPI = {
  getAll: async () => {
    const response = await api.get('/prompt-groups');
    return response.data;
  },
  
  getById: async (id: string) => {
    const response = await api.get(`/prompt-groups/${id}`);
    return response.data;
  },
  
  create: async (data: { name: string; description: string; category: string }) => {
    const response = await api.post('/prompt-groups', data);
    return response.data;
  },
  
  update: async (id: string, data: { name: string; description: string; category: string }) => {
    const response = await api.put(`/prompt-groups/${id}`, data);
    return response.data;
  },
  
  delete: async (id: string) => {
    const response = await api.delete(`/prompt-groups/${id}`);
    return response.data;
  },
  
  // 提示词相关操作
  addPrompt: async (groupId: string, data: { title: string; content: string; tags: string[] }) => {
    const response = await api.post(`/prompt-groups/${groupId}/prompts`, data);
    return response.data;
  },
  
  updatePrompt: async (groupId: string, promptId: string, data: { title: string; content: string; tags: string[] }) => {
    const response = await api.put(`/prompt-groups/${groupId}/prompts/${promptId}`, data);
    return response.data;
  },
  
  deletePrompt: async (groupId: string, promptId: string) => {
    const response = await api.delete(`/prompt-groups/${groupId}/prompts/${promptId}`);
    return response.data;
  },
  
  // DSL 文件相关操作 - 更新为支持内容上传
  addDslFile: async (groupId: string, data: { name: string; content?: string; fileData?: string; mimeType?: string }) => {
    const response = await api.post(`/prompt-groups/${groupId}/dsl-files`, data);
    return response.data;
  },
  
  updateDslFile: async (groupId: string, fileId: string, data: { name?: string; content?: string }) => {
    const response = await api.put(`/prompt-groups/${groupId}/dsl-files/${fileId}`, data);
    return response.data;
  },
  
  deleteDslFile: async (groupId: string, fileId: string) => {
    const response = await api.delete(`/prompt-groups/${groupId}/dsl-files/${fileId}`);
    return response.data;
  }
};

export default api;