knowledgeGroupService.ts 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. import { KnowledgeGroup, CreateGroupData, UpdateGroupData } from '../types';
  2. import { apiClient } from './apiClient';
  3. export const knowledgeGroupService = {
  4. // Fetch all groups
  5. async getGroups(options: { flat?: boolean; page?: number; limit?: number; name?: string } = {}): Promise<any> {
  6. const queryParams = new URLSearchParams();
  7. if (options.flat) queryParams.append('flat', 'true');
  8. if (options.page) queryParams.append('page', options.page.toString());
  9. if (options.limit) queryParams.append('limit', options.limit.toString());
  10. if (options.name) queryParams.append('name', options.name);
  11. const queryString = queryParams.toString();
  12. const url = `/knowledge-groups${queryString ? `?${queryString}` : ''}`;
  13. const response = await apiClient.request(url, {});
  14. if (!response.ok) throw new Error('Failed to fetch groups');
  15. const data = await response.json();
  16. // If it's an array, it's already in the format we expect (tree or simple list)
  17. if (Array.isArray(data)) return data;
  18. // If it's a paginated object, return it as is or handle appropriately
  19. // The callers of getGroups usually expect an array, but NotebooksView expects a tree.
  20. // However, NotebookDetailView and others might soon expect pagination.
  21. return data;
  22. },
  23. // Create group
  24. async createGroup(data: CreateGroupData): Promise<KnowledgeGroup> {
  25. const { data: group } = await apiClient.post<KnowledgeGroup>('/knowledge-groups', data);
  26. return group;
  27. },
  28. // Update group
  29. async updateGroup(id: string, data: UpdateGroupData): Promise<KnowledgeGroup> {
  30. const { data: group } = await apiClient.put<KnowledgeGroup>(`/knowledge-groups/${id}`, data);
  31. return group;
  32. },
  33. // Delete group
  34. async deleteGroup(id: string): Promise<void> {
  35. const response = await apiClient.request(`/knowledge-groups/${id}`, {
  36. method: 'DELETE',
  37. });
  38. if (!response.ok) throw new Error('Failed to delete group');
  39. },
  40. // Fetch files in group
  41. async getGroupFiles(id: string): Promise<any[]> {
  42. const response = await apiClient.request(`/knowledge-groups/${id}/files`, {});
  43. if (!response.ok) throw new Error('Failed to fetch group files');
  44. const data = await response.json();
  45. return data.files;
  46. },
  47. async addFileToGroups(fileId: string, groupIds: string[]): Promise<void> {
  48. await apiClient.post(`/knowledge-bases/${fileId}/groups`, { groupIds });
  49. },
  50. // Remove file from group
  51. async removeFileFromGroup(fileId: string, groupId: string): Promise<void> {
  52. const response = await apiClient.request(`/knowledge-bases/${fileId}/groups/${groupId}`, {
  53. method: 'DELETE',
  54. });
  55. if (!response.ok) throw new Error('Failed to remove file from group');
  56. },
  57. };