Files
onspring-api-sdk-javascript/src/models/ApiResponse.ts
T

141 lines
3.9 KiB
TypeScript
Raw Normal View History

import { App } from './App';
2023-02-02 20:24:20 -06:00
import { CollectionResponse } from './CollectionResponse';
2023-02-02 21:37:40 -06:00
import { Field } from './Field';
import { GetPagedAppsResponse } from './GetPagedAppsResponse';
/**
* @class ApiResponse - A generic response object for API requests.
*/
export class ApiResponse<T> {
/**
* @property {number} statusCode - The status code of the response.
*/
public statusCode: number;
/**
* @property {boolean} isSuccessful - True if the status code is less than 400; otherwise, false.
*/
public isSuccessful: boolean;
/**
* @property {string} message - The message of the response.
*/
public message: string;
/**
* @property {T} data - The data of the response.
*/
public data: T | null;
/**
* @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.
* @param {T | null} data - The data of the response.
* @returns {ApiResponse<T>} - A new instance of the ApiResponse class.
*/
constructor(statusCode: number, message: string, data: T | null) {
this.statusCode = statusCode;
this.isSuccessful = statusCode < 400;
this.message = message;
this.data = data;
}
2023-02-01 21:35:30 -06:00
/**
* @method AsGetPagedAppsResponseType - Converts the ApiResponse to an ApiResponse<GetPagedAppsResponse>.
* @returns {ApiResponse<GetPagedAppsResponse>} - An ApiResponse<GetPagedAppsResponse>.
*/
public AsGetPagedAppsResponseType(): ApiResponse<GetPagedAppsResponse> {
2023-02-02 20:24:20 -06:00
const apiResponse = this as ApiResponse<any>;
2023-02-02 20:24:20 -06:00
const apps = apiResponse.data.items.map((item: any) => {
return new App(item.href, item.id, item.name);
});
2023-02-02 20:24:20 -06:00
const getAppsPagedResponse = new GetPagedAppsResponse(
apps,
apiResponse.data.pageNumber,
apiResponse.data.pageSize,
apiResponse.data.totalPages,
apiResponse.data.totalRecords
);
return new ApiResponse<GetPagedAppsResponse>(
apiResponse.statusCode,
apiResponse.message,
getAppsPagedResponse
);
}
2023-02-02 20:24:20 -06:00
/**
* @method AsAppType - Converts the ApiResponse to an ApiResponse<App>.
* @returns {ApiResponse<App>} - An ApiResponse<App>.
*/
2023-02-02 21:37:40 -06:00
public AsAppType(): ApiResponse<App> {
2023-02-02 20:24:20 -06:00
const apiResponse = this as ApiResponse<any>;
2023-02-02 20:24:20 -06:00
const app = new App(
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
/**
* @method AsAppCollectionType - Converts the ApiResponse to an ApiResponse<CollectionResponse<App>>.
* @returns {ApiResponse<CollectionResponse<App>>} - An ApiResponse<CollectionResponse<App>>.
*/
2023-02-02 21:37:40 -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
/**
* @method AsFieldType - Converts the ApiResponse to an ApiResponse<Field>.
* @returns {ApiResponse<Field>} - An ApiResponse<Field>.
*/
2023-02-02 21:37:40 -06:00
public AsFieldType(): ApiResponse<Field> {
const apiResponse = this as ApiResponse<any>;
const field = new Field(
apiResponse.data.id,
apiResponse.data.appId,
apiResponse.data.name,
apiResponse.data.type,
apiResponse.data.status,
apiResponse.data.isRequired,
apiResponse.data.isUnique
);
return new ApiResponse<Field>(
apiResponse.statusCode,
apiResponse.message,
field
);
}
2023-02-03 00:16:38 -06:00
public AsFieldCollectionType(): ApiResponse<CollectionResponse<Field>> {
throw new Error('Method not implemented.');
}
}