diff --git a/src/main/java/com/easysoftware/adapter/query/RPMPackageQueryAdapter.java b/src/main/java/com/easysoftware/adapter/query/RPMPackageQueryAdapter.java index 57f089f47e52f83b3f844772a601e15eb2055770..93bc33f4841ba84530670854ba44261c95cee0ba 100644 --- a/src/main/java/com/easysoftware/adapter/query/RPMPackageQueryAdapter.java +++ b/src/main/java/com/easysoftware/adapter/query/RPMPackageQueryAdapter.java @@ -57,4 +57,18 @@ public class RPMPackageQueryAdapter { public ResponseEntity queryEulerVersionsByName(@Valid final RPMPackageNameSearchCondition condition) { return rPMPkgService.queryEulerVersionsByName(condition); } + + /** + * Endpoint to query for all newst version of RPM packages based + * on the provided search condition. + * + * @param condition The search condition for querying versions of RPM packages. + * @return ResponseEntity. + */ + @GetMapping("/rpmver") + @RequestLimitRedis() + public ResponseEntity queryNewstRpmVersion(@Valid final RPMPackageNameSearchCondition condition) { + return rPMPkgService.queryNewstRpmVersion(condition); + } + } diff --git a/src/main/java/com/easysoftware/application/rpmpackage/RPMPackageService.java b/src/main/java/com/easysoftware/application/rpmpackage/RPMPackageService.java index d1f50d7e56ccf9849dc14527787a40efc77581b2..72fa7dbe39dbe070132bae5764f05be999635323 100644 --- a/src/main/java/com/easysoftware/application/rpmpackage/RPMPackageService.java +++ b/src/main/java/com/easysoftware/application/rpmpackage/RPMPackageService.java @@ -45,6 +45,14 @@ public interface RPMPackageService extends BaseIService { */ ResponseEntity queryEulerVersionsByName(RPMPackageNameSearchCondition condition); + /** + * Query the RPM newest version based on the provided search condition. + * + * @param condition The search condition for querying RPM newest version + * @return A map containing RPM newest version + */ + ResponseEntity queryNewstRpmVersion(RPMPackageNameSearchCondition condition); + /** * Queries part of the application package menu. * diff --git a/src/main/java/com/easysoftware/application/rpmpackage/RPMPackageServiceImpl.java b/src/main/java/com/easysoftware/application/rpmpackage/RPMPackageServiceImpl.java index aeaba8bcfbaacb8bed8546f76d14bd33701288f4..04404a0a2ea4fe8a1a2f47c1bb3afda9c361ddbe 100644 --- a/src/main/java/com/easysoftware/application/rpmpackage/RPMPackageServiceImpl.java +++ b/src/main/java/com/easysoftware/application/rpmpackage/RPMPackageServiceImpl.java @@ -90,6 +90,18 @@ public class RPMPackageServiceImpl extends ServiceImpl queryNewstRpmVersion(RPMPackageNameSearchCondition condition) { + Map res = rPMPkgGateway.queryNewstRpmVersion(condition); + return ResultUtil.success(HttpStatus.OK, res); + } + /** * Searches for RPM packages. * diff --git a/src/main/java/com/easysoftware/application/rpmpackage/vo/RPMPackageNewestVersionVo.java b/src/main/java/com/easysoftware/application/rpmpackage/vo/RPMPackageNewestVersionVo.java new file mode 100644 index 0000000000000000000000000000000000000000..18be67d2e6d904604e63275f09bc32004cee54c7 --- /dev/null +++ b/src/main/java/com/easysoftware/application/rpmpackage/vo/RPMPackageNewestVersionVo.java @@ -0,0 +1,25 @@ +/* Copyright (c) 2024 openEuler Community + EasySoftware is licensed under the Mulan PSL v2. + You can use this software according to the terms and conditions of the Mulan PSL v2. + You may obtain a copy of Mulan PSL v2 at: + http://license.coscl.org.cn/MulanPSL2 + THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, + EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, + MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. + See the Mulan PSL v2 for more details. +*/ +package com.easysoftware.application.rpmpackage.vo; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class RPMPackageNewestVersionVo { + /** + * Newest versions of the rpm package. + */ + private String newestVersion; +} diff --git a/src/main/java/com/easysoftware/common/constant/PackageConstant.java b/src/main/java/com/easysoftware/common/constant/PackageConstant.java index f1b132b10815c6db67740de82ef1632d983d0c63..9e32384a3d5b9c74cd93ca7ba79901365fb242e1 100644 --- a/src/main/java/com/easysoftware/common/constant/PackageConstant.java +++ b/src/main/java/com/easysoftware/common/constant/PackageConstant.java @@ -55,4 +55,9 @@ public final class PackageConstant { public static final String VALID_MESSAGE = "Null or string. String includes only letters, digits, and special " + "characters(_-+()$.,)"; + /** + * MAX_VER_SQL, max ver sql column. + */ + public static final String MAX_VER_COL = "max(version) as version"; + } diff --git a/src/main/java/com/easysoftware/domain/rpmpackage/gateway/RPMPackageGateway.java b/src/main/java/com/easysoftware/domain/rpmpackage/gateway/RPMPackageGateway.java index 37cb732ec2027ae414086d164c3be29b80f86ac1..2a6a20a8fe753fe5d01ab090b8be908fdd931c76 100644 --- a/src/main/java/com/easysoftware/domain/rpmpackage/gateway/RPMPackageGateway.java +++ b/src/main/java/com/easysoftware/domain/rpmpackage/gateway/RPMPackageGateway.java @@ -84,4 +84,12 @@ public interface RPMPackageGateway { * @return A map containing tags information */ Map queryEulerVersionByName(RPMPackageNameSearchCondition condition); + + /** + * Query the RPM newest version based on the provided search condition. + * + * @param condition The search condition for querying RPM newest version + * @return A map containing RPM newest version + */ + Map queryNewstRpmVersion(RPMPackageNameSearchCondition condition); } diff --git a/src/main/java/com/easysoftware/infrastructure/rpmpackage/gatewayimpl/RPMPackageGatewayImpl.java b/src/main/java/com/easysoftware/infrastructure/rpmpackage/gatewayimpl/RPMPackageGatewayImpl.java index 23770990d53f1648d7efb32f9c8f70a700ddda7a..2955366c6e834dda40b519913b2deb9f805e6cbe 100644 --- a/src/main/java/com/easysoftware/infrastructure/rpmpackage/gatewayimpl/RPMPackageGatewayImpl.java +++ b/src/main/java/com/easysoftware/infrastructure/rpmpackage/gatewayimpl/RPMPackageGatewayImpl.java @@ -20,6 +20,8 @@ import com.easysoftware.application.rpmpackage.vo.RPMPackageDetailVo; import com.easysoftware.application.rpmpackage.vo.RPMPackageDomainVo; import com.easysoftware.application.rpmpackage.vo.RPMPackageEulerVersionVo; import com.easysoftware.application.rpmpackage.vo.RPMPackageMenuVo; +import com.easysoftware.application.rpmpackage.vo.RPMPackageNewestVersionVo; +import com.easysoftware.common.constant.PackageConstant; import com.easysoftware.common.exception.ParamErrorException; import com.easysoftware.common.utils.ClassField; import com.easysoftware.common.utils.QueryWrapperUtil; @@ -218,6 +220,30 @@ public class RPMPackageGatewayImpl implements RPMPackageGateway { return res; } + /** + * Query the RPM newest version based on the provided search condition. + * + * @param condition The search condition for querying a part of the RPM + * newest version + * @return A map containing relevant information + */ + @Override + public Map queryNewstRpmVersion(final RPMPackageNameSearchCondition condition) { + QueryWrapper wrapper = QueryWrapperUtil.createQueryWrapper(new RPMPackageDO(), + condition, ""); + if (condition.getName() != null) { + wrapper.eq("name", condition.getName()); + } + wrapper.select(PackageConstant.MAX_VER_COL); + wrapper.groupBy("name"); + List rpmList = rPMPkgMapper.selectList(wrapper); + List versions = RPMPackageConverter.toRPMVersion(rpmList); + Map res = Map.ofEntries( + Map.entry("total", versions.size()), + Map.entry("list", versions)); + return res; + } + /** * Select a single RPMPackageMenuVo object by name. * diff --git a/src/main/java/com/easysoftware/infrastructure/rpmpackage/gatewayimpl/converter/RPMPackageConverter.java b/src/main/java/com/easysoftware/infrastructure/rpmpackage/gatewayimpl/converter/RPMPackageConverter.java index 9475ee9c3a86b50a12ea2b34b934cedb87ca43c5..2995630de43ca67596ac2ba8e1c818fe65cbf4d5 100644 --- a/src/main/java/com/easysoftware/infrastructure/rpmpackage/gatewayimpl/converter/RPMPackageConverter.java +++ b/src/main/java/com/easysoftware/infrastructure/rpmpackage/gatewayimpl/converter/RPMPackageConverter.java @@ -15,6 +15,7 @@ import com.easysoftware.application.rpmpackage.vo.RPMPackageDetailVo; import com.easysoftware.application.rpmpackage.vo.RPMPackageDomainVo; import com.easysoftware.application.rpmpackage.vo.RPMPackageEulerVersionVo; import com.easysoftware.application.rpmpackage.vo.RPMPackageMenuVo; +import com.easysoftware.application.rpmpackage.vo.RPMPackageNewestVersionVo; import com.easysoftware.common.entity.MessageCode; import com.easysoftware.domain.rpmpackage.RPMPackage; import com.easysoftware.infrastructure.rpmpackage.gatewayimpl.dataobject.RPMPackageDO; @@ -188,4 +189,23 @@ public final class RPMPackageConverter { } return res; } + + /** + * Converts a list of RPMPackageDO objects to a list of + * RPMPackageNewestVersionVo + * view + * objects. + * + * @param rpmPkgDOs The list of RPMPackageDO objects to convert. + * @return A list of RPMPackageNewestVersionVo view objects. + */ + public static List toRPMVersion(final List rpmPkgDOs) { + List res = new ArrayList<>(); + for (RPMPackageDO rpm : rpmPkgDOs) { + RPMPackageNewestVersionVo version = new RPMPackageNewestVersionVo(); + version.setNewestVersion(rpm.getVersion()); + res.add(version); + } + return res; + } } diff --git a/src/test/java/com/easysoftware/adapter/query/RPMPackageQueryAdapterTest.java b/src/test/java/com/easysoftware/adapter/query/RPMPackageQueryAdapterTest.java index 9ef3454dfa21b02808206b05d13e3181bfe95c6f..80725d225edee902bb8158743782d1866209f1bb 100644 --- a/src/test/java/com/easysoftware/adapter/query/RPMPackageQueryAdapterTest.java +++ b/src/test/java/com/easysoftware/adapter/query/RPMPackageQueryAdapterTest.java @@ -54,11 +54,25 @@ public class RPMPackageQueryAdapterTest { } @Test - void test_rpm_exception() throws Exception { + void test_rpm_version() throws Exception { MultiValueMap paramMap = new LinkedMultiValueMap<>(); paramMap.add("name", "error"); paramMap.add("os", "openEuler-20.03-LTS-SP1"); ResultVo res = CommonUtil.executeGet(mockMvc, "/rpmpkg", paramMap); CommonUtil.assertList(res); } + + @Test + void test_rpm_exception() throws Exception { + MultiValueMap paramMap = new LinkedMultiValueMap<>(); + // test case1 : + paramMap.add("name", "test"); + ResultVo comres = CommonUtil.executeGet(mockMvc, "/rpmpkg/rpmver", paramMap); + CommonUtil.assertList(comres); + + // test case2 : + paramMap.add("name", ""); + ResultVo res = CommonUtil.executeGet(mockMvc, "/rpmpkg/rpmver", paramMap); + CommonUtil.assertList(res); + } }