diff --git a/src/main/java/com/magamochi/ingestion/model/dto/ContentProviderListDTO.java b/src/main/java/com/magamochi/ingestion/model/dto/ContentProviderListDTO.java index a09cab0..459ca09 100644 --- a/src/main/java/com/magamochi/ingestion/model/dto/ContentProviderListDTO.java +++ b/src/main/java/com/magamochi/ingestion/model/dto/ContentProviderListDTO.java @@ -11,13 +11,15 @@ public record ContentProviderListDTO(@NotNull List providers contentProviders.stream().map(ContentProviderDTO::from).toList()); } - public record ContentProviderDTO(long id, @NotBlank String name, String url, boolean active) { + public record ContentProviderDTO( + long id, @NotBlank String name, String url, boolean active, boolean supportsContentFetch) { public static ContentProviderDTO from(ContentProvider contentProvider) { return new ContentProviderDTO( contentProvider.getId(), contentProvider.getName(), contentProvider.getUrl(), - contentProvider.isActive()); + contentProvider.isActive(), + contentProvider.getSupportsContentFetch()); } } } diff --git a/src/main/java/com/magamochi/ingestion/service/ContentProviderService.java b/src/main/java/com/magamochi/ingestion/service/ContentProviderService.java index 25ebc16..4aff11b 100644 --- a/src/main/java/com/magamochi/ingestion/service/ContentProviderService.java +++ b/src/main/java/com/magamochi/ingestion/service/ContentProviderService.java @@ -7,7 +7,9 @@ import com.magamochi.common.exception.NotFoundException; import com.magamochi.ingestion.model.dto.ContentProviderListDTO; import com.magamochi.ingestion.model.entity.ContentProvider; import com.magamochi.ingestion.model.repository.ContentProviderRepository; +import java.util.List; import lombok.RequiredArgsConstructor; +import org.springframework.data.domain.Sort; import org.springframework.stereotype.Service; @Service @@ -16,7 +18,7 @@ public class ContentProviderService { private final ContentProviderRepository contentProviderRepository; public ContentProviderListDTO getProviders(Boolean manualImport) { - var providers = contentProviderRepository.findAll(); + var providers = contentProviderRepository.findAll(Sort.by(Sort.Direction.ASC, "name")); if (nonNull(manualImport) && manualImport) { providers = providers.stream().filter(ContentProvider::getManualImport).toList(); @@ -34,6 +36,14 @@ public class ContentProviderService { "Content Provider not found (ID: " + contentProviderId + ").")); } + public List getUpdatableProviders() { + return contentProviderRepository.findAll().stream() + .filter( + contentProvider -> + contentProvider.isActive() && contentProvider.getSupportsContentFetch()) + .toList(); + } + public ContentProvider getManualImportProvider(Long providerId) { var provider = find(providerId); diff --git a/src/main/java/com/magamochi/ingestion/service/IngestionService.java b/src/main/java/com/magamochi/ingestion/service/IngestionService.java index 87767f9..c0509bc 100644 --- a/src/main/java/com/magamochi/ingestion/service/IngestionService.java +++ b/src/main/java/com/magamochi/ingestion/service/IngestionService.java @@ -37,6 +37,17 @@ public class IngestionService { public void fetchContentProviderMangas(long contentProviderId) { var contentProvider = contentProviderService.find(contentProviderId); + + if (!contentProvider.isActive()) { + throw new IllegalStateException( + "Content provider is not active: " + contentProvider.getName()); + } + + if (!contentProvider.getSupportsContentFetch()) { + throw new IllegalArgumentException( + "Content provider does not support content fetch: " + contentProvider.getName()); + } + var pagedContentProvider = pagedContentProviderFactory.getPagedContentProvider(contentProvider.getName()); var pages = pagedContentProvider.getTotalPages(); @@ -50,6 +61,12 @@ public class IngestionService { public void fetchProviderPageMangas(long providerId, int page) { var contentProvider = contentProviderService.find(providerId); + + if (!contentProvider.isActive()) { + throw new IllegalStateException( + "Content provider is not active: " + contentProvider.getName()); + } + var pagedContentProvider = pagedContentProviderFactory.getPagedContentProvider(contentProvider.getName()); @@ -62,8 +79,9 @@ public class IngestionService { } public void fetchAllContentProviderMangas() { - var contentProviders = contentProviderService.getProviders(null); - contentProviders.providers().forEach(dto -> fetchContentProviderMangas(dto.id())); + var contentProviders = contentProviderService.getUpdatableProviders(); + contentProviders.forEach( + contentProvider -> fetchContentProviderMangas(contentProvider.getId())); } public void fetchMangaContentProviderContentList(Long mangaContentProviderId) { diff --git a/src/main/resources/db/migration/V0011__MANGADEX_CONTENT_FETCH.sql b/src/main/resources/db/migration/V0011__MANGADEX_CONTENT_FETCH.sql new file mode 100644 index 0000000..e901ff7 --- /dev/null +++ b/src/main/resources/db/migration/V0011__MANGADEX_CONTENT_FETCH.sql @@ -0,0 +1,7 @@ +UPDATE content_providers +SET supports_content_fetch = FALSE +WHERE name = 'MangaDex'; + +UPDATE content_providers +SET url = 'https://mangadex.org/' +WHERE name = 'MangaDex'; \ No newline at end of file