All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.bimface.sdk.interfaces.BdfsInterface Maven / Gradle / Ivy

The newest version!
package com.bimface.sdk.interfaces;

import com.bimface.bdfs.bean.*;
import com.bimface.bdfs.bean.dto.*;
import com.bimface.bdfs.bean.dto.v1.FileItemDTOV1;
import com.bimface.bdfs.bean.dto.v1.multipartupload.*;
import com.bimface.page.PagedList;
import com.bimface.sdk.bean.request.CreateFolderRequest;
import com.bimface.sdk.bean.request.FileItemQueryRequest;
import com.bimface.sdk.bean.request.ProjectCreateRequest;
import com.bimface.sdk.bean.response.FileItemUploadStatusBean;
import com.glodon.paas.foundation.restclient.RESTResponse;
import okhttp3.RequestBody;
import retrofit2.Call;
import retrofit2.http.*;

import java.util.List;

/**
 * Created by tangj-i on 2023/3/27.
 */
public interface BdfsInterface {

    String BASE_HUB_URL = "domain/v1/hubs";

    String BASE_PROJECT_URL = "domain/v1/hubs/{hubId}/projects";

    String BASE_FILEITEM_URL = "data/v1/projects";

    /**
     * 获取hub列表
     */
    @GET(BASE_HUB_URL + "")
    Call>> getHubList(@Query("name") String name,
                                                @Query("tenantCode") String tenantCode,
                                                @Query("info") String info,
                                                @Query("dateTimeFrom") String dateTimeFrom,
                                                @Query("dateTimeTo") String dateTimeTo,
                                                @Header("Authorization") String token);

    /**
     * 获取Hub Meta信息
     */
    @GET(BASE_HUB_URL + "/{hubId}")
    Call> getHubMeta(@Path("hubId") Long hubId,
                                          @Header("Authorization") String token);

    /**
     * 创建project
     */
    @POST(BASE_PROJECT_URL + "")
    Call> createProject(@Path("hubId") String hubId,
                                                 @Body ProjectCreateRequest request,
                                                 @Header("Authorization") String token);


    /**
     * 获取project列表
     */
    @GET(BASE_PROJECT_URL + "")
    Call>> getProjectList(@Path("hubId") String hubId,
                                                        @Query(value = "name") String name,
                                                        @Query(value = "useFuzzySearch") Boolean useFuzzySearch,
                                                        @Header("Authorization") String token);

    /**
     * 获取项目信息
     *
     * @param hubId     hubId
     * @param projectId 项目Id
     * @return
     */
    @GET(BASE_PROJECT_URL + "/{projectId}")
    Call> getProjectMeta(@Path("hubId") String hubId,
                                                  @Path("projectId") String projectId,
                                                  @Header("Authorization") String token);

    /**
     * 删除项目
     *
     * @param hubId     hubId
     * @param projectId 项目Id
     * @return
     */
    @DELETE(BASE_PROJECT_URL + "/{projectId}")
    Call> deleteProject(@Path("hubId") String hubId,
                                                 @Path("projectId") String projectId,
                                                 @Header("Authorization") String token);

    /**
     * 更新项目信息
     *
     * @param hubId            hubId
     * @param projectId        项目Id
     * @param updateProjectReq 更新项目信息请求体
     * @return
     */
    @PATCH(BASE_PROJECT_URL + "/{projectId}")
    Call> updateProject(@Path("hubId") String hubId,
                                                 @Path("projectId") String projectId,
                                                 @Body UpdateProjectRequest updateProjectReq,
                                                 @Header("Authorization") String token);

    /**
     * 获取项目根文件夹信息
     *
     * @param hubId     hubId
     * @param projectId 项目Id
     * @return
     */
    @GET("v1/domain/hubs/{hub-id}/projects/{project-id}/root-folder")
    Call> getProjectRootFolderInfo(@Path("hub-id") String hubId,
                                                                     @Path("project-id") String projectId,
                                                                     @Header("Authorization") String token);

    /**
     * 指定目录创建文件夹
     */
    @POST(BASE_FILEITEM_URL + "/{projectId}/folders")
    Call> createFolder(@Path("projectId") String projectId,
                                                 @Body CreateFolderRequest createFolderRequest,
                                                 @Header("Authorization") String token);

    /**
     * 获取文件夹信息
     */
    @GET(BASE_FILEITEM_URL + "/{projectId}/folders")
    Call> getFolder(@Path("projectId") String projectId,
                                              @Query("folderId") String folderId,
                                              @Query("path") String path,
                                              @Header("Authorization") String token);

    /**
     * 查询文件列表
     * 获取文件夹下的所有文件
     *
     * @param projectId
     * @param queryRequest
     * @return
     */
    @POST(BASE_FILEITEM_URL + "/{projectId}/folders/contents")
    Call>> getChildrenFileItems(@Path("projectId") String projectId,
                                                                    @Body FileItemQueryRequest queryRequest,
                                                                    @Header("Authorization") String token);


    /**
     * 获取文件夹路径
     *
     * @param projectId
     * @param folderId
     * @param token
     * @return
     */
    @GET(BASE_FILEITEM_URL + "/{projectId}/folders/{folderId}/path")
    Call> getFolderPathById(@Path("projectId") String projectId,
                                                 @Path("folderId") String folderId,
                                                 @Header("Authorization") String token);

    /**
     * 获取父文件夹
     *
     * @param projectId
     * @param folderId
     * @param token
     * @return
     */
    @GET(BASE_FILEITEM_URL + "/{projectId}/folders/{folderId}/parent")
    Call> getParent(@Path("projectId") String projectId,
                                              @Path("folderId") String folderId,
                                              @Header("Authorization") String token);

    /**
     * 文件夹重命名
     * 根据folderId(path)更新文件夹
     *
     * @param projectId       项目id
     * @param updateFolderReq 更新文件夹请求体
     * @param token
     * @return
     */
    @PATCH(BASE_FILEITEM_URL + "/{projectId}/folders")
    Call> updateFolder(@Path("projectId") String projectId,
                                                 @Body UpdateFolderRequest updateFolderReq,
                                                 @Header("Authorization") String token);

    /**
     * 删除文件夹
     * 根据folderId(path)删除文件夹
     *
     * @param projectId 项目id
     * @param folderId  文件夹id(folderId和path,必须二选一填入)
     * @param path      文件夹路径,使用URL编码(UTF-8),最多256个字符(folderId和path,必须二选一填入)
     * @param token
     * @return
     */
    @DELETE(BASE_FILEITEM_URL + "/{projectId}/folders")
    Call> deleteFolder(@Path("projectId") String projectId,
                                            @Query("folderId") String folderId,
                                            @Query("path") String path,
                                            @Header("Authorization") String token);

    /**
     * 上传文件流
     *
     * @param projectId
     * @param parentId
     * @param parentPath
     * @param name
     * @param sourceId
     * @param length
     * @param fileBody
     * @param token
     * @return
     */
    @POST(BASE_FILEITEM_URL + "/{projectId}/fileItems")
    Call> uploadFileItem(@Path("projectId") String projectId,
                                                   @Query("parentId") String parentId,
                                                   @Query("parentPath") String parentPath,
                                                   @Query("name") String name,
                                                   @Query("sourceId") String sourceId,
                                                   @Query("length") Long length,
                                                   @Body RequestBody fileBody,
                                                   @Header("Authorization") String token);

    /**
     * 指定外部文件url方式上传
     *
     * @param projectId  项目ID
     * @param parentId   父文件夹Id
     * @param parentPath 父文件夹路径
     * @param name       文件名称
     * @param sourceId   调用方的文件源ID,不能重复
     * @param url        sourceUrl
     * @param etag       文件etag
     * @param maxLength  maxLength
     * @param token
     * @return
     */
    @POST(BASE_FILEITEM_URL + "/{projectId}/fileItems/sourceUrl")
    Call> uploadByUrl(@Path("projectId") String projectId,
                                                @Query("parentId") String parentId,
                                                @Query("parentPath") String parentPath,
                                                @Query("name") String name,
                                                @Query("sourceId") String sourceId,
                                                @Query("url") String url,
                                                @Query("etag") String etag,
                                                @Query("maxLength") Long maxLength,
                                                @Header("Authorization") String token);

    /**
     * 创建追加文件
     *
     * @param projectId  项目ID
     * @param parentId   父文件夹Id
     * @param parentPath 父文件夹路径
     * @param name       文件名称
     * @param length     文件流的长度
     * @param sourceId   调用方的文件源ID,不能重复
     * @param token
     * @return
     */
    @POST(BASE_FILEITEM_URL + "/{projectId}/fileItems/appendFile")
    Call> createAppendFile(@Path("projectId") String projectId,
                                                               @Query("parentId") String parentId,
                                                               @Query("parentPath") String parentPath,
                                                               @Query("name") String name,
                                                               @Query("length") Long length,
                                                               @Query("sourceId") String sourceId,
                                                               @Header("Authorization") String token);

    /**
     * 获取追加文件信息
     * 获取FileItemAppendFile
     *
     * @param projectId    项目ID
     * @param appendFileId 追加上传ID
     * @param token
     * @return
     */
    @GET(BASE_FILEITEM_URL + "/{projectId}/fileItems/appendFile")
    Call> getAppendFile(@Path("projectId") String projectId,
                                                            @Query("appendFileId") String appendFileId,
                                                            @Header("Authorization") String token);

    /**
     * 追加上传文件
     *
     * @param projectId    项目ID
     * @param appendFileId 父文件夹Id
     * @param position     父文件夹路径
     * @param token
     * @return
     */
    @POST(BASE_FILEITEM_URL + "/{projectId}/fileItems/appendUpload")
    Call> appendUpload(@Path("projectId") String projectId,
                                                           @Query("appendFileId") String appendFileId,
                                                           @Query("position") String position,
                                                           @Body RequestBody fileBody,
                                                           @Header("Authorization") String token);

    /**
     * 复制文件
     *
     * @param projectId       项目ID
     * @param copyFileRequest 复制文件请求体
     * @param token
     * @return
     */
    @POST(BASE_FILEITEM_URL + "/{projectId}/fileItems/copyItem")
    Call>> copyFile(@Path("projectId") String projectId,
                                                   @Body CopyFileRequest copyFileRequest,
                                                   @Header("Authorization") String token);

    /**
     * 获取文件直传的policy凭证
     * 获取上传file的policy
     *
     * @param projectId  项目ID
     * @param parentId   父文件ID
     * @param parentPath 父文件路径
     * @param name       文件名称
     * @param sourceId   调用方的文件源ID
     * @param maxLength  文件流的长度
     * @param token
     * @return
     */
    @GET(BASE_FILEITEM_URL + "/{projectId}/fileItems/policy")
    Call> getFileItemPolicy(@Path("projectId") String projectId,
                                                               @Query("parentId") String parentId,
                                                               @Query("parentPath") String parentPath,
                                                               @Query("name") String name,
                                                               @Query("sourceId") String sourceId,
                                                               @Query("maxLength") Long maxLength,
                                                               @Header("Authorization") String token);

    /**
     * 获取fileItem Meta
     * 获取文件信息
     *
     * @param projectId
     * @param fileItemId
     * @param path
     * @param withItemSource
     * @return
     */
    @GET(BASE_FILEITEM_URL + "/{projectId}/fileItems/meta")
    Call> getFileItemMeta(@Path("projectId") String projectId,
                                                    @Query("fileItemId") String fileItemId,
                                                    @Query("path") String path,
                                                    @Query("withItemSource") Boolean withItemSource,
                                                    @Header("Authorization") String token);

    /**
     * 获取上传状态
     * 获取文件状态
     *
     * @param projectId
     * @param fileItemId
     * @param path
     * @param token
     * @return
     */
    @GET(BASE_FILEITEM_URL + "/{projectId}/fileItems/status")
    Call> getFileItemUploadStatus(@Path("projectId") String projectId,
                                                                         @Query("fileItemId") String fileItemId,
                                                                         @Query("path") String path,
                                                                         @Header("Authorization") String token);


    /**
     * 获取下载url
     * 源文件下载
     *
     * @param projectId
     * @param itemId
     * @param path
     * @param expireTime
     * @param token
     * @return
     */
    @GET(BASE_FILEITEM_URL + "/{projectId}/fileItems/downloadUrl")
    Call> getFileItemSignedUrl(@Path("projectId") String projectId,
                                                    @Query("fileItemId") String itemId,
                                                    @Query("path") String path,
                                                    @Query("expireTime") Integer expireTime,
                                                    @Header("Authorization") String token);

    /**
     * 获取文件路径
     * 根据fileItemId获取fileItemPath
     *
     * @param projectId  项目ID
     * @param fileItemId 文件ID
     * @return
     */
    @GET(BASE_FILEITEM_URL + "/{projectId}/fileItems/{fileItemId}/fileItemsPath")
    Call> getFileItemPathById(@Path("projectId") String projectId,
                                                   @Path("fileItemId") String fileItemId,
                                                   @Header("Authorization") String token);

    /**
     * 打包下载压缩文件
     *
     * @param projectId   项目ID
     * @param fileItemIds 文件ID
     * @return
     */
    @GET(BASE_FILEITEM_URL + "/{projectId}/fileItems/downloadZip")
    Call> downloadFiles(@Path("projectId") String projectId,
                                             @Query("fileItemIds") List fileItemIds,
                                             @Header("Authorization") String token);

    /**
     * 移动文件位置
     *
     * @param projectId       项目ID
     * @param moveFileRequest 移动文件请求体
     * @return
     */
    @PATCH(BASE_FILEITEM_URL + "/{projectId}/fileItems/moveItem")
    Call>> moveFile(@Path("projectId") String projectId,
                                                   @Body MoveFileRequest moveFileRequest,
                                                   @Header("Authorization") String token);

    /**
     * 文件重命名
     *
     * @param projectId         项目ID
     * @param updateFileRequest 更新文件请求体
     * @return
     */
    @PATCH(BASE_FILEITEM_URL + "/{projectId}/fileItems")
    Call> fileRename(@Path("projectId") String projectId,
                                               @Body UpdateFileRequest updateFileRequest,
                                               @Header("Authorization") String token);

    /**
     * 批量删除文件
     *
     * @param projectId
     * @param fileItemIds
     * @param token
     * @return
     */
    @HTTP(method = "DELETE", path = BASE_FILEITEM_URL + "/{projectId}/fileItems", hasBody = true)
    Call> batchDeleteFileItems(@Path("projectId") String projectId,
                                                    @Body List fileItemIds,
                                                    @Header("Authorization") String token);

    /**
     * 创建分片上传任务
     *
     * @param projectId                  项目id
     * @param initMultipartUploadRequest 初始化分片上传的请求体
     * @param token                      Authorization
     * @return InitMultipartUploadDTO
     */
    @POST("v1/data/projects/{project-id}/file-items/multi-part-files")
    Call> initMultipartUpload(@Path("project-id") String projectId,
                                                                   @Body InitMultipartUploadRequest initMultipartUploadRequest,
                                                                   @Header("Authorization") String token);

    /**
     * 获取分片上传url
     *
     * @param projectId                 项目 id
     * @param multipartSignedUrlRequest 获取分片的 signedUrl的请求体
     * @return 生成的 signed url
     */
    @POST("v1/data/projects/{project-id}/file-items/multi-part-files/signed-url")
    Call> getMultipartSignedUrl(@Path("project-id") String projectId,
                                                     @Body MultipartSignedUrlRequest multipartSignedUrlRequest,
                                                     @Header("Authorization") String token);

    /**
     * 合并分片生成文件
     *
     * @param projectId                      项目 id
     * @param completeMultipartUploadRequest 完成分片上传的请求体
     * @return 返回生成的 FileItem
     */
    @POST("v1/data/projects/{project-id}/file-items/multi-part-files/merge")
    Call> completeMultiPartUpload(@Path("project-id") String projectId,
                                                              @Body CompleteMultipartUploadRequest completeMultipartUploadRequest,
                                                              @Header("Authorization") String token);

    /**
     * 终止分片上传任务
     *
     * @param projectId                   项目 id
     * @param abortMultipartUploadRequest 终止分片上传的请求体
     * @return 提示信息
     */
    @POST("v1/data/projects/{project-id}/file-items/multi-part-files/abort")
    Call> abortMultiPartUpload(@Path("project-id") String projectId,
                                                    @Body AbortMultipartUploadRequest abortMultipartUploadRequest,
                                                    @Header("Authorization") String token);

    /**
     * 获取所有版本文件信息
     *
     * @param projectId  项目ID
     * @param fileItemId 文件Id
     * @param path       文件路径
     * @param pageNo     开始页码
     * @param pageSize   每页大小
     * @return PagedList
     */
    @GET("data/v1/projects/{projectId}/fileItems/files")
    Call>> getAllVersions(@Path("projectId") String projectId,
                                                              @Query("fileItemId") String fileItemId,
                                                              @Query("path") String path,
                                                              @Query("pageNo") Integer pageNo,
                                                              @Query("pageSize") Integer pageSize,
                                                              @Header("Authorization") String token);

    /**
     * 上传版本文件
     *
     * @param projectId  项目ID
     * @param fileItemId 文件Id
     * @param path       文件路径
     * @param name       文件名称
     * @param length     文件长度
     * @param sourceId   调用方的文件源ID,不能重复
     * @return FileItemDTO
     */
    @POST("data/v1/projects/{projectId}/files")
    Call> createVersion(@Path("projectId") String projectId,
                                                  @Query("fileItemId") String fileItemId,
                                                  @Query("path") String path,
                                                  @Query("name") String name,
                                                  @Query("length") Long length,
                                                  @Query("sourceId") String sourceId,
                                                  @Body RequestBody fileBody,
                                                  @Header("Authorization") String token);

    /**
     * 获取新版本直传的policy凭证
     *
     * @param projectId  项目ID
     * @param fileItemId 文件Id
     * @param path       文件路径
     * @param name       文件名称
     * @param sourceId   调用方的文件源ID,不能重复
     * @param maxLength  文件流的长度
     * @return UploadPolicyResponse
     */
    @GET("data/v1/projects/{projectId}/files/policy")
    Call> getFilePolicy(@Path("projectId") String projectId,
                                                           @Query("fileItemId") String fileItemId,
                                                           @Query("path") String path,
                                                           @Query("name") String name,
                                                           @Query("sourceId") String sourceId,
                                                           @Query("maxLength") Long maxLength,
                                                           @Header("Authorization") String token);

    /**
     * 获取指定版本文件信息
     *
     * @param projectId      项目ID
     * @param fileId         文件版本Id
     * @param withFileSource 是否携带itemSource
     * @return FileItemDTO
     */
    @GET("data/v1/projects/{projectId}/files/{fileId}/meta")
    Call> getVersion(@Path("projectId") String projectId,
                                               @Path("fileId") String fileId,
                                               @Query("withFileSource") Boolean withFileSource,
                                               @Header("Authorization") String token);

    /**
     * 下载指定版本文件
     *
     * @param projectId  项目ID
     * @param fileId     文件版本Id
     * @param expireTime 有限期,默认3600s
     * @return String
     */
    @GET("data/v1/projects/{projectId}/files/{fileId}/downloadUrl")
    Call> getVersionSignedUrl(@Path("projectId") String projectId,
                                                   @Path("fileId") String fileId,
                                                   @Query("expireTime") Integer expireTime,
                                                   @Header("Authorization") String token);

    /**
     * 删除指定版本文件
     *
     * @param projectId 项目ID
     * @param fileIds   文件版本Id
     * @return String
     */
    @HTTP(method = "DELETE", path = "data/v1/projects/{projectId}/files", hasBody = true)
    Call> deleteVersion(@Path("projectId") String projectId,
                                             @Body List fileIds,
                                             @Header("Authorization") String token);

    /**
     * 获取成功上传的分片列表
     * @param projectId 项目ID
     * @param id 分片上传ID
     * @param token 访问令牌
     * @return 成功上传的分片列表
     */
    @GET("v1/data/projects/{project-id}/file-items/multi-part-files/upload-parts")
    Call> getSuccessUploadParts(@Path("project-id") String projectId,
                                             @Query("id") String id,
                                             @Header("Authorization") String token);
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy