pdfPreviewService.ts 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. import { PDFStatus } from '../types';
  2. const API_BASE = '/api';
  3. export const pdfPreviewService = {
  4. // PDFプレビューURLの取得
  5. async getPDFUrl(fileId: string): Promise<{ url: string }> {
  6. const response = await fetch(`${API_BASE}/knowledge-bases/${fileId}/pdf-url`, {
  7. headers: {
  8. 'Authorization': `Bearer ${localStorage.getItem('authToken')}`,
  9. },
  10. });
  11. if (!response.ok) {
  12. const errorData = await response.json().catch(() => ({}));
  13. throw new Error(errorData.message || 'Failed to get PDF URL');
  14. }
  15. return response.json();
  16. },
  17. // PDFステータスの確認
  18. async getPDFStatus(fileId: string): Promise<PDFStatus> {
  19. const response = await fetch(`${API_BASE}/knowledge-bases/${fileId}/pdf-status`, {
  20. headers: {
  21. 'Authorization': `Bearer ${localStorage.getItem('authToken')}`,
  22. },
  23. });
  24. if (!response.ok) {
  25. const errorData = await response.json().catch(() => ({}));
  26. throw new Error(errorData.message || 'Failed to fetch PDF status');
  27. }
  28. return response.json();
  29. },
  30. // PDFのプリロード(変換のトリガー)
  31. async preloadPDF(fileId: string, force: boolean = false): Promise<void> {
  32. try {
  33. const url = `${API_BASE}/knowledge-bases/${fileId}/pdf-url` + (force ? '?force=true' : '');
  34. const response = await fetch(url, {
  35. method: 'GET',
  36. headers: {
  37. 'Authorization': `Bearer ${localStorage.getItem('authToken')}`,
  38. },
  39. signal: AbortSignal.timeout(30000), // Increase timeout for conversion
  40. });
  41. if (response.ok) {
  42. console.log('PDF already exists or conversion completed');
  43. }
  44. } catch (error) {
  45. console.log('PDF conversion triggered:', error.message);
  46. }
  47. },
  48. };