@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
230 lines (229 loc) • 6.29 kB
TypeScript
/**
* Event Manager Service Interface
*
* Main service interface for comprehensive event management
*/
import { EventEmitter } from "@uplink-protocol/core";
import { CalendarEvent, CreateEventInput, UpdateEventInput, EventFilter, EventSort, EventResults, EventValidationResult } from './event.interfaces';
/**
* Event manager configuration
*/
export interface EventManagerConfig {
/** Storage configuration */
storage?: {
type: 'memory' | 'localStorage' | 'indexedDB' | 'external';
options?: Record<string, any>;
};
/** Validation settings */
validation?: {
enableValidation: boolean;
strictMode: boolean;
customRules?: any[];
};
/** Search configuration */
search?: {
enableSearch: boolean;
indexFields?: string[];
fuzzySearch?: boolean;
};
/** Notification settings */
notifications?: {
enableNotifications: boolean;
defaultChannels?: string[];
};
/** Sync configuration */
sync?: {
enableSync: boolean;
providers?: any[];
};
/** Conflict detection */
conflicts?: {
enableDetection: boolean;
autoResolve?: boolean;
};
/** Recurrence settings */
recurrence?: {
enableRecurrence: boolean;
maxOccurrences?: number;
};
}
/**
* Event statistics
*/
export interface EventStatistics {
/** Total events */
totalEvents: number;
/** Events by status */
eventsByStatus: Record<string, number>;
/** Events by priority */
eventsByPriority: Record<string, number>;
/** Events by category */
eventsByCategory: Record<string, number>;
/** Upcoming events */
upcomingEvents: number;
/** Overdue events */
overdueEvents: number;
/** Events this week */
eventsThisWeek: number;
/** Events this month */
eventsThisMonth: number;
/** Average event duration */
averageDuration: number;
/** Most busy day */
busiestDay?: Date;
/** Most active attendee */
mostActiveAttendee?: string;
}
/**
* Event manager service interface
*/
export interface IEventManagerService {
/**
* Initialize the event manager
*/
initialize(config?: EventManagerConfig): Promise<void>;
/**
* Get all events
*/
getAllEvents(): Promise<CalendarEvent[]>;
/**
* Get event by ID
*/
getEventById(id: string): Promise<CalendarEvent | null>;
/**
* Query events with filters and pagination
*/
queryEvents(filter?: EventFilter, sort?: EventSort, page?: number, pageSize?: number): Promise<EventResults>;
/**
* Create new event
*/
createEvent(input: CreateEventInput): Promise<CalendarEvent>;
/**
* Update existing event
*/
updateEvent(input: UpdateEventInput): Promise<CalendarEvent>;
/**
* Delete event
*/
deleteEvent(id: string): Promise<void>;
/**
* Bulk operations
*/
bulkCreateEvents(inputs: CreateEventInput[]): Promise<CalendarEvent[]>;
bulkUpdateEvents(inputs: UpdateEventInput[]): Promise<CalendarEvent[]>;
bulkDeleteEvents(ids: string[]): Promise<void>;
/**
* Validate event
*/
validateEvent(input: CreateEventInput | UpdateEventInput): Promise<EventValidationResult>;
/**
* Search events
*/
searchEvents(query: string, filters?: EventFilter): Promise<CalendarEvent[]>;
/**
* Get events for date range
*/
getEventsForDateRange(start: Date, end: Date): Promise<CalendarEvent[]>;
/**
* Get events for specific date
*/
getEventsForDate(date: Date): Promise<CalendarEvent[]>;
/**
* Get upcoming events
*/
getUpcomingEvents(limit?: number): Promise<CalendarEvent[]>;
/**
* Get overdue events
*/
getOverdueEvents(): Promise<CalendarEvent[]>;
/**
* Get event statistics
*/
getStatistics(dateRange?: {
start: Date;
end: Date;
}): Promise<EventStatistics>;
/**
* Import events
*/
importEvents(events: CalendarEvent[], options?: {
merge?: boolean;
skipDuplicates?: boolean;
}): Promise<{
imported: number;
skipped: number;
errors: string[];
}>;
/**
* Export events
*/
exportEvents(filter?: EventFilter, format?: 'json' | 'ics' | 'csv'): Promise<{
data: string;
filename: string;
mimeType: string;
}>;
/**
* Clear all events
*/
clearAllEvents(): Promise<void>;
/**
* Get event conflicts
*/
getEventConflicts(eventId: string): Promise<any[]>;
/**
* Resolve event conflict
*/
resolveEventConflict(conflictId: string, resolution: any): Promise<void>;
/**
* Subscribe to event changes
*/
onEventCreated(callback: (event: CalendarEvent) => void): () => void;
onEventUpdated(callback: (event: CalendarEvent, oldEvent: CalendarEvent) => void): () => void;
onEventDeleted(callback: (eventId: string) => void): () => void;
/**
* Subscribe to validation events
*/
onValidationFailed(callback: (result: EventValidationResult) => void): () => void;
/**
* Subscribe to error events
*/
onError(callback: (error: Error) => void): () => void;
/**
* Get manager status
*/
getStatus(): {
initialized: boolean;
totalEvents: number;
lastSyncTime?: Date;
errors: string[];
health: 'good' | 'warning' | 'error';
};
/**
* Backup all data
*/
backup(): Promise<string>;
/**
* Restore from backup
*/
restore(backupData: string): Promise<void>;
/**
* Initialize event emitters
*/
initializeEvents(): {
eventCreated: EventEmitter<CalendarEvent>;
eventUpdated: EventEmitter<{
event: CalendarEvent;
oldEvent: CalendarEvent;
}>;
eventDeleted: EventEmitter<{
eventId: string;
event: CalendarEvent;
}>;
validationFailed: EventEmitter<EventValidationResult>;
errorOccurred: EventEmitter<Error>;
bulkOperationCompleted: EventEmitter<{
operation: string;
count: number;
}>;
};
}