feat: integrate UpdateMangaDataProducer in MangaCreationService for real-time updates

This commit is contained in:
Rodrigo Verdiani 2025-10-28 11:01:10 -03:00
parent bfd415a60d
commit 0f448f3d6d
2 changed files with 14 additions and 8 deletions

View File

@ -3,11 +3,13 @@ package com.magamochi.mangamochi.service;
import com.google.common.util.concurrent.RateLimiter;
import com.magamochi.mangamochi.client.JikanClient;
import com.magamochi.mangamochi.client.RapidFuzzClient;
import com.magamochi.mangamochi.model.dto.UpdateMangaDataCommand;
import com.magamochi.mangamochi.model.entity.Manga;
import com.magamochi.mangamochi.model.entity.MangaImportReview;
import com.magamochi.mangamochi.model.entity.Provider;
import com.magamochi.mangamochi.model.repository.MangaImportReviewRepository;
import com.magamochi.mangamochi.model.repository.MangaRepository;
import com.magamochi.mangamochi.queue.UpdateMangaDataProducer;
import lombok.RequiredArgsConstructor;
import lombok.extern.log4j.Log4j2;
import org.springframework.stereotype.Service;
@ -24,6 +26,8 @@ public class MangaCreationService {
private final RateLimiter jikanRateLimiter;
private final UpdateMangaDataProducer updateMangaDataProducer;
public Manga getOrCreateManga(String title, String url, Provider provider) {
var existingManga = mangaRepository.findByTitleIgnoreCase(title);
if (existingManga.isPresent()) {
@ -74,9 +78,16 @@ public class MangaCreationService {
existingManga = mangaRepository.findByTitleIgnoreCase(result.title());
return existingManga.orElseGet(
() ->
mangaRepository.save(
Manga.builder().title(result.title()).malId(result.mal_id()).build()));
() -> {
var manga =
mangaRepository.save(
Manga.builder().title(result.title()).malId(result.mal_id()).build());
updateMangaDataProducer.sendUpdateMangaDataCommand(
new UpdateMangaDataCommand(manga.getId()));
return manga;
});
}
private void createMangaImportReview(String title, String url, Provider provider) {

View File

@ -9,13 +9,11 @@ import com.magamochi.mangamochi.exception.UnprocessableException;
import com.magamochi.mangamochi.model.dto.ContentProviderMangaChapterResponseDTO;
import com.magamochi.mangamochi.model.dto.ContentProviderMangaInfoResponseDTO;
import com.magamochi.mangamochi.model.dto.ImportMangaDexResponseDTO;
import com.magamochi.mangamochi.model.dto.UpdateMangaDataCommand;
import com.magamochi.mangamochi.model.entity.MangaProvider;
import com.magamochi.mangamochi.model.entity.Provider;
import com.magamochi.mangamochi.model.enumeration.ProviderStatus;
import com.magamochi.mangamochi.model.repository.MangaProviderRepository;
import com.magamochi.mangamochi.model.repository.ProviderRepository;
import com.magamochi.mangamochi.queue.UpdateMangaDataProducer;
import com.magamochi.mangamochi.service.MangaCreationService;
import com.magamochi.mangamochi.service.providers.ContentProvider;
import com.magamochi.mangamochi.service.providers.ContentProviders;
@ -34,7 +32,6 @@ public class MangaDexProvider implements ContentProvider {
private final MangaCreationService mangaCreationService;
private final ProviderRepository providerRepository;
private final MangaProviderRepository mangaProviderRepository;
private final UpdateMangaDataProducer updateMangaDataProducer;
private final RateLimiter mangaDexRateLimiter;
@ -164,8 +161,6 @@ public class MangaDexProvider implements ContentProvider {
.url(id.toString())
.build());
updateMangaDataProducer.sendUpdateMangaDataCommand(new UpdateMangaDataCommand(manga.getId()));
return new ImportMangaDexResponseDTO(manga.getId());
}
}