2023-02-04 22:00:19 -06:00
|
|
|
import { FieldType } from '../enums/FieldType';
|
2023-02-01 22:44:30 -06:00
|
|
|
import { App } from './App';
|
2023-02-02 20:24:20 -06:00
|
|
|
import { CollectionResponse } from './CollectionResponse';
|
2023-02-03 16:01:20 -06:00
|
|
|
import { CreatedWithIdResponse } from './CreatedWithIdResponse';
|
2023-02-02 21:37:40 -06:00
|
|
|
import { Field } from './Field';
|
2023-02-04 15:09:13 -06:00
|
|
|
import { FileInfo } from './FileInfo';
|
2023-02-04 22:00:19 -06:00
|
|
|
import { FormulaField } from './FormulaField';
|
2023-02-01 22:44:30 -06:00
|
|
|
import { GetPagedAppsResponse } from './GetPagedAppsResponse';
|
2023-02-03 11:45:15 -06:00
|
|
|
import { GetPagedFieldsResponse } from './GetPagedFieldsResponse';
|
2023-02-04 22:00:19 -06:00
|
|
|
import { ListField } from './ListField';
|
|
|
|
|
import { ListValue } from './ListValue';
|
|
|
|
|
import { ReferenceField } from './ReferenceField';
|
2023-02-01 21:21:39 -06:00
|
|
|
|
2023-01-26 13:58:25 -06:00
|
|
|
/**
|
|
|
|
|
* @class ApiResponse - A generic response object for API requests.
|
|
|
|
|
*/
|
2023-01-25 22:28:45 -06:00
|
|
|
export class ApiResponse<T> {
|
2023-01-26 13:58:25 -06:00
|
|
|
/**
|
|
|
|
|
* @property {number} statusCode - The status code of the response.
|
|
|
|
|
*/
|
2023-02-01 21:21:39 -06:00
|
|
|
public statusCode: number;
|
2023-01-26 13:58:25 -06:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @property {boolean} isSuccessful - True if the status code is less than 400; otherwise, false.
|
|
|
|
|
*/
|
2023-02-01 21:21:39 -06:00
|
|
|
public isSuccessful: boolean;
|
2023-01-26 13:58:25 -06:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @property {string} message - The message of the response.
|
|
|
|
|
*/
|
2023-02-01 21:21:39 -06:00
|
|
|
public message: string;
|
2023-01-26 13:58:25 -06:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @property {T} data - The data of the response.
|
|
|
|
|
*/
|
2023-02-02 13:53:02 -06:00
|
|
|
public data: T | null;
|
2023-01-25 22:28:45 -06:00
|
|
|
|
2023-01-26 13:58:25 -06:00
|
|
|
/**
|
|
|
|
|
* @constructor - Creates a new instance of the ApiResponse class.
|
|
|
|
|
* @param {number} statusCode - The status code of the response.
|
|
|
|
|
* @param {string} message - The message of the response.
|
2023-02-02 13:53:02 -06:00
|
|
|
* @param {T | null} data - The data of the response.
|
2023-01-26 13:58:25 -06:00
|
|
|
* @returns {ApiResponse<T>} - A new instance of the ApiResponse class.
|
|
|
|
|
*/
|
2023-02-02 13:53:02 -06:00
|
|
|
constructor(statusCode: number, message: string, data: T | null) {
|
2023-01-25 22:28:45 -06:00
|
|
|
this.statusCode = statusCode;
|
|
|
|
|
this.isSuccessful = statusCode < 400;
|
|
|
|
|
this.message = message;
|
|
|
|
|
this.data = data;
|
|
|
|
|
}
|
2023-02-01 21:21:39 -06:00
|
|
|
|
2023-02-01 21:35:30 -06:00
|
|
|
/**
|
2023-02-03 22:32:57 -06:00
|
|
|
* @method asGetPagedAppsResponseType - Converts the ApiResponse to an ApiResponse<GetPagedAppsResponse>.
|
2023-02-01 21:35:30 -06:00
|
|
|
* @returns {ApiResponse<GetPagedAppsResponse>} - An ApiResponse<GetPagedAppsResponse>.
|
2023-02-01 22:44:30 -06:00
|
|
|
*/
|
2023-02-03 22:32:57 -06:00
|
|
|
public asGetPagedAppsResponseType(): ApiResponse<GetPagedAppsResponse> {
|
2023-02-02 20:24:20 -06:00
|
|
|
const apiResponse = this as ApiResponse<any>;
|
2023-02-01 22:44:30 -06:00
|
|
|
|
2023-02-02 20:24:20 -06:00
|
|
|
const apps = apiResponse.data.items.map((item: any) => {
|
2023-02-01 21:21:39 -06:00
|
|
|
return new App(item.href, item.id, item.name);
|
|
|
|
|
});
|
|
|
|
|
|
2023-02-02 20:24:20 -06:00
|
|
|
const getAppsPagedResponse = new GetPagedAppsResponse(
|
2023-02-01 21:21:39 -06:00
|
|
|
apps,
|
|
|
|
|
apiResponse.data.pageNumber,
|
|
|
|
|
apiResponse.data.pageSize,
|
|
|
|
|
apiResponse.data.totalPages,
|
|
|
|
|
apiResponse.data.totalRecords
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
return new ApiResponse<GetPagedAppsResponse>(
|
|
|
|
|
apiResponse.statusCode,
|
|
|
|
|
apiResponse.message,
|
|
|
|
|
getAppsPagedResponse
|
|
|
|
|
);
|
|
|
|
|
}
|
2023-02-01 22:44:30 -06:00
|
|
|
|
2023-02-02 20:24:20 -06:00
|
|
|
/**
|
2023-02-03 22:32:57 -06:00
|
|
|
* @method asAppType - Converts the ApiResponse to an ApiResponse<App>.
|
2023-02-02 20:24:20 -06:00
|
|
|
* @returns {ApiResponse<App>} - An ApiResponse<App>.
|
|
|
|
|
*/
|
2023-02-03 22:32:57 -06:00
|
|
|
public asAppType(): ApiResponse<App> {
|
2023-02-02 20:24:20 -06:00
|
|
|
const apiResponse = this as ApiResponse<any>;
|
2023-02-01 22:44:30 -06:00
|
|
|
|
2023-02-02 20:24:20 -06:00
|
|
|
const app = new App(
|
2023-02-01 22:44:30 -06:00
|
|
|
apiResponse.data.href,
|
|
|
|
|
apiResponse.data.id,
|
|
|
|
|
apiResponse.data.name
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
return new ApiResponse<App>(
|
|
|
|
|
apiResponse.statusCode,
|
|
|
|
|
apiResponse.message,
|
|
|
|
|
app
|
|
|
|
|
);
|
|
|
|
|
}
|
2023-02-02 20:24:20 -06:00
|
|
|
|
|
|
|
|
/**
|
2023-02-03 22:32:57 -06:00
|
|
|
* @method asAppCollectionType - Converts the ApiResponse to an ApiResponse<CollectionResponse<App>>.
|
2023-02-02 20:24:20 -06:00
|
|
|
* @returns {ApiResponse<CollectionResponse<App>>} - An ApiResponse<CollectionResponse<App>>.
|
|
|
|
|
*/
|
2023-02-03 22:32:57 -06:00
|
|
|
public asAppCollectionType(): ApiResponse<CollectionResponse<App>> {
|
2023-02-02 20:24:20 -06:00
|
|
|
const apiResponse = this as ApiResponse<any>;
|
|
|
|
|
|
|
|
|
|
const apps = apiResponse.data.items.map((item: any) => {
|
|
|
|
|
return new App(item.href, item.id, item.name);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
const collectionResponse = new CollectionResponse<App>(
|
|
|
|
|
apiResponse.data.count,
|
|
|
|
|
apps
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
return new ApiResponse<CollectionResponse<App>>(
|
|
|
|
|
apiResponse.statusCode,
|
|
|
|
|
apiResponse.message,
|
|
|
|
|
collectionResponse
|
|
|
|
|
);
|
|
|
|
|
}
|
2023-02-02 21:37:40 -06:00
|
|
|
|
2023-02-02 22:59:07 -06:00
|
|
|
/**
|
2023-02-03 22:32:57 -06:00
|
|
|
* @method asFieldType - Converts the ApiResponse to an ApiResponse<Field>.
|
2023-02-02 22:59:07 -06:00
|
|
|
* @returns {ApiResponse<Field>} - An ApiResponse<Field>.
|
|
|
|
|
*/
|
2023-02-03 22:32:57 -06:00
|
|
|
public asFieldType(): ApiResponse<Field> {
|
2023-02-02 21:37:40 -06:00
|
|
|
const apiResponse = this as ApiResponse<any>;
|
2023-02-04 22:00:19 -06:00
|
|
|
const field = ApiResponse.getFieldByType(apiResponse.data);
|
2023-02-02 21:37:40 -06:00
|
|
|
|
|
|
|
|
return new ApiResponse<Field>(
|
|
|
|
|
apiResponse.statusCode,
|
|
|
|
|
apiResponse.message,
|
|
|
|
|
field
|
|
|
|
|
);
|
|
|
|
|
}
|
2023-02-03 00:16:38 -06:00
|
|
|
|
2023-02-03 11:25:33 -06:00
|
|
|
/**
|
2023-02-03 22:32:57 -06:00
|
|
|
* @method asFieldCollectionType - Converts the ApiResponse to an ApiResponse<CollectionResponse<Field>>.
|
2023-02-03 11:25:33 -06:00
|
|
|
* @returns {ApiResponse<CollectionResponse<Field>>} - An ApiResponse<CollectionResponse<Field>>.
|
|
|
|
|
*/
|
2023-02-03 22:32:57 -06:00
|
|
|
public asFieldCollectionType(): ApiResponse<CollectionResponse<Field>> {
|
2023-02-03 11:17:53 -06:00
|
|
|
const apiResponse = this as ApiResponse<any>;
|
|
|
|
|
|
2023-02-04 22:00:19 -06:00
|
|
|
const fields = apiResponse.data.items.map((item: any) =>
|
|
|
|
|
ApiResponse.getFieldByType(item)
|
|
|
|
|
);
|
2023-02-03 11:17:53 -06:00
|
|
|
|
|
|
|
|
const collectionResponse = new CollectionResponse<Field>(
|
|
|
|
|
apiResponse.data.count,
|
|
|
|
|
fields
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
return new ApiResponse<CollectionResponse<Field>>(
|
|
|
|
|
apiResponse.statusCode,
|
|
|
|
|
apiResponse.message,
|
|
|
|
|
collectionResponse
|
|
|
|
|
);
|
2023-02-03 00:16:38 -06:00
|
|
|
}
|
2023-02-03 11:45:15 -06:00
|
|
|
|
2023-02-03 13:00:09 -06:00
|
|
|
/**
|
2023-02-03 22:32:57 -06:00
|
|
|
* @method asGetPagedFieldsResponseType - Converts the ApiResponse to an ApiResponse<GetPagedFieldsResponse>.
|
2023-02-03 13:00:09 -06:00
|
|
|
* @returns {ApiResponse<GetPagedFieldsResponse>} - An ApiResponse<GetPagedFieldsResponse>.
|
|
|
|
|
*/
|
2023-02-03 22:32:57 -06:00
|
|
|
public asGetPagedFieldsResponseType(): ApiResponse<GetPagedFieldsResponse> {
|
2023-02-03 11:45:15 -06:00
|
|
|
const apiResponse = this as ApiResponse<any>;
|
|
|
|
|
|
2023-02-04 22:00:19 -06:00
|
|
|
const fields = apiResponse.data.items.map((item: any) =>
|
|
|
|
|
ApiResponse.getFieldByType(item)
|
|
|
|
|
);
|
2023-02-03 11:45:15 -06:00
|
|
|
|
|
|
|
|
const getPagedFieldsResponse = new GetPagedFieldsResponse(
|
|
|
|
|
fields,
|
|
|
|
|
apiResponse.data.pageNumber,
|
|
|
|
|
apiResponse.data.pageSize,
|
|
|
|
|
apiResponse.data.totalPages,
|
|
|
|
|
apiResponse.data.totalRecords
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
return new ApiResponse<GetPagedFieldsResponse>(
|
|
|
|
|
apiResponse.statusCode,
|
|
|
|
|
apiResponse.message,
|
|
|
|
|
getPagedFieldsResponse
|
|
|
|
|
);
|
|
|
|
|
}
|
2023-02-03 16:01:20 -06:00
|
|
|
|
2023-02-03 22:51:02 -06:00
|
|
|
/**
|
|
|
|
|
* @method asCreatedWithIdResponseType - Converts the ApiResponse to an ApiResponse<CreatedWithIdResponse>.
|
|
|
|
|
* @returns {ApiResponse<CreatedWithIdResponse>} - An ApiResponse<CreatedWithIdResponse>.
|
|
|
|
|
*/
|
2023-02-03 22:32:57 -06:00
|
|
|
public asCreatedWithIdResponseType(): ApiResponse<CreatedWithIdResponse> {
|
2023-02-03 16:01:20 -06:00
|
|
|
const apiResponse = this as ApiResponse<any>;
|
|
|
|
|
|
|
|
|
|
const createdWithIdResponse = new CreatedWithIdResponse(
|
|
|
|
|
apiResponse.data.id
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
return new ApiResponse<CreatedWithIdResponse>(
|
|
|
|
|
apiResponse.statusCode,
|
|
|
|
|
apiResponse.message,
|
|
|
|
|
createdWithIdResponse
|
|
|
|
|
);
|
|
|
|
|
}
|
2023-02-04 15:09:13 -06:00
|
|
|
|
2023-02-04 22:00:19 -06:00
|
|
|
public asFileInfoType(): ApiResponse<FileInfo> {
|
2023-02-04 15:09:13 -06:00
|
|
|
const apiResponse = this as ApiResponse<any>;
|
|
|
|
|
|
|
|
|
|
const fileInfo = new FileInfo(
|
|
|
|
|
apiResponse.data.type,
|
|
|
|
|
apiResponse.data.contentType,
|
|
|
|
|
apiResponse.data.name,
|
|
|
|
|
apiResponse.data.createdDate,
|
|
|
|
|
apiResponse.data.modifiedDate,
|
|
|
|
|
apiResponse.data.owner,
|
|
|
|
|
apiResponse.data.notes,
|
|
|
|
|
apiResponse.data.fileHref
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
return new ApiResponse<FileInfo>(
|
|
|
|
|
apiResponse.statusCode,
|
|
|
|
|
apiResponse.message,
|
|
|
|
|
fileInfo
|
|
|
|
|
);
|
|
|
|
|
}
|
2023-02-04 22:00:19 -06:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @method asFileCollectionType - Converts the field item to the appropriate field object based upon the field item's type.
|
|
|
|
|
* @param fieldItem - The field item to convert.
|
|
|
|
|
* @returns {Field} - The converted field object.
|
|
|
|
|
*/
|
|
|
|
|
private static getFieldByType(fieldItem: any): Field {
|
|
|
|
|
switch (fieldItem.type) {
|
|
|
|
|
case FieldType.Reference: {
|
|
|
|
|
return new ReferenceField(
|
|
|
|
|
fieldItem.id,
|
|
|
|
|
fieldItem.appId,
|
|
|
|
|
fieldItem.name,
|
|
|
|
|
fieldItem.type,
|
|
|
|
|
fieldItem.status,
|
|
|
|
|
fieldItem.isRequired,
|
|
|
|
|
fieldItem.isUnique,
|
|
|
|
|
fieldItem.multiplicity,
|
|
|
|
|
fieldItem.referencedAppId
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
case FieldType.List: {
|
|
|
|
|
const values = ApiResponse.getListValues(fieldItem);
|
|
|
|
|
|
|
|
|
|
return new ListField(
|
|
|
|
|
fieldItem.id,
|
|
|
|
|
fieldItem.appId,
|
|
|
|
|
fieldItem.name,
|
|
|
|
|
fieldItem.type,
|
|
|
|
|
fieldItem.status,
|
|
|
|
|
fieldItem.isRequired,
|
|
|
|
|
fieldItem.isUnique,
|
|
|
|
|
fieldItem.multiplicity,
|
|
|
|
|
fieldItem.listId,
|
|
|
|
|
values
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
case FieldType.Formula: {
|
|
|
|
|
const values = ApiResponse.getListValues(fieldItem);
|
|
|
|
|
|
|
|
|
|
return new FormulaField(
|
|
|
|
|
fieldItem.id,
|
|
|
|
|
fieldItem.appId,
|
|
|
|
|
fieldItem.name,
|
|
|
|
|
fieldItem.type,
|
|
|
|
|
fieldItem.status,
|
|
|
|
|
fieldItem.isRequired,
|
|
|
|
|
fieldItem.isUnique,
|
|
|
|
|
fieldItem.outputType,
|
|
|
|
|
values
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
default: {
|
|
|
|
|
return new Field(
|
|
|
|
|
fieldItem.id,
|
|
|
|
|
fieldItem.appId,
|
|
|
|
|
fieldItem.name,
|
|
|
|
|
fieldItem.type,
|
|
|
|
|
fieldItem.status,
|
|
|
|
|
fieldItem.isRequired,
|
|
|
|
|
fieldItem.isUnique
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @method getListValues - Converts the field items list values to a ListValue[].
|
|
|
|
|
* @param fieldItem - The field item whose values should be converted.
|
|
|
|
|
* @returns {ListValue[]} - The converted list values.
|
|
|
|
|
*/
|
|
|
|
|
private static getListValues(fieldItem: any): ListValue[] {
|
|
|
|
|
return fieldItem.values.map((listValue: any) => {
|
|
|
|
|
return new ListValue(
|
|
|
|
|
listValue.id,
|
|
|
|
|
listValue.name,
|
|
|
|
|
listValue.sortOrder,
|
|
|
|
|
listValue.numericValue,
|
|
|
|
|
listValue.color
|
|
|
|
|
);
|
|
|
|
|
});
|
|
|
|
|
}
|
2023-01-26 13:58:25 -06:00
|
|
|
}
|