UNPKG

@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
/** * 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>; }