| | |
| | | // 评委管理 API |
| | | |
| | | const GRAPHQL_ENDPOINT = 'http://localhost:8080/api/graphql'; |
| | | import { API_CONFIG, graphqlRequest } from '../config/api.ts'; |
| | | |
| | | // GraphQL 查询语句 |
| | | const GET_ALL_JUDGES_QUERY = ` |
| | |
| | | } |
| | | `; |
| | | |
| | | // GraphQL 请求函数 |
| | | const graphqlRequest = async (query, variables = {}) => { |
| | | const response = await fetch(GRAPHQL_ENDPOINT, { |
| | | method: 'POST', |
| | | headers: { |
| | | 'Content-Type': 'application/json', |
| | | }, |
| | | body: JSON.stringify({ |
| | | query, |
| | | variables |
| | | }) |
| | | }); |
| | | |
| | | const result = await response.json(); |
| | | if (result.errors) { |
| | | throw new Error(result.errors[0].message); |
| | | } |
| | | return result.data; |
| | | }; |
| | | // 使用统一的GraphQL请求函数 |
| | | |
| | | // API 函数 |
| | | export const getAllJudges = async () => { |
| | | const data = await graphqlRequest(GET_ALL_JUDGES_QUERY); |
| | | return data.judges || []; |
| | | const result = await graphqlRequest(GET_ALL_JUDGES_QUERY); |
| | | return result.data.judges; |
| | | }; |
| | | |
| | | export const getJudge = async (id) => { |
| | | const data = await graphqlRequest(GET_JUDGE_QUERY, { id }); |
| | | return data.judge; |
| | | const result = await graphqlRequest(GET_JUDGE_QUERY, { id }); |
| | | return result.data.judge; |
| | | }; |
| | | |
| | | // JudgeApi 对象 |
| | | export const JudgeApi = { |
| | | // 获取所有评委 |
| | | getJudges: async () => { |
| | | const data = await graphqlRequest(GET_ALL_JUDGES_QUERY); |
| | | return data.judges || []; |
| | | const result = await graphqlRequest(GET_ALL_JUDGES_QUERY); |
| | | return result.data.judges || []; |
| | | }, |
| | | |
| | | // 获取单个评委 |
| | | getJudge: async (id) => { |
| | | const data = await graphqlRequest(GET_JUDGE_QUERY, { id }); |
| | | return data.judge; |
| | | const result = await graphqlRequest(GET_JUDGE_QUERY, { id }); |
| | | return result.data.judge; |
| | | }, |
| | | |
| | | // 搜索评委 |
| | | searchJudges: async (name) => { |
| | | // 先获取所有评委,然后在客户端过滤(实际项目中应该在后端实现) |
| | | const judges = await JudgeApi.getJudges(); |
| | | return judges.filter(judge => |
| | | judge.name && judge.name.toLowerCase().includes(name.toLowerCase()) |
| | | ); |
| | | const result = await graphqlRequest(` |
| | | query SearchJudges($name: String!) { |
| | | searchJudges(name: $name) { id name title company } |
| | | } |
| | | `, { name }); |
| | | return result.data.searchJudges || []; |
| | | }, |
| | | |
| | | // 保存评委 |
| | | saveJudge: async (input) => { |
| | | const data = await graphqlRequest(SAVE_JUDGE_MUTATION, { input }); |
| | | return data.saveJudge; |
| | | const result = await graphqlRequest(SAVE_JUDGE_MUTATION, { input }); |
| | | return result.data.saveJudge; |
| | | }, |
| | | |
| | | // 删除评委 |
| | | deleteJudge: async (id) => { |
| | | const data = await graphqlRequest(DELETE_JUDGE_MUTATION, { id }); |
| | | return data.deleteJudge; |
| | | const result = await graphqlRequest(DELETE_JUDGE_MUTATION, { id }); |
| | | return result.data.deleteJudge; |
| | | }, |
| | | |
| | | // 获取所有标签 |
| | | getTags: async () => { |
| | | const data = await graphqlRequest(GET_TAGS_QUERY); |
| | | return data.tags || []; |
| | | const result = await graphqlRequest(GET_TAGS_QUERY); |
| | | return result.data.tags || []; |
| | | }, |
| | | |
| | | // 根据类别获取标签 |
| | | getTagsByCategory: async (category) => { |
| | | const data = await graphqlRequest(GET_TAGS_BY_CATEGORY_QUERY, { category }); |
| | | return data.tagsByCategory || []; |
| | | const result = await graphqlRequest(GET_TAGS_BY_CATEGORY_QUERY, { category }); |
| | | return result.data.tagsByCategory || []; |
| | | }, |
| | | |
| | | // 保存媒体 |
| | | saveMedia: async (input) => { |
| | | const data = await graphqlRequest(SAVE_MEDIA_MUTATION, { input }); |
| | | return data.saveMedia; |
| | | const result = await graphqlRequest(SAVE_MEDIA_MUTATION, { input }); |
| | | return result.data.saveMedia; |
| | | } |
| | | }; |
| | | |