feat: add supportsChapterFetch flag to Provider and update related services

This commit is contained in:
Rodrigo Verdiani 2025-10-25 13:41:52 -03:00
parent 69ee91b9c6
commit 6b527a1728
5 changed files with 19 additions and 5 deletions

View File

@ -50,7 +50,8 @@ public record MangaDTO(
@NotNull long id, @NotNull long id,
@NotBlank String providerName, @NotBlank String providerName,
@NotNull Integer chaptersAvailable, @NotNull Integer chaptersAvailable,
@NotNull Integer chaptersDownloaded) { @NotNull Integer chaptersDownloaded,
@NotNull Boolean supportsChapterFetch) {
public static MangaProviderDTO from(MangaProvider mangaProvider) { public static MangaProviderDTO from(MangaProvider mangaProvider) {
var chapters = mangaProvider.getMangaChapters(); var chapters = mangaProvider.getMangaChapters();
var chaptersAvailable = chapters.size(); var chaptersAvailable = chapters.size();
@ -60,7 +61,8 @@ public record MangaDTO(
mangaProvider.getId(), mangaProvider.getId(),
mangaProvider.getProvider().getName(), mangaProvider.getProvider().getName(),
chaptersAvailable, chaptersAvailable,
chaptersDownloaded); chaptersDownloaded,
mangaProvider.getProvider().getSupportsChapterFetch());
} }
} }
} }

View File

@ -30,5 +30,7 @@ public class Provider {
@UpdateTimestamp private Instant updatedAt; @UpdateTimestamp private Instant updatedAt;
@OneToMany(mappedBy = "provider") @OneToMany(mappedBy = "provider")
List<MangaProvider> mangaProviders; private List<MangaProvider> mangaProviders;
private Boolean supportsChapterFetch;
} }

View File

@ -48,7 +48,7 @@ public class MangaImportService {
public void importMangaFiles(String malId, List<MultipartFile> files) { public void importMangaFiles(String malId, List<MultipartFile> files) {
log.info("Importing manga files for MAL ID {}", malId); log.info("Importing manga files for MAL ID {}", malId);
var provider = providerService.getOrCreateProvider("Manual Import"); var provider = providerService.getOrCreateProvider("Manual Import", false);
rateLimiter.acquire(); rateLimiter.acquire();
var mangaData = jikanClient.getMangaById(Long.parseLong(malId)); var mangaData = jikanClient.getMangaById(Long.parseLong(malId));

View File

@ -12,11 +12,19 @@ public class ProviderService {
private final ProviderRepository providerRepository; private final ProviderRepository providerRepository;
public Provider getOrCreateProvider(String providerName) { public Provider getOrCreateProvider(String providerName) {
return getOrCreateProvider(providerName, true);
}
public Provider getOrCreateProvider(String providerName, Boolean supportsChapterFetch) {
return providerRepository return providerRepository
.findByNameIgnoreCase(providerName) .findByNameIgnoreCase(providerName)
.orElseGet( .orElseGet(
() -> () ->
providerRepository.save( providerRepository.save(
Provider.builder().name(providerName).status(ProviderStatus.ACTIVE).build())); Provider.builder()
.name(providerName)
.status(ProviderStatus.ACTIVE)
.supportsChapterFetch(supportsChapterFetch)
.build()));
} }
} }

View File

@ -0,0 +1,2 @@
ALTER TABLE providers
ADD COLUMN supports_chapter_fetch BOOLEAN NOT NULL DEFAULT true;