Skip to content
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

submit dss appconns del project and update project #271

Merged
merged 1 commit into from
Apr 11, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,14 @@
import com.webank.wedatasphere.exchangis.dss.appconn.constraints.Constraints;
import com.webank.wedatasphere.exchangis.dss.appconn.request.action.ExchangisDeleteAction;
import com.webank.wedatasphere.exchangis.dss.appconn.ref.ExchangisProjectResponseRef;
import com.webank.wedatasphere.exchangis.dss.appconn.request.action.ExchangisEntityPostAction;
import com.webank.wedatasphere.exchangis.dss.appconn.response.result.ExchangisEntityRespResult;
import org.apache.linkis.httpclient.request.HttpAction;
import org.apache.linkis.httpclient.response.HttpResult;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.HashMap;
import java.util.Map;
import java.util.Objects;

Expand All @@ -39,15 +41,17 @@ protected Logger getLogger() {

@Override
public ProjectResponseRef deleteProject(ProjectRequestRef projectRequestRef) throws ExternalOperationFailedException {
// TODO Get the project id
long projectId = 0l;
String url = requestURL("/project/" + projectId);
LOG.info("delete project request => dss_projectId:{}, name:{}, createName:{}", projectRequestRef.getId(),
projectRequestRef.getName(), projectRequestRef.getCreateBy());
ExchangisEntityRespResult.BasicMessageEntity<Map<String, String>> entity = requestToGetEntity(url, projectRequestRef.getWorkspace(), projectRequestRef,
(requestRef) -> {
// Build project delete action
return new ExchangisDeleteAction(requestRef.getCreateBy());
String url = requestURL("appProject/" + projectRequestRef.getName()+"/");
ExchangisEntityRespResult.BasicMessageEntity<Map<String, Object>> entity = requestToGetEntity(url,projectRequestRef.getWorkspace(), projectRequestRef,
(requestRef) ->{
ExchangisEntityPostAction exchangisEntityPostAction = new ExchangisEntityPostAction();
exchangisEntityPostAction.setUser(requestRef.getCreateBy());
HashMap<String, String> labels = new HashMap<>();
labels.put("route", "dev");
exchangisEntityPostAction.addRequestPayload("labels", labels);
return exchangisEntityPostAction;
}, Map.class);
if (Objects.isNull(entity)){
throw new ExternalOperationFailedException(31020, "The response entity cannot be empty", null);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,17 +27,15 @@ public class ExchangisProjectUpdateOperation extends AbstractExchangisProjectOpe
private StructureService structureService;

public ExchangisProjectUpdateOperation(StructureService structureService) {
super(new String[]{"appProject"});
setStructureService(structureService);
}

@Override
public ProjectResponseRef updateProject(ProjectRequestRef projectRequestRef) throws ExternalOperationFailedException {
// TODO Get the project id
long projectId = 0l;
String url = requestURL("/project/" + projectId);
LOG.info("update project request => dss_projectId:{}, name:{}, createName:{}",
projectRequestRef.getId(), projectRequestRef.getName(),projectRequestRef.getCreateBy());
ExchangisEntityRespResult.BasicMessageEntity<Map<String, Object>> entity = requestToGetEntity(url, projectRequestRef.getWorkspace(), projectRequestRef,
ExchangisEntityRespResult.BasicMessageEntity<Map<String, Object>> entity = requestToGetEntity(projectRequestRef.getWorkspace(), projectRequestRef,
(requestRef) -> {
// Build project put(update) action
return new ExchangisEntityPutAction<>(getProjectEntity(requestRef), requestRef.getCreateBy());
Expand All @@ -47,7 +45,7 @@ public ProjectResponseRef updateProject(ProjectRequestRef projectRequestRef) thr
}
ExchangisEntityRespResult httpResult = entity.getResult();
LOG.info("update project response => status {}, response {}", httpResult.getStatusCode(), httpResult.getResponseBody());
AtomicLong newProjectId = new AtomicLong(projectId);
AtomicLong newProjectId = new AtomicLong(projectRequestRef.getId());
try {
Optional.ofNullable(entity.getData()).ifPresent( data -> newProjectId
.set(Long.parseLong(String.valueOf(data.getOrDefault(Constraints.PROJECT_ID, newProjectId.get())))));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import com.webank.wedatasphere.dss.standard.app.structure.project.*;
import com.webank.wedatasphere.exchangis.dss.appconn.operation.project.ExchangisProjectCreationOperation;
import com.webank.wedatasphere.exchangis.dss.appconn.operation.project.ExchangisProjectDeletionOperation;
import com.webank.wedatasphere.exchangis.dss.appconn.operation.project.ExchangisProjectUpdateOperation;

/**
Expand Down Expand Up @@ -31,7 +32,7 @@ protected ProjectUpdateOperation createProjectUpdateOperation() {

@Override
protected ProjectDeletionOperation createProjectDeletionOperation() {
return null;
return new ExchangisProjectDeletionOperation(this);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,10 +58,18 @@ public interface ProjectMapper {
*/
void deleteOne(Long projectId);

/**
* Delete project by name
* @param name
*/
void deleteByName(String name);

/**
* get projects by name
* @param projectName
* @return List
*/
List<ExchangisProject> getDetailByName(@Param("projectName") String projectName);

ExchangisProject selectByName(String name);
}
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,16 @@
<![CDATA[DELETE FROM `exchangis_project_info` WHERE id = #{id};]]>
</delete>

<delete id="deleteByName">
DELETE FROM exchangis_project_info WHERE name = #{name}
</delete>


<select id="selectByName" resultMap="projectResult">
select * from exchangis_project_info WHERE name = #{name}
</select>


<select id="getDetailByName" resultMap="projectResult">
<![CDATA[ SELECT * FROM `exchangis_project_info`]]>
<where>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
package com.webank.wedatasphere.exchangis.project.server.restful.external;

import com.webank.wedatasphere.exchangis.common.validator.groups.UpdateGroup;
import com.webank.wedatasphere.exchangis.project.server.entity.ExchangisProject;
import com.webank.wedatasphere.exchangis.project.server.service.ProjectService;
import com.webank.wedatasphere.exchangis.project.server.utils.ExchangisProjectRestfulUtils;
import com.webank.wedatasphere.exchangis.project.server.vo.ExchangisProjectAppVo;
import com.webank.wedatasphere.exchangis.project.server.vo.ExchangisProjectAppVo;
import com.webank.wedatasphere.exchangis.project.server.vo.ExchangisProjectInfo;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.math3.util.Pair;
import org.apache.linkis.common.utils.JsonUtils;
import org.apache.linkis.server.Message;
Expand All @@ -14,13 +16,12 @@
import org.slf4j.LoggerFactory;
import org.springframework.validation.BindingResult;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.validation.groups.Default;
import java.util.Objects;

/**
* Restful class for dss project
Expand Down Expand Up @@ -58,4 +59,77 @@ public Message createProject(@Validated @RequestBody ExchangisProjectAppVo proje
return Message.error("Fail to create project from DSS(创建工程失败)");
}
}


/**
* Update project
* @param request request
* @param projectVo project vo
* @return
*/
@RequestMapping( value = "/{id:\\d+}", method = RequestMethod.PUT)
public Message updateProject(@PathVariable("id") Long id, @Validated({UpdateGroup.class, Default.class}) @RequestBody ExchangisProjectInfo projectVo
, BindingResult result, HttpServletRequest request) {
if (result.hasErrors()){
return Message.error(result.getFieldErrors().get(0).getDefaultMessage());
}
String username = SecurityFilter.getLoginUsername(request);
try {
ExchangisProjectInfo projectStored = projectService.getProjectById(Long.valueOf(projectVo.getId()));
if (!hasAuthority(username, projectStored)){
return Message.error("You have no permission to update (没有项目的更新权限)");
}
String domain = projectStored.getDomain();
if (StringUtils.isNotBlank(domain) && !ExchangisProject.Domain.STANDALONE.name()
.equalsIgnoreCase(domain)){
return Message.error("Cannot update the outer project (无法更新来自 " + domain + " 的外部项目)");
}
LOG.info("UpdateProject vo: {}, userName: {}", JsonUtils.jackson().writeValueAsString(projectVo), username);
projectService.updateProject(projectVo, username);
return ExchangisProjectRestfulUtils.dealOk("更新工程成功",
new Pair<>("projectName", projectVo.getName()),
new Pair<>("projectId", projectVo.getId()));
} catch (Exception t) {
LOG.error("Failed to update project for user {}", username, t);
return Message.error("Fail to update project (更新工程失败)");
}
}

/**
* Delete project
* @param request http request
* @param name project name
* @return
*/
@RequestMapping( value = "/{name}", method = RequestMethod.POST)
public Message deleteProject(HttpServletRequest request, @PathVariable("name") String name) {
String username = SecurityFilter.getLoginUsername(request);
try {
ExchangisProjectInfo projectInfo = projectService.selectByName(name);
// if (!hasAuthority(username, projectInfo)){
// return Message.error("You have no permission to delete (删除工程失败)");
// }
// String domain = projectInfo.getDomain();
// if (StringUtils.isNotBlank(domain) && !ExchangisProject.Domain.STANDALONE.name()
// .equalsIgnoreCase(domain)){
// return Message.error("Cannot delete the outer project (无法删除来自 " + domain + " 的外部项目)");
// }
projectService.deleteProjectByName(name);
return ExchangisProjectRestfulUtils.dealOk("删除工程成功");
} catch (Exception t) {
LOG.error("Failed to delete project for user {}", username, t);
return Message.error("Failed to delete project (删除工程失败)");
}

}


/**
* @param username username
* @param project project
* @return
*/
private boolean hasAuthority(String username, ExchangisProjectInfo project){
return Objects.nonNull(project) && username.equals(project.getCreateUser());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@

import com.webank.wedatasphere.exchangis.common.pager.PageResult;
import com.webank.wedatasphere.exchangis.job.exception.ExchangisJobException;
import com.webank.wedatasphere.exchangis.project.server.entity.ExchangisProject;
import com.webank.wedatasphere.exchangis.project.server.vo.ExchangisProjectInfo;
import com.webank.wedatasphere.exchangis.project.server.vo.ProjectQueryVo;

Expand Down Expand Up @@ -48,6 +49,12 @@ public interface ProjectService {
*/
void deleteProject(Long projectId) throws ExchangisJobException;

/**
* Delete project by name
* @param name
*/
void deleteProjectByName(String name) throws ExchangisJobException;

/**
* Query the project detail
* @param projectId project id
Expand All @@ -56,4 +63,6 @@ public interface ProjectService {
ExchangisProjectInfo getProjectDetailById(Long projectId);

ExchangisProjectInfo getProjectById(Long projectId);

ExchangisProjectInfo selectByName(String name);
}
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,7 @@ public void updateProject(ExchangisProjectInfo projectVo, String userName) {
updatedProject.setViewUsers(projectVo.getViewUsers());
updatedProject.setEditUsers(projectVo.getEditUsers());
updatedProject.setExecUsers(projectVo.getExecUsers());
updatedProject.setDescription(projectVo.getDescription());
// Set the updated properties
updatedProject.setLastUpdateUser(userName);
updatedProject.setLastUpdateTime(Calendar.getInstance().getTime());
Expand Down Expand Up @@ -115,7 +116,13 @@ public void deleteProject(Long projectId) throws ExchangisJobException {
}
}


@Override
@Transactional(rollbackFor = Exception.class)
public void deleteProjectByName(String name) throws ExchangisJobException {
// First to delete the project to lock the record
ExchangisProject project = this.projectMapper.selectByName(name);
this.projectMapper.deleteByName(name);
}
@Override
public ExchangisProjectInfo getProjectDetailById(Long projectId) {
ExchangisProject project = this.projectMapper.getDetailById(projectId);
Expand Down Expand Up @@ -144,5 +151,12 @@ public ExchangisProjectInfo getProjectById(Long projectId) {
return null;
}


@Override
public ExchangisProjectInfo selectByName(String name){
ExchangisProject project = this.projectMapper.selectByName(name);
if (Objects.nonNull(project)){
return new ExchangisProjectInfo(project);
}
return null;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ const typesMap = {
const fApi = self.fApi;
if(typeof data.dataSource === 'string'){
if (!/^https?:/.test(data.dataSource)) {
data.dataSource = window.location.origin + '/api/rest_j/v1' + data.dataSource
data.dataSource = window.location.origin + data.dataSource
}
request(data.dataSource, {
labels: ''
Expand Down