diff --git a/src/models/ApiResponse.ts b/src/models/ApiResponse.ts index 2b22c37..253391c 100644 --- a/src/models/ApiResponse.ts +++ b/src/models/ApiResponse.ts @@ -12,6 +12,7 @@ import { FileInfo } from './FileInfo'; import { FormulaField } from './FormulaField'; import { GetPagedAppsResponse } from './GetPagedAppsResponse'; import { GetPagedFieldsResponse } from './GetPagedFieldsResponse'; +import { GetPagedRecordsResponse } from './GetPagedRecordsResponse'; import { GetPagedReportsResponse } from './GetPagedReportsResponse'; import { ListField } from './ListField'; import { ListItemResponse } from './ListItemResponse'; @@ -330,6 +331,39 @@ export class ApiResponse { ); } + /** + * @method asGetPagedRecordsResponseType - Converts the ApiResponse to an ApiResponse. + * @returns {ApiResponse} - An ApiResponse. + */ + public asGetPagedRecordsResponseType(): ApiResponse { + const apiResponse = this as ApiResponse; + + const records = apiResponse.data.items.map((item: any) => { + const recordValues = item.fieldData.map((fieldData: any) => { + return new RecordValue( + fieldData.type, + fieldData.fieldId, + fieldData.value + ); + }); + return new Record(item.appId, item.recordId, recordValues); + }); + + const getPagedRecordsResponse = new GetPagedRecordsResponse( + records, + apiResponse.data.pageNumber, + apiResponse.data.pageSize, + apiResponse.data.totalPages, + apiResponse.data.totalRecords + ); + + return new ApiResponse( + apiResponse.statusCode, + apiResponse.message, + getPagedRecordsResponse + ); + } + /** * @method asRecordType - Converts the ApiResponse to an ApiResponse. * @returns {ApiResponse} - An ApiResponse. diff --git a/src/models/OnspringClient.ts b/src/models/OnspringClient.ts index 3d844c4..7aa7dc0 100644 --- a/src/models/OnspringClient.ts +++ b/src/models/OnspringClient.ts @@ -22,6 +22,8 @@ import { type GetPagedReportsResponse } from './GetPagedReportsResponse'; import { type ReportData } from './ReportData'; import { type Record } from './Record'; import { type GetRecordRequest } from './GetRecordRequest'; +import { type GetRecordsByAppIdRequest } from './GetRecordsByAppIdRequest'; +import { type GetPagedRecordsResponse } from './GetPagedRecordsResponse'; /** * @class OnspringClient - A client that can communicate with the Onspring API. @@ -310,6 +312,30 @@ export class OnspringClient { return apiResponse; } + /** + * @method getRecordByAppId - Gets records by an app id. + * @param {GetRecordsByAppIdRequest} request - The request that will be used to get the records. + * @returns {Promise>} - A promise that resolves to an ApiResponse of type GetPagedRecordsResponse. + */ + public async getRecordByAppId( + request: GetRecordsByAppIdRequest + ): Promise> { + const { appId, pagingRequest, fieldIds, dataFormat } = request; + const endpoint = EndpointFactory.getRecordsByAppIdEndpoint(appId); + const params = { + ...pagingRequest, + fieldIds: fieldIds.join(','), + dataFormat, + }; + const apiResponse = await this.get(endpoint, { params }); + + if (apiResponse.isSuccessful === false) { + return apiResponse; + } + + return apiResponse.asGetPagedRecordsResponseType(); + } + /** * @method getRecordById - Gets a record by its id. * @param {GetRecordRequest} request - The request that will be used to get the record. @@ -320,9 +346,8 @@ export class OnspringClient { ): Promise> { const { appId, recordId, fieldIds, dataFormat } = request; const endpoint = EndpointFactory.getRecordByIdEndpoint(appId, recordId); - const apiResponse = await this.get(endpoint, { - params: { fieldIds: fieldIds.join(','), dataFormat }, - }); + const params = { fieldIds: fieldIds.join(','), dataFormat }; + const apiResponse = await this.get(endpoint, { params }); if (apiResponse.isSuccessful === false) { return apiResponse;