Агент бізнес-схеми
Агент бізнес-схеми 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
- обробник кінцевого маршруту.
Для забезпечення контролю кодової бази на рівні типів потрібно передавати загальний тип репозиторію при виклику методу.
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
- обробник кінцевого маршруту.
Для забезпечення контролю кодової бази на рівні типів необхідно передавати наступні дані:
- Строковий тип з переліком назв прикладних областей для їх валідації.
- Структура репозиторію
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
- обробник кінцевого маршруту.
Для забезпечення контролю кодової бази на рівні типів необхідно передавати наступні дані:
- Структура репозиторію
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
- обробник кінцевого маршруту.
Для забезпечення контролю кодової бази на рівні типів необхідно передавати наступні дані:
- Строковий тип з переліком назв прикладних областей для їх валідації.
- Структура репозиторію
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
- обробник кінцевого маршруту.
Для забезпечення контролю кодової бази на рівні типів необхідно передавати наступні дані:
- Структура валідатора з описом переліку методів.
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
- обробник кінцевого маршруту.
Для забезпечення контролю кодової бази на рівні типів необхідно передавати наступні дані:
- Строковий тип з переліком назв прикладних областей для їх валідації.
- Структура валідатора з описом переліку методів.
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
- обробник кінцевого маршруту.
Для забезпечення контролю кодової бази на рівні типів необхідно передавати наступні дані:
- Структура словника перекладу, яка подальше використовується для створення ключів доступу до кінцевих перекладів.
- У випадку наявності динамічних параметрів у строці перекладу, потрібно вказати назви цих динамічних параметрів.
- Тип мови перекладу для їх валідації.
Формат доступу до кінцевого перекладу повторює синтаксис доступу то значення конкретного поля в обʼєкті.
Наприклад move.in.upScale