From cb2c3be51f110d0779f7b87782d8c3617ff710d6 Mon Sep 17 00:00:00 2001 From: Kiran Kharade Date: Sat, 30 Nov 2024 22:00:07 +0530 Subject: [PATCH] Updated schema instance --- .../schema.instance/schema.instance.routes.ts | 2 +- .../schema.instance.validator.ts | 31 ++++++++++---- .../mappers/engine/schema.instance.mapper.ts | 1 + .../models/engine/schema.instance.model.ts | 5 ++- .../engine/schema.instance.service.ts | 15 ++----- src/domain.types/engine/intermediate.types.ts | 40 +++++++++++++------ .../engine/schema.instance.types.ts | 8 ++-- src/modules/engine.execution/event.handler.ts | 2 +- 8 files changed, 65 insertions(+), 39 deletions(-) diff --git a/src/api/engine/schema.instance/schema.instance.routes.ts b/src/api/engine/schema.instance/schema.instance.routes.ts index 4a552b3..8e697de 100644 --- a/src/api/engine/schema.instance/schema.instance.routes.ts +++ b/src/api/engine/schema.instance/schema.instance.routes.ts @@ -15,7 +15,7 @@ export const register = (app: express.Application): void => { router.post('/', Auth.handle(`${contextBase}.Create`, true, false, false), controller.create); router.get('/search', Auth.handle(`${contextBase}.Search`, true, false, false), controller.search); router.get('/:id', Auth.handle(`${contextBase}.GetById`, true, false, false), controller.getById); - router.put('/:id', Auth.handle(`${contextBase}.Update`, true, false, false), controller.update); + // router.put('/:id', Auth.handle(`${contextBase}.Update`, true, false, false), controller.update); router.delete('/:id', Auth.handle(`${contextBase}.Delete`, true, false, false), controller.delete); app.use('/api/v1/engine/schema-instances', router); diff --git a/src/api/engine/schema.instance/schema.instance.validator.ts b/src/api/engine/schema.instance/schema.instance.validator.ts index 46b44f3..5207b6c 100644 --- a/src/api/engine/schema.instance/schema.instance.validator.ts +++ b/src/api/engine/schema.instance/schema.instance.validator.ts @@ -7,6 +7,7 @@ import { } from '../../../domain.types/engine/schema.instance.types'; import { ErrorHandler } from '../../../common/handlers/error.handler'; import BaseValidator from '../../base.validator'; +import { ParamType } from '../../../domain.types/engine/engine.enums'; /////////////////////////////////////////////////////////////////////////////////////////////// @@ -15,13 +16,21 @@ export class SchemaInstanceValidator extends BaseValidator { public validateCreateRequest = async (request: express.Request): Promise => { try { const schema = joi.object({ - SchemaId : joi.string().uuid().required(), - ContextId : joi.string().uuid().required(), + SchemaId : joi.string().uuid().required(), + ContextParams : joi.object({ + Name : joi.string().max(128).required(), + Params : joi.array().items(joi.object({ + Name : joi.string().max(128).required(), + Type : joi.string().valid(...Object.values(ParamType)).required(), + Description : joi.string().max(256).optional(), + Value : joi.any().required(), + })).required() + }).optional(), }); await schema.validateAsync(request.body); return { - SchemaId : request.body.SchemaId, - ContextId : request.body.ContextId, + SchemaId : request.body.SchemaId, + ContextParams : request.body.ContextParams }; } catch (error) { ErrorHandler.handleValidationError(error); @@ -31,13 +40,19 @@ export class SchemaInstanceValidator extends BaseValidator { public validateUpdateRequest = async (request: express.Request): Promise => { try { const schema = joi.object({ - SchemaId : joi.string().uuid().optional(), - ContextId : joi.string().uuid().optional(), + ContextParams : joi.object({ + Name : joi.string().max(128).required(), + Params : joi.array().items(joi.object({ + Name : joi.string().max(128).required(), + Type : joi.string().valid(...Object.values(ParamType)).required(), + Description : joi.string().max(256).optional(), + Value : joi.any().required(), + })).required() + }).optional(), }); await schema.validateAsync(request.body); return { - SchemaId : request.body.SchemaId ?? null, - ContextId : request.body.ContextId ?? null, + ContextParams : request.body.ContextParams ?? null }; } catch (error) { ErrorHandler.handleValidationError(error); diff --git a/src/database/mappers/engine/schema.instance.mapper.ts b/src/database/mappers/engine/schema.instance.mapper.ts index da15863..81a56c0 100644 --- a/src/database/mappers/engine/schema.instance.mapper.ts +++ b/src/database/mappers/engine/schema.instance.mapper.ts @@ -42,6 +42,7 @@ export class SchemaInstanceMapper { } : null }; }) : [], + Almanac : instance.Almanac, ContextParams : instance.ContextParams, ExecutionStarted : instance.ExecutionStarted, ExecutionStartedTimestamp : instance.ExecutionStartedTimestamp, diff --git a/src/database/models/engine/schema.instance.model.ts b/src/database/models/engine/schema.instance.model.ts index 6e318c1..8510990 100644 --- a/src/database/models/engine/schema.instance.model.ts +++ b/src/database/models/engine/schema.instance.model.ts @@ -13,7 +13,7 @@ import { } from 'typeorm'; import { Schema } from "./schema.model"; import { NodeInstance } from "./node.instance.model"; -import { ContextParams } from "../../../domain.types/engine/intermediate.types"; +import { Almanac, ContextParams } from "../../../domain.types/engine/intermediate.types"; //////////////////////////////////////////////////////////////////////// @@ -47,6 +47,9 @@ export class SchemaInstance { @Column({ type: 'datetime', nullable: true }) ExecutionStartedTimestamp: Date; + @Column({ type: 'simple-json', nullable: true }) + Almanac: Almanac; + @CreateDateColumn() CreatedAt : Date; diff --git a/src/database/services/engine/schema.instance.service.ts b/src/database/services/engine/schema.instance.service.ts index a4002bf..3745054 100644 --- a/src/database/services/engine/schema.instance.service.ts +++ b/src/database/services/engine/schema.instance.service.ts @@ -166,9 +166,8 @@ export class SchemaInstanceService extends BaseService { if (!schemaInstance) { ErrorHandler.throwNotFoundError('SchemaInstance not found!'); } - if (model.SchemaId != null) { - const schema = await this._commonUtils.getSchema(model.SchemaId); - schemaInstance.Schema = schema; + if (model.ContextParams != null) { + schemaInstance.ContextParams = model.ContextParams; } var record = await this._schemaInstanceRepository.save(schemaInstance); return SchemaInstanceMapper.toResponseDto(record); @@ -249,16 +248,10 @@ export class SchemaInstanceService extends BaseService { }; if (filters.SchemaId) { - search.where['Schema'] = { - id : '' - }; search.where['Schema'].id = filters.SchemaId; } - if (filters.ContextId) { - search.where['Context'] = { - id : '' - }; - search.where['Context'].id = filters.ContextId; + if (filters.TenantId) { + search.where['TenantId'] = filters.TenantId; } return search; diff --git a/src/domain.types/engine/intermediate.types.ts b/src/domain.types/engine/intermediate.types.ts index 3bc7fa3..46e5594 100644 --- a/src/domain.types/engine/intermediate.types.ts +++ b/src/domain.types/engine/intermediate.types.ts @@ -26,6 +26,15 @@ export interface Location { export type DistanceUnit = 'km' | 'mi' | 'm'; export type TimestampUnit = 'ms' | 's' | 'm' | 'h' | 'd' | 'w' | 'mo' | 'y'; +export interface AlmanacObject { + Name: string; + Data: any[] | any; +} + +export interface Almanac { + Facts: AlmanacObject[]; +} + export interface QuestionResponseMessage { QuestionId ?: uuid; QuestionText ?: string; @@ -243,19 +252,24 @@ export interface XNodeInstance { } export interface XSchemaInstance { - id : uuid; - SchemaId : uuid; - Schema : XSchema; - Name : string; - Description : string; - Exited : boolean; - RootNode ?: XNode; - TenantId ?: uuid; - Nodes : XNode[]; - ContextParams: ContextParams; - CurrentNode : XNode; - CreatedAt : Date; - UpdatedAt : Date; + id : uuid; + SchemaId : uuid; + Schema : XSchema; + Name : string; + Description : string; + Exited : boolean; + RootNode ?: XNode; + RootNodeInstance : XNodeInstance; + TenantId ?: uuid; + Nodes : XNode[]; + NodeInstances : XNodeInstance[]; + CurrentNodeInstance : XNodeInstance; + ContextParams : ContextParams; + ActiveListeningNodes: XNodeInstance[]; + Almanac : Almanac; + CurrentNode : XNode; + CreatedAt : Date; + UpdatedAt : Date; } export class XSendMessageAction extends XAction { diff --git a/src/domain.types/engine/schema.instance.types.ts b/src/domain.types/engine/schema.instance.types.ts index 39de1fc..91b6e05 100644 --- a/src/domain.types/engine/schema.instance.types.ts +++ b/src/domain.types/engine/schema.instance.types.ts @@ -5,7 +5,7 @@ import { import { uuid } from "../miscellaneous/system.types"; -import { ContextParams } from "./intermediate.types"; +import { Almanac, ContextParams } from "./intermediate.types"; ////////////////////////////////////////////////////////////// @@ -15,8 +15,7 @@ export interface SchemaInstanceCreateModel { } export interface SchemaInstanceUpdateModel { - SchemaId ?: uuid; - ContextId ?: uuid; + ContextParams : ContextParams; } export interface SchemaInstanceResponseDto { @@ -49,6 +48,7 @@ export interface SchemaInstanceResponseDto { Name: string; } }[]; + Almanac: Almanac; ExecutionStarted: boolean; ExecutionStartedTimestamp: Date; CreatedAt: Date; @@ -57,7 +57,7 @@ export interface SchemaInstanceResponseDto { export interface SchemaInstanceSearchFilters extends BaseSearchFilters { SchemaId ?: uuid; - ContextId ?: uuid; + TenantId ?: uuid; } export interface SchemaInstanceSearchResults extends BaseSearchResults { diff --git a/src/modules/engine.execution/event.handler.ts b/src/modules/engine.execution/event.handler.ts index b0ba9aa..c60d4c7 100644 --- a/src/modules/engine.execution/event.handler.ts +++ b/src/modules/engine.execution/event.handler.ts @@ -2,7 +2,7 @@ import { logger } from "../../logger/logger"; import { EventResponseDto } from "../../domain.types/engine/event.types"; import * as asyncLib from 'async'; import { EventType } from "../../domain.types/enums/event.type"; -import UserMessageEventHandler from './user.message.event.handler'; +import { UserMessageEventHandler } from './user.message.event.handler'; // import { ContextService } from "../../database/services/engine/context.service"; // import { SchemaInstanceService } from "../../database/services/engine/schema.instance.service";