Skip to content

Commit

Permalink
Feat/fs path (#417)
Browse files Browse the repository at this point in the history
* feat: add path field & getPathInfo interface

* feat: add path field & getPathInfo interface

* feat: add path field & getPathInfo interface

---------

Co-authored-by: wildeslam <[email protected]>
  • Loading branch information
wildeslam and wildeslam authored Jun 11, 2024
1 parent 81fd6f9 commit 4614236
Show file tree
Hide file tree
Showing 12 changed files with 147 additions and 37 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@
import com.arextest.web.model.contract.contracts.filesystem.FSDuplicateResponseType;
import com.arextest.web.model.contract.contracts.filesystem.FSExportItemRequestType;
import com.arextest.web.model.contract.contracts.filesystem.FSExportItemResponseType;
import com.arextest.web.model.contract.contracts.filesystem.FSGetPathInfoRequestType;
import com.arextest.web.model.contract.contracts.filesystem.FSGetPathInfoResponseType;
import com.arextest.web.model.contract.contracts.filesystem.FSGetWorkspaceItemTreeRequestType;
import com.arextest.web.model.contract.contracts.filesystem.FSGetWorkspaceItemTreeResponseType;
import com.arextest.web.model.contract.contracts.filesystem.FSGetWorkspaceItemsRequestType;
Expand Down Expand Up @@ -60,7 +62,6 @@
import com.arextest.web.model.contract.contracts.filesystem.RemoveUserFromWorkspaceType;
import com.arextest.web.model.contract.contracts.filesystem.ValidInvitationRequestType;
import com.arextest.web.model.contract.contracts.filesystem.ValidInvitationResponseType;
import com.arextest.web.model.dto.filesystem.FSTreeDto;
import java.util.List;
import javax.annotation.Resource;
import javax.validation.Valid;
Expand Down Expand Up @@ -120,7 +121,9 @@ public Response removeItem(@RequestHeader(name = Constants.ACCESS_TOKEN) String
}
String userName = jwtService.getUserName(token);
FSRemoveItemResponseType response = new FSRemoveItemResponseType();
response.setSuccess(fileSystemService.removeItem(request, userName));
MutablePair<Boolean, List<String>> result = fileSystemService.removeItem(request, userName);
response.setSuccess(result.getLeft());
response.setPath(result.getRight());
return ResponseUtils.successResponse(response);
}

Expand All @@ -133,8 +136,9 @@ public Response rename(@RequestHeader(name = Constants.ACCESS_TOKEN) String toke
ResponseCode.AUTHENTICATION_FAILED);
}
FSRenameResponseType response = new FSRenameResponseType();
Boolean success = fileSystemService.rename(request);
response.setSuccess(success);
MutablePair<Boolean, List<String>> result = fileSystemService.rename(request);
response.setSuccess(result.getLeft());
response.setPath(result.getRight());
return ResponseUtils.successResponse(response);
}

Expand All @@ -146,20 +150,14 @@ public Response duplicate(@RequestHeader(name = Constants.ACCESS_TOKEN) String t
return ResponseUtils.errorResponse(Constants.NO_PERMISSION,
ResponseCode.AUTHENTICATION_FAILED);
}
FSDuplicateResponseType response = new FSDuplicateResponseType();
MutablePair<String, FSTreeDto> result = fileSystemService.duplicate(request);
response.setSuccess(true);
response.setInfoId(result.getLeft());
response.setWorkspaceId(result.getRight().getId());
FSDuplicateResponseType response = fileSystemService.duplicate(request);
return ResponseUtils.successResponse(response);
}

@PostMapping("/move")
@ResponseBody
public Response move(@Valid @RequestBody FSMoveItemRequestType request) {
SuccessResponseType response = new SuccessResponseType();
response.setSuccess(fileSystemService.move(request));
return ResponseUtils.successResponse(response);
return ResponseUtils.successResponse(fileSystemService.move(request));
}

@PostMapping("/addWorkspace")
Expand Down Expand Up @@ -450,4 +448,13 @@ public Response batchGetInterfaceCase(@RequestHeader(name = Constants.ACCESS_TOK
return ResponseUtils.successResponse(response);
}

@PostMapping("/getPathInfo")
@ResponseBody
public Response getPathInfo(@RequestBody FSGetPathInfoRequestType request) {
FSGetPathInfoResponseType response = new FSGetPathInfoResponseType();
response.setPathInfo(
fileSystemService.getAbsolutePathInfo(request.getInfoId(), request.getNodeType()));
return ResponseUtils.successResponse(response);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,9 @@
import com.arextest.web.model.contract.contracts.filesystem.FSAddWorkspaceRequestType;
import com.arextest.web.model.contract.contracts.filesystem.FSAddWorkspaceResponseType;
import com.arextest.web.model.contract.contracts.filesystem.FSDuplicateRequestType;
import com.arextest.web.model.contract.contracts.filesystem.FSDuplicateResponseType;
import com.arextest.web.model.contract.contracts.filesystem.FSExportItemRequestType;
import com.arextest.web.model.contract.contracts.filesystem.FSGetPathInfoResponseType.FSPathInfoDto;
import com.arextest.web.model.contract.contracts.filesystem.FSGetWorkspaceItemTreeRequestType;
import com.arextest.web.model.contract.contracts.filesystem.FSGetWorkspaceItemTreeResponseType;
import com.arextest.web.model.contract.contracts.filesystem.FSGetWorkspaceItemsRequestType;
Expand Down Expand Up @@ -61,6 +63,7 @@
import com.arextest.web.model.contract.contracts.filesystem.FSSearchWorkspaceItemsRequestType;
import com.arextest.web.model.contract.contracts.filesystem.FSSearchWorkspaceItemsResponseType;
import com.arextest.web.model.contract.contracts.filesystem.FSTreeType;
import com.arextest.web.model.contract.contracts.filesystem.FsMoveItemResponseType;
import com.arextest.web.model.contract.contracts.filesystem.InviteToWorkspaceRequestType;
import com.arextest.web.model.contract.contracts.filesystem.InviteToWorkspaceResponseType;
import com.arextest.web.model.contract.contracts.filesystem.LabelType;
Expand Down Expand Up @@ -217,6 +220,7 @@ public FSAddItemResponseType addItemForController(FSAddItemRequestType request)
response.setSuccess(true);
response.setInfoId(tuple.getLeft());
response.setWorkspaceId(tuple.getRight().getId());
response.setPath(getAbsolutePath(tuple.getLeft(), request.getNodeType()));
return response;
}

Expand Down Expand Up @@ -313,8 +317,13 @@ public MutablePair<String, FSTreeDto> addItem(FSAddItemRequestType request) {
return null;
}

public Boolean removeItem(FSRemoveItemRequestType request, String userName) {

/**
* add item into workspace
*
* @return <Success, Paths>
*/
public MutablePair<Boolean, List<String>> removeItem(FSRemoveItemRequestType request, String userName) {
List<String> path = getAbsolutePath(request.getInfoId(), request.getNodeType());
FSTreeDto treeDto = fsTreeRepository.updateFSTree(request.getId(), dto -> {
if (dto == null) {
return null;
Expand All @@ -325,7 +334,6 @@ public Boolean removeItem(FSRemoveItemRequestType request, String userName) {
}

String parentId = null;
List<String> path = getAbsolutePath(request.getInfoId(), request.getNodeType());
for (int i = 0; i < path.size() - 1; i++) {

String node = path.get(i);
Expand All @@ -344,18 +352,18 @@ public Boolean removeItem(FSRemoveItemRequestType request, String userName) {
return dto;
});

return treeDto != null ? true : false;
boolean success = treeDto != null;
return new MutablePair<>(success, path);
}

public Boolean rename(FSRenameRequestType request) {
public MutablePair<Boolean, List<String>> rename(FSRenameRequestType request) {

List<String> path = getAbsolutePath(request.getInfoId(), request.getNodeType());
FSTreeDto fsTreeDto = fsTreeRepository.updateFSTree(request.getId(), dto -> {
if (dto == null) {
return null;
}

List<String> path = getAbsolutePath(request.getInfoId(), request.getNodeType());

FSNodeDto fsNodeDto = fileSystemUtils.findByPath(dto.getRoots(), path);
if (fsNodeDto == null) {
return null;
Expand All @@ -370,16 +378,17 @@ public Boolean rename(FSRenameRequestType request) {
fsNodeDto.setNodeName(request.getNewName());
return dto;
});
return fsTreeDto != null ? true : false;
boolean success = fsTreeDto != null;
return new MutablePair<>(success, path);
}

public MutablePair<String, FSTreeDto> duplicate(FSDuplicateRequestType request) {
public FSDuplicateResponseType duplicate(FSDuplicateRequestType request) {
try {
AtomicReference<String> infoId = new AtomicReference<>();
List<String> path = getAbsolutePath(request.getInfoId(), request.getNodeType());
FSTreeDto treeDto = fsTreeRepository.updateFSTree(request.getId(), dto -> {
FSNodeDto parent = null;
FSNodeDto current;
List<String> path = getAbsolutePath(request.getInfoId(), request.getNodeType());
if (path.size() != 1) {
parent = fileSystemUtils.findByPath(dto.getRoots(), path.subList(0, path.size() - 1));
current = fileSystemUtils.findByInfoId(parent.getChildren(),
Expand All @@ -397,18 +406,24 @@ public MutablePair<String, FSTreeDto> duplicate(FSDuplicateRequestType request)
}
return dto;
});

return new MutablePair<>(infoId.get(), treeDto);
FSDuplicateResponseType response = new FSDuplicateResponseType();
response.setSuccess(true);
response.setInfoId(infoId.get());
response.setWorkspaceId(treeDto.getId());
response.setPath(path);
return response;
} catch (Exception e) {
throw new ArexException(ArexApiResponseCode.FS_DUPLICATE_ITEM_ERROR,
"failed to duplicate item", e);
}
}

public Boolean move(FSMoveItemRequestType request) {
public FsMoveItemResponseType move(FSMoveItemRequestType request) {
FsMoveItemResponseType response = new FsMoveItemResponseType();
try {
List<String> fromPath = getAbsolutePath(request.getFromInfoId(), request.getFromNodeType());
FSTreeDto treeDto = fsTreeRepository.updateFSTree(request.getId(), dto -> {
List<String> fromPath = getAbsolutePath(request.getFromInfoId(), request.getFromNodeType());

List<String> toParentPath = getAbsolutePath(request.getToParentInfoId(),
request.getToParentNodeType());
MutablePair<Integer, FSNodeDto> current =
Expand Down Expand Up @@ -445,10 +460,15 @@ public Boolean move(FSMoveItemRequestType request) {
}
return dto;
});
return treeDto != null ? true : false;
response.setSuccess(treeDto != null);
response.setFromPath(fromPath);
response.setToPath(getAbsolutePath(request.getFromInfoId(), request.getFromNodeType()));

return response;
} catch (Exception e) {
LogUtils.error(LOGGER, "failed to move item", e);
return false;
response.setSuccess(false);
return response;
}
}

Expand Down Expand Up @@ -1183,7 +1203,7 @@ public FSGetWorkspaceItemsResponseType getWorkspaceItems(FSGetWorkspaceItemsRequ
}
FSNodeType fsNodeType = FSNodeMapper.INSTANCE.contractFromDto(fsNodeDto);
response.setNode(fsNodeType);

response.setPath(getAbsolutePath(fsNodeType.getInfoId(), fsNodeType.getNodeType()));
return response;
}

Expand Down Expand Up @@ -1308,7 +1328,7 @@ public FSGetWorkspaceItemTreeResponseType getWorkspaceItemTree(

FSTreeType treeType = FSTreeMapper.INSTANCE.contractFromDto(treeDto);
response.setFsTree(treeType);

response.setPath(getAbsolutePath(request.getInfoId(), request.getNodeType()));
return response;
}

Expand Down Expand Up @@ -1444,11 +1464,17 @@ private void queryLastChildFolder(List<String> ids, List<String> result) {
}

private List<String> getAbsolutePath(String infoId, Integer nodeType) {
List<String> path = Lists.newArrayList();
return getAbsolutePathInfo(infoId, nodeType)
.stream()
.map(FSPathInfoDto::getId)
.collect(Collectors.toList());
}

public List<FSPathInfoDto> getAbsolutePathInfo(String infoId, Integer nodeType) {
List<FSPathInfoDto> path = Lists.newArrayList();
if (StringUtils.isBlank(infoId)) {
return path;
}
path.add(infoId);
String curInfoId = infoId;
Integer curNodeType = nodeType;
while (true) {
Expand All @@ -1458,12 +1484,15 @@ private List<String> getAbsolutePath(String infoId, Integer nodeType) {
"Unknown node type: " + nodeType);
}
FSItemDto fsItemDto = itemInfo.queryById(curInfoId);
if (fsItemDto == null || StringUtils.isEmpty(fsItemDto.getParentId())) {
if (fsItemDto == null) {
break;
}
path.add(0, fsItemDto.getParentId());
path.add(0, new FSPathInfoDto(fsItemDto.getId(), fsItemDto.getName()));
curInfoId = fsItemDto.getParentId();
curNodeType = fsItemDto.getParentNodeType();
if (StringUtils.isEmpty(curInfoId)) {
break;
}
}
return path;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.arextest.web.model.contract.contracts.filesystem;

import java.util.List;
import lombok.Data;

@Data
Expand All @@ -8,4 +9,5 @@ public class FSAddItemResponseType {
private Boolean success;
private String infoId;
private String workspaceId;
private List<String> path;
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.arextest.web.model.contract.contracts.filesystem;

import java.util.List;
import lombok.Data;

/**
Expand All @@ -11,4 +12,5 @@ public class FSDuplicateResponseType {
private Boolean success;
private String infoId;
private String workspaceId;
private List<String> path;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package com.arextest.web.model.contract.contracts.filesystem;

import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import lombok.Data;

/**
* @author wildeslam.
* @create 2024/6/6 17:06
*/
@Data
public class FSGetPathInfoRequestType {
@NotBlank(message = "InfoId cannot be empty")
private String infoId;
@NotNull(message = "nodeType cannot be empty")
@Min(value = 1, message = "nodeType must be greater than or equal to 1")
@Max(value = 3, message = "nodeType must be less than or equal to 3")
private Integer nodeType;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package com.arextest.web.model.contract.contracts.filesystem;

import java.util.List;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
* @author wildeslam.
* @create 2024/6/6 17:04
*/
@Data
public class FSGetPathInfoResponseType {
private List<FSPathInfoDto> pathInfo;


@Data
@AllArgsConstructor
@NoArgsConstructor
public static class FSPathInfoDto {
private String id;
private String name;
}
}
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
package com.arextest.web.model.contract.contracts.filesystem;

import java.util.List;
import lombok.Data;

@Data
public class FSGetWorkspaceItemTreeResponseType {

private FSTreeType fsTree;

private List<String> path;
}
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
package com.arextest.web.model.contract.contracts.filesystem;

import java.util.List;
import lombok.Data;


@Data
public class FSGetWorkspaceItemsResponseType {

private FSNodeType node;

private List<String> path;
}
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
package com.arextest.web.model.contract.contracts.filesystem;

import java.util.List;
import lombok.Data;

@Data
public class FSRemoveItemResponseType {

private Boolean success;
private List<String> path;
}
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
package com.arextest.web.model.contract.contracts.filesystem;

import java.util.List;
import lombok.Data;

@Data
public class FSRenameResponseType {

private Boolean success;
private List<String> path;
}
Loading

0 comments on commit 4614236

Please sign in to comment.