diff --git a/datamanagement/source/api/foldersApi.ts b/datamanagement/source/api/foldersApi.ts index 1398d7e..ede648e 100644 --- a/datamanagement/source/api/foldersApi.ts +++ b/datamanagement/source/api/foldersApi.ts @@ -18,6 +18,7 @@ import { RelationshipLinks } from '../model'; import { RelationshipRefs } from '../model'; import { RelationshipRefsPayload } from '../model'; import { Search } from '../model'; +import { ComparisonTypes } from '../model'; /** * FoldersApi - axios parameter creator * @export @@ -487,46 +488,68 @@ export const FoldersApiAxiosParamCreator = function (apsConfiguration?: IApsConf * @param {*} [options] Override http request option. * @throws {RequiredError} */ - getFolderSearch: async (accessToken: string, projectId: string, folderId: string, filterFieldName?: string, filter?: Array, pageNumber?: number, options: ApsServiceRequestConfig = {}): Promise => { - // verify required parameter 'projectId' is not null or undefined - assertParamExists('getFolderSearch', 'projectId', projectId) - // verify required parameter 'folderId' is not null or undefined - assertParamExists('getFolderSearch', 'folderId', folderId) + getFolderSearch: async ( + accessToken: string, + projectId: string, + folderId: string, + filters?: { field: string; operator?: ComparisonTypes; value: string }[], // Operator is optional + pageNumber?: number, + options: ApsServiceRequestConfig = {} + ): Promise => { + // Verify required parameters + assertParamExists('getFolderSearch', 'projectId', projectId); + assertParamExists('getFolderSearch', 'folderId', folderId); + + // Construct the endpoint path const localVarPath = `/data/v1/projects/{project_id}/folders/{folder_id}/search` .replace(`{${"project_id"}}`, encodeURIComponent(String(projectId))) .replace(`{${"folder_id"}}`, encodeURIComponent(String(folderId))); const localVarUrlObj = new URL(localVarPath, apsConfiguration.baseAddress); + + // Base options let baseOptions; if (apsConfiguration) { baseOptions = apsConfiguration.baseOptions; } - - const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + + // Request options + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options }; const localVarHeaderParameter = {} as any; const localVarQueryParameter = {} as any; - - await setBearerAuthToObject(localVarHeaderParameter, accessToken) - - if (filter) { - localVarQueryParameter[`filter[${filterFieldName}]`] = filter; + + // Set Bearer Auth + await setBearerAuthToObject(localVarHeaderParameter, accessToken); + + // Process filters + if (filters && filters.length > 0) { + filters.forEach(filter => { + const operator = filter.operator || ComparisonTypes.EqualTo; // Default to 'eq' if no operator is provided + const filterKey = `filter[${filter.field}]-${operator}`; + localVarQueryParameter[filterKey] = filter.value; + }); } - + + // Page number if (pageNumber !== undefined) { localVarQueryParameter['page[number]'] = pageNumber; } - - - + + // Set headers localVarHeaderParameter['User-Agent'] = 'APS SDK/DATA-MANAGEMENT/TypeScript/1.0.0'; setSearchParams(localVarUrlObj, localVarQueryParameter); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - + const headersFromBaseOptions = baseOptions?.headers ?? {}; + localVarRequestOptions.headers = { + ...localVarHeaderParameter, + ...headersFromBaseOptions, + ...options.headers, + }; + + // Return request args return { url: toPathString(localVarUrlObj), options: localVarRequestOptions, }; - }, + }, /** * Renames, moves, hides, or unhides a folder. Marking a BIM 360 Docs folder as hidden effectively deletes it. You can restore it by changing its ``hidden`` attribute. You can also move BIM 360 Docs folders by changing their parent folder. You cannot permanently delete BIM 360 Docs folders. They are tagged as hidden folders and are removed from the BIM 360 Docs UI and from regular Data Management API responses. You can use the hidden filter (``filter[hidden]=true``) to get a list of deleted folders with the [List Folder Contents](/en/docs/data/v2/reference/http/projects-project_id-folders-folder_id-contents-GET/) operation. Before you use the Data Management API to access BIM 360 Docs folders, provision your app through the BIM 360 Account Administrator portal. For details, see the [Manage Access to Docs tutorial](/en/docs/bim360/v1/tutorials/getting-started/manage-access-to-docs/). **Note:** This operation supports Autodesk Construction Cloud (ACC) Projects. For more information, see the [ACC Platform API documentation](/en.docs.acc.v1/overview/introduction/). * @summary Modify a Folder @@ -717,8 +740,8 @@ export const FoldersApiFp = function(sdkManager?: SdkManager) { * @param {*} [options] Override http request option. * @throws {RequiredError} */ - async getFolderSearch(accessToken: string, projectId: string, folderId: string, filterFieldName?: string, filter?: Array, pageNumber?: number, options?: ApsServiceRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.getFolderSearch(accessToken, projectId, folderId, filterFieldName, filter, pageNumber, options); + async getFolderSearch(accessToken: string, projectId: string, folderId: string, filters?: { field: string; operator?: ComparisonTypes; value: string }[], pageNumber?: number, options?: ApsServiceRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.getFolderSearch(accessToken, projectId, folderId, filters, pageNumber, options); return createRequestFunction(localVarAxiosArgs, sdkManager); }, /** @@ -877,7 +900,7 @@ export interface FoldersApiInterface { * @throws {RequiredError} * @memberof FoldersApiInterface */ - getFolderSearch(accessToken: string,projectId: string, folderId: string, filterFieldName?: string, filter?: Array, pageNumber?: number, options?: ApsServiceRequestConfig): Promise; + getFolderSearch(accessToken: string,projectId: string, folderId: string, filters?: { field: string; operator?: ComparisonTypes; value: string }[], pageNumber?: number, options?: ApsServiceRequestConfig): Promise; /** * Renames, moves, hides, or unhides a folder. Marking a BIM 360 Docs folder as hidden effectively deletes it. You can restore it by changing its ``hidden`` attribute. You can also move BIM 360 Docs folders by changing their parent folder. You cannot permanently delete BIM 360 Docs folders. They are tagged as hidden folders and are removed from the BIM 360 Docs UI and from regular Data Management API responses. You can use the hidden filter (``filter[hidden]=true``) to get a list of deleted folders with the [List Folder Contents](/en/docs/data/v2/reference/http/projects-project_id-folders-folder_id-contents-GET/) operation. Before you use the Data Management API to access BIM 360 Docs folders, provision your app through the BIM 360 Account Administrator portal. For details, see the [Manage Access to Docs tutorial](/en/docs/bim360/v1/tutorials/getting-started/manage-access-to-docs/). **Note:** This operation supports Autodesk Construction Cloud (ACC) Projects. For more information, see the [ACC Platform API documentation](/en.docs.acc.v1/overview/introduction/). @@ -1180,10 +1203,10 @@ export class FoldersApi extends BaseApi implements FoldersApiInterface { * @throws {RequiredError} * @memberof FoldersApi */ - public async getFolderSearch(accessToken: string, projectId: string, folderId: string, filterFieldName?: string, filter?: Array, pageNumber?: number, options?: ApsServiceRequestConfig) { + public async getFolderSearch(accessToken: string, projectId: string, folderId: string, filters?: { field: string; operator?: ComparisonTypes; value: string }[], pageNumber?: number, options?: ApsServiceRequestConfig) { this.logger.logInfo("Entered into getFolderSearch "); try { - const request = await FoldersApiFp(this.sdkManager).getFolderSearch(accessToken, projectId, folderId, filterFieldName, filter, pageNumber, options); + const request = await FoldersApiFp(this.sdkManager).getFolderSearch(accessToken, projectId, folderId, filters, pageNumber, options); const response = await request(this.axios); this.logger.logInfo(`getFolderSearch Request completed successfully with status code: ${response.status}`); return new ApiResponse(response,response.data); diff --git a/datamanagement/source/custom-code/dataManagementClient.ts b/datamanagement/source/custom-code/dataManagementClient.ts index 51b3fc1..a78ca06 100644 --- a/datamanagement/source/custom-code/dataManagementClient.ts +++ b/datamanagement/source/custom-code/dataManagementClient.ts @@ -2,7 +2,7 @@ import { ApiResponse, ApsServiceRequestConfig, BaseClient, IAuthenticationProvid import { CommandsApi, HubsApi, ItemsApi, ProjectsApi, FoldersApi, VersionsApi } from "../api"; import { CreatedDownload, CreatedVersion, Download, DownloadFormats, DownloadPayload, Downloads, FilterType, FolderContents, FolderPayload, FolderRefs, Job, ModifyFolderPayload, ModifyVersionPayload, Project, Projects, Search, StoragePayload, TopFolders, Version, VersionPayload } from "../model"; import { Hub, Hubs } from "../model"; -import { CheckPermission, CheckPermissionPayload, Command, PublishModelJobPayload, CommandPayload, CreatedItem, FilterDirection, FilterRefType, FilterTypeVersion, Folder, Item, ItemPayload, ItemTip, JsonApiVersion, JsonApiVersionValue, ListItems, ListItemsPayload, ListRefs, ListRefsPayload, ModifyItemPayload, Refs, RelationshipLinks, RelationshipRefs, RelationshipRefsPayload, Versions, PublishWithoutLinksPayload, PublishWithoutLinks, PublishModel, PublishModelPayload } from "../model"; +import { CheckPermission, CheckPermissionPayload, Command, PublishModelJobPayload, CommandPayload, CreatedItem, FilterDirection, FilterRefType, FilterTypeVersion, Folder, Item, ItemPayload, ItemTip, JsonApiVersion, JsonApiVersionValue, ListItems, ListItemsPayload, ListRefs, ListRefsPayload, ModifyItemPayload, Refs, RelationshipLinks, RelationshipRefs, RelationshipRefsPayload, Versions, PublishWithoutLinksPayload, PublishWithoutLinks, PublishModel, PublishModelPayload, ComparisonTypes } from "../model"; export class DataManagementClient extends BaseClient { public commandsApi: CommandsApi; @@ -429,14 +429,14 @@ export class DataManagementClient extends BaseClient { * @param {*} [options] Override http request option. * @throws {RequiredError} */ - public async getFolderSearch(projectId: string, folderId: string, optionalArgs?:{filterFieldName?: string , filterValue?: Array, pageNumber?: number, accessToken?: string, options?: ApsServiceRequestConfig}): Promise { + public async getFolderSearch(projectId: string, folderId: string, optionalArgs?:{filters?: { field: string; operator?: ComparisonTypes; value: string }[], pageNumber?: number, accessToken?: string, options?: ApsServiceRequestConfig}): Promise { if (!optionalArgs?.accessToken && !this.authenticationProvider) { throw new Error("Please provide a valid access token or an authentication provider"); } else if (!optionalArgs?.accessToken) { (optionalArgs ??= {}).accessToken = await this.authenticationProvider.getAccessToken(); } - const response = await this.foldersApi.getFolderSearch(optionalArgs?.accessToken,projectId, folderId, optionalArgs?.filterFieldName, optionalArgs?.filterValue, optionalArgs?.pageNumber, optionalArgs?.options); + const response = await this.foldersApi.getFolderSearch(optionalArgs?.accessToken,projectId, folderId, optionalArgs?.filters, optionalArgs?.pageNumber, optionalArgs?.options); return response.content; } diff --git a/datamanagement/source/model/comparisonTypes.ts b/datamanagement/source/model/comparisonTypes.ts new file mode 100644 index 0000000..bc6838e --- /dev/null +++ b/datamanagement/source/model/comparisonTypes.ts @@ -0,0 +1,25 @@ +/* tslint:disable */ +/* eslint-disable */ + + +/** + * The type of the resource. Possible values are ``lt``, ``le``, ``eq``, ``ge``, ``gt``, ``starts``, ``ends``, ``contains``. + * @export + * @enum {string} + */ + +export const ComparisonTypes = { + LessThan: 'lt', + LessThanOrEqualTo: 'le', + EqualTo: 'eq', + GreaterThanOrEqualTO: 'ge', + GreaterThan: 'gt', + StartsWith: 'starts', + EndsWith: 'ends', + Contains: 'contains' +} as const; + +export type ComparisonTypes = typeof ComparisonTypes[keyof typeof ComparisonTypes]; + + + diff --git a/datamanagement/source/model/index.ts b/datamanagement/source/model/index.ts index 36c9ab5..d74d54e 100644 --- a/datamanagement/source/model/index.ts +++ b/datamanagement/source/model/index.ts @@ -23,6 +23,7 @@ export * from './commandData'; export * from './commandExecutionStatus'; export * from './commandPayload'; export * from './commandPayloadData'; +export * from './comparisonTypes'; export * from './conformingStatus'; export * from './createdDownload'; export * from './createdDownloadData'; diff --git a/samples/datamanagement.ts b/samples/datamanagement.ts index 7e10f2f..72f694b 100644 --- a/samples/datamanagement.ts +++ b/samples/datamanagement.ts @@ -1,5 +1,5 @@ import { ApiResponse, SdkManager, SdkManagerBuilder, StaticAuthenticationProvider } from "@aps_sdk/autodesk-sdkmanager" -import { BaseAttributesExtensionObjectWithoutSchemaLink, BaseAttributesExtensionObjectWithSchemaLink, BaseAttributesExtensionObjectWithSchemaLinkSchema, CreatedVersion, CreatedVersionData, DataManagementClient, DownloadFormats, DownloadFormatsData, Downloads, FilterType, FilterTypeVersion, Folder, FolderContents, FolderContentsData, FolderData, FolderPayload, FolderPayloadData, FolderPayloadDataAttributes, FolderPayloadDataAttributesExtension, FolderPayloadDataRelationships, FolderPayloadDataRelationshipsParent, FolderPayloadDataRelationshipsParentData, FolderRefs, Hub, HubData, HubDataAttributes, Hubs, Item, ItemData, ItemPayload, ItemPayloadData, ItemPayloadDataAttributes, ItemPayloadDataAttributesExtension, ItemPayloadDataRelationships, ItemTip, JsonApiVersion, JsonApiVersionValue, ModifyFolderPayload, ModifyFolderPayloadData, ModifyFolderPayloadDataAttributes, ModifyVersionPayload, ModifyVersionPayloadData, ModifyVersionPayloadDataAttributes, Refs, Region, RelationshipLinks, RelationshipRefs, RelationshipRefsPayload, RelationshipRefsPayloadData, RelationshipRefsPayloadDataMeta, Search, TypeEntity, TypeFolder, TypeItem, TypeObject, TypeVersion, Version, VersionData, VersionPayload, VersionPayloadData, VersionPayloadDataAttributes, VersionPayloadDataAttributesExtension, VersionPayloadDataRelationships, VersionPayloadDataRelationshipsItem, VersionPayloadDataRelationshipsItemData, VersionPayloadDataRelationshipsStorage, VersionPayloadDataRelationshipsStorageData, Versions } from "@aps_sdk/data-management"; +import { BaseAttributesExtensionObjectWithoutSchemaLink, BaseAttributesExtensionObjectWithSchemaLink, BaseAttributesExtensionObjectWithSchemaLinkSchema, CommandsApi, ComparisonTypes, CreatedVersion, CreatedVersionData, DataManagementClient, DownloadFormats, DownloadFormatsData, Downloads, FilterType, FilterTypeVersion, Folder, FolderContents, FolderContentsData, FolderData, FolderPayload, FolderPayloadData, FolderPayloadDataAttributes, FolderPayloadDataAttributesExtension, FolderPayloadDataRelationships, FolderPayloadDataRelationshipsParent, FolderPayloadDataRelationshipsParentData, FolderRefs, Hub, HubData, HubDataAttributes, Hubs, Item, ItemData, ItemPayload, ItemPayloadData, ItemPayloadDataAttributes, ItemPayloadDataAttributesExtension, ItemPayloadDataRelationships, ItemTip, JsonApiVersion, JsonApiVersionValue, ModifyFolderPayload, ModifyFolderPayloadData, ModifyFolderPayloadDataAttributes, ModifyVersionPayload, ModifyVersionPayloadData, ModifyVersionPayloadDataAttributes, Refs, Region, RelationshipLinks, RelationshipRefs, RelationshipRefsPayload, RelationshipRefsPayloadData, RelationshipRefsPayloadDataMeta, Search, TypeEntity, TypeFolder, TypeItem, TypeObject, TypeVersion, Version, VersionData, VersionPayload, VersionPayloadData, VersionPayloadDataAttributes, VersionPayloadDataAttributesExtension, VersionPayloadDataRelationships, VersionPayloadDataRelationshipsItem, VersionPayloadDataRelationshipsItemData, VersionPayloadDataRelationshipsStorage, VersionPayloadDataRelationshipsStorageData, Versions } from "@aps_sdk/data-management"; import 'dotenv/config'; import { Project, Projects, ProjectDataAttributes, TopFolders, StoragePayload, TypeFolderItemsForStorage, DownloadPayload, TypeDownloads, CreatedDownload, Job, Download } from "@aps_sdk/data-management"; import { CheckPermission, CheckPermissionPayload, CheckPermissionPayloadAttributes, CheckPermissionPayloadAttributesExtension, CheckPermissionPayloadAttributesExtensionData, CheckPermissionPayloadRelationships, CheckPermissionPayloadRelationshipsResources, CreatedItem, FilterDirection, FilterRefType, ItemPayloadDataRelationshipsParent, ItemPayloadDataRelationshipsParentData, ItemPayloadDataRelationshipsTip, ItemPayloadDataRelationshipsTipData, ItemPayloadIncludedAttributes, ItemPayloadIncludedAttributesExtension, ListItems, ListItemsPayload, ListItemsPayloadAttributes, ListItemsPayloadAttributesExtension, ListItemsPayloadAttributesExtensionData, ListItemsPayloadRelationships, ListItemsPayloadRelationshipsResources, ListRefs, ListRefsPayload, ListRefsPayloadAttributes, ListRefsPayloadAttributesExtension, ListRefsPayloadRelationships, ListRefsPayloadRelationshipsResources, ModifyItemPayload, ModifyItemPayloadData, ModifyItemPayloadDataAttributes, PublishModel, PublishModelJobPayload, PublishModelJobPayloadAttributes, PublishModelJobPayloadAttributesExtension, PublishModelJobPayloadRelationships, PublishModelJobPayloadRelationshipsResources, PublishModelPayload, PublishModelPayloadAttributes, PublishModelPayloadAttributesExtension, PublishModelPayloadRelationships, PublishModelPayloadRelationshipsResources, PublishWithoutLinks, PublishWithoutLinksPayload, PublishWithoutLinksPayloadAttributes, PublishWithoutLinksPayloadAttributesExtension, TypeCommands, TypeCommandtypeCheckPermission, TypeCommandtypeGetPublishModelJob, TypeCommandtypeListItems, TypeCommandtypeListRefs, TypeCommandtypePublishmodel, TypeCommandtypePublishWithoutLinks } from "@aps_sdk/data-management"; @@ -18,7 +18,7 @@ const sdkmanager: SdkManager = SdkManagerBuilder .create() .build(); -const staticAuthenticationProvider = new StaticAuthenticationProvider(process.env.accessToken); +const staticAuthenticationProvider = new StaticAuthenticationProvider(token); let dataManagementClient: DataManagementClient = new DataManagementClient({ sdkManager: sdkmanager, authenticationProvider: staticAuthenticationProvider }); @@ -220,16 +220,27 @@ async function getFolderSearch() { project_id, folder_id, { - filterFieldName: "displayName", - filterValue: ["filter1", "filter2"] + filters: [ + // {field: "attributes.displayName", operator: ComparisonTypes.EqualTo, value: "racadvancedsampleprojecttwo.rvt"}, + // { field: "id", operator: ComparisonTypes.EqualTo, value: "urn:adsk.wipprod:fs.file:vf.-LZeF3RbSOq-8TrrAF8tbQ?version=2" }, + // { field: "attributes.extension.type", value: "versions:autodesk.core:Deleted" }, + // { field: "attributes.extension.type", operator: ComparisonTypes.EqualTo, value: "versions:autodesk.core:Deleted" }, + // { field: "attributes.extension.schema.href", operator: ComparisonTypes.EqualTo, value: "https://developer.api.autodesk.com/schema/v1/versions/versions:autodesk.core:Deleted-1.0" }, + // { field: "attributes.createUserName", value: "Harun Gitundu" }, + { field: "attributes.displayName", value: "dc8c73c4-d412-40e4-9a7e-e78d6d6b3892" }, + ], + pageNumber: 0 } ); - console.log(search); search.data.forEach((current) => { const folderId: string = current.id; const folderType: string = current.type; - console.log(current.attributes); + console.log(current.attributes.extension.type); + console.log(current.attributes.extension.schema.href); + console.log(current.attributes.createUserName); + console.log(current.attributes.displayName); + console.log(folderId); console.log(folderType); }); } catch (err) { @@ -342,7 +353,7 @@ async function patchFolder() { // getFolderRefs(); // getFolderRelationshipsLinks(); // getFolderRelationshipsRefs(); -// getFolderSearch(); +getFolderSearch(); // createFolder(); // createFolderRelationshipsRef(); // patchFolder(); @@ -1047,19 +1058,19 @@ async function topFolderDetail() { const projectTopFolders: TopFolders = await dataManagementClient.getProjectTopFolders(hub_id, project_id, { excludeDeleted: true }); - projectTopFolders.data.forEach( current => { + projectTopFolders.data.forEach(current => { const attributes = current.attributes; // The extensions property is deprecated. Use extension instead const extensions = attributes.extensions; - + const extension = attributes.extension; console.log(extensions); console.log(extension); }) } -topFolderDetail(); +// topFolderDetail(); async function getHubProjects() { diff --git a/samples/package-lock.json b/samples/package-lock.json index d8c10f2..5f0f7d3 100644 --- a/samples/package-lock.json +++ b/samples/package-lock.json @@ -7,13 +7,13 @@ "": { "name": "samples", "version": "1.0.0", - "license": "ISC", + "license": "Apache-2.0", "dependencies": { "@aps_sdk/authentication": "^1.0.0", "@aps_sdk/autodesk-sdkmanager": "^1.0.0", "@aps_sdk/construction-account-admin": "^1.0.0", "@aps_sdk/construction-issues": "^1.0.0", - "@aps_sdk/data-management": "^1.0.0", + "@aps_sdk/data-management": "file:../datamanagement/source/aps_sdk-data-management-1.0.1.tgz", "@aps_sdk/model-derivative": "^1.0.0", "@aps_sdk/oss": "^1.0.0", "@aps_sdk/webhooks": "^1.0.0", @@ -65,9 +65,9 @@ } }, "node_modules/@aps_sdk/data-management": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@aps_sdk/data-management/-/data-management-1.0.0.tgz", - "integrity": "sha512-xKgslM4xFYXbD5nEMMQUN8On415GXUFcw6PH2IP6hBg5rTyU7v9MUxocb9bR9stBBqUq5MlPmNsmkEjrm+7PmA==", + "version": "1.0.1", + "resolved": "file:../datamanagement/source/aps_sdk-data-management-1.0.1.tgz", + "integrity": "sha512-CG695RIHbEGOLQe0qOj3YmSKy5qVCCF0E/MQLvAfrsAXRUHv46ILnFi+sq2YzLLs7bg6cfu4xSZf+W1c8ydLDQ==", "license": "Apache-2.0", "dependencies": { "@aps_sdk/autodesk-sdkmanager": "^1.0.0",