From f4e14c34840d2b432f3a4bfd5b0dde227ccb5c28 Mon Sep 17 00:00:00 2001 From: tobias <thinkdifferent055@gmail.com> Date: Fri, 27 Oct 2023 22:37:21 +0200 Subject: [PATCH] Add get mapping for one plugin --- .../playwall/controller/PluginController.java | 9 +++++ .../PluginDescriptionRepository.java | 10 ++++++ .../playwall/service/PluginService.java | 36 ++++++++++++------- 3 files changed, 42 insertions(+), 13 deletions(-) diff --git a/src/main/java/de/tobias/playwall/controller/PluginController.java b/src/main/java/de/tobias/playwall/controller/PluginController.java index 17868ff..fa39bc7 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 4509c53..9350eb3 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 670efbd..f677913 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(); } } -- GitLab