feat: enhance content provider functionality with flag and sorting
This commit is contained in:
parent
e4f672a5f8
commit
d1b7fa4f89
@ -11,13 +11,15 @@ public record ContentProviderListDTO(@NotNull List<ContentProviderDTO> 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());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -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<ContentProvider> getUpdatableProviders() {
|
||||
return contentProviderRepository.findAll().stream()
|
||||
.filter(
|
||||
contentProvider ->
|
||||
contentProvider.isActive() && contentProvider.getSupportsContentFetch())
|
||||
.toList();
|
||||
}
|
||||
|
||||
public ContentProvider getManualImportProvider(Long providerId) {
|
||||
var provider = find(providerId);
|
||||
|
||||
|
||||
@ -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) {
|
||||
|
||||
@ -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';
|
||||
Loading…
x
Reference in New Issue
Block a user