-
Notifications
You must be signed in to change notification settings - Fork 4.5k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[Improvement][ui] improving to find current version identifier(#15815) #15933
base: dev
Are you sure you want to change the base?
Changes from 5 commits
3a9e080
35f0aac
4ec8f9a
f808e70
00fbaca
b9fedfc
c02e79d
5043916
db81822
a524f5e
a188699
1e7b930
d8b6741
e84feb3
e03491b
228a84c
234d61a
b2abdd2
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change | ||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
@@ -17,8 +17,7 @@ | |||||||||||||||||||
|
||||||||||||||||||||
package org.apache.dolphinscheduler.api.controller; | ||||||||||||||||||||
|
||||||||||||||||||||
import static org.apache.dolphinscheduler.api.enums.Status.QUERY_PLUGINS_ERROR; | ||||||||||||||||||||
|
||||||||||||||||||||
import org.apache.dolphinscheduler.api.dto.ProductInfoDto; | ||||||||||||||||||||
import org.apache.dolphinscheduler.api.exceptions.ApiException; | ||||||||||||||||||||
import org.apache.dolphinscheduler.api.service.UiPluginService; | ||||||||||||||||||||
import org.apache.dolphinscheduler.api.utils.Result; | ||||||||||||||||||||
|
@@ -30,19 +29,22 @@ | |||||||||||||||||||
|
||||||||||||||||||||
import org.springframework.beans.factory.annotation.Autowired; | ||||||||||||||||||||
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.RequestAttribute; | ||||||||||||||||||||
import org.springframework.web.bind.annotation.RequestMapping; | ||||||||||||||||||||
import org.springframework.web.bind.annotation.RequestParam; | ||||||||||||||||||||
import org.springframework.web.bind.annotation.ResponseStatus; | ||||||||||||||||||||
import org.springframework.web.bind.annotation.RestController; | ||||||||||||||||||||
|
||||||||||||||||||||
import io.swagger.v3.oas.annotations.Operation; | ||||||||||||||||||||
import io.swagger.v3.oas.annotations.Parameter; | ||||||||||||||||||||
import io.swagger.v3.oas.annotations.Parameters; | ||||||||||||||||||||
import io.swagger.v3.oas.annotations.media.Schema; | ||||||||||||||||||||
import io.swagger.v3.oas.annotations.tags.Tag; | ||||||||||||||||||||
import org.springframework.web.bind.annotation.GetMapping; | ||||||||||||||||||||
import org.springframework.web.bind.annotation.RequestMapping; | ||||||||||||||||||||
import org.springframework.web.bind.annotation.ResponseStatus; | ||||||||||||||||||||
import org.springframework.web.bind.annotation.RestController; | ||||||||||||||||||||
import org.springframework.web.bind.annotation.PostMapping; | ||||||||||||||||||||
import org.springframework.web.bind.annotation.RequestAttribute; | ||||||||||||||||||||
import org.springframework.web.bind.annotation.PathVariable; | ||||||||||||||||||||
import org.springframework.web.bind.annotation.RequestParam; | ||||||||||||||||||||
|
||||||||||||||||||||
import static org.apache.dolphinscheduler.api.enums.Status.*; | ||||||||||||||||||||
|
||||||||||||||||||||
/** | ||||||||||||||||||||
* ui plugin controller | ||||||||||||||||||||
|
@@ -85,4 +87,22 @@ public Result queryUiPluginDetailById(@Parameter(hidden = true) @RequestAttribut | |||||||||||||||||||
Map<String, Object> result = uiPluginService.queryUiPluginDetailById(pluginId); | ||||||||||||||||||||
return returnDataList(result); | ||||||||||||||||||||
} | ||||||||||||||||||||
|
||||||||||||||||||||
/** | ||||||||||||||||||||
* obtain project version and address | ||||||||||||||||||||
* | ||||||||||||||||||||
// * @param loginUser login user | ||||||||||||||||||||
// * @param userId token for user | ||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||||||||||||||||
* @return product info | ||||||||||||||||||||
*/ | ||||||||||||||||||||
@Operation(summary = "queryProductInfo", description = "QUERY_PRODUCT_INFO") | ||||||||||||||||||||
@PostMapping(value = "/queryProductInfo") | ||||||||||||||||||||
ruanwenjun marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||||||||||||||||
@ResponseStatus(HttpStatus.OK) | ||||||||||||||||||||
@ApiException(VERSION_INFO_STATE_ERROR) | ||||||||||||||||||||
public Result<ProductInfoDto> queryProductInfo( | ||||||||||||||||||||
@Parameter(hidden = true) @RequestAttribute(value = Constants.SESSION_USER) User loginUser, | ||||||||||||||||||||
@RequestParam(value = "userId") Integer userId) { | ||||||||||||||||||||
ProductInfoDto result = uiPluginService.queryProductInfo(loginUser, userId); | ||||||||||||||||||||
return Result.success(result); | ||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||||||||||||||||
} | ||||||||||||||||||||
} |
Original file line number | Diff line number | Diff line change | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
@@ -0,0 +1,35 @@ | ||||||||||||||
/* | ||||||||||||||
* Licensed to the Apache Software Foundation (ASF) under one or more | ||||||||||||||
* contributor license agreements. See the NOTICE file distributed with | ||||||||||||||
* this work for additional information regarding copyright ownership. | ||||||||||||||
* The ASF licenses this file to You under the Apache License, Version 2.0 | ||||||||||||||
* (the "License"); you may not use this file except in compliance with | ||||||||||||||
* the License. You may obtain a copy of the License at | ||||||||||||||
* | ||||||||||||||
* http://www.apache.org/licenses/LICENSE-2.0 | ||||||||||||||
* | ||||||||||||||
* Unless required by applicable law or agreed to in writing, software | ||||||||||||||
* distributed under the License is distributed on an "AS IS" BASIS, | ||||||||||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||||||||||||
* See the License for the specific language governing permissions and | ||||||||||||||
* limitations under the License. | ||||||||||||||
*/ | ||||||||||||||
|
||||||||||||||
package org.apache.dolphinscheduler.api.dto; | ||||||||||||||
|
||||||||||||||
import lombok.Data; | ||||||||||||||
|
||||||||||||||
import java.util.Date; | ||||||||||||||
import java.util.List; | ||||||||||||||
|
||||||||||||||
/** | ||||||||||||||
* ProductInfoDto | ||||||||||||||
*/ | ||||||||||||||
Comment on lines
+25
to
+27
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This comment is meaningless, you need to remove. |
||||||||||||||
@Data | ||||||||||||||
public class ProductInfoDto { | ||||||||||||||
|
||||||||||||||
private Integer id; | ||||||||||||||
ruanwenjun marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||||||||||
|
||||||||||||||
private String version; | ||||||||||||||
|
||||||||||||||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -17,7 +17,9 @@ | |
|
||
package org.apache.dolphinscheduler.api.service; | ||
|
||
import org.apache.dolphinscheduler.api.dto.ProductInfoDto; | ||
import org.apache.dolphinscheduler.common.enums.PluginType; | ||
import org.apache.dolphinscheduler.dao.entity.User; | ||
|
||
import java.util.Map; | ||
|
||
|
@@ -30,4 +32,6 @@ public interface UiPluginService { | |
|
||
Map<String, Object> queryUiPluginDetailById(int id); | ||
|
||
ProductInfoDto queryProductInfo(User loginUser, int userId); | ||
|
||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. It's weird that there exists a method |
||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -17,11 +17,17 @@ | |
|
||
package org.apache.dolphinscheduler.api.service.impl; | ||
|
||
import org.apache.commons.lang3.StringUtils; | ||
import org.apache.dolphinscheduler.api.dto.ProductInfoDto; | ||
import org.apache.dolphinscheduler.api.enums.Status; | ||
import org.apache.dolphinscheduler.api.exceptions.ServiceException; | ||
import org.apache.dolphinscheduler.api.service.UiPluginService; | ||
import org.apache.dolphinscheduler.common.constants.Constants; | ||
import org.apache.dolphinscheduler.common.enums.PluginType; | ||
import org.apache.dolphinscheduler.dao.entity.DsVersion; | ||
import org.apache.dolphinscheduler.dao.entity.PluginDefine; | ||
import org.apache.dolphinscheduler.dao.entity.User; | ||
import org.apache.dolphinscheduler.dao.mapper.DsVersionMapper; | ||
import org.apache.dolphinscheduler.dao.mapper.PluginDefineMapper; | ||
|
||
import org.apache.commons.collections4.CollectionUtils; | ||
|
@@ -32,6 +38,7 @@ | |
|
||
import lombok.extern.slf4j.Slf4j; | ||
|
||
|
||
import org.springframework.beans.factory.annotation.Autowired; | ||
import org.springframework.stereotype.Service; | ||
|
||
|
@@ -45,6 +52,9 @@ public class UiPluginServiceImpl extends BaseServiceImpl implements UiPluginServ | |
@Autowired | ||
PluginDefineMapper pluginDefineMapper; | ||
|
||
@Autowired | ||
DsVersionMapper dsVersionMapper; | ||
|
||
@Override | ||
public Map<String, Object> queryUiPluginsByType(PluginType pluginType) { | ||
Map<String, Object> result = new HashMap<>(); | ||
|
@@ -82,4 +92,24 @@ public Map<String, Object> queryUiPluginDetailById(int id) { | |
return result; | ||
} | ||
|
||
@Override | ||
public ProductInfoDto queryProductInfo(User loginUser, int userId) { | ||
|
||
// check if user is existed | ||
if (userId <= 0 || !(loginUser.getId() == userId)) { | ||
throw new ServiceException(Status.REQUEST_PARAMS_NOT_VALID_ERROR, | ||
"User id: " + userId + " should not less than or equals to 0."); | ||
} | ||
// persist to the database | ||
ruanwenjun marked this conversation as resolved.
Show resolved
Hide resolved
|
||
DsVersion dsVersion = dsVersionMapper.selectById(1); | ||
|
||
if(StringUtils.isBlank(dsVersion.getVersion())){ | ||
throw new ServiceException(Status.VERSION_INFO_STATE_ERROR); | ||
} | ||
ProductInfoDto result = new ProductInfoDto(); | ||
result.setId(dsVersion.getId()); | ||
result.setVersion(dsVersion.getVersion()); | ||
return result; | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Don't query the version by id, id might changed. |
||
} | ||
|
||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -22,17 +22,24 @@ | |
import static org.mockito.ArgumentMatchers.anyInt; | ||
import static org.mockito.Mockito.when; | ||
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; | ||
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; | ||
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content; | ||
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; | ||
|
||
import org.apache.dolphinscheduler.api.dto.ProductInfoDto; | ||
import org.apache.dolphinscheduler.api.enums.Status; | ||
import org.apache.dolphinscheduler.api.service.UiPluginService; | ||
import org.apache.dolphinscheduler.api.utils.Result; | ||
import org.apache.dolphinscheduler.common.constants.Constants; | ||
import org.apache.dolphinscheduler.common.enums.PluginType; | ||
import org.apache.dolphinscheduler.common.utils.JSONUtils; | ||
import org.apache.dolphinscheduler.dao.entity.User; | ||
|
||
import org.mockito.Mockito; | ||
import org.junit.jupiter.api.Assertions; | ||
import org.junit.jupiter.api.Test; | ||
import org.slf4j.Logger; | ||
import org.slf4j.LoggerFactory; | ||
import org.springframework.boot.test.mock.mockito.MockBean; | ||
import org.springframework.http.MediaType; | ||
import org.springframework.test.web.servlet.MvcResult; | ||
|
@@ -41,6 +48,9 @@ | |
|
||
import com.google.common.collect.ImmutableMap; | ||
|
||
import java.util.HashMap; | ||
import java.util.Map; | ||
|
||
/** | ||
* ui plugin controller test | ||
*/ | ||
|
@@ -53,6 +63,8 @@ public class UiPluginControllerTest extends AbstractControllerTest { | |
private static final ImmutableMap<String, Object> uiPluginServiceResult = | ||
ImmutableMap.of(Constants.STATUS, Status.SUCCESS, Constants.DATA_LIST, "Test Data"); | ||
|
||
private static final Logger logger = LoggerFactory.getLogger(TenantControllerTest.class); | ||
|
||
ruanwenjun marked this conversation as resolved.
Show resolved
Hide resolved
|
||
@MockBean(name = "uiPluginService") | ||
private UiPluginService uiPluginService; | ||
|
||
|
@@ -91,4 +103,31 @@ public void testQueryUiPluginDetailById() throws Exception { | |
JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), Result.class); | ||
assertThat(actualResponseContent.toString()).isEqualTo(expectResponseContent.toString()); | ||
} | ||
|
||
@Test | ||
public void testQueryProductInfo() throws Exception { | ||
ProductInfoDto mockResult = new ProductInfoDto(); | ||
Mockito.when(uiPluginService.queryProductInfo(Mockito.any(), Mockito.anyInt())).thenReturn(mockResult); | ||
|
||
MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>(); | ||
paramsMap.add("userId", "1"); | ||
|
||
MvcResult mvcResult = mockMvc.perform(post("/ui-plugins/queryProductInfo") | ||
.header(SESSION_ID, sessionId) | ||
.params(paramsMap)) | ||
.andExpect(status().isOk()) | ||
.andExpect(content().contentType(MediaType.APPLICATION_JSON)) | ||
.andReturn(); | ||
|
||
Result result = JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), Result.class); | ||
Assertions.assertEquals(Status.SUCCESS.getCode(), result.getCode().intValue()); | ||
logger.info(mvcResult.getResponse().getContentAsString()); | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Don't use log in UT |
||
} | ||
|
||
private User getLoginUser() { | ||
User user = new User(); | ||
user.setId(1); | ||
user.setUserName("admin"); | ||
return user; | ||
} | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Don't add useless code There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Based on your proposal, I have made the following modifications:
|
||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
/* | ||
* Licensed to the Apache Software Foundation (ASF) under one or more | ||
* contributor license agreements. See the NOTICE file distributed with | ||
* this work for additional information regarding copyright ownership. | ||
* The ASF licenses this file to You under the Apache License, Version 2.0 | ||
* (the "License"); you may not use this file except in compliance with | ||
* the License. You may obtain a copy of the License at | ||
* | ||
* http://www.apache.org/licenses/LICENSE-2.0 | ||
* | ||
* Unless required by applicable law or agreed to in writing, software | ||
* distributed under the License is distributed on an "AS IS" BASIS, | ||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
* See the License for the specific language governing permissions and | ||
* limitations under the License. | ||
*/ | ||
|
||
export default { | ||
about: 'About', | ||
about_version: 'Product Version' | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -18,5 +18,6 @@ | |
export default { | ||
profile: 'Profile', | ||
password: 'Password', | ||
about: 'About', | ||
logout: 'Logout' | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
/* | ||
* Licensed to the Apache Software Foundation (ASF) under one or more | ||
* contributor license agreements. See the NOTICE file distributed with | ||
* this work for additional information regarding copyright ownership. | ||
* The ASF licenses this file to You under the Apache License, Version 2.0 | ||
* (the "License"); you may not use this file except in compliance with | ||
* the License. You may obtain a copy of the License at | ||
* | ||
* http://www.apache.org/licenses/LICENSE-2.0 | ||
* | ||
* Unless required by applicable law or agreed to in writing, software | ||
* distributed under the License is distributed on an "AS IS" BASIS, | ||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
* See the License for the specific language governing permissions and | ||
* limitations under the License. | ||
*/ | ||
|
||
export default { | ||
about: '关于产品', | ||
about_version: '产品版本' | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -18,5 +18,6 @@ | |
export default { | ||
profile: '用户信息', | ||
password: '密码管理', | ||
about: '产品信息', | ||
logout: '退出登录' | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Avoid wildcard import.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Please use mvn spotless:apply to fix these.