package com.magamochi.content.service; import com.magamochi.catalog.service.LanguageService; import com.magamochi.catalog.service.MangaContentProviderService; import com.magamochi.content.model.entity.MangaContent; import com.magamochi.content.model.repository.MangaContentRepository; import jakarta.validation.constraints.NotBlank; import lombok.RequiredArgsConstructor; import lombok.extern.log4j.Log4j2; import org.springframework.stereotype.Service; @Log4j2 @Service @RequiredArgsConstructor public class ContentIngestService { private final MangaContentProviderService mangaContentProviderService; private final LanguageService languageService; private final MangaContentRepository mangaContentRepository; public void ingest( long mangaContentProviderId, @NotBlank String title, @NotBlank String url, @NotBlank String languageCode) { log.info("Ingesting Manga Content ({}) for provider {}", title, mangaContentProviderId); var mangaContentProvider = mangaContentProviderService.find(mangaContentProviderId); if (mangaContentRepository.existsByMangaContentProvider_IdAndUrlIgnoreCase( mangaContentProvider.getId(), url)) { log.info( "Manga Content ({}) for provider {} already exists. Skipped.", title, mangaContentProviderId); return; } var language = languageService.find(languageCode); var mangaContent = mangaContentRepository.save( MangaContent.builder() .mangaContentProvider(mangaContentProvider) .title(title) .url(url) .language(language) .build()); log.info( "Ingested Manga Content ({}) for provider {}: {}", title, mangaContentProviderId, mangaContent.getId()); } }