@uplink-protocol/calendar-controller
Version:
Flexible calendar and time picker API supporting both calendar, date-picker, and time-picker integrations for any JavaScript framework or library
145 lines (144 loc) • 3.88 kB
TypeScript
/**
* 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<T = any> {
/** Whether operation succeeded */
success: boolean;
/** Result data */
data?: T;
/** Error message if failed */
error?: string;
/** Additional metadata */
metadata?: Record<string, any>;
}
/**
* 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<StorageResult<void>>;
/**
* Get all events
*/
getAllEvents(): Promise<StorageResult<CalendarEvent[]>>;
/**
* Get event by ID
*/
getEventById(id: string): Promise<StorageResult<CalendarEvent | null>>;
/**
* Query events with filters
*/
queryEvents(filter?: EventFilter, sort?: EventSort, page?: number, pageSize?: number): Promise<StorageResult<EventResults>>;
/**
* Create new event
*/
createEvent(input: CreateEventInput): Promise<StorageResult<CalendarEvent>>;
/**
* Update existing event
*/
updateEvent(input: UpdateEventInput): Promise<StorageResult<CalendarEvent>>;
/**
* Delete event
*/
deleteEvent(id: string): Promise<StorageResult<void>>;
/**
* Bulk operations
*/
bulkCreate(inputs: CreateEventInput[]): Promise<StorageResult<CalendarEvent[]>>;
bulkUpdate(inputs: UpdateEventInput[]): Promise<StorageResult<CalendarEvent[]>>;
bulkDelete(ids: string[]): Promise<StorageResult<void>>;
/**
* Import events
*/
importEvents(events: CalendarEvent[]): Promise<StorageResult<CalendarEvent[]>>;
/**
* Export events
*/
exportEvents(filter?: EventFilter): Promise<StorageResult<CalendarEvent[]>>;
/**
* Clear all events
*/
clearAll(): Promise<StorageResult<void>>;
/**
* Get storage statistics
*/
getStats(): Promise<StorageResult<StorageStats>>;
/**
* Get sync status
*/
getSyncStatus(): Promise<StorageResult<SyncStatus>>;
/**
* Trigger manual sync
*/
sync(): Promise<StorageResult<void>>;
/**
* Backup events
*/
backup(): Promise<StorageResult<string>>;
/**
* Restore from backup
*/
restore(backupData: string): Promise<StorageResult<void>>;
/**
* Event change subscription
*/
onEventChanged(callback: (event: CalendarEvent, action: 'created' | 'updated' | 'deleted') => void): () => void;
/**
* Storage error subscription
*/
onError(callback: (error: string) => void): () => void;
}