import { ISync, EntityType, SyncStatus } from '../types/CalendarTypes'; /** * IEntityService - Generic interface for entity services with sync capabilities * * All entity services (Event, Booking, Customer, Resource) implement this interface * to enable polymorphic sync status management in SyncManager. * * ENCAPSULATION: Services encapsulate sync status manipulation. * SyncManager does NOT directly manipulate entity.syncStatus - it delegates to the service. * * POLYMORFI: SyncManager works with Array> and uses * entityType property for runtime routing, avoiding switch statements. */ export interface IEntityService { /** * Entity type discriminator for runtime routing * Must match EntityType values: 'Event', 'Booking', 'Customer', 'Resource' */ readonly entityType: EntityType; /** * Mark entity as successfully synced with backend * Sets syncStatus = 'synced' and persists to IndexedDB * * @param id - Entity ID */ markAsSynced(id: string): Promise; /** * Mark entity as sync error (max retries exceeded) * Sets syncStatus = 'error' and persists to IndexedDB * * @param id - Entity ID */ markAsError(id: string): Promise; /** * Get current sync status for an entity * Used by SyncManager to check entity state * * @param id - Entity ID * @returns SyncStatus or null if entity not found */ getSyncStatus(id: string): Promise; }