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/model/email_request.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_to_mailbox_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();
|
||||
}
|
||||
}
|
||||
|
||||
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: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';
|
||||
|
||||
enum EventActionType {
|
||||
@@ -18,6 +20,40 @@ enum EventActionType {
|
||||
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 {
|
||||
|
||||
@@ -5,6 +5,9 @@ import 'package:model/email/read_actions.dart';
|
||||
|
||||
extension KeyWordIdentifierExtension on KeyWordIdentifier {
|
||||
static final unsubscribeMail = KeyWordIdentifier('\$unsubscribe');
|
||||
static final acceptedEventAttendance = KeyWordIdentifier('\$accepted');
|
||||
static final tentativelyAcceptedEventAttendance = KeyWordIdentifier('\$tentativelyaccepted');
|
||||
static final rejectedEventAttendance = KeyWordIdentifier('\$rejected');
|
||||
|
||||
String generatePath() {
|
||||
return '${PatchObject.keywordsProperty}/$value';
|
||||
|
||||
Reference in New Issue
Block a user