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

Агент бізнес-схеми

інформація

Агент бізнес-схеми schemaAgent - ключовий елемент інтегрованої системи, спрямований на забезпечення ефективної комунікації між різними модулями або компонентами в межах бізнес-схеми. Його головна мета полягає в упорядкуванні та спрощенні обміну даними та інформацією між різними структурами бізнес-схеми.

Структура агента

Головна функція агента бізнес-схеми schemaAgent полягає у впорядкуванні та управлінні доступом до повного опису бізнес-схеми, що представляє собою набір сервісів, кожен з яких містить підсумкову інформацію про прикладні області у вигляді об'єктів типу Map. Кожна прикладна область, у свою чергу, містить перелік прикріплених документів та набір методів, які надають доступ до цих документів.

schema

getter об'єкту, який надає группу бізнес сервісів.

примітка

Детальний опис структури групи бізнес сервісів дивись - Структура бізнес-схеми

import { setRouter } from '@x-fiber/proton';
import type { ApiRequest, Agents, Context } from '@x-fiber/proton';

export const BusUsersAggRouter = setRouter<'getOne'>({
getOne: {
GET: {
scope: 'private:user',
handler: async (request: Request, agents: Agents, context: Context) => {
console.log(agents.schemaAgent.schema);
},
},
},
});

де:

  • Типи:
    • Request - тип обʼєкту запиту.
    • Agents - тип переліку агентів функціональності.
    • Context - тип контексту виконання запиту.
  • Структури:
    • setRouter - вбудована функція в ядро обчислень, яка призначення для опису маршрутизатора.
    • getOne - назва кінцевого маршруту.
    • GET - http метод.
    • scope - тип приватизації.
    • handler - обробник кінцевого маршруту.

getMongoRepository

Репозиторій MongoDB доступний для використання в обробниках http запитах та обробниках ws подій. Метод getMongoRepository призначений для отримання переліку методів репозиторію цієї ж прикладної області, де викликається агент бізнес-схеми.

інформація

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

import { setRouter } from '@x-fiber/proton';
import type { ApiRequest, Agents, Context } from '@x-fiber/proton';

type User = {
// ... user structure
}
type Repository = {
create: (user: User) => Promise<string>
getById: (id: string) => Promise<User | null>
getAll: (limit?: number) => Promise<User[] | null>
removeById: (id: string) => Promise<void>
}

export const BusUsersAggRouter = setRouter<'getOne'>({
getOne: {
GET: {
scope: 'private:user',
handler: async (request: ApiRequest, agents: Agents, context: Context) => {
const repository = agents.schemaAgent.getMongoRepository<Repository>()

// repository.create()
// repository.getById()
// repository.getAll()
// repository.removeById()
},
},
},
});

де:

  • Типи:
    • User - структура схеми SQL бази даних.
    • Repository - перелік методів по роботі з SQL базою даних конкретної прикладної області.
    • Request - тип обʼєкту запиту.
    • Agents - тип переліку агентів функціональності.
    • Context - тип контексту виконання запиту.
  • Структури:
    • setRouter - вбудована функція в ядро обчислень, яка призначення для опису маршрутизатора.
    • getOne - назва кінцевого маршруту.
    • GET - http метод.
    • scope - тип приватизації.
    • handler - обробник кінцевого маршруту.
warning

Для забезпечення контролю кодової бази на рівні типів потрібно передавати загальний тип репозиторію при виклику методу.

getAnotherMongoRepository

Репозиторій MongoDB доступний для використання в обробниках http запитах та обробниках ws подій. Метод getAnotherMongoRepository призначений для отримання переліку методів репозиторію цього ж сервісу, але відмінної прикладної області від тієї, де викликається агент бізнес-схеми.

інформація

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

import { setRouter } from '@x-fiber/proton';
import type { ApiRequest, Agents, Context } from '@x-fiber/proton';

type User = {
// ... user structure
}
type Domains = 'BusUsersAgg' | 'BusUsersAuthSpec' | 'BusUsersPermissionSpec'
type Repository = {
create: (user: User) => Promise<string>
getById: (id: string) => Promise<User | null>
getAll: (limit?: number) => Promise<User[] | null>
removeById: (id: string) => Promise<void>
}

export const BusUsersAggRouter = setRouter<'getOne'>({
getOne: {
GET: {
scope: 'private:user',
handler: async (request: ApiRequest, agents: Agents, context: Context) => {
const repository = agents.schemaAgent.getAnotherMongoRepository<
Domains,
Repository
>('BusUsersAgg');

// repository.create()
// repository.getById()
// repository.getAll()
// repository.removeById()
},
},
},
});

де:

  • Типи:
    • User - структура схеми SQL бази даних.
    • Domains - перелік прикладних областей конкретного сервісу.
    • Repository - перелік методів по роботі з SQL базою даних конкретної прикладної області.
    • Request - тип обʼєкту запиту.
    • Agents - тип переліку агентів функціональності.
    • Context - тип контексту виконання запиту.
  • Структури:
    • setRouter - вбудована функція в ядро обчислень, яка призначення для опису маршрутизатора.
    • getOne - назва кінцевого маршруту.
    • GET - http метод.
    • scope - тип приватизації.
    • handler - обробник кінцевого маршруту.
warning

Для забезпечення контролю кодової бази на рівні типів необхідно передавати наступні дані:

  1. Строковий тип з переліком назв прикладних областей для їх валідації.
  2. Структура репозиторію TypeORM з описом переліку методів.

getTypeormRepository

Репозиторій TypeORM доступний для використання в обробниках http запитах та обробниках ws подій. Метод getTypeormRepository призначений для отримання переліку методів репозиторію цієї ж прикладної області, де викликається агент бізнес-схеми.

інформація

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

import { setRouter } from '@x-fiber/proton';
import type { ApiRequest, Agents, Context } from '@x-fiber/proton';

type User = {
// ... user structure
}

type Domains = 'BusUsersAgg' | 'BusUsersAuthSpec' | 'BusUsersPermissionSpec'
type Repository = {
create: (user: User) => Promise<string>
getById: (id: string) => Promise<User | null>
getAll: (limit?: number) => Promise<User[] | null>
removeById: (id: string) => Promise<void>
}

export const BusUsersAggRouter = setRouter<'getOne'>({
getOne: {
GET: {
scope: 'private:user',
handler: async (request: ApiRequest, agents: Agents, context: Context) => {
const repository = agents.schemaAgent.getTypeormRepository<Repository>();

// repository.create()
// repository.getById()
// repository.getAll()
// repository.removeById()
},
},
},
});

де:

  • Типи:
    • User - структура схеми SQL бази даних.
    • Domains - перелік прикладних областей конкретного сервісу.
    • Repository - перелік методів по роботі з SQL базою даних конкретної прикладної області.
    • Request - тип обʼєкту запиту.
    • Agents - тип переліку агентів функціональності.
    • Context - тип контексту виконання запиту.
  • Структури:
    • setRouter - вбудована функція в ядро обчислень, яка призначення для опису маршрутизатора.
    • getOne - назва кінцевого маршруту.
    • GET - http метод.
    • scope - тип приватизації.
    • handler - обробник кінцевого маршруту.
warning

Для забезпечення контролю кодової бази на рівні типів необхідно передавати наступні дані:

  1. Структура репозиторію TypeORM з описом переліку методів.

getAnotherTypeormRepository

Репозиторій TypeORM доступний для використання в обробниках http запитах та обробниках ws подій. Метод getAnotherTypeormRepository призначений для отримання переліку методів репозиторію цього ж сервісу, але відмінної прикладної області від тієї, де викликається агент бізнес-схеми.

інформація

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

import { setRouter } from '@x-fiber/proton';
import type { ApiRequest, Agents, Context } from '@x-fiber/proton';

type User = {
// ... user structure
}

type Domains = 'BusUsersAgg' | 'BusUsersAuthSpec' | 'BusUsersPermissionSpec'
type Repository = {
create: (user: User) => Promise<string>
getById: (id: string) => Promise<User | null>
getAll: (limit?: number) => Promise<User[] | null>
removeById: (id: string) => Promise<void>
}

export const BusUsersAggRouter = setRouter<'getOne'>({
getOne: {
GET: {
scope: 'private:user',
handler: async (request: ApiRequest, agents: Agents, context: Context) => {
const repository = agents.schemaAgent.getAnotherMongoRepository<
Domains,
Repository
>('BusUsersAgg');

// repository.create()
// repository.getById()
// repository.getAll()
// repository.removeById()
},
},
},
});

де:

  • Типи:
    • User - структура схеми SQL бази даних.
    • Domains - перелік прикладних областей конкретного сервісу.
    • Repository - перелік методів по роботі з SQL базою даних конкретної прикладної області.
    • Request - тип обʼєкту запиту.
    • Agents - тип переліку агентів функціональності.
    • Context - тип контексту виконання запиту.
  • Структури:
    • setRouter - вбудована функція в ядро обчислень, яка призначення для опису маршрутизатора.
    • getOne - назва кінцевого маршруту.
    • GET - http метод.
    • scope - тип приватизації.
    • handler - обробник кінцевого маршруту.
warning

Для забезпечення контролю кодової бази на рівні типів необхідно передавати наступні дані:

  1. Строковий тип з переліком назв прикладних областей для їх валідації.
  2. Структура репозиторію TypeORM з описом переліку методів.

getValidator

Валідатор доступний для використання в обробниках http запитах та обробниках ws подій. Метод getValidator призначений для отримання переліку методів валідації цієЇ ж прикладної області, де викликається агент бізнес-схеми.

інформація

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

import { setRouter } from '@x-fiber/proton';
import type {
ApiRequest,
Agents,
Context,
ValidateErrors
} from '@x-fiber/proton';

type User = {
// ... user structure
}
type v1SignupResult = {
// .. signup result structure
}

type Domains = 'BusUsersAgg' | 'BusUsersAuthSpec' | 'BusUsersPermissionSpec'
type Validator = {
v1SignupParams: (user: User) => ValidateErrors | null
v1SignupResponse: (user: User) => ValidateErrors | null
}

export const BusUsersAggRouter = setRouter<'getOne'>({
getOne: {
GET: {
scope: 'private:user',
handler: async (request: ApiRequest, agents: Agents, context: Context) => {
const validator = agents.schemaAgent.getValidator<Validator>();

// validator.v1SignupParams()
// validator.v1SignupResponse()
},
},
},
});
  • Типи:
    • User - структура схеми SQL бази даних.
    • v1SignupResult - структура даних, результату, який буде наданий на запит.
    • ValidateErrors - масив помилок валідації даних.
    • Validator - перелік методів валідації даних конкретної прикладної області.
    • Request - тип обʼєкту запиту.
    • Agents - тип переліку агентів функціональності.
    • Context - тип контексту виконання запиту.
  • Структури:
    • setRouter - вбудована функція в ядро обчислень, яка призначення для опису маршрутизатора.
    • getOne - назва кінцевого маршруту.
    • GET - http метод.
    • scope - тип приватизації.
    • handler - обробник кінцевого маршруту.
warning

Для забезпечення контролю кодової бази на рівні типів необхідно передавати наступні дані:

  1. Структура валідатора з описом переліку методів.

getAnotherValidator

Валідатор доступний для використання в обробниках http запитах та обробниках ws подій. Метод getAnotherValidator призначений для отримання переліку методів валідації прикладної області цього ж сервісу, але відмінної прикладної області від тієї, де викликається агент бізнес-схеми.

інформація

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

import { setRouter } from '@x-fiber/proton';
import type {
ApiRequest,
Agents,
Context,
ValidateErrors
} from '@x-fiber/proton';

type User = {
// ... user structure
}
type v1SignupResult = {
// .. signup result structure
}

type Domains = 'BusUsersAgg' | 'BusUsersAuthSpec' | 'BusUsersPermissionSpec'
type Validator = {
v1SignupParams: (user: User) => ValidateErrors | null
v1SignupResponse: (user: User) => ValidateErrors | null
}

export const BusUsersAggRouter = setRouter<'getOne'>({
getOne: {
GET: {
scope: "private:user",
handler: async (request: ApiRequest, agents: Agents, context: Context) => {
const validator = agents.schemaAgent.getAnotherValidator<Domains, Validator>('BusUsersAgg');

// validator.v1SignupParams()
// validator.v1SignupResponse()
},
},
},
});
  • Типи:
    • User - структура схеми SQL бази даних.
    • Domains - перелік прикладних областей конкретного сервісу.
    • v1SignupResult - структура даних, результату, який буде наданий на запит.
    • ValidateErrors - масив помилок валідації даних.
    • Validator - перелік методів валідації даних конкретної прикладної області.
    • Request - тип обʼєкту запиту.
    • Agents - тип переліку агентів функціональності.
    • Context - тип контексту виконання запиту.
  • Структури:
    • setRouter - вбудована функція в ядро обчислень, яка призначення для опису маршрутизатора.
    • getOne - назва кінцевого маршруту.
    • GET - http метод.
    • scope - тип приватизації.
    • handler - обробник кінцевого маршруту.
warning

Для забезпечення контролю кодової бази на рівні типів необхідно передавати наступні дані:

  1. Строковий тип з переліком назв прикладних областей для їх валідації.
  2. Структура валідатора з описом переліку методів.

getResource

Словник доступний для використання в обробниках http запитах та обробниках ws подій для отримання необхідного значення перекладу. Метод getResource призначений для отримання документа Словник цієї ж прикладної області, де викликається агент бізнес-схеми.

інформація

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

import { setRouter } from '@x-fiber/proton';
import type { ApiRequest, Agents, Context } from '@x-fiber/proton';

type Languages = 'ua' | 'ru' | 'en';

type Dictionary = {
create: {
notFound: string;
};
move: {
in: {
upScale: string;
localize: string;
};
};
}


export const BusUsersAggRouter = setRouter<'getOne'>({
getOne: {
GET: {
scope: 'private:user',
handler: async (request: ApiRequest, agents: Agents, context: Context) => {
const { getResource } = agents.schemaAgent

const resource = getResource<Dictionary, void, Languages>('move.in.upScale', {}, 'en');
console.log(resource) // string
},
},
},
});
  • Типи:
    • Languages - перелік мов перекладу.
    • Dictionary - структура словника перекладу.
    • Request - тип обʼєкту запиту.
    • Agents - тип переліку агентів функціональності.
    • Context - тип контексту виконання запиту.
  • Структури:
    • setRouter - вбудована функція в ядро обчислень, яка призначення для опису маршрутизатора.
    • 'get-one' - назва кінцевого маршруту.
    • GET - http метод.
    • scope - тип приватизації.
    • handler - обробник кінцевого маршруту.
warning

Для забезпечення контролю кодової бази на рівні типів необхідно передавати наступні дані:

  1. Структура словника перекладу, яка подальше використовується для створення ключів доступу до кінцевих перекладів.
  2. У випадку наявності динамічних параметрів у строці перекладу, потрібно вказати назви цих динамічних параметрів.
  3. Тип мови перекладу для їх валідації.
інформація

Формат доступу до кінцевого перекладу повторює синтаксис доступу то значення конкретного поля в обʼєкті. Наприклад move.in.upScale

getAnotherResource

Словник доступний для використання в обробниках http запитах та обробниках ws подій для отримання необхідного значення перекладу. Метод getResource призначений для отримання документа Словник цього ж сервісу, але відмінної прикладної області від тієї, де викликається агент бізнес-схеми.

інформація

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

import { setRouter } from '@x-fiber/proton';
import type { ApiRequest, Agents, Context } from '@x-fiber/proton';

type Domains = 'BusUsersAgg' | 'BusUsersAuthSpec'
type Languages = "ua" | "ru" | "en";

type Dictionary = {
create: {
success: string;
notFound: string;
};
move: {
in: {
upScale: string;
localize: string;
};
};
}

export const BusUsersAggRouter = setRouter<'getOne'>({
getOne: {
GET: {
scope: "private:user",
handler: async (request: ApiRequest, agents: Agents, context: Context) => {
const { getAnotherResource } = agents.schemaAgent

const resource = getAnotherResource<Domains, Dictionary, void, Languages>("BusUsersAgg", "move.in.upScale", {});
console.log(resource) // string
},
},
},
});
  • Типи:
    • Domains - перелік прикладних областей конкретного сервісу.
    • Languages - перелік мов перекладу.
    • Dictionary - структура словника перекладу.
    • Request - тип обʼєкту запиту.
    • Agents - тип переліку агентів функціональності.
    • Context - тип контексту виконання запиту.
  • Структури:
    • setRouter - вбудована функція в ядро обчислень, яка призначення для опису маршрутизатора.
    • getOne - назва кінцевого маршруту.
    • GET - http метод.
    • scope - тип приватизації.
    • handler - обробник кінцевого маршруту.
warning

Для забезпечення контролю кодової бази на рівні типів необхідно передавати наступні дані:

  1. Строковий тип з переліком назв прикладних областей для їх валідації.
  2. Структура словника перекладу, яка подальше використовується для створення ключів доступу до кінцевих перекладів.
  3. У випадку наявності динамічних параметрів у строці перекладу, потрібно вказати назви цих динамічних параметрів.
  4. Тип мови перекладу для їх валідації.
інформація

Формат доступу до кінцевого перекладу повторює синтаксис доступу то значення конкретного поля в обʼєкті. Наприклад move.in.upScale