@mindmakr/gs-websdk
Version:
Web SDK for Guru SaaS System - Complete JavaScript/TypeScript SDK for building applications with dynamic schema management
488 lines (487 loc) • 16 kB
TypeScript
/**
* Schema Management Service Module
* Provides dynamic schema template and instance management functionality
*/
import { GuruSaaSClient } from '../core/client';
import { SchemaTemplate, SchemaInstance, Category, PaginatedResponse, PaginationParams, SchemaFilters, SchemaInstanceFilters, RequestConfig, CompositionRules } from '../types';
export interface VirtualHierarchyNode {
path: string;
name: string;
type: 'template' | 'folder';
templateId?: number;
templateName?: string;
templateCode?: string;
templateStatus?: string;
templateCategory?: string;
templateIsActive?: boolean;
depth: number;
parentPath?: string;
hasChildren: boolean;
}
export interface SchemaVersion {
version_id: number;
version_number: string;
change_description: string | null;
is_current: boolean;
created_by: string | null;
created_at: string;
}
export interface UsageStats {
total_instances: number;
active_instances: number;
entity_types: Array<{
entity_type: string;
count: number;
}>;
tenants: Array<{
tenant_id: string | null;
count: number;
}>;
last_used: string | null;
}
export declare class SchemaService {
private client;
constructor(client: GuruSaaSClient);
/**
* Get schema templates with pagination and filtering
*/
getSchemaTemplates(filters?: SchemaFilters & PaginationParams, config?: RequestConfig): Promise<PaginatedResponse<SchemaTemplate>>;
/**
* Get schema template by ID
*/
getSchemaTemplateById(id: number, config?: RequestConfig): Promise<SchemaTemplate>;
/**
* Get schema template by code
*/
getSchemaTemplateByCode(code: string, config?: RequestConfig): Promise<SchemaTemplate>;
/**
* Get schema template by path
*/
getSchemaTemplateByPath(path: string, config?: RequestConfig): Promise<SchemaTemplate>;
/**
* Create new schema template
*/
createSchemaTemplate(templateData: {
name: string;
code: string;
description?: string;
category: string;
schema_definition: Record<string, any>;
version?: string;
is_system?: boolean;
is_active?: boolean;
path?: string;
parent_path?: string;
}, config?: RequestConfig): Promise<SchemaTemplate>;
/**
* Update schema template
*/
updateSchemaTemplate(id: number, templateData: {
name?: string;
description?: string | null;
category?: string;
schema_definition?: Record<string, any>;
version?: string;
is_active?: boolean;
path?: string;
parent_path?: string;
}, config?: RequestConfig): Promise<SchemaTemplate>;
/**
* Delete schema template
*/
deleteSchemaTemplate(id: number, config?: RequestConfig): Promise<void>;
/**
* Clone schema template
*/
cloneSchemaTemplate(id: number, data: {
code: string;
name: string;
}, config?: RequestConfig): Promise<SchemaTemplate>;
/**
* Get schema template usage statistics
*/
getSchemaTemplateUsageStats(id: number, config?: RequestConfig): Promise<UsageStats>;
/**
* Get child templates for a parent path
*/
getSchemaTemplateChildren(parentPath: string, config?: RequestConfig): Promise<SchemaTemplate[]>;
/**
* Get virtual hierarchy for template navigation
*/
getVirtualHierarchy(config?: RequestConfig): Promise<VirtualHierarchyNode[]>;
/**
* Move schema template to new path
*/
moveSchemaTemplate(id: number, newPath: string, config?: RequestConfig): Promise<SchemaTemplate>;
/**
* Compose schema template (get resolved schema)
*/
composeSchemaTemplate(id: number, config?: RequestConfig): Promise<{
composed_schema: Record<string, any>;
}>;
/**
* Create composed template from base template and rules
*/
createComposedTemplate(baseTemplateId: number, compositionData: {
compositionRules: CompositionRules;
conflictResolution?: 'parent' | 'child' | 'merge';
mergeStrategy?: 'shallow' | 'deep';
validateOnly?: boolean;
generatePreview?: boolean;
}, config?: RequestConfig): Promise<{
success: boolean;
composedTemplate?: any;
validation?: {
isValid: boolean;
errors: Array<{
type: string;
message: string;
severity: string;
}>;
warnings: Array<{
type: string;
message: string;
severity: string;
}>;
suggestions: Array<{
type: string;
message: string;
severity: string;
}>;
};
preview?: any;
error?: string;
}>;
/**
* Get inheritance chain for a template
*/
getInheritanceChain(templateId: number, config?: RequestConfig): Promise<{
templates: Array<{
id: number;
code: string;
name: Record<string, string>;
path: string;
fieldCount: number;
}>;
depth: number;
hasCircularDependency: boolean;
circularPath?: number[];
}>;
/**
* Get impact analysis for template changes
*/
getImpactAnalysis(templateId: number, config?: RequestConfig): Promise<any>;
/**
* Publish schema template
*/
publishSchemaTemplate(id: number, expiresAt?: string, config?: RequestConfig): Promise<SchemaTemplate>;
/**
* Get enhanced field properties for a template
*/
getEnhancedFieldProperties(templateId: number, config?: RequestConfig): Promise<Record<string, any>>;
/**
* Update field enhancement
*/
updateFieldEnhancement(templateId: number, fieldKey: string, enhancement: Record<string, any>, config?: RequestConfig): Promise<Record<string, any>>;
/**
* Get field rendering configuration
*/
getFieldRenderingConfig(templateId: number, fieldKey: string, config?: RequestConfig): Promise<Record<string, any>>;
/**
* Update enhanced template properties
*/
updateEnhancedTemplateProperties(templateId: number, properties: Record<string, any>, config?: RequestConfig): Promise<SchemaTemplate>;
/**
* Validate field enhancement
*/
validateFieldEnhancement(enhancement: Record<string, any>, config?: RequestConfig): Promise<{
isValid: boolean;
errors: string[];
warnings: string[];
}>;
/**
* Create new template version
*/
createSchemaTemplateVersion(id: number, versionData: {
version_number: string;
schema_definition: Record<string, any>;
change_description?: string;
}, config?: RequestConfig): Promise<{
version_id: number;
template: SchemaTemplate;
}>;
/**
* Get template version history
*/
getSchemaTemplateVersionHistory(id: number, config?: RequestConfig): Promise<SchemaVersion[]>;
/**
* Get specific template version
*/
getSchemaTemplateVersion(templateId: number, versionId: number, config?: RequestConfig): Promise<{
version_id: number;
version_number: string;
schema_definition: Record<string, any>;
change_description: string | null;
is_current: boolean;
created_by: string | null;
created_at: string;
}>;
/**
* Create advanced template version with additional metadata
*/
createAdvancedSchemaTemplateVersion(id: number, versionData: {
version_number: string;
semantic_version?: string;
schema_definition: Record<string, any>;
change_description?: string;
version_type?: 'manual' | 'auto' | 'rollback' | 'merge';
version_tags?: string[];
breaking_changes?: boolean;
migration_required?: boolean;
compatibility_notes?: string;
auto_publish_at?: string;
approval_required?: boolean;
}, config?: RequestConfig): Promise<{
version_id: number;
template: SchemaTemplate;
}>;
/**
* Rollback to previous version
*/
rollbackSchemaTemplateVersion(templateId: number, targetVersionId: number, rollbackReason?: string, config?: RequestConfig): Promise<{
version_id: number;
template: SchemaTemplate;
}>;
/**
* Compare two template versions
*/
getVersionComparison(version1Id: number, version2Id: number, config?: RequestConfig): Promise<{
version1_data: any;
version2_data: any;
diff_summary: any;
field_changes: any;
}>;
/**
* Get enhanced version history with detailed metadata
*/
getEnhancedVersionHistory(templateId: number, config?: RequestConfig): Promise<any[]>;
/**
* Process auto-publish schedule
*/
processAutoPublishSchedule(config?: RequestConfig): Promise<{
processed_count: number;
success_count: number;
error_count: number;
}>;
/**
* Get schema instances with advanced search capabilities
* BREAKING CHANGE: userId is now required for permission validation
*
* Features:
* - Dynamic field discovery across all string fields
* - Permission-aware search with tenant isolation
* - Full-text search with ranking and caching
* - Search metadata with performance metrics
* - Nested field support (e.g., "general.displayName")
*/
getSchemaInstances(filters?: SchemaInstanceFilters & PaginationParams & {
userId: string;
template_ids?: number[];
include_metadata?: boolean;
relevance_threshold?: number;
}, config?: RequestConfig): Promise<PaginatedResponse<SchemaInstance & {
template_name?: string;
template_code?: string;
search_metadata?: {
matched_fields: string[];
relevance_score: number;
template_id: number;
permission_validated: boolean;
};
}> & {
search_summary?: {
total_templates_searched: number;
fields_searched: string[];
search_performance_ms: number;
permission_check_ms: number;
accessible_templates: number;
total_searchable_fields: number;
};
}>;
/**
* Get schema instance by ID
* Note: tenant_id is required for super admin users
*/
getSchemaInstanceById(id: number, tenantId?: string, config?: RequestConfig): Promise<SchemaInstance>;
/**
* Get schema instance by entity type and ID
*/
getSchemaInstanceByEntity(entityType: string, entityId: number, config?: RequestConfig): Promise<SchemaInstance>;
/**
* Create schema instance
* Note: tenant_id is required for super admin users
*/
createSchemaInstance(instanceData: {
entity_type: string;
entity_id: number;
schema_template_id?: number | null;
instance_data?: Record<string, any>;
overrides?: Record<string, any>;
is_active?: boolean;
tenant_id?: string;
}, config?: RequestConfig): Promise<SchemaInstance>;
/**
* Upsert schema instance (create or update)
* Note: tenant_id is required for super admin users
*/
upsertSchemaInstance(entityType: string, entityId: number, instanceData: {
schema_template_id?: number | null;
instance_data?: Record<string, any>;
overrides?: Record<string, any>;
is_active?: boolean;
}, tenantId?: string, config?: RequestConfig): Promise<SchemaInstance>;
/**
* Delete schema instance
* Note: tenant_id is required for super admin users
*/
deleteSchemaInstance(id: number, tenantId?: string, config?: RequestConfig): Promise<void>;
/**
* Get categories
*/
getCategories(filters?: {
is_active?: boolean;
include_children?: boolean;
include_template_count?: boolean;
parent_id?: number;
}, config?: RequestConfig): Promise<Category[]>;
/**
* Get category by ID
*/
getCategoryById(id: number, config?: RequestConfig): Promise<Category>;
/**
* Create category
*/
createCategory(categoryData: {
code: string;
name: string;
description?: string;
parent_id?: number;
sort_order?: number;
is_active?: boolean;
}, config?: RequestConfig): Promise<Category>;
/**
* Update category
*/
updateCategory(id: number, categoryData: {
name?: string;
description?: string;
parent_id?: number;
sort_order?: number;
is_active?: boolean;
}, config?: RequestConfig): Promise<Category>;
/**
* Delete category
*/
deleteCategory(id: number, config?: RequestConfig): Promise<void>;
/**
* Get supported languages
*/
getSupportedLanguages(config?: RequestConfig): Promise<Array<{
id: number;
code: string;
name: string;
native_name: string;
is_rtl: boolean;
is_active: boolean;
sort_order: number;
}>>;
/**
* Get schema translations for a template and language
*/
getSchemaTranslations(templateId: number, languageCode: string, config?: RequestConfig): Promise<{
translations: Record<string, string>;
}>;
/**
* Update schema translations
*/
updateSchemaTranslations(templateId: number, languageCode: string, translations: Record<string, string>, config?: RequestConfig): Promise<void>;
/**
* Get system configurations with filtering
*/
getSystemConfigs(filters?: {
codes?: string[];
search?: string;
limit?: number;
offset?: number;
}, config?: RequestConfig): Promise<Array<{
id: number;
code: string;
name: Record<string, string>;
description?: Record<string, string>;
settings: Record<string, any>;
created_at: string;
updated_at: string;
}>>;
/**
* Get system configuration by ID
*/
getSystemConfigById(id: number, config?: RequestConfig): Promise<{
id: number;
code: string;
name: Record<string, string>;
description?: Record<string, string>;
settings: Record<string, any>;
created_at: string;
updated_at: string;
}>;
/**
* Get system configuration by code
*/
getSystemConfigByCode(code: string, config?: RequestConfig): Promise<{
id: number;
code: string;
name: Record<string, string>;
description?: Record<string, string>;
settings: Record<string, any>;
created_at: string;
updated_at: string;
}>;
/**
* Create system configuration
*/
createSystemConfig(configData: {
code: string;
name: Record<string, string>;
description?: Record<string, string>;
settings: Record<string, any>;
}, config?: RequestConfig): Promise<{
id: number;
code: string;
name: Record<string, string>;
description?: Record<string, string>;
settings: Record<string, any>;
created_at: string;
updated_at: string;
}>;
/**
* Update system configuration
*/
updateSystemConfig(id: number, configData: {
code?: string;
name?: Record<string, string>;
description?: Record<string, string>;
settings?: Record<string, any>;
}, config?: RequestConfig): Promise<{
id: number;
code: string;
name: Record<string, string>;
description?: Record<string, string>;
settings: Record<string, any>;
created_at: string;
updated_at: string;
}>;
/**
* Delete system configuration
*/
deleteSystemConfig(id: number, config?: RequestConfig): Promise<void>;
}