feat: ajout de la fonctionnalité de monitoring des mangas, incluant l'activation et la désactivation du suivi, la synchronisation des chapitres, et la mise à jour de l'API pour gérer ces nouvelles actions. Création de nouveaux composants Vue pour le rafraîchissement des chapitres et l'affichage des notifications. Intégration de tests unitaires pour valider le bon fonctionnement de ces fonctionnalités.
This commit is contained in:
parent
d9e78b5229
commit
00d63dffeb
@@ -0,0 +1,67 @@
|
||||
import { ref } from 'vue';
|
||||
import { useNotifications } from '../../../../shared/composables/useNotifications';
|
||||
import { ApiMangaRepository } from '../../infrastructure/api/apiMangaRepository';
|
||||
|
||||
const mangaRepository = new ApiMangaRepository();
|
||||
|
||||
export function useMangaMonitoring() {
|
||||
const { showSuccess, showError } = useNotifications();
|
||||
|
||||
const isToggling = ref(false);
|
||||
const toggleError = ref(null);
|
||||
|
||||
const toggleMonitoring = async (mangaId, enabled) => {
|
||||
if (isToggling.value || !mangaId) return;
|
||||
|
||||
isToggling.value = true;
|
||||
toggleError.value = null;
|
||||
|
||||
try {
|
||||
console.log(`${enabled ? 'Activation' : 'Désactivation'} du monitoring pour le manga ${mangaId}`);
|
||||
|
||||
await mangaRepository.toggleMonitoring(mangaId, enabled);
|
||||
|
||||
const message = enabled
|
||||
? 'Monitoring activé avec succès. Vous recevrez les nouveaux chapitres automatiquement.'
|
||||
: 'Monitoring désactivé avec succès. Les nouveaux chapitres ne seront plus téléchargés automatiquement.';
|
||||
|
||||
showSuccess(message);
|
||||
|
||||
console.log(`Monitoring ${enabled ? 'activé' : 'désactivé'} avec succès`);
|
||||
return true;
|
||||
} catch (error) {
|
||||
console.error('Erreur lors du changement de monitoring:', error);
|
||||
toggleError.value = error.message || 'Erreur lors du changement de monitoring';
|
||||
|
||||
const errorMessage = enabled
|
||||
? `Erreur lors de l'activation du monitoring: ${error.message || 'Une erreur inattendue est survenue'}`
|
||||
: `Erreur lors de la désactivation du monitoring: ${error.message || 'Une erreur inattendue est survenue'}`;
|
||||
|
||||
showError(errorMessage);
|
||||
throw error;
|
||||
} finally {
|
||||
isToggling.value = false;
|
||||
}
|
||||
};
|
||||
|
||||
const enableMonitoring = async (mangaId) => {
|
||||
return await toggleMonitoring(mangaId, true);
|
||||
};
|
||||
|
||||
const disableMonitoring = async (mangaId) => {
|
||||
return await toggleMonitoring(mangaId, false);
|
||||
};
|
||||
|
||||
const clearError = () => {
|
||||
toggleError.value = null;
|
||||
};
|
||||
|
||||
return {
|
||||
isToggling,
|
||||
toggleError,
|
||||
toggleMonitoring,
|
||||
enableMonitoring,
|
||||
disableMonitoring,
|
||||
clearError
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,48 @@
|
||||
import { ref } from 'vue';
|
||||
import { useNotifications } from '../../../../shared/composables/useNotifications';
|
||||
import { useMangaStore } from '../../application/store/mangaStore';
|
||||
|
||||
export function useMangaRefresh() {
|
||||
const mangaStore = useMangaStore();
|
||||
const { showSuccess, showError } = useNotifications();
|
||||
|
||||
const isRefreshing = ref(false);
|
||||
const refreshError = ref(null);
|
||||
|
||||
const refreshMetadata = async (mangaId) => {
|
||||
if (isRefreshing.value || !mangaId) return;
|
||||
|
||||
isRefreshing.value = true;
|
||||
refreshError.value = null;
|
||||
|
||||
try {
|
||||
console.log(`Début du refresh des métadonnées pour le manga ${mangaId}`);
|
||||
|
||||
// Appel à l'endpoint de refresh des chapitres
|
||||
await mangaStore.refreshMangaChapters(mangaId);
|
||||
|
||||
showSuccess('Refresh des métadonnées lancé avec succès. Les nouveaux chapitres apparaîtront sous peu.');
|
||||
|
||||
console.log('Refresh des métadonnées déclenché avec succès');
|
||||
return true;
|
||||
} catch (error) {
|
||||
console.error('Erreur lors du refresh des métadonnées:', error);
|
||||
refreshError.value = error.message || 'Erreur lors du refresh des métadonnées';
|
||||
showError(`Erreur lors du refresh: ${error.message || 'Une erreur inattendue est survenue'}`);
|
||||
throw error;
|
||||
} finally {
|
||||
isRefreshing.value = false;
|
||||
}
|
||||
};
|
||||
|
||||
const clearError = () => {
|
||||
refreshError.value = null;
|
||||
};
|
||||
|
||||
return {
|
||||
isRefreshing,
|
||||
refreshError,
|
||||
refreshMetadata,
|
||||
clearError
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user