fix(catalog): guard against null external IDs in manga update pipeline
- MangaUpdateService.update(): skip update when both aniListId and malId are null, preventing IllegalStateException for manually-created manga - MangaUpdateService.fetchExternalMangaData(): return null instead of throwing when no external IDs available - MangaResolutionService.createAndNotifyManga(): only enqueue update command when at least one external ID exists, avoiding dead-lettered queue messages
This commit is contained in:
parent
7d8cdd2be8
commit
331df77d28
@ -157,12 +157,14 @@ public class MangaResolutionService {
|
|||||||
mangaRepository.save(
|
mangaRepository.save(
|
||||||
Manga.builder().title(title).aniListId(aniListId).malId(malId).build());
|
Manga.builder().title(title).aniListId(aniListId).malId(malId).build());
|
||||||
|
|
||||||
|
if (nonNull(aniListId) || nonNull(malId)) {
|
||||||
try {
|
try {
|
||||||
mangaUpdateProducer.sendMangaUpdateCommand(new MangaUpdateCommand(manga.getId()));
|
mangaUpdateProducer.sendMangaUpdateCommand(new MangaUpdateCommand(manga.getId()));
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
log.error(
|
log.error(
|
||||||
"Failed to send manga update command for manga '{}' (ID: {})", title, manga.getId(), e);
|
"Failed to send manga update command for manga '{}' (ID: {})", title, manga.getId(), e);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return manga;
|
return manga;
|
||||||
} catch (DataIntegrityViolationException e) {
|
} catch (DataIntegrityViolationException e) {
|
||||||
|
|||||||
@ -1,5 +1,6 @@
|
|||||||
package com.magamochi.catalog.service;
|
package com.magamochi.catalog.service;
|
||||||
|
|
||||||
|
import static java.util.Objects.isNull;
|
||||||
import static java.util.Objects.nonNull;
|
import static java.util.Objects.nonNull;
|
||||||
|
|
||||||
import com.magamochi.catalog.model.dto.MangaDataDTO;
|
import com.magamochi.catalog.model.dto.MangaDataDTO;
|
||||||
@ -49,6 +50,12 @@ public class MangaUpdateService {
|
|||||||
log.info("Updating manga with ID {}", mangaId);
|
log.info("Updating manga with ID {}", mangaId);
|
||||||
|
|
||||||
var manga = mangaService.find(mangaId);
|
var manga = mangaService.find(mangaId);
|
||||||
|
|
||||||
|
if (isNull(manga.getAniListId()) && isNull(manga.getMalId())) {
|
||||||
|
log.info("Skipping update for manga {}: no external IDs available", mangaId);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
var mangaData = fetchExternalMangaData(manga);
|
var mangaData = fetchExternalMangaData(manga);
|
||||||
applyUpdatesToDatabase(manga, mangaData);
|
applyUpdatesToDatabase(manga, mangaData);
|
||||||
|
|
||||||
@ -95,8 +102,7 @@ public class MangaUpdateService {
|
|||||||
throw (RuntimeException) fetchException;
|
throw (RuntimeException) fetchException;
|
||||||
}
|
}
|
||||||
|
|
||||||
throw new IllegalStateException(
|
return null;
|
||||||
"Cannot update manga: No external provider IDs found for Manga " + manga.getId());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void applyUpdatesToDatabase(Manga manga, MangaDataDTO mangaData) {
|
private void applyUpdatesToDatabase(Manga manga, MangaDataDTO mangaData) {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user