/** * Event Storage Interfaces * * Defines interfaces for event storage and persistence operations */ import { CalendarEvent, CreateEventInput, UpdateEventInput, EventFilter, EventSort, EventResults } from './event.interfaces'; /** * Storage operation result */ export interface StorageResult { /** Whether operation succeeded */ success: boolean; /** Result data */ data?: T; /** Error message if failed */ error?: string; /** Additional metadata */ metadata?: Record; } /** * Storage configuration */ export interface StorageConfig { /** Storage type */ type: 'memory' | 'localStorage' | 'indexedDB' | 'external'; /** Storage key prefix */ keyPrefix?: string; /** Maximum storage size */ maxSize?: number; /** Auto-save interval in milliseconds */ autoSaveInterval?: number; /** Encryption settings */ encryption?: { enabled: boolean; key?: string; }; } /** * Storage statistics */ export interface StorageStats { /** Total number of events */ totalEvents: number; /** Storage size used */ sizeUsed: number; /** Last sync timestamp */ lastSync?: Date; /** Storage health status */ health: 'good' | 'warning' | 'error'; } /** * Storage sync status */ export interface SyncStatus { /** Whether sync is in progress */ syncing: boolean; /** Last sync timestamp */ lastSync?: Date; /** Next scheduled sync */ nextSync?: Date; /** Sync errors */ errors: string[]; /** Pending changes count */ pendingChanges: number; } /** * Event storage service interface */ export interface IEventStorageService { /** * Initialize storage */ initialize(config: StorageConfig): Promise>; /** * Get all events */ getAllEvents(): Promise>; /** * Get event by ID */ getEventById(id: string): Promise>; /** * Query events with filters */ queryEvents(filter?: EventFilter, sort?: EventSort, page?: number, pageSize?: number): Promise>; /** * Create new event */ createEvent(input: CreateEventInput): Promise>; /** * Update existing event */ updateEvent(input: UpdateEventInput): Promise>; /** * Delete event */ deleteEvent(id: string): Promise>; /** * Bulk operations */ bulkCreate(inputs: CreateEventInput[]): Promise>; bulkUpdate(inputs: UpdateEventInput[]): Promise>; bulkDelete(ids: string[]): Promise>; /** * Import events */ importEvents(events: CalendarEvent[]): Promise>; /** * Export events */ exportEvents(filter?: EventFilter): Promise>; /** * Clear all events */ clearAll(): Promise>; /** * Get storage statistics */ getStats(): Promise>; /** * Get sync status */ getSyncStatus(): Promise>; /** * Trigger manual sync */ sync(): Promise>; /** * Backup events */ backup(): Promise>; /** * Restore from backup */ restore(backupData: string): Promise>; /** * Event change subscription */ onEventChanged(callback: (event: CalendarEvent, action: 'created' | 'updated' | 'deleted') => void): () => void; /** * Storage error subscription */ onError(callback: (error: string) => void): () => void; }