Skip to content

Commit b83198f

Browse files
feat: add support for moving folders (#201)
1 parent d4a020d commit b83198f

27 files changed

+501
-23
lines changed

src/main/java/com/epam/aidial/cfg/client/ResourceClient.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,5 +9,5 @@
99
public interface ResourceClient {
1010

1111
@PostMapping("/v1/ops/resource/move")
12-
void move(@RequestBody MoveResourceDto movePromptDto);
12+
void move(@RequestBody MoveResourceDto moveResourceDto);
1313
}

src/main/java/com/epam/aidial/cfg/client/mapper/CoreMetadataUtils.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,10 @@ public static String encodeFolderPath(String path) {
3636
return encodePath(path) + "/";
3737
}
3838

39+
public static String replacePathSegment(String path, String oldPathSegment, String newPathSegment) {
40+
return path.replaceFirst(encodePath(oldPathSegment), encodePath(newPathSegment));
41+
}
42+
3943
private static String removeName(String path) {
4044
if (path == null) {
4145
return null;

src/main/java/com/epam/aidial/cfg/client/mapper/ResourceClientMapper.java

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,15 @@
1010
public interface ResourceClientMapper {
1111

1212
default MoveResourceDto toMoveResourceDto(MoveResource moveResource, String prefix) {
13-
var sourceUrl = encodePath(prefix + moveResource.getSourceUrl());
14-
var destinationUrl = encodePath(prefix + moveResource.getDestinationUrl());
13+
String originalSourceUrl = moveResource.getSourceUrl();
14+
String originalDestinationUrl = moveResource.getDestinationUrl();
15+
16+
var sourceUrl = originalSourceUrl.startsWith(prefix)
17+
? originalSourceUrl
18+
: encodePath(prefix + originalSourceUrl);
19+
var destinationUrl = originalDestinationUrl.startsWith(prefix)
20+
? originalDestinationUrl
21+
: encodePath(prefix + originalDestinationUrl);
1522

1623
return MoveResourceDto.builder()
1724
.sourceUrl(sourceUrl)
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package com.epam.aidial.cfg.configuration;
2+
3+
import com.epam.aidial.cfg.model.ResourceType;
4+
import com.epam.aidial.cfg.service.ResourceService;
5+
import org.springframework.context.annotation.Bean;
6+
import org.springframework.context.annotation.Configuration;
7+
8+
import java.util.List;
9+
import java.util.Map;
10+
import java.util.function.Function;
11+
import java.util.stream.Collectors;
12+
13+
@Configuration(proxyBeanMethods = false)
14+
public class CoreResourcesConfig {
15+
16+
@Bean
17+
public Map<ResourceType, ResourceService> resourceServicesByResourceType(List<ResourceService> resourceServices) {
18+
return resourceServices.stream()
19+
.collect(Collectors.toMap(ResourceService::getResourceType, Function.identity()));
20+
}
21+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package com.epam.aidial.cfg.dto;
2+
3+
import com.epam.aidial.cfg.dto.validation.annotation.MetadataPath;
4+
import jakarta.validation.constraints.NotNull;
5+
import lombok.Data;
6+
7+
import java.util.List;
8+
9+
@Data
10+
public class MoveFolderRequestDto {
11+
12+
@MetadataPath
13+
private String oldPath;
14+
@MetadataPath
15+
private String newPath;
16+
private List<@NotNull ResourceTypeDto> resourceTypes;
17+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package com.epam.aidial.cfg.exception;
2+
3+
public class FolderAlreadyExistsException extends ValidationException {
4+
public FolderAlreadyExistsException(String message) {
5+
super(message);
6+
}
7+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package com.epam.aidial.cfg.exception;
2+
3+
public class FolderNotFoundException extends ValidationException {
4+
public FolderNotFoundException(String message) {
5+
super(message);
6+
}
7+
}

src/main/java/com/epam/aidial/cfg/mapper/ResourceMapper.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import com.epam.aidial.cfg.dto.ImportResourcesDto;
55
import com.epam.aidial.cfg.dto.ImportResourcesFileResultDto;
66
import com.epam.aidial.cfg.dto.ImportResourcesPreviewDto;
7+
import com.epam.aidial.cfg.dto.MoveFolderRequestDto;
78
import com.epam.aidial.cfg.dto.MoveResourceDto;
89
import com.epam.aidial.cfg.dto.ResourceMetadataRequestDto;
910
import com.epam.aidial.cfg.dto.RuleDto;
@@ -12,6 +13,7 @@
1213
import com.epam.aidial.cfg.model.ImportResources;
1314
import com.epam.aidial.cfg.model.ImportResourcesFileResult;
1415
import com.epam.aidial.cfg.model.ImportResourcesPreview;
16+
import com.epam.aidial.cfg.model.MoveFolderRequest;
1517
import com.epam.aidial.cfg.model.MoveResource;
1618
import com.epam.aidial.cfg.model.ResourceMetadataRequest;
1719
import com.epam.aidial.cfg.model.Rule;
@@ -57,4 +59,6 @@ default ResourceMetadataRequest toRequest(ResourceMetadataRequestDto dto) {
5759
ImportResourcesFileResultDto toImportResourcesFileResultDto(ImportResourcesFileResult model);
5860

5961
ImportResourcesPreviewDto toImportResourcesPreviewDto(ImportResourcesPreview importResourcesPreview);
62+
63+
MoveFolderRequest toMoveFolderRequest(MoveFolderRequestDto moveFolderRequestDto);
6064
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package com.epam.aidial.cfg.model;
2+
3+
import lombok.AllArgsConstructor;
4+
import lombok.Builder;
5+
import lombok.Data;
6+
import lombok.NoArgsConstructor;
7+
8+
import java.util.List;
9+
10+
@Data
11+
@Builder
12+
@NoArgsConstructor
13+
@AllArgsConstructor
14+
public class MoveFolderRequest {
15+
private String oldPath;
16+
private String newPath;
17+
private List<ResourceType> resourceTypes;
18+
}

src/main/java/com/epam/aidial/cfg/service/ApplicationService.java

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,16 @@
11
package com.epam.aidial.cfg.service;
22

33
import com.epam.aidial.cfg.client.ApplicationClient;
4+
import com.epam.aidial.cfg.client.ResourceClient;
45
import com.epam.aidial.cfg.client.dto.ApplicationMetadataDto;
56
import com.epam.aidial.cfg.client.mapper.ApplicationClientMapper;
7+
import com.epam.aidial.cfg.client.mapper.ResourceClientMapper;
68
import com.epam.aidial.cfg.configuration.logging.LogExecution;
79
import com.epam.aidial.cfg.model.ApplicationResource;
810
import com.epam.aidial.cfg.model.FolderInfo;
11+
import com.epam.aidial.cfg.model.MoveResource;
912
import com.epam.aidial.cfg.model.ResourceMetadataRequest;
13+
import com.epam.aidial.cfg.model.ResourceType;
1014
import feign.FeignException;
1115
import lombok.RequiredArgsConstructor;
1216
import org.springframework.stereotype.Service;
@@ -19,25 +23,40 @@
1923
public class ApplicationService implements ResourceService {
2024

2125
private final ApplicationClient applicationClient;
22-
private final ApplicationClientMapper mapper;
26+
private final ApplicationClientMapper applicationClientMapper;
27+
private final ResourceClient resourceClient;
28+
private final ResourceClientMapper resourceClientMapper;
2329

30+
@Override
2431
public FolderInfo getFolders(ResourceMetadataRequest request) {
2532
try {
2633
ApplicationMetadataDto applicationMetadata = getMetadata(request);
27-
return mapper.toFolderInfo(applicationMetadata, APPLICATIONS_PREFIX);
34+
return applicationClientMapper.toFolderInfo(applicationMetadata, APPLICATIONS_PREFIX);
2835
} catch (FeignException.FeignClientException.NotFound notFound) {
2936
return null;
3037
}
3138
}
3239

40+
@Override
3341
public ApplicationMetadataDto getMetadata(ResourceMetadataRequest request) {
3442
return applicationClient.getApplicationMetadata(request.getPath(), request.isRecursive(), request.getNextToken());
3543
}
3644

45+
@Override
46+
public void move(MoveResource moveResource) {
47+
var moveResourceDto = resourceClientMapper.toMoveResourceDto(moveResource, APPLICATIONS_PREFIX);
48+
resourceClient.move(moveResourceDto);
49+
}
50+
51+
@Override
52+
public ResourceType getResourceType() {
53+
return ResourceType.APPLICATION;
54+
}
55+
3756
public ApplicationResource getApplicationResource(String path) {
3857
var applicationDto = applicationClient.getApplicationResource(path);
3958
var applicationMetadataDto = applicationClient.getApplicationMetadata(path, false, null);
40-
return mapper.toApplicationResource(applicationDto, applicationMetadataDto);
59+
return applicationClientMapper.toApplicationResource(applicationDto, applicationMetadataDto);
4160
}
4261

4362
}

0 commit comments

Comments
 (0)