feat: implement getRecordsByAppId method

This commit is contained in:
Stevan Freeborn
2023-02-11 00:16:33 -06:00
parent a874f8a6df
commit 75349b24c0
2 changed files with 62 additions and 3 deletions
+34
View File
@@ -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<T> {
);
}
/**
* @method asGetPagedRecordsResponseType - Converts the ApiResponse to an ApiResponse<GetPagedRecordsResponse>.
* @returns {ApiResponse<GetPagedRecordsResponse>} - An ApiResponse<GetPagedRecordsResponse>.
*/
public asGetPagedRecordsResponseType(): ApiResponse<GetPagedRecordsResponse> {
const apiResponse = this as ApiResponse<any>;
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<GetPagedRecordsResponse>(
apiResponse.statusCode,
apiResponse.message,
getPagedRecordsResponse
);
}
/**
* @method asRecordType - Converts the ApiResponse to an ApiResponse<Record>.
* @returns {ApiResponse<Record>} - An ApiResponse<Record>.
+28 -3
View File
@@ -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<ApiResponse<GetPagedRecordsResponse>>} - A promise that resolves to an ApiResponse of type GetPagedRecordsResponse.
*/
public async getRecordByAppId(
request: GetRecordsByAppIdRequest
): Promise<ApiResponse<GetPagedRecordsResponse>> {
const { appId, pagingRequest, fieldIds, dataFormat } = request;
const endpoint = EndpointFactory.getRecordsByAppIdEndpoint(appId);
const params = {
...pagingRequest,
fieldIds: fieldIds.join(','),
dataFormat,
};
const apiResponse = await this.get<any>(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<ApiResponse<Record>> {
const { appId, recordId, fieldIds, dataFormat } = request;
const endpoint = EndpointFactory.getRecordByIdEndpoint(appId, recordId);
const apiResponse = await this.get<any>(endpoint, {
params: { fieldIds: fieldIds.join(','), dataFormat },
});
const params = { fieldIds: fieldIds.join(','), dataFormat };
const apiResponse = await this.get<any>(endpoint, { params });
if (apiResponse.isSuccessful === false) {
return apiResponse;