import axios from 'axios'; import { ReaderContext, Page } from '../../domain/reader'; import { ReaderRepository } from '../../domain/ports/readerRepository'; export class ApiReaderRepository extends ReaderRepository { constructor() { super(); this.api = axios.create({ baseURL: '/api' }); } async getChapterContext(chapterId) { try { const response = await this.api.get(`/reader/chapter/${chapterId}`); const data = response.data; return new ReaderContext( data.id, data.title, data.number, data.manga, data.navigation ); } catch (error) { console.error('Error fetching chapter context:', error); throw error; } } async getPage(chapterId, pageNumber) { try { const response = await this.api.get(`/reader/chapter/${chapterId}/page/${pageNumber}`); const data = response.data; return new Page( data.id, data.pageNumber, data.base64Content, data.mimeType, data.dimensions ); } catch (error) { console.error('Error fetching page:', error); throw error; } } async getPages(chapterId) { try { const response = await this.api.get(`/reader/chapter/${chapterId}/pages`); const data = response.data; // Charger chaque page individuellement pour obtenir le contenu base64 const pagesPromises = data.pages.map(async (page) => { const pageResponse = await this.getPage(chapterId, page.pageNumber); return pageResponse; }); const loadedPages = await Promise.all(pagesPromises); return { pages: loadedPages, totalItems: data.totalItems, currentPage: data.currentPage, itemsPerPage: data.itemsPerPage, totalPages: data.totalPages }; } catch (error) { console.error('Error fetching pages:', error); throw error; } } }