From 776b39487451e737f76e3fbafdccef4409cf57ed Mon Sep 17 00:00:00 2001 From: bvandeusen Date: Mon, 6 Apr 2026 10:27:11 -0400 Subject: [PATCH] feat: add EventsApi and eventsApiProvider --- lib/data/api/events_api.dart | 58 ++++++++++++++++++++++++++ lib/providers/api_client_provider.dart | 5 +++ 2 files changed, 63 insertions(+) create mode 100644 lib/data/api/events_api.dart diff --git a/lib/data/api/events_api.dart b/lib/data/api/events_api.dart new file mode 100644 index 0000000..90a50e8 --- /dev/null +++ b/lib/data/api/events_api.dart @@ -0,0 +1,58 @@ +import 'package:dio/dio.dart'; + +import '../models/calendar_event.dart'; +import 'api_client.dart'; + +class EventsApi { + final Dio _dio; + const EventsApi(this._dio); + + /// GET /api/events?from={iso}&to={iso} + Future> getEvents(DateTime from, DateTime to) async { + try { + final response = await _dio.get( + '/api/events', + queryParameters: { + 'from': from.toUtc().toIso8601String(), + 'to': to.toUtc().toIso8601String(), + }, + ); + final list = response.data as List; + return list + .map((e) => CalendarEvent.fromJson(e as Map)) + .toList(); + } on DioException catch (e) { + throw dioToApp(e); + } + } + + /// POST /api/events + Future createEvent(Map payload) async { + try { + final response = await _dio.post('/api/events', data: payload); + return CalendarEvent.fromJson(response.data as Map); + } on DioException catch (e) { + throw dioToApp(e); + } + } + + /// PATCH /api/events/{id} + Future updateEvent( + int id, Map fields) async { + try { + final response = await _dio.patch('/api/events/$id', data: fields); + return CalendarEvent.fromJson(response.data as Map); + } on DioException catch (e) { + throw dioToApp(e); + } + } + + /// DELETE /api/events/{id} + Future deleteEvent(int id) async { + try { + await _dio.delete('/api/events/$id'); + } on DioException catch (e) { + throw dioToApp(e); + } + } +} diff --git a/lib/providers/api_client_provider.dart b/lib/providers/api_client_provider.dart index be162ad..e84d6f5 100644 --- a/lib/providers/api_client_provider.dart +++ b/lib/providers/api_client_provider.dart @@ -9,6 +9,7 @@ import '../data/api/chat_api.dart'; import '../data/api/knowledge_api.dart'; import '../data/api/voice_api.dart'; import '../data/api/milestones_api.dart'; +import '../data/api/events_api.dart'; import '../data/api/news_api.dart'; import '../data/api/notes_api.dart'; import '../data/api/projects_api.dart'; @@ -115,3 +116,7 @@ final voiceRepositoryProvider = Provider((ref) { final newsApiProvider = Provider((ref) { return NewsApi(ref.watch(dioProvider)); }); + +final eventsApiProvider = Provider((ref) { + return EventsApi(ref.watch(dioProvider)); +});