From e5ff971877a2a2dfc1cb402a0d644f473b8948d4 Mon Sep 17 00:00:00 2001 From: DatDang Date: Mon, 15 Apr 2024 11:18:32 +0700 Subject: [PATCH] TF-2800 Calendar event accept - API and data source implementation --- .../calendar_event_datasource_impl.dart | 8 +++++++ .../local_calendar_event_datasource_impl.dart | 6 +++++ .../data/network/calendar_event_api.dart | 23 +++++++++++++++++++ .../exceptions/calendar_event_exceptions.dart | 4 +++- 4 files changed, 40 insertions(+), 1 deletion(-) diff --git a/lib/features/email/data/datasource_impl/calendar_event_datasource_impl.dart b/lib/features/email/data/datasource_impl/calendar_event_datasource_impl.dart index 42c162ece..5edca91c5 100644 --- a/lib/features/email/data/datasource_impl/calendar_event_datasource_impl.dart +++ b/lib/features/email/data/datasource_impl/calendar_event_datasource_impl.dart @@ -2,6 +2,7 @@ import 'package:jmap_dart_client/jmap/account_id.dart'; import 'package:jmap_dart_client/jmap/core/id.dart'; import 'package:jmap_dart_client/jmap/mail/calendar/calendar_event.dart'; +import 'package:jmap_dart_client/jmap/mail/calendar/reply/calendar_event_accept_response.dart'; import 'package:tmail_ui_user/features/email/data/datasource/calendar_event_datasource.dart'; import 'package:tmail_ui_user/features/email/data/network/calendar_event_api.dart'; import 'package:tmail_ui_user/features/email/domain/model/event_action.dart'; @@ -25,4 +26,11 @@ class CalendarEventDataSourceImpl extends CalendarEventDataSource { Future> getListEventAction(String emailContents) { throw UnimplementedError(); } + + @override + Future acceptEventInvitation(AccountId accountId, Set blobIds) { + return Future.sync(() async { + return await _calendarEventAPI.acceptEventInvitation(accountId, blobIds); + }).catchError(_exceptionThrower.throwException); + } } \ No newline at end of file diff --git a/lib/features/email/data/datasource_impl/local_calendar_event_datasource_impl.dart b/lib/features/email/data/datasource_impl/local_calendar_event_datasource_impl.dart index 115af7538..b289e70bc 100644 --- a/lib/features/email/data/datasource_impl/local_calendar_event_datasource_impl.dart +++ b/lib/features/email/data/datasource_impl/local_calendar_event_datasource_impl.dart @@ -2,6 +2,7 @@ import 'package:jmap_dart_client/jmap/account_id.dart'; import 'package:jmap_dart_client/jmap/core/id.dart'; import 'package:jmap_dart_client/jmap/mail/calendar/calendar_event.dart'; +import 'package:jmap_dart_client/jmap/mail/calendar/reply/calendar_event_accept_response.dart'; import 'package:tmail_ui_user/features/email/data/datasource/calendar_event_datasource.dart'; import 'package:tmail_ui_user/features/email/data/local/html_analyzer.dart'; import 'package:tmail_ui_user/features/email/domain/model/event_action.dart'; @@ -25,4 +26,9 @@ class LocalCalendarEventDataSourceImpl extends CalendarEventDataSource { return await _htmlAnalyzer.getListEventAction(emailContents); }).catchError(_exceptionThrower.throwException); } + + @override + Future acceptEventInvitation(AccountId accountId, Set blobIds) { + throw UnimplementedError(); + } } \ No newline at end of file diff --git a/lib/features/email/data/network/calendar_event_api.dart b/lib/features/email/data/network/calendar_event_api.dart index 2f50c1e48..ebb38dcda 100644 --- a/lib/features/email/data/network/calendar_event_api.dart +++ b/lib/features/email/data/network/calendar_event_api.dart @@ -7,6 +7,8 @@ import 'package:jmap_dart_client/jmap/jmap_request.dart'; import 'package:jmap_dart_client/jmap/mail/calendar/calendar_event.dart'; import 'package:jmap_dart_client/jmap/mail/calendar/parse/calendar_event_parse_method.dart'; import 'package:jmap_dart_client/jmap/mail/calendar/parse/calendar_event_parse_response.dart'; +import 'package:jmap_dart_client/jmap/mail/calendar/reply/calendar_event_accept_method.dart'; +import 'package:jmap_dart_client/jmap/mail/calendar/reply/calendar_event_accept_response.dart'; import 'package:tmail_ui_user/features/email/domain/exceptions/calendar_event_exceptions.dart'; class CalendarEventAPI { @@ -38,4 +40,25 @@ class CalendarEventAPI { throw NotParsableCalendarEventException(); } } + + Future acceptEventInvitation(AccountId accountId, Set blobIds) async { + final requestBuilder = JmapRequestBuilder(_httpClient, ProcessingInvocation()); + final calendarEventAcceptMethod = CalendarEventAcceptMethod( + accountId, + blobIds: blobIds.toList()); + final calendarEventAcceptInvocation = requestBuilder.invocation(calendarEventAcceptMethod); + final response = await (requestBuilder..usings(calendarEventAcceptMethod.requiredCapabilities)) + .build() + .execute(); + + final calendarEventAcceptResponse = response.parse( + calendarEventAcceptInvocation.methodCallId, + CalendarEventAcceptResponse.deserialize); + + if (calendarEventAcceptResponse == null) { + throw NotAcceptableCalendarEventException(); + } + + return calendarEventAcceptResponse; + } } \ No newline at end of file diff --git a/lib/features/email/domain/exceptions/calendar_event_exceptions.dart b/lib/features/email/domain/exceptions/calendar_event_exceptions.dart index 1129d36f5..02078195a 100644 --- a/lib/features/email/domain/exceptions/calendar_event_exceptions.dart +++ b/lib/features/email/domain/exceptions/calendar_event_exceptions.dart @@ -1,4 +1,6 @@ class NotFoundCalendarEventException implements Exception {} -class NotParsableCalendarEventException implements Exception {} \ No newline at end of file +class NotParsableCalendarEventException implements Exception {} + +class NotAcceptableCalendarEventException implements Exception {}