diff --git a/src/main/java/de/tobias/playwall/controller/PluginController.java b/src/main/java/de/tobias/playwall/controller/PluginController.java index 17868ff7cf1191ff02f89bfed03c062ab8d5a318..fa39bc74baef6fdc4b8a5010708dc626c6389b4d 100644 --- a/src/main/java/de/tobias/playwall/controller/PluginController.java +++ b/src/main/java/de/tobias/playwall/controller/PluginController.java @@ -3,9 +3,12 @@ package de.tobias.playwall.controller; import de.tobias.playwall.model.Plugin; import de.tobias.playwall.service.PluginService; import lombok.AllArgsConstructor; +import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.server.ResponseStatusException; import java.util.List; @@ -21,4 +24,10 @@ public class PluginController { return service.getAllPlugins(); } + + @GetMapping("/{id}") + Plugin getPlugin(@PathVariable Integer id) + { + return service.getPlugin(id).orElseThrow(() -> new ResponseStatusException(HttpStatus.NOT_FOUND)); + } } diff --git a/src/main/java/de/tobias/playwall/repository/PluginDescriptionRepository.java b/src/main/java/de/tobias/playwall/repository/PluginDescriptionRepository.java index 4509c532b67496f3d4c4e1d25d984b9a60178a7c..9350eb3e3813be0f90d58919bdc596e0dda4d93a 100644 --- a/src/main/java/de/tobias/playwall/repository/PluginDescriptionRepository.java +++ b/src/main/java/de/tobias/playwall/repository/PluginDescriptionRepository.java @@ -13,6 +13,8 @@ import org.springframework.stereotype.Service; import java.nio.charset.StandardCharsets; import java.util.List; +import java.util.Objects; +import java.util.Optional; @Service @EnableConfigurationProperties @@ -37,4 +39,12 @@ public class PluginDescriptionRepository { }); } + + @SneakyThrows + public Optional<PluginDescription> findById(Integer id) + { + return findAll().stream() + .filter(pluginDescription -> Objects.equals(pluginDescription.getId(), id)) + .findFirst(); + } } diff --git a/src/main/java/de/tobias/playwall/service/PluginService.java b/src/main/java/de/tobias/playwall/service/PluginService.java index 670efbd4506da1896a04084ad2ff97b64dea26fb..f677913d9857e8ae04fca2bac132964b1801a136 100644 --- a/src/main/java/de/tobias/playwall/service/PluginService.java +++ b/src/main/java/de/tobias/playwall/service/PluginService.java @@ -1,6 +1,7 @@ package de.tobias.playwall.service; import de.tobias.playwall.model.Plugin; +import de.tobias.playwall.model.PluginDescription; import de.tobias.playwall.model.PluginManifest; import de.tobias.playwall.model.artifactory.Version; import de.tobias.playwall.repository.PluginDescriptionRepository; @@ -8,6 +9,7 @@ import lombok.AllArgsConstructor; import org.springframework.stereotype.Service; import java.util.List; +import java.util.Optional; @Service @AllArgsConstructor @@ -18,19 +20,27 @@ public class PluginService public List<Plugin> getAllPlugins() { - return pluginDescriptionRepository.findAll().stream().map(pluginDescription -> { - final Version version = artifactoryClient.getLatestVersion(pluginDescription); - final PluginManifest manifest = artifactoryClient.getPluginManifest(pluginDescription, version); + return pluginDescriptionRepository.findAll().stream().map(this::collectPluginInformation).toList(); + } + + public Optional<Plugin> getPlugin(Integer id) + { + return pluginDescriptionRepository.findById(id).map(this::collectPluginInformation); + } + + private Plugin collectPluginInformation(PluginDescription pluginDescription) + { + final Version version = artifactoryClient.getLatestVersion(pluginDescription); + final PluginManifest manifest = artifactoryClient.getPluginManifest(pluginDescription, version); - return Plugin.builder() - .id(pluginDescription.getId()) - .name(pluginDescription.getName()) - .displayName(pluginDescription.getDisplayName()) - .description(pluginDescription.getDescription()) - .icon(pluginDescription.getIcon()) - .version(version.toVersionString()) - .build(manifest.getBuild()) - .build(); - }).toList(); + return Plugin.builder() + .id(pluginDescription.getId()) + .name(pluginDescription.getName()) + .displayName(pluginDescription.getDisplayName()) + .description(pluginDescription.getDescription()) + .icon(pluginDescription.getIcon()) + .version(version.toVersionString()) + .build(manifest.getBuild()) + .build(); } }