Перейти до основного вмісту

Помічники

інформація

Документ "Помічник" відповідає за опис функцій загального призначення. Ці методи можуть бути використані в обробниках http запитів, обробниках ws подій, документі "Брокер" та документі "Планувальник".

Архітектура

При потребі створення допоміжних функцій необхідно створити документ "Помічник" з переліком необхідних фукнцій.

Документ "Помічник" повинен бути зареєстрований в документі "Реєстр" предметної області, який в свою чергу, має бути зареєстрований в відповідному сервісі включеному до бізнес-схеми. Це гарантує, що при запуску ядра обчислень будуть завантажені всі допоміжні функції. Здійснюючи виконання обробників запиту, подій тощо, в випадку наявності звернення до допоміжних функцій, ці функції будуть викликані.

helper-arch.drawio.svg

Склад

Помічник відображає структуру даних у форматі "ключ-значення", де кожен ключ відображає назву функції, а йому відповідає власне сама функція. Цей підхід дозволяє зручно організувати та керувати функціональними можливостями системи, забезпечуючи швидкий доступ до потрібного функціоналу через імʼя функції як ключ.

type AsyncFn = (...args: any[]) => Promise<any>;
type Fn = (...args: any[]) => Promise<any>;
type AnyFunction = Fn | AsyncFn
type AnyFunctions = Record<string, AnyFunction>
type Agents = {
// agents description
}

type HelperStructure<S extends Record<string, any>, T extends AnyFunctions = AnyFunctions> = {
[K in keyof T]: T[K] extends (data: infer D, ...args: infer A) => infer R
? (agents: Agents, data: D) => R
: T[K];
};

де:

  • AsyncFn - тип будь-якої асинхронної функції.
  • Fn - тип будь-якої синхронної функції.
  • AnyFunction - тип будь-якої асинхронної або синхронної функції.
  • Agents - агенти функціональності.
  • HelperStructure - структура помічника.

Аргумент агентів функціональності

Аргумент агентів функціональності являє собою обʼєкт з переліком агентів:

type IFunctionalityAgent = {
// agent functionality description
}

type ISchemaAgent = {
// agent functionality description
}

type IIntegrationAgent = {
// agent functionality description
}

export type Agents = {
fnAgent: IFunctionalityAgent;
schemaAgent: ISchemaAgent;
inAgent: IIntegrationAgent;
};

де:

  • fnAgent - агент з переліком просторів імен функціональності, які надають функціональні компоненти ядра обчислень.
  • schemaAgent - агент з переліком функціональності для доступу до інших складових бізнес-схеми.
  • inAgent - агент з переліком просторів імен функціональності, які надають інтеграційні рішення ядра обчислень.

Деталі структури кожного агента функціональності описується в розділі "Агенти"

Аргумент даних

Аргументами даних виступає опис тих даних, які необхідно надати функції з відповідного обробника.

Реалізація

import { setHelper } from '@x-fiber/proton';
import type { Provider } from '@x-fiber/proton';

type UserName = { name: string; surname: string };
type Helper = {
getFullName: (
name: UserName['name'],
surname: UserName['surname'],
beforeNames: UserName[]
) => string;
};

export const BusUsersAggHelper = setHelper<Helper>({
getFullName: (
provider: Provider,
name: UserName['name'],
surname: UserName['surname'],
beforeNames: UserName[]
): string => {
// ... handler logic
},
});

Реєстрація

Щоб успішно використовувати допоміжні функції, документ "Помічник" повинен бути зареєстрований в документі "Реєстр" цієї предметної області. Наприклад для предметної області - агрегат "Користувачі", необхідно в опис документів функції setRegistry для встановлення посилання на помічник та інші компоненти модуля:

import { setRegistry } from '@x-fiber/proton';
import { BusUsersAggHelper } from './BusUsers.agg.helper';

export const BusUsersAggRegistry = setRegistry<'BusUsersAgg'>('BusUsersAgg', {
helper: BusUsersAggHelper,
// ... other documents
});