From 6b896901800c775bb20af3d1ebce7b873dca4d3c Mon Sep 17 00:00:00 2001 From: Simon Grimme Date: Tue, 19 Jul 2022 12:30:24 +0200 Subject: [PATCH] Added OpenAPI UI Refactored some REST Endpoints --- pom.xml | 7 +++++++ .../gameyfin/rest/LibraryController.java | 9 ++++---- .../gameyfin/service/FilesystemService.java | 21 ++++++++++++------- src/main/resources/application-dev.yml | 2 +- 4 files changed, 26 insertions(+), 13 deletions(-) diff --git a/pom.xml b/pom.xml index 8930416..00d0948 100644 --- a/pom.xml +++ b/pom.xml @@ -36,6 +36,13 @@ spring-boot-starter-webflux + + + org.springdoc + springdoc-openapi-ui + 1.6.9 + + io.github.resilience4j diff --git a/src/main/java/de/grimsi/gameyfin/rest/LibraryController.java b/src/main/java/de/grimsi/gameyfin/rest/LibraryController.java index de788a6..ac1a41a 100644 --- a/src/main/java/de/grimsi/gameyfin/rest/LibraryController.java +++ b/src/main/java/de/grimsi/gameyfin/rest/LibraryController.java @@ -2,7 +2,6 @@ package de.grimsi.gameyfin.rest; import de.grimsi.gameyfin.service.FilesystemService; import lombok.RequiredArgsConstructor; -import org.springframework.data.repository.query.Param; import org.springframework.http.MediaType; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; @@ -23,14 +22,14 @@ public class LibraryController { private final FilesystemService filesystemService; @GetMapping(value = "/scan", produces = MediaType.APPLICATION_JSON_VALUE) - public void scanLibrary(@RequestParam("download_images") boolean downloadImages) { + public void scanLibrary(@RequestParam(value = "download_images", defaultValue = "true") boolean downloadImages) { filesystemService.scanGameLibrary(); - if(downloadImages) populateCache(); + if(downloadImages) downloadImages(); } - @GetMapping(value = "/populate-cache") - public void populateCache() { + @GetMapping(value = "/download_images") + public void downloadImages() { filesystemService.downloadGameCovers(); filesystemService.downloadGameScreenshots(); filesystemService.downloadCompanyLogos(); diff --git a/src/main/java/de/grimsi/gameyfin/service/FilesystemService.java b/src/main/java/de/grimsi/gameyfin/service/FilesystemService.java index 48be200..152de0a 100644 --- a/src/main/java/de/grimsi/gameyfin/service/FilesystemService.java +++ b/src/main/java/de/grimsi/gameyfin/service/FilesystemService.java @@ -7,7 +7,6 @@ import de.grimsi.gameyfin.entities.UnmappableFile; import de.grimsi.gameyfin.igdb.IgdbApiProperties; import de.grimsi.gameyfin.igdb.IgdbWrapper; import de.grimsi.gameyfin.mapper.GameMapper; -import de.grimsi.gameyfin.repositories.CompanyRepository; import de.grimsi.gameyfin.repositories.DetectedGameRepository; import de.grimsi.gameyfin.repositories.UnmappableFileRepository; import lombok.extern.slf4j.Slf4j; @@ -29,6 +28,7 @@ import org.springframework.web.reactive.function.client.WebClientResponseExcepti import org.springframework.web.server.ResponseStatusException; import reactor.core.publisher.Flux; +import javax.annotation.PostConstruct; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; @@ -64,7 +64,14 @@ public class FilesystemService { @Autowired private UnmappableFileRepository unmappableFileRepository; - private WebClient igdbImageClient = WebClient.create(IgdbApiProperties.IMAGES_BASE_URL); + @Autowired + private WebClient.Builder webclientBuilder; + private WebClient igdbImageClient; + + @PostConstruct + public void init() { + igdbImageClient = webclientBuilder.baseUrl(IgdbApiProperties.IMAGES_BASE_URL).build(); + } public List getGameFiles() { @@ -141,11 +148,11 @@ public class FilesystemService { log.info("Starting game cover download..."); stopWatch.start(); - MultiValueMap multiValueMap = new LinkedMultiValueMap<>( + MultiValueMap gameToImageIds = new LinkedMultiValueMap<>( detectedGameRepository.findAll().stream() .collect(Collectors.toMap(DetectedGame::getTitle, g -> Collections.singletonList(g.getCoverId())))); - int downloadCount = downloadImagesIntoCache(multiValueMap, IgdbApiProperties.COVER_IMAGE_SIZE, "cover", "game"); + int downloadCount = downloadImagesIntoCache(gameToImageIds, IgdbApiProperties.COVER_IMAGE_SIZE, "cover", "game"); stopWatch.stop(); @@ -175,13 +182,13 @@ public class FilesystemService { log.info("Starting company logo download..."); stopWatch.start(); - Map> test = detectedGameRepository.findAll().stream() + Map> companyToLogoIdMap = detectedGameRepository.findAll().stream() .flatMap(g -> g.getCompanies().stream()) .collect(Collectors.toMap(Company::getName, c -> Collections.singletonList(c.getLogoId()), (c1, c2) -> c1)); - MultiValueMap gamesToImageIds = new LinkedMultiValueMap<>(test); + MultiValueMap companiesToLogoIds = new LinkedMultiValueMap<>(companyToLogoIdMap); - int downloadCount = downloadImagesIntoCache(gamesToImageIds, IgdbApiProperties.LOGO_IMAGE_SIZE, "logo", "company"); + int downloadCount = downloadImagesIntoCache(companiesToLogoIds, IgdbApiProperties.LOGO_IMAGE_SIZE, "logo", "company"); stopWatch.stop(); diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml index 2026a71..610586d 100644 --- a/src/main/resources/application-dev.yml +++ b/src/main/resources/application-dev.yml @@ -1,5 +1,5 @@ gameyfin: - root: \\NAS-Simon\Öffentlich\Spiele + root: C:\Projects\privat\gameyfin-library cache: ${gameyfin.root}\.gameyfin\cache db: ${gameyfin.root}\.gameyfin\db # Currently unused igdb: