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.google.common.util.concurrent.RateLimiter;
import com.magamochi.mangamochi.client.JikanClient; import com.magamochi.mangamochi.client.JikanClient;
import com.magamochi.mangamochi.client.RapidFuzzClient; 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.Manga;
import com.magamochi.mangamochi.model.entity.MangaImportReview; import com.magamochi.mangamochi.model.entity.MangaImportReview;
import com.magamochi.mangamochi.model.entity.Provider; import com.magamochi.mangamochi.model.entity.Provider;
import com.magamochi.mangamochi.model.repository.MangaImportReviewRepository; import com.magamochi.mangamochi.model.repository.MangaImportReviewRepository;
import com.magamochi.mangamochi.model.repository.MangaRepository; import com.magamochi.mangamochi.model.repository.MangaRepository;
import com.magamochi.mangamochi.queue.UpdateMangaDataProducer;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.log4j.Log4j2; import lombok.extern.log4j.Log4j2;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -24,6 +26,8 @@ public class MangaCreationService {
private final RateLimiter jikanRateLimiter; private final RateLimiter jikanRateLimiter;
private final UpdateMangaDataProducer updateMangaDataProducer;
public Manga getOrCreateManga(String title, String url, Provider provider) { public Manga getOrCreateManga(String title, String url, Provider provider) {
var existingManga = mangaRepository.findByTitleIgnoreCase(title); var existingManga = mangaRepository.findByTitleIgnoreCase(title);
if (existingManga.isPresent()) { if (existingManga.isPresent()) {
@ -74,9 +78,16 @@ public class MangaCreationService {
existingManga = mangaRepository.findByTitleIgnoreCase(result.title()); existingManga = mangaRepository.findByTitleIgnoreCase(result.title());
return existingManga.orElseGet( return existingManga.orElseGet(
() -> () -> {
mangaRepository.save( var manga =
Manga.builder().title(result.title()).malId(result.mal_id()).build())); 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) { 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.ContentProviderMangaChapterResponseDTO;
import com.magamochi.mangamochi.model.dto.ContentProviderMangaInfoResponseDTO; import com.magamochi.mangamochi.model.dto.ContentProviderMangaInfoResponseDTO;
import com.magamochi.mangamochi.model.dto.ImportMangaDexResponseDTO; 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.MangaProvider;
import com.magamochi.mangamochi.model.entity.Provider; import com.magamochi.mangamochi.model.entity.Provider;
import com.magamochi.mangamochi.model.enumeration.ProviderStatus; import com.magamochi.mangamochi.model.enumeration.ProviderStatus;
import com.magamochi.mangamochi.model.repository.MangaProviderRepository; import com.magamochi.mangamochi.model.repository.MangaProviderRepository;
import com.magamochi.mangamochi.model.repository.ProviderRepository; import com.magamochi.mangamochi.model.repository.ProviderRepository;
import com.magamochi.mangamochi.queue.UpdateMangaDataProducer;
import com.magamochi.mangamochi.service.MangaCreationService; import com.magamochi.mangamochi.service.MangaCreationService;
import com.magamochi.mangamochi.service.providers.ContentProvider; import com.magamochi.mangamochi.service.providers.ContentProvider;
import com.magamochi.mangamochi.service.providers.ContentProviders; import com.magamochi.mangamochi.service.providers.ContentProviders;
@ -34,7 +32,6 @@ public class MangaDexProvider implements ContentProvider {
private final MangaCreationService mangaCreationService; private final MangaCreationService mangaCreationService;
private final ProviderRepository providerRepository; private final ProviderRepository providerRepository;
private final MangaProviderRepository mangaProviderRepository; private final MangaProviderRepository mangaProviderRepository;
private final UpdateMangaDataProducer updateMangaDataProducer;
private final RateLimiter mangaDexRateLimiter; private final RateLimiter mangaDexRateLimiter;
@ -164,8 +161,6 @@ public class MangaDexProvider implements ContentProvider {
.url(id.toString()) .url(id.toString())
.build()); .build());
updateMangaDataProducer.sendUpdateMangaDataCommand(new UpdateMangaDataCommand(manga.getId()));
return new ImportMangaDexResponseDTO(manga.getId()); return new ImportMangaDexResponseDTO(manga.getId());
} }
} }