|
@@ -1,19 +1,16 @@
|
|
|
package com.giantan.data.mds.controller;
|
|
package com.giantan.data.mds.controller;
|
|
|
|
|
|
|
|
import com.giantan.ai.common.reponse.R;
|
|
import com.giantan.ai.common.reponse.R;
|
|
|
-import com.giantan.data.kvs.kvstore.GBaseKeyValue;
|
|
|
|
|
|
|
+import com.giantan.data.common.model.GBaseKeyValue;
|
|
|
import com.giantan.data.mds.constant.MdConstants;
|
|
import com.giantan.data.mds.constant.MdConstants;
|
|
|
import com.giantan.data.mds.service.*;
|
|
import com.giantan.data.mds.service.*;
|
|
|
import com.giantan.data.mds.service.impl.FileProcessingService;
|
|
import com.giantan.data.mds.service.impl.FileProcessingService;
|
|
|
import com.giantan.data.mds.service.impl.MdFileTaskStatusManager;
|
|
import com.giantan.data.mds.service.impl.MdFileTaskStatusManager;
|
|
|
import com.giantan.data.tasks.TaskStatus;
|
|
import com.giantan.data.tasks.TaskStatus;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
-import org.springframework.http.HttpStatus;
|
|
|
|
|
-import org.springframework.http.ResponseEntity;
|
|
|
|
|
import org.springframework.web.bind.annotation.*;
|
|
import org.springframework.web.bind.annotation.*;
|
|
|
import org.springframework.web.multipart.MultipartFile;
|
|
import org.springframework.web.multipart.MultipartFile;
|
|
|
|
|
|
|
|
-import java.io.IOException;
|
|
|
|
|
import java.lang.invoke.MethodHandles;
|
|
import java.lang.invoke.MethodHandles;
|
|
|
import java.nio.file.FileAlreadyExistsException;
|
|
import java.nio.file.FileAlreadyExistsException;
|
|
|
import java.util.List;
|
|
import java.util.List;
|
|
@@ -50,9 +47,9 @@ import java.util.UUID;
|
|
|
// - `POST /collections/{collId}/mds/actions/{action}`:简洁直观,表示“对资源集合执行动作”
|
|
// - `POST /collections/{collId}/mds/actions/{action}`:简洁直观,表示“对资源集合执行动作”
|
|
|
//- 配合 `mdIds` 或标签、筛选条件等参数进行部分操作
|
|
//- 配合 `mdIds` 或标签、筛选条件等参数进行部分操作
|
|
|
|
|
|
|
|
-@RestController
|
|
|
|
|
-@RequestMapping(MdConstants.API_PREFIX + "/collections/{collId}")
|
|
|
|
|
-public class MdDocsController {
|
|
|
|
|
|
|
+@RestController("MdDocsController")
|
|
|
|
|
+@RequestMapping(MdConstants.API_PREFIX + "/collections/{coll}")
|
|
|
|
|
+public class DocController {
|
|
|
private static final org.slf4j.Logger log
|
|
private static final org.slf4j.Logger log
|
|
|
= org.slf4j.LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
|
|
= org.slf4j.LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
|
|
|
|
|
|
|
@@ -88,7 +85,7 @@ public class MdDocsController {
|
|
|
//@PostMapping("/upload")
|
|
//@PostMapping("/upload")
|
|
|
//objectPath 如果以"/"结尾就是path,否则是文件名
|
|
//objectPath 如果以"/"结尾就是path,否则是文件名
|
|
|
@PostMapping("/mds")
|
|
@PostMapping("/mds")
|
|
|
- public R<Map<String, Object>> upload(@PathVariable String collId,
|
|
|
|
|
|
|
+ public R<Map<String, Object>> upload(@PathVariable String coll,
|
|
|
@RequestParam("file") MultipartFile file,
|
|
@RequestParam("file") MultipartFile file,
|
|
|
@RequestParam Map<String, String> params
|
|
@RequestParam Map<String, String> params
|
|
|
) {
|
|
) {
|
|
@@ -97,7 +94,7 @@ public class MdDocsController {
|
|
|
//System.out.println("file = " + file.getOriginalFilename());
|
|
//System.out.println("file = " + file.getOriginalFilename());
|
|
|
log.info("上传文件: {}, taskId: {}", file.getOriginalFilename(), taskId);
|
|
log.info("上传文件: {}, taskId: {}", file.getOriginalFilename(), taskId);
|
|
|
try {
|
|
try {
|
|
|
- Map<String, Object> ret = mdDocsService.processAsyncDirect(collId, taskId, file, params);
|
|
|
|
|
|
|
+ Map<String, Object> ret = mdDocsService.processAsyncDirect(coll, taskId, file, params);
|
|
|
return R.data(ret);
|
|
return R.data(ret);
|
|
|
} catch (FileAlreadyExistsException e) {
|
|
} catch (FileAlreadyExistsException e) {
|
|
|
log.error("上传文件: {} 失败, taskId: {}", file.getOriginalFilename(), taskId);
|
|
log.error("上传文件: {} 失败, taskId: {}", file.getOriginalFilename(), taskId);
|
|
@@ -109,7 +106,7 @@ public class MdDocsController {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
@DeleteMapping("/mds/{gid}")
|
|
@DeleteMapping("/mds/{gid}")
|
|
|
- public R<?> delete(@PathVariable String collId, @PathVariable String gid
|
|
|
|
|
|
|
+ public R<Map> delete(@PathVariable String coll, @PathVariable String gid
|
|
|
) throws Throwable {
|
|
) throws Throwable {
|
|
|
//String taskId = UUID.randomUUID().toString();
|
|
//String taskId = UUID.randomUUID().toString();
|
|
|
//System.out.println("taskId = " + taskId);
|
|
//System.out.println("taskId = " + taskId);
|
|
@@ -118,23 +115,23 @@ public class MdDocsController {
|
|
|
//taskStatusManager.putProcessing(taskId, new TaskStatus(collId, taskId, "处理中", "", System.currentTimeMillis(), 0));
|
|
//taskStatusManager.putProcessing(taskId, new TaskStatus(collId, taskId, "处理中", "", System.currentTimeMillis(), 0));
|
|
|
//fileProcessingService.processAsyncDirect(collId, taskId, file, params);
|
|
//fileProcessingService.processAsyncDirect(collId, taskId, file, params);
|
|
|
//System.out.println("params = " + params);
|
|
//System.out.println("params = " + params);
|
|
|
- int deleted = mdDocsService.deleteByMdid(collId, gid);
|
|
|
|
|
|
|
+ int deleted = mdDocsService.deleteByMdid(coll, gid);
|
|
|
log.info("删除文件: {}", gid);
|
|
log.info("删除文件: {}", gid);
|
|
|
//log.info("taskId = " + taskId);
|
|
//log.info("taskId = " + taskId);
|
|
|
return R.data(Map.of("deleted", deleted));
|
|
return R.data(Map.of("deleted", deleted));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
@GetMapping("/mds/{id}")
|
|
@GetMapping("/mds/{id}")
|
|
|
- public R<?> getById(@PathVariable String collId, @PathVariable String id
|
|
|
|
|
|
|
+ public R<GBaseKeyValue> getById(@PathVariable String coll, @PathVariable String id
|
|
|
) throws Throwable {
|
|
) throws Throwable {
|
|
|
- GBaseKeyValue ret = mdDocsService.findByMdid(collId, id);
|
|
|
|
|
|
|
+ GBaseKeyValue ret = mdDocsService.findByMdid(coll, id);
|
|
|
return R.data(ret);
|
|
return R.data(ret);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
@GetMapping("/mds/by-name")
|
|
@GetMapping("/mds/by-name")
|
|
|
- public R<?> getByName(@PathVariable String collId, @RequestParam("name") String name
|
|
|
|
|
|
|
+ public R<GBaseKeyValue> getByName(@PathVariable String coll, @RequestParam("name") String name
|
|
|
) throws Throwable {
|
|
) throws Throwable {
|
|
|
- GBaseKeyValue ret = mdDocsService.findByName(collId, name);
|
|
|
|
|
|
|
+ GBaseKeyValue ret = mdDocsService.findByName(coll, name);
|
|
|
return R.data(ret);
|
|
return R.data(ret);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -150,8 +147,8 @@ public class MdDocsController {
|
|
|
// }
|
|
// }
|
|
|
|
|
|
|
|
@DeleteMapping("/mds/all")
|
|
@DeleteMapping("/mds/all")
|
|
|
- public R<Map<String, Object>> deleteAll(@PathVariable String collId) throws Exception {
|
|
|
|
|
- long removed = mdDocsService.deleteAll(collId);
|
|
|
|
|
|
|
+ public R<Map<String, Object>> deleteAll(@PathVariable String coll) throws Exception {
|
|
|
|
|
+ long removed = mdDocsService.deleteAll(coll);
|
|
|
return R.data(Map.of("deleted", removed));
|
|
return R.data(Map.of("deleted", removed));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -166,21 +163,13 @@ public class MdDocsController {
|
|
|
// return ResponseEntity.ok(status);
|
|
// return ResponseEntity.ok(status);
|
|
|
// }
|
|
// }
|
|
|
|
|
|
|
|
- public R<TaskStatus> getStatus(@PathVariable String collId, @PathVariable String taskId) {
|
|
|
|
|
|
|
+ public R<TaskStatus> getStatus(@PathVariable String coll, @PathVariable String taskId) {
|
|
|
TaskStatus status = taskStatusManager.get(taskId);
|
|
TaskStatus status = taskStatusManager.get(taskId);
|
|
|
return R.data(status);
|
|
return R.data(status);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
@DeleteMapping("/upload-tasks/{taskId}")
|
|
@DeleteMapping("/upload-tasks/{taskId}")
|
|
|
-// public ResponseEntity<Map<String, Object>> deleteStatus(@PathVariable String taskId) {
|
|
|
|
|
-// boolean removed = taskStatusManager.delete(taskId);
|
|
|
|
|
-// return ResponseEntity.ok(Map.of(
|
|
|
|
|
-// "taskId", taskId,
|
|
|
|
|
-// "removed", removed
|
|
|
|
|
-// ));
|
|
|
|
|
-// }
|
|
|
|
|
-
|
|
|
|
|
- public R<Map<String, Object>> deleteStatus(@PathVariable String taskId) {
|
|
|
|
|
|
|
+ public R<Map<String, Object>> deleteStatus(@PathVariable String coll, @PathVariable String taskId) {
|
|
|
boolean removed = taskStatusManager.delete(taskId);
|
|
boolean removed = taskStatusManager.delete(taskId);
|
|
|
return R.data(Map.of(
|
|
return R.data(Map.of(
|
|
|
"taskId", taskId,
|
|
"taskId", taskId,
|
|
@@ -216,27 +205,38 @@ public class MdDocsController {
|
|
|
// }
|
|
// }
|
|
|
|
|
|
|
|
@PostMapping("/mds/locate")
|
|
@PostMapping("/mds/locate")
|
|
|
- public R<?> locateText(
|
|
|
|
|
- @PathVariable String collId,
|
|
|
|
|
|
|
+ public R<Map<String, Object>> locateText(
|
|
|
|
|
+ @PathVariable String coll,
|
|
|
@RequestBody Map<String, Object> req
|
|
@RequestBody Map<String, Object> req
|
|
|
) throws Throwable {
|
|
) throws Throwable {
|
|
|
- Map<String, Object> r = mdDocsService.locateText(collId, req);
|
|
|
|
|
|
|
+ Map<String, Object> r = mdDocsService.locateText(coll, req);
|
|
|
return R.data(r);
|
|
return R.data(r);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
@PostMapping("/mds/locateByHeadings")
|
|
@PostMapping("/mds/locateByHeadings")
|
|
|
- public R<?> locateByHeadings(
|
|
|
|
|
- @PathVariable String collId,
|
|
|
|
|
|
|
+ public R<Map<String, Object>> locateByHeadings(
|
|
|
|
|
+ @PathVariable String coll,
|
|
|
@RequestBody Map<String, Object> req
|
|
@RequestBody Map<String, Object> req
|
|
|
) throws Throwable {
|
|
) throws Throwable {
|
|
|
- Map<String, Object> r = mdDocsService.locateByHeading(collId, req);
|
|
|
|
|
|
|
+ Map<String, Object> r = mdDocsService.locateByHeading(coll, req);
|
|
|
return R.data(r);
|
|
return R.data(r);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ @PostMapping("/mds/sectionByChunkId")
|
|
|
|
|
+ public R<Map<String, Object>> getSectionByChunkId(
|
|
|
|
|
+ @PathVariable String coll,
|
|
|
|
|
+ @RequestBody Map<String, Object> req
|
|
|
|
|
+ ) throws Throwable {
|
|
|
|
|
+ Map<String, Object> r = mdDocsService.getSectionByChunkId(coll, req);
|
|
|
|
|
+ return R.data(r);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
@GetMapping("/all")
|
|
@GetMapping("/all")
|
|
|
- public R<List<GBaseKeyValue>> getAll(@PathVariable String collId) throws Throwable {
|
|
|
|
|
- List<GBaseKeyValue> ret = mdDocsService.findAll(collId);
|
|
|
|
|
|
|
+ public R<List<GBaseKeyValue>> getAll(@PathVariable String coll) throws Throwable {
|
|
|
|
|
+ List<GBaseKeyValue> ret = mdDocsService.findAll(coll);
|
|
|
return R.data(ret);
|
|
return R.data(ret);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -245,67 +245,67 @@ public class MdDocsController {
|
|
|
//单个 metadata 字段 /collections/{collId}/mds/{mdId}/metadata/{key}
|
|
//单个 metadata 字段 /collections/{collId}/mds/{mdId}/metadata/{key}
|
|
|
|
|
|
|
|
@GetMapping("/mds/{mdId}/metadata")
|
|
@GetMapping("/mds/{mdId}/metadata")
|
|
|
- public R<GBaseKeyValue> getMetadataByMdid(@PathVariable String collId, @PathVariable String mdId) throws Throwable {
|
|
|
|
|
- GBaseKeyValue ret = mdDocsService.findByMdid(collId, mdId);
|
|
|
|
|
|
|
+ public R<GBaseKeyValue> getMetadataByMdid(@PathVariable String coll, @PathVariable String mdId) throws Throwable {
|
|
|
|
|
+ GBaseKeyValue ret = mdDocsService.findByMdid(coll, mdId);
|
|
|
return R.data(ret);
|
|
return R.data(ret);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
@GetMapping("/mds/{mdId}/metadata/{key}")
|
|
@GetMapping("/mds/{mdId}/metadata/{key}")
|
|
|
- public R getMetadataByKey(@PathVariable String collId, @PathVariable String mdId,
|
|
|
|
|
|
|
+ public R getMetadataByKey(@PathVariable String coll, @PathVariable String mdId,
|
|
|
@PathVariable String key
|
|
@PathVariable String key
|
|
|
) throws Throwable {
|
|
) throws Throwable {
|
|
|
- Object ret = mdDocsService.getMetadataByKey(collId, mdId, key);
|
|
|
|
|
|
|
+ Object ret = mdDocsService.getMetadataByKey(coll, mdId, key);
|
|
|
return R.data(ret);
|
|
return R.data(ret);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
@PatchMapping("/mds/{mdId}/metadata")
|
|
@PatchMapping("/mds/{mdId}/metadata")
|
|
|
- public R patchMetadata(@PathVariable String collId, @PathVariable String mdId,
|
|
|
|
|
|
|
+ public R patchMetadata(@PathVariable String coll, @PathVariable String mdId,
|
|
|
@RequestBody GBaseKeyValue data
|
|
@RequestBody GBaseKeyValue data
|
|
|
) throws Throwable {
|
|
) throws Throwable {
|
|
|
- Object ret = mdDocsService.patchMetadata(collId, mdId, data);
|
|
|
|
|
|
|
+ Object ret = mdDocsService.patchMetadata(coll, mdId, data);
|
|
|
return R.data(ret);
|
|
return R.data(ret);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
@GetMapping("/mds/{mdId}/attributes")
|
|
@GetMapping("/mds/{mdId}/attributes")
|
|
|
- public R getAttributeByKey(@PathVariable String collId, @PathVariable String mdId
|
|
|
|
|
|
|
+ public R getAttributeByKey(@PathVariable String coll, @PathVariable String mdId
|
|
|
) throws Throwable {
|
|
) throws Throwable {
|
|
|
- Object ret = mdDocsService.getAttributes(collId, mdId);
|
|
|
|
|
|
|
+ Object ret = mdDocsService.getAttributes(coll, mdId);
|
|
|
return R.data(ret);
|
|
return R.data(ret);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
@GetMapping("/mds/{mdId}/attributes/{key}")
|
|
@GetMapping("/mds/{mdId}/attributes/{key}")
|
|
|
- public R getAttributeByKey(@PathVariable String collId, @PathVariable String mdId,
|
|
|
|
|
|
|
+ public R getAttributeByKey(@PathVariable String coll, @PathVariable String mdId,
|
|
|
@PathVariable String key
|
|
@PathVariable String key
|
|
|
) throws Throwable {
|
|
) throws Throwable {
|
|
|
- Object ret = mdDocsService.getAttributeByKey(collId, mdId, key);
|
|
|
|
|
|
|
+ Object ret = mdDocsService.getAttributeByKey(coll, mdId, key);
|
|
|
return R.data(ret);
|
|
return R.data(ret);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
@PatchMapping("/mds/{mdId}/attributes")
|
|
@PatchMapping("/mds/{mdId}/attributes")
|
|
|
- public R patchAttributes(@PathVariable String collId, @PathVariable String mdId,
|
|
|
|
|
|
|
+ public R patchAttributes(@PathVariable String coll, @PathVariable String mdId,
|
|
|
@RequestBody GBaseKeyValue data
|
|
@RequestBody GBaseKeyValue data
|
|
|
) throws Throwable {
|
|
) throws Throwable {
|
|
|
- Object ret = mdDocsService.patchAttributes(collId, mdId, data);
|
|
|
|
|
|
|
+ Object ret = mdDocsService.patchAttributes(coll, mdId, data);
|
|
|
return R.data(ret);
|
|
return R.data(ret);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
@DeleteMapping("/mds/{mdId}/attributes/{key}")
|
|
@DeleteMapping("/mds/{mdId}/attributes/{key}")
|
|
|
- public R deleteAttributeByKey(@PathVariable String collId, @PathVariable String mdId,
|
|
|
|
|
|
|
+ public R deleteAttributeByKey(@PathVariable String coll, @PathVariable String mdId,
|
|
|
@PathVariable String key
|
|
@PathVariable String key
|
|
|
) throws Throwable {
|
|
) throws Throwable {
|
|
|
- Object ret = mdDocsService.deleteAttributeByKey(collId, mdId, key);
|
|
|
|
|
|
|
+ Object ret = mdDocsService.deleteAttributeByKey(coll, mdId, key);
|
|
|
return R.data(ret);
|
|
return R.data(ret);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
@PostMapping("/mds/{mdId}/rename")
|
|
@PostMapping("/mds/{mdId}/rename")
|
|
|
- public R<?> rename(@PathVariable String collId, @PathVariable String mdId, @RequestBody Map<String, Object> req
|
|
|
|
|
|
|
+ public R<Map<String, Object>> rename(@PathVariable String coll, @PathVariable String mdId, @RequestBody Map<String, Object> req
|
|
|
) throws Throwable {
|
|
) throws Throwable {
|
|
|
- Map<String, Object> r = mdDocsService.rename(collId, mdId, req);
|
|
|
|
|
|
|
+ Map<String, Object> r = mdDocsService.rename(coll, mdId, req);
|
|
|
return R.data(r);
|
|
return R.data(r);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
@DeleteMapping("/mds/{gid}/cascade")
|
|
@DeleteMapping("/mds/{gid}/cascade")
|
|
|
- public R<?> deleteCascade(@PathVariable String collId, @PathVariable String gid
|
|
|
|
|
|
|
+ public R<Map<String, Object>> deleteCascade(@PathVariable String coll, @PathVariable String gid
|
|
|
) throws Throwable {
|
|
) throws Throwable {
|
|
|
//String taskId = UUID.randomUUID().toString();
|
|
//String taskId = UUID.randomUUID().toString();
|
|
|
//System.out.println("taskId = " + taskId);
|
|
//System.out.println("taskId = " + taskId);
|
|
@@ -314,14 +314,14 @@ public class MdDocsController {
|
|
|
//taskStatusManager.putProcessing(taskId, new TaskStatus(collId, taskId, "处理中", "", System.currentTimeMillis(), 0));
|
|
//taskStatusManager.putProcessing(taskId, new TaskStatus(collId, taskId, "处理中", "", System.currentTimeMillis(), 0));
|
|
|
//fileProcessingService.processAsyncDirect(collId, taskId, file, params);
|
|
//fileProcessingService.processAsyncDirect(collId, taskId, file, params);
|
|
|
//System.out.println("params = " + params);
|
|
//System.out.println("params = " + params);
|
|
|
- int deleted = mdDocsService.deleteCascadeByMdid(collId, gid);
|
|
|
|
|
|
|
+ int deleted = mdDocsService.deleteCascadeByMdid(coll, gid);
|
|
|
log.info("删除文件,mdid: {}", gid);
|
|
log.info("删除文件,mdid: {}", gid);
|
|
|
//log.info("taskId = " + taskId);
|
|
//log.info("taskId = " + taskId);
|
|
|
return R.data(Map.of("deleted", deleted));
|
|
return R.data(Map.of("deleted", deleted));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
@DeleteMapping("/mds/{gid}/indexes")
|
|
@DeleteMapping("/mds/{gid}/indexes")
|
|
|
- public R<?> deleteIndexes(@PathVariable String collId, @PathVariable String gid
|
|
|
|
|
|
|
+ public R<Map<String, Object>> deleteIndexes(@PathVariable String coll, @PathVariable String gid
|
|
|
) throws Throwable {
|
|
) throws Throwable {
|
|
|
//String taskId = UUID.randomUUID().toString();
|
|
//String taskId = UUID.randomUUID().toString();
|
|
|
//System.out.println("taskId = " + taskId);
|
|
//System.out.println("taskId = " + taskId);
|
|
@@ -330,7 +330,7 @@ public class MdDocsController {
|
|
|
//taskStatusManager.putProcessing(taskId, new TaskStatus(collId, taskId, "处理中", "", System.currentTimeMillis(), 0));
|
|
//taskStatusManager.putProcessing(taskId, new TaskStatus(collId, taskId, "处理中", "", System.currentTimeMillis(), 0));
|
|
|
//fileProcessingService.processAsyncDirect(collId, taskId, file, params);
|
|
//fileProcessingService.processAsyncDirect(collId, taskId, file, params);
|
|
|
//System.out.println("params = " + params);
|
|
//System.out.println("params = " + params);
|
|
|
- int deleted = mdDocsService.deleteIndexesByMdid(collId, gid);
|
|
|
|
|
|
|
+ int deleted = mdDocsService.deleteIndexesByMdid(coll, gid);
|
|
|
log.info("删除索引文件,mdid: {}", gid);
|
|
log.info("删除索引文件,mdid: {}", gid);
|
|
|
//log.info("taskId = " + taskId);
|
|
//log.info("taskId = " + taskId);
|
|
|
return R.data(Map.of("deleted", deleted));
|
|
return R.data(Map.of("deleted", deleted));
|