Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion packages/business-objects/package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "@dvelop-sdk/business-objects",
"description": "This package contains functionality for the BusinessObjects-App in the d.velop cloud.",
"version": "2.0.0",
"version": "2.0.1",
"license": "Apache-2.0",
"main": "lib/index.js",
"types": "lib/index.d.ts",
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { DvelopContext, DvelopHttpResponse as HttpResponse } from "@dvelop-sdk/core";
import { GetBoEntitiesParams, _getBoEntitiesDefaultTransformFunctionFactory, _getBoEntitiesFactory, GetEntitiesResultPage } from "./get-entities";
import { GetBoEntitiesParams, _getBoEntitiesDefaultTransformFunctionFactory, _getBoEntitiesFactory, GetBoEntitiesResultPage } from "./get-entities";

describe("getBoEntitiesFactory", () => {

Expand Down Expand Up @@ -74,7 +74,7 @@ describe("getBoEntitiesFactory", () => {
mockHttpRequestFunction.mockResolvedValue({ data: response } as HttpResponse);

const getBoEntities = _getBoEntitiesFactory(mockHttpRequestFunction, _getBoEntitiesDefaultTransformFunctionFactory(mockHttpRequestFunction));
const result: GetEntitiesResultPage = await getBoEntities(context, params);
const result: GetBoEntitiesResultPage = await getBoEntities(context, params);

response.value.forEach((entity: any, i: number) => {
expect(result.value[i]).toHaveProperty("employeeid", entity.employeeid);
Expand All @@ -99,7 +99,7 @@ describe("getBoEntitiesFactory", () => {
mockHttpRequestFunction.mockResolvedValue({ data: response } as HttpResponse);

const getBoEntities = _getBoEntitiesFactory(mockHttpRequestFunction, _getBoEntitiesDefaultTransformFunctionFactory(mockHttpRequestFunction));
const result: GetEntitiesResultPage = await getBoEntities(context, params);
const result: GetBoEntitiesResultPage = await getBoEntities(context, params);

expect(result).toHaveProperty("getNextPage");

Expand Down Expand Up @@ -134,7 +134,7 @@ describe("getBoEntitiesFactory", () => {
mockHttpRequestFunction.mockResolvedValue({ data: response } as HttpResponse);

const getBoEntities = _getBoEntitiesFactory(mockHttpRequestFunction, _getBoEntitiesDefaultTransformFunctionFactory(mockHttpRequestFunction));
const result: GetEntitiesResultPage = await getBoEntities(context, params);
const result: GetBoEntitiesResultPage = await getBoEntities(context, params);

expect(result).toHaveProperty("value");
expect(result.value).toHaveLength(0);
Expand Down
51 changes: 33 additions & 18 deletions packages/business-objects/src/entities/get-entities/get-entities.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,11 +16,11 @@ export interface GetBoEntitiesParams {
* Page of a searchResult. There might be more than one page.
* @category Entity
*/
export interface GetEntitiesResultPage<E = any> {
export interface GetBoEntitiesResultPage<E = any> {
/** Array of entitiess found */
value: E[]
/** Function that returns the next page. Undefined if there is none. */
getNextPage?: () => Promise<GetEntitiesResultPage<E>>;
getNextPage?: () => Promise<GetBoEntitiesResultPage<E>>;
}

/**
Expand All @@ -29,10 +29,10 @@ export interface GetEntitiesResultPage<E = any> {
* @internal
* @category Entity
*/
export function _getBoEntitiesDefaultTransformFunctionFactory<E>(httpRequestFunction: (context: DvelopContext, config: HttpConfig) => Promise<HttpResponse>): (response: HttpResponse, context: DvelopContext, params: GetBoEntitiesParams) => GetEntitiesResultPage<E> {
export function _getBoEntitiesDefaultTransformFunctionFactory<E>(httpRequestFunction: (context: DvelopContext, config: HttpConfig) => Promise<HttpResponse>): (response: HttpResponse, context: DvelopContext, params: GetBoEntitiesParams) => GetBoEntitiesResultPage<E> {
return <E>(response: HttpResponse, context: DvelopContext, params: GetBoEntitiesParams) => {

let result: GetEntitiesResultPage<E> = {
let result: GetBoEntitiesResultPage<E> = {
value: response.data.value
};

Expand All @@ -58,8 +58,8 @@ export function _getBoEntitiesDefaultTransformFunctionFactory<E>(httpRequestFunc
*/
export function _getBoEntitiesFactory<E>(
httpRequestFunction: (context: DvelopContext, config: HttpConfig) => Promise<HttpResponse>,
transformFunction: (response: HttpResponse, context: DvelopContext, params: GetBoEntitiesParams) => GetEntitiesResultPage<E>
): (context: DvelopContext, params: GetBoEntitiesParams) => Promise<GetEntitiesResultPage<E>> {
transformFunction: (response: HttpResponse, context: DvelopContext, params: GetBoEntitiesParams) => GetBoEntitiesResultPage<E>
): (context: DvelopContext, params: GetBoEntitiesParams) => Promise<GetBoEntitiesResultPage<E>> {
return async (context: DvelopContext, params: GetBoEntitiesParams) => {

const response = await httpRequestFunction(context, {
Expand All @@ -72,49 +72,64 @@ export function _getBoEntitiesFactory<E>(
}

/**
* Returns all specified entities from a model.
* @template E Type for Entity. Defaults to `any`.
* Returns all specified entities from a model. This result might be partial due to the default page size.
* You can navigate to the next pages using the function ```getNextPage```. If the function is undefined, the page does not exist.
*
* @example
* ```typescript
* import { getBoEntities } from "@dvelop-sdk/business-objects";
*
* const employees = await getBoEntities({
* const resultPage: GetEntitiesResultPage = await getBoEntities({
* systemBaseUri: "https://sacred-heart-hospital.d-velop.cloud",
* authSessionId: "3f3c428d452"
* },{
* modelName: "HOSPITALBASEDATA",
* pluralEntityName: "employees",
* pluralEntityName: "employees"
* });
* console.log(employees); // [{ employeeId: '1', firstName: 'John Micheal', lastName: 'Dorian', jobTitel: 'senior physician' }, { employeeId: '2', firstName: 'Christopher', lastName: 'Turk', jobTitel: 'chief surgeon' }]
*
* let employees = await resultPage.value;
*
* // Use this for paging
* while (resultPage.getNextPage) {
* const nextPage: GetBoEntitiesResultPage = await resultPage.getNextPage();
* employees = employees.concat(nextPage.value);
* }
* ```
* ---
* You can also use generics:
* @example
* * @example
* ```typescript
* import { getBoEntities } from "@dvelop-sdk/business-objects";
*
* interface Employee {
* interface Employee {
* employeeId: string;
* firstName: string;
* lastName: string;
* jobTitel: string;
* }
*
* const employees: Employee[] = await getBoEntities<Employee>({
*
* const resultPage: GetBoEntitiesResultPage<Employee> = await getBoEntities({
* systemBaseUri: "https://sacred-heart-hospital.d-velop.cloud",
* authSessionId: "3f3c428d452"
* },{
* }, {
* modelName: "HOSPITALBASEDATA",
* pluralEntityName: "employees"
* });
*
*
* let employees: Employee[] = await resultPage.value;
*
* // Use this for paging
* while (resultPage.getNextPage) {
* const nextPage: GetBoEntitiesResultPage<Employee> = await resultPage.getNextPage();
* employees = employees.concat(nextPage.value);
* }
*
* employees.forEach(e => console.log(e.lastName));
* // Dorian
* // Turk
* ```
*/
/* istanbul ignore next */
export async function getBoEntities<E = any>(context: DvelopContext, params: GetBoEntitiesParams): Promise<GetEntitiesResultPage<E>> {
export async function getBoEntities<E = any>(context: DvelopContext, params: GetBoEntitiesParams): Promise<GetBoEntitiesResultPage<E>> {
return await _getBoEntitiesFactory<E>(_defaultHttpRequestFunction, _getBoEntitiesDefaultTransformFunctionFactory(_defaultHttpRequestFunction))(context, params);
}
2 changes: 1 addition & 1 deletion packages/business-objects/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ export { DvelopContext, BadInputError, UnauthorizedError, ForbiddenError, NotFou
export { BusinessObjectsError } from "./utils/http";
export * as internals from "./internal";

export { GetBoEntitiesParams, getBoEntities, GetEntitiesResultPage } from "./entities/get-entities/get-entities";
export { GetBoEntitiesParams, getBoEntities, GetBoEntitiesResultPage } from "./entities/get-entities/get-entities";
export { GetBoEntityParams, getBoEntity } from "./entities/get-entity/get-entity";
export { CreateBoEntityParams, createBoEntity } from "./entities/create-entity/create-entity";
export { UpdateBoEntityParams, updateBoEntity } from "./entities/update-entity/update-entity";
Expand Down