TF-2858 Implement update event attendance status keywords property in email api
This commit is contained in:
@@ -60,6 +60,8 @@ import 'package:tmail_ui_user/features/base/mixin/handle_error_mixin.dart';
|
|||||||
import 'package:tmail_ui_user/features/composer/domain/exceptions/set_method_exception.dart';
|
import 'package:tmail_ui_user/features/composer/domain/exceptions/set_method_exception.dart';
|
||||||
import 'package:tmail_ui_user/features/composer/domain/model/email_request.dart';
|
import 'package:tmail_ui_user/features/composer/domain/model/email_request.dart';
|
||||||
import 'package:tmail_ui_user/features/email/domain/exceptions/email_exceptions.dart';
|
import 'package:tmail_ui_user/features/email/domain/exceptions/email_exceptions.dart';
|
||||||
|
import 'package:tmail_ui_user/features/email/domain/extensions/email_id_extensions.dart';
|
||||||
|
import 'package:tmail_ui_user/features/email/domain/model/event_action.dart';
|
||||||
import 'package:tmail_ui_user/features/email/domain/model/move_action.dart';
|
import 'package:tmail_ui_user/features/email/domain/model/move_action.dart';
|
||||||
import 'package:tmail_ui_user/features/email/domain/model/move_to_mailbox_request.dart';
|
import 'package:tmail_ui_user/features/email/domain/model/move_to_mailbox_request.dart';
|
||||||
import 'package:tmail_ui_user/features/email/domain/model/restore_deleted_message_request.dart';
|
import 'package:tmail_ui_user/features/email/domain/model/restore_deleted_message_request.dart';
|
||||||
@@ -734,4 +736,44 @@ class EmailAPI with HandleSetErrorMixin {
|
|||||||
throw NotFoundEmailRecoveryActionException();
|
throw NotFoundEmailRecoveryActionException();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Future<Email> storeEventAttendanceStatus(
|
||||||
|
Session session,
|
||||||
|
AccountId accountId,
|
||||||
|
EmailId emailId,
|
||||||
|
EventActionType eventActionType
|
||||||
|
) async {
|
||||||
|
final setEmailMethod = SetEmailMethod(accountId)
|
||||||
|
..addUpdates(emailId.generateMapUpdateObjectEventAttendanceStatus(eventActionType));
|
||||||
|
|
||||||
|
final getEmailMethod = GetEmailMethod(accountId)
|
||||||
|
..addIds({emailId.id})
|
||||||
|
..addProperties(Properties({EmailProperty.keywords}));
|
||||||
|
|
||||||
|
final requestBuilder = JmapRequestBuilder(_httpClient, ProcessingInvocation());
|
||||||
|
|
||||||
|
requestBuilder.invocation(setEmailMethod);
|
||||||
|
|
||||||
|
final getEmailInvocation = requestBuilder.invocation(getEmailMethod);
|
||||||
|
|
||||||
|
final capabilities = setEmailMethod.requiredCapabilities
|
||||||
|
.toCapabilitiesSupportTeamMailboxes(session, accountId);
|
||||||
|
|
||||||
|
final response = await (requestBuilder
|
||||||
|
..usings(capabilities))
|
||||||
|
.build()
|
||||||
|
.execute();
|
||||||
|
|
||||||
|
final getEmailResponse = response.parse<GetEmailResponse>(
|
||||||
|
getEmailInvocation.methodCallId,
|
||||||
|
GetEmailResponse.deserialize);
|
||||||
|
|
||||||
|
final listEmails = getEmailResponse?.list ?? [];
|
||||||
|
|
||||||
|
if (listEmails.isNotEmpty) {
|
||||||
|
return listEmails.first;
|
||||||
|
} else {
|
||||||
|
throw NotFoundEmailException();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
import 'package:jmap_dart_client/jmap/core/id.dart';
|
||||||
|
import 'package:jmap_dart_client/jmap/core/patch_object.dart';
|
||||||
|
import 'package:jmap_dart_client/jmap/mail/email/email.dart';
|
||||||
|
import 'package:tmail_ui_user/features/email/domain/model/event_action.dart';
|
||||||
|
|
||||||
|
extension EmailIdExtension on EmailId {
|
||||||
|
Map<Id, PatchObject> generateMapUpdateObjectEventAttendanceStatus(EventActionType eventActionType) {
|
||||||
|
return {
|
||||||
|
id: eventActionType.generateEventAttendanceStatusActionPath()
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,6 +1,8 @@
|
|||||||
|
|
||||||
import 'package:equatable/equatable.dart';
|
import 'package:equatable/equatable.dart';
|
||||||
import 'package:flutter/cupertino.dart';
|
import 'package:flutter/cupertino.dart';
|
||||||
|
import 'package:jmap_dart_client/jmap/core/patch_object.dart';
|
||||||
|
import 'package:model/extensions/keyword_identifier_extension.dart';
|
||||||
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
||||||
|
|
||||||
enum EventActionType {
|
enum EventActionType {
|
||||||
@@ -18,6 +20,40 @@ enum EventActionType {
|
|||||||
return AppLocalizations.of(context).no;
|
return AppLocalizations.of(context).no;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
PatchObject generateEventAttendanceStatusActionPath() {
|
||||||
|
switch(this) {
|
||||||
|
case EventActionType.yes:
|
||||||
|
return PatchObject({
|
||||||
|
KeyWordIdentifierExtension.acceptedEventAttendance.generatePath(): true,
|
||||||
|
KeyWordIdentifierExtension.tentativelyAcceptedEventAttendance.generatePath(): null,
|
||||||
|
KeyWordIdentifierExtension.rejectedEventAttendance.generatePath(): null,
|
||||||
|
});
|
||||||
|
case EventActionType.maybe:
|
||||||
|
return PatchObject({
|
||||||
|
KeyWordIdentifierExtension.acceptedEventAttendance.generatePath(): null,
|
||||||
|
KeyWordIdentifierExtension.tentativelyAcceptedEventAttendance.generatePath(): true,
|
||||||
|
KeyWordIdentifierExtension.rejectedEventAttendance.generatePath(): null,
|
||||||
|
});
|
||||||
|
case EventActionType.no:
|
||||||
|
return PatchObject({
|
||||||
|
KeyWordIdentifierExtension.acceptedEventAttendance.generatePath(): null,
|
||||||
|
KeyWordIdentifierExtension.tentativelyAcceptedEventAttendance.generatePath(): null,
|
||||||
|
KeyWordIdentifierExtension.rejectedEventAttendance.generatePath(): true,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
String getToastMessageSuccess(BuildContext context) {
|
||||||
|
switch(this) {
|
||||||
|
case EventActionType.yes:
|
||||||
|
return AppLocalizations.of(context).youWillAttendThisMeeting;
|
||||||
|
case EventActionType.maybe:
|
||||||
|
return AppLocalizations.of(context).youMayAttendThisMeeting;
|
||||||
|
case EventActionType.no:
|
||||||
|
return AppLocalizations.of(context).youWillNotAttendThisMeeting;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class EventAction with EquatableMixin {
|
class EventAction with EquatableMixin {
|
||||||
|
|||||||
@@ -5,6 +5,9 @@ import 'package:model/email/read_actions.dart';
|
|||||||
|
|
||||||
extension KeyWordIdentifierExtension on KeyWordIdentifier {
|
extension KeyWordIdentifierExtension on KeyWordIdentifier {
|
||||||
static final unsubscribeMail = KeyWordIdentifier('\$unsubscribe');
|
static final unsubscribeMail = KeyWordIdentifier('\$unsubscribe');
|
||||||
|
static final acceptedEventAttendance = KeyWordIdentifier('\$accepted');
|
||||||
|
static final tentativelyAcceptedEventAttendance = KeyWordIdentifier('\$tentativelyaccepted');
|
||||||
|
static final rejectedEventAttendance = KeyWordIdentifier('\$rejected');
|
||||||
|
|
||||||
String generatePath() {
|
String generatePath() {
|
||||||
return '${PatchObject.keywordsProperty}/$value';
|
return '${PatchObject.keywordsProperty}/$value';
|
||||||
|
|||||||
Reference in New Issue
Block a user