From 5d0811621d0a3b6c18be53d63b98f443c25685ab Mon Sep 17 00:00:00 2001 From: kaede10 Date: Mon, 19 Aug 2024 14:59:34 +0800 Subject: [PATCH] add api collaboration/admin/user/repos --- .../adapter/query/CoAdminAdapter.java | 17 +++++-- .../collaboration/CoAdminService.java | 25 ++++++++++ .../collaboration/CoAdminServiceImpl.java | 46 +++++++++++++++++++ .../common/account/UserPermission.java | 26 ++++++++++- .../gateway/PackageStatusGateway.java | 8 ++++ .../gatewayimpl/ApplyFormGatewayImpl.java | 1 + .../gatewayimpl/PackageStatusGatewayImpl.java | 24 +++++++++- 7 files changed, 139 insertions(+), 8 deletions(-) create mode 100644 src/main/java/com/easysoftware/application/collaboration/CoAdminService.java create mode 100644 src/main/java/com/easysoftware/application/collaboration/CoAdminServiceImpl.java diff --git a/src/main/java/com/easysoftware/adapter/query/CoAdminAdapter.java b/src/main/java/com/easysoftware/adapter/query/CoAdminAdapter.java index e44456a..e970d64 100644 --- a/src/main/java/com/easysoftware/adapter/query/CoAdminAdapter.java +++ b/src/main/java/com/easysoftware/adapter/query/CoAdminAdapter.java @@ -16,7 +16,8 @@ import java.util.HashMap; import com.easysoftware.application.apply.ApplyService; import com.easysoftware.application.applyform.ApplyFormService; import com.easysoftware.application.applyform.dto.ProcessApply; - +import com.easysoftware.application.collaboration.CoAdminService; +import com.easysoftware.application.collaboration.dto.PackageSearchCondition; import com.easysoftware.application.applyform.dto.ApplyFormSearchAdminCondition; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -70,18 +71,24 @@ public class CoAdminAdapter { @Autowired private ApplyFormService applyFormService; + /** + * Autowired service for CoAdminService. + */ + @Autowired + private CoAdminService coAdminService; + /** * Endpoint to search for repos based on the provided search * condition. * - * @param repo The search condition for querying repos. + * @param condition The search condition for querying repos. * @return ResponseEntity. */ - @GetMapping() + @GetMapping("/user/repos") @RequestLimitRedis() @PreUserPermission(UerPermissionDef.COLLABORATION_PERMISSION_ADMIN) - public ResponseEntity queryRepos(@RequestParam(value = "repo") String repo) { - return ResultUtil.success(HttpStatus.OK, "success"); + public ResponseEntity queryRepos(@Valid final PackageSearchCondition condition) { + return coAdminService.queryAdminPackages(condition); } /** diff --git a/src/main/java/com/easysoftware/application/collaboration/CoAdminService.java b/src/main/java/com/easysoftware/application/collaboration/CoAdminService.java new file mode 100644 index 0000000..94be9cb --- /dev/null +++ b/src/main/java/com/easysoftware/application/collaboration/CoAdminService.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.collaboration; + +import org.springframework.http.ResponseEntity; + +import com.easysoftware.application.collaboration.dto.PackageSearchCondition; + +public interface CoAdminService { + /** + * Searches for packages based on the specified search conditions. + * + * @param condition The search conditions to filter packages. + * @return ResponseEntity. + */ + ResponseEntity queryAdminPackages(PackageSearchCondition condition); +} diff --git a/src/main/java/com/easysoftware/application/collaboration/CoAdminServiceImpl.java b/src/main/java/com/easysoftware/application/collaboration/CoAdminServiceImpl.java new file mode 100644 index 0000000..c69f728 --- /dev/null +++ b/src/main/java/com/easysoftware/application/collaboration/CoAdminServiceImpl.java @@ -0,0 +1,46 @@ +/* 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.collaboration; + +import java.util.Map; + +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Service; + +import com.easysoftware.application.collaboration.dto.PackageSearchCondition; +import com.easysoftware.common.utils.ResultUtil; +import com.easysoftware.domain.collaboration.gateway.PackageStatusGateway; + +import jakarta.annotation.Resource; +import lombok.RequiredArgsConstructor; + +@Service +@RequiredArgsConstructor +public class CoAdminServiceImpl implements CoAdminService { + /** + * Resource for interacting with package status Gateway. + */ + @Resource + private PackageStatusGateway pkgStatusGateway; + + /** + * Searches for packages based on the specified search conditions. + * + * @param condition The search conditions to filter packages. + * @return ResponseEntity. + */ + @Override + public ResponseEntity queryAdminPackages(PackageSearchCondition condition) { + Map res = pkgStatusGateway.queryAllByCondition(condition); + return ResultUtil.success(HttpStatus.OK, res); + } +} diff --git a/src/main/java/com/easysoftware/common/account/UserPermission.java b/src/main/java/com/easysoftware/common/account/UserPermission.java index 2e5c1f1..ccde5c8 100644 --- a/src/main/java/com/easysoftware/common/account/UserPermission.java +++ b/src/main/java/com/easysoftware/common/account/UserPermission.java @@ -140,6 +140,28 @@ public class UserPermission { return loginName; } + /** + * Get user name by user token and manage token. + * @return user name. + */ + public String getUserName() { + String userToken = getUserToken(); + String manageToken = getManageToken(); + + // 使用userToken、manageToken查询用户信息 + Cookie cookie = getCookie(cookieTokenName); + String response = HttpClientUtil.getHttpClient(userInfoApi, manageToken, userToken, cookie.getValue()); + JsonNode resJson = ObjectMapperUtil.toJsonNode(response); + + String resCode = resJson.path("code").asText(); + if (!"200".equals(resCode)) { + LOGGER.error("query user login name failed"); + throw new HttpRequestException("query user login name failed"); + } + String userName = resJson.path("data").path("username").asText(); + return userName; + } + /** * Get user repos. * @return Collection of repos. @@ -152,7 +174,7 @@ public class UserPermission { String response = HttpClientUtil.getHttpClient(String.format(userReposApi, login), null, null, null); JsonNode resJson = ObjectMapperUtil.toJsonNode(response); - String resCode = resJson.get("code").asText(); + String resCode = resJson.path("code").asText(); if (!"200".equals(resCode)) { LOGGER.error("query user repos failed"); @@ -183,7 +205,7 @@ public class UserPermission { String response = HttpClientUtil.getHttpClient(permissionApi, manageToken, userToken, cookie.getValue()); JsonNode resJson = ObjectMapperUtil.toJsonNode(response); - String resCode = resJson.get("code").asText(); + String resCode = resJson.path("code").asText(); // 查询权限失败 if (!"200".equals(resCode)) { LOGGER.error("query user permissions failed"); diff --git a/src/main/java/com/easysoftware/domain/collaboration/gateway/PackageStatusGateway.java b/src/main/java/com/easysoftware/domain/collaboration/gateway/PackageStatusGateway.java index 06b6b8b..7abb41c 100644 --- a/src/main/java/com/easysoftware/domain/collaboration/gateway/PackageStatusGateway.java +++ b/src/main/java/com/easysoftware/domain/collaboration/gateway/PackageStatusGateway.java @@ -25,6 +25,14 @@ public interface PackageStatusGateway { */ Map queryByCondition(PackageSearchCondition condition); + /** + * Query information based on the provided search condition. + * + * @param condition The search condition for querying package + * @return A map containing relevant information + */ + Map queryAllByCondition(PackageSearchCondition condition); + /** * update package status based on the provided condition. * diff --git a/src/main/java/com/easysoftware/infrastructure/applyform/gatewayimpl/ApplyFormGatewayImpl.java b/src/main/java/com/easysoftware/infrastructure/applyform/gatewayimpl/ApplyFormGatewayImpl.java index 73c49e5..5ac3309 100644 --- a/src/main/java/com/easysoftware/infrastructure/applyform/gatewayimpl/ApplyFormGatewayImpl.java +++ b/src/main/java/com/easysoftware/infrastructure/applyform/gatewayimpl/ApplyFormGatewayImpl.java @@ -168,6 +168,7 @@ public class ApplyFormGatewayImpl implements ApplyFormGateway { UpdateWrapper wrapper = new UpdateWrapper<>(); wrapper.eq("apply_id", processApply.getApplyId()); + applyFormDO.setAdminstrator(userPermission.getUserName()); int mark = applyFormDOMapper.update(applyFormDO, wrapper); if (mark != 1) { throw new UpdateException("update apply status failed"); diff --git a/src/main/java/com/easysoftware/infrastructure/collaboration/gatewayimpl/PackageStatusGatewayImpl.java b/src/main/java/com/easysoftware/infrastructure/collaboration/gatewayimpl/PackageStatusGatewayImpl.java index 2f5739d..20e0a26 100644 --- a/src/main/java/com/easysoftware/infrastructure/collaboration/gatewayimpl/PackageStatusGatewayImpl.java +++ b/src/main/java/com/easysoftware/infrastructure/collaboration/gatewayimpl/PackageStatusGatewayImpl.java @@ -62,11 +62,33 @@ public class PackageStatusGatewayImpl implements PackageStatusGateway { */ @Override public Map queryByCondition(final PackageSearchCondition condition) { + String login = userPermission.getUserLogin(); + return queryRepoByCondition(condition, login); + } + + /** + * Query information based on the provided search condition. + * + * @param condition The search condition for querying package + * @return A map containing relevant information + */ + @Override + public Map queryAllByCondition(final PackageSearchCondition condition) { + return queryRepoByCondition(condition, "*"); + } + + /** + * Query repos based on the provided search condition. + * + * @param condition The search condition for querying package + * @param login user gitee id + * @return A map containing relevant information + */ + public Map queryRepoByCondition(final PackageSearchCondition condition, String login) { List pkgs = new ArrayList<>(); int total = 0; try { Map query = ObjectMapperUtil.jsonToMap(condition); - String login = userPermission.getUserLogin(); ListenableFuture future = esAsyncHttpUtil.executeSearch(PackageConstant.PACKAGE_STATUS_INDEX, query, login); String responseBody = future.get().getResponseBody(UTF_8); -- Gitee