74 lines
1.9 KiB
JavaScript
74 lines
1.9 KiB
JavaScript
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;
|
|
}
|
|
}
|
|
}
|