import '../../core/exceptions.dart'; import '../api/events_api.dart'; import '../local/database.dart'; import '../models/calendar_event.dart'; /// Calendar events repository with read-through caching for Tier 2 offline /// support. Range-scoped: each `getEvents(from, to)` mirrors that window into /// the cache (events outside the window are left alone) so successive /// disjoint range fetches don't clobber each other. class EventsRepository { final EventsApi _api; final FabledDatabase _db; const EventsRepository(this._api, this._db); Future> getEvents(DateTime from, DateTime to) async { try { final events = await _api.getEvents(from, to); await _db.replaceEventsInRange(from, to, events); return events; } on NetworkException { final cached = await _db.getEventsInRange(from, to); if (cached.isEmpty) rethrow; return cached; } } Future createEvent(Map payload) async { final event = await _api.createEvent(payload); await _db.upsertEvent(event); return event; } Future updateEvent( int id, Map fields) async { final updated = await _api.updateEvent(id, fields); await _db.upsertEvent(updated); return updated; } Future deleteEvent(int id) async { await _api.deleteEvent(id); await _db.deleteEvent(id); } }