diff --git a/src/main/java/com/easysoftware/adapter/query/OEPackageQueryAdapter.java b/src/main/java/com/easysoftware/adapter/query/OEPackageQueryAdapter.java index efb4e53ad2a164e76560b34270659a112685021e..7538a0d449af62cb62891580750c561e3f00e5b1 100644 --- a/src/main/java/com/easysoftware/adapter/query/OEPackageQueryAdapter.java +++ b/src/main/java/com/easysoftware/adapter/query/OEPackageQueryAdapter.java @@ -14,6 +14,7 @@ import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import com.easysoftware.application.oepackage.dto.OEPackageSearchCondition; +import com.easysoftware.application.oepackage.dto.OepkgNameSearchCondition; import com.easysoftware.application.oepackage.OEPackageService; import com.easysoftware.common.aop.RequestLimitRedis; @@ -42,4 +43,17 @@ public class OEPackageQueryAdapter { public ResponseEntity searchOEpkg(@Valid final OEPackageSearchCondition condition) { return oEPackageService.searchOEPkg(condition); } + + /** + * Endpoint to query for all avalaible openEuler version of epkg packages based + * on the provided search condition. + * + * @param condition The search condition for querying epkg packages. + * @return ResponseEntity. + */ + @GetMapping("/eulerver") + @RequestLimitRedis() + public ResponseEntity queryEulerVersionsByName(@Valid final OepkgNameSearchCondition condition) { + return oEPackageService.queryEulerVersionsByName(condition); + } } diff --git a/src/main/java/com/easysoftware/application/oepackage/OEPackageService.java b/src/main/java/com/easysoftware/application/oepackage/OEPackageService.java index 2261310f1ce1c2f24f3a0c9a7fac6f225d6bfb2e..63f92fdf6f6761fd2363ddc7e6975629e2f36428 100644 --- a/src/main/java/com/easysoftware/application/oepackage/OEPackageService.java +++ b/src/main/java/com/easysoftware/application/oepackage/OEPackageService.java @@ -15,6 +15,7 @@ import java.util.Map; import org.springframework.http.ResponseEntity; import com.easysoftware.application.oepackage.dto.OEPackageSearchCondition; +import com.easysoftware.application.oepackage.dto.OepkgNameSearchCondition; public interface OEPackageService { /** @@ -33,4 +34,11 @@ public interface OEPackageService { */ Map queryAllOEPkgMenu(OEPackageSearchCondition condition); + /** + * Queries available openEuler version of oepkg package. + * + * @param condition The search condition. + * @return Map containing the openEuler versions. + */ + ResponseEntity queryEulerVersionsByName(OepkgNameSearchCondition condition); } diff --git a/src/main/java/com/easysoftware/application/oepackage/OEPackageServiceImpl.java b/src/main/java/com/easysoftware/application/oepackage/OEPackageServiceImpl.java index 48ebb1eaa0234dd5f5c6de1312378ee868321298..d186b3c9fa41e4b8eb58a57f0a5cf884ca5500e7 100644 --- a/src/main/java/com/easysoftware/application/oepackage/OEPackageServiceImpl.java +++ b/src/main/java/com/easysoftware/application/oepackage/OEPackageServiceImpl.java @@ -18,6 +18,7 @@ import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import com.easysoftware.application.oepackage.dto.OEPackageSearchCondition; +import com.easysoftware.application.oepackage.dto.OepkgNameSearchCondition; import com.easysoftware.application.oepackage.vo.OEPackageDetailVo; import com.easysoftware.common.exception.NoneResException; import com.easysoftware.common.exception.ParamErrorException; @@ -68,4 +69,16 @@ public class OEPackageServiceImpl implements OEPackageService { public Map queryAllOEPkgMenu(final OEPackageSearchCondition condition) { return oEPkgGateway.queryMenuByName(condition); } + + /** + * Queries all available openEuler version of oepkg package. + * + * @param condition The search condition. + * @return Map containing the epkg package menu. + */ + @Override + public ResponseEntity queryEulerVersionsByName(OepkgNameSearchCondition condition) { + Map res = oEPkgGateway.queryEulerVersionByName(condition); + return ResultUtil.success(HttpStatus.OK, res); + } } diff --git a/src/main/java/com/easysoftware/application/oepackage/dto/OepkgNameSearchCondition.java b/src/main/java/com/easysoftware/application/oepackage/dto/OepkgNameSearchCondition.java new file mode 100644 index 0000000000000000000000000000000000000000..0fbe27fb71b8ef8b93e94bf075bfd92c69d198de --- /dev/null +++ b/src/main/java/com/easysoftware/application/oepackage/dto/OepkgNameSearchCondition.java @@ -0,0 +1,22 @@ +package com.easysoftware.application.oepackage.dto; + +import com.easysoftware.common.constant.PackageConstant; + +import jakarta.validation.constraints.Pattern; +import jakarta.validation.constraints.Size; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class OepkgNameSearchCondition { + /** + * Name field with a maximum length defined by PackageConstant.MAX_FIELD_LENGTH. + */ + @Size(max = PackageConstant.MAX_FIELD_LENGTH) + @Pattern(regexp = PackageConstant.VALID_STR_REG, message = PackageConstant.VALID_MESSAGE) + private String name; + +} diff --git a/src/main/java/com/easysoftware/application/oepackage/vo/OepkgEulerVersionVo.java b/src/main/java/com/easysoftware/application/oepackage/vo/OepkgEulerVersionVo.java new file mode 100644 index 0000000000000000000000000000000000000000..df5f0985055775ce54f4f58c6960819889c7229d --- /dev/null +++ b/src/main/java/com/easysoftware/application/oepackage/vo/OepkgEulerVersionVo.java @@ -0,0 +1,27 @@ +package com.easysoftware.application.oepackage.vo; + +import com.easysoftware.application.applicationpackage.vo.EulerVer; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class OepkgEulerVersionVo implements EulerVer { + /** + * OpenEuler versions of the package. + */ + private String os; + + /** + * OpenEuler arch of the package. + */ + private String arch; + + /** + * pkgId of the package. + */ + private String pkgId; +} diff --git a/src/main/java/com/easysoftware/domain/oepackage/gateway/OEPackageGateway.java b/src/main/java/com/easysoftware/domain/oepackage/gateway/OEPackageGateway.java index 407033b078dae3375ff7b8dc9cb1da2d508117a8..52c61db8d7872fde4887833c5369d6e1673ef89f 100644 --- a/src/main/java/com/easysoftware/domain/oepackage/gateway/OEPackageGateway.java +++ b/src/main/java/com/easysoftware/domain/oepackage/gateway/OEPackageGateway.java @@ -15,6 +15,7 @@ import java.util.List; import java.util.Map; import com.easysoftware.application.oepackage.dto.OEPackageSearchCondition; +import com.easysoftware.application.oepackage.dto.OepkgNameSearchCondition; import com.easysoftware.application.oepackage.vo.OEPackageDetailVo; public interface OEPackageGateway { @@ -59,9 +60,17 @@ public interface OEPackageGateway { long queryTableLength(); /** - * query pkg num of arch by os. - * @param os os. - * @return pkg nums of arch. + * Query Euler Version based on the provided search condition. + * + * @param condition The search condition for querying EulerVersion + * @return A map containing tags information */ - Map queryArchNum(String os); + Map queryEulerVersionByName(OepkgNameSearchCondition condition); + + /** + * query pkg num of arch by os. + * @param os os. + * @return pkg nums of arch. + */ + Map queryArchNum(String os); } diff --git a/src/main/java/com/easysoftware/infrastructure/oepkg/gatewalmpl/OEPackageGatewayImpl.java b/src/main/java/com/easysoftware/infrastructure/oepkg/gatewalmpl/OEPackageGatewayImpl.java index 86fbe261f0012183634ef6ca0a66522fc9f8d43f..61e0a38725a53d8dc418b1fbcfb7c7759a88c6cf 100644 --- a/src/main/java/com/easysoftware/infrastructure/oepkg/gatewalmpl/OEPackageGatewayImpl.java +++ b/src/main/java/com/easysoftware/infrastructure/oepkg/gatewalmpl/OEPackageGatewayImpl.java @@ -16,8 +16,10 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.easysoftware.application.oepackage.dto.OEPackageSearchCondition; +import com.easysoftware.application.oepackage.dto.OepkgNameSearchCondition; import com.easysoftware.application.oepackage.vo.OEPackageDetailVo; import com.easysoftware.application.oepackage.vo.OEPackageMenuVo; +import com.easysoftware.application.oepackage.vo.OepkgEulerVersionVo; import com.easysoftware.common.exception.ParamErrorException; import com.easysoftware.common.utils.ClassField; import com.easysoftware.common.utils.QueryWrapperUtil; @@ -189,6 +191,31 @@ public class OEPackageGatewayImpl implements OEPackageGateway { return OEPackageConverter.toDetail(rpmList); } + /** + * Query the Euler Version based on the provided search condition. + * + * @param condition The search condition for querying a part of the RPM Euler Version + * @return A map containing relevant information + */ + @Override + public Map queryEulerVersionByName(OepkgNameSearchCondition condition) { + QueryWrapper wrapper = QueryWrapperUtil.createQueryWrapper(new OepkgDO(), + condition, ""); + OepkgEulerVersionVo pkgVo = new OepkgEulerVersionVo(); + List columns = ClassField.getFieldNames(pkgVo); + if (condition.getName() != null) { + wrapper.eq("name", condition.getName()); + } + wrapper.select(columns); + wrapper.groupBy("os", "arch"); + List rpmList = oEPkgMapper.selectList(wrapper); + List versions = OEPackageConverter.toVersion(rpmList); + Map res = Map.ofEntries( + Map.entry("total", versions.size()), + Map.entry("list", versions)); + return res; + } + /** * query pkg num of arch by os. * @param os os. diff --git a/src/main/java/com/easysoftware/infrastructure/oepkg/gatewalmpl/coverter/OEPackageConverter.java b/src/main/java/com/easysoftware/infrastructure/oepkg/gatewalmpl/coverter/OEPackageConverter.java index 788735c913c65932e54f84ccb10949f4720691f2..7ac16117263f74b48d7bfa6b8275f05d8e2627f0 100644 --- a/src/main/java/com/easysoftware/infrastructure/oepkg/gatewalmpl/coverter/OEPackageConverter.java +++ b/src/main/java/com/easysoftware/infrastructure/oepkg/gatewalmpl/coverter/OEPackageConverter.java @@ -20,7 +20,9 @@ import org.springframework.beans.BeanUtils; import com.easysoftware.application.oepackage.vo.OEPackageDetailVo; import com.easysoftware.application.oepackage.vo.OEPackageMenuVo; +import com.easysoftware.application.oepackage.vo.OepkgEulerVersionVo; import com.easysoftware.common.entity.MessageCode; +import com.easysoftware.common.utils.SortUtil; import com.easysoftware.infrastructure.oepkg.gatewalmpl.dataobject.OepkgDO; import com.easysoftware.infrastructure.rpmpackage.gatewayimpl.converter.RPMPackageConverter; @@ -106,4 +108,24 @@ public final class OEPackageConverter { } return res; } + + /** + * Converts a list of RPMPackageDO objects to a list of OepkgEulerVersionVo + * view + * objects. + * + * @param rpmPkgDOs The list of OepkgDO objects to convert. + * @return A list of OepkgEulerVersionVo view objects. + */ + public static List toVersion(final List rpmPkgDOs) { + List res = new ArrayList<>(); + for (OepkgDO rpm : rpmPkgDOs) { + OepkgEulerVersionVo version = new OepkgEulerVersionVo(); + version.setOs(rpm.getOs()); + version.setArch(rpm.getArch()); + version.setPkgId(rpm.getPkgId()); + res.add(version); + } + return SortUtil.sortEulerVer(res); + } }