From 38c47ca373346b3734a4dbf9242ef33cf376bea1 Mon Sep 17 00:00:00 2001 From: dab246 Date: Wed, 26 Nov 2025 16:32:53 +0700 Subject: [PATCH] TF-4178 Add datasource/repository/interactor for create new label --- .../base/mixin/handle_error_mixin.dart | 23 +++++++++++ .../data/datasource/label_datasource.dart | 2 + .../label_datasource_impl.dart | 10 +++++ .../labels/data/network/label_api.dart | 38 ++++++++++++++++++- .../repository/label_repository_impl.dart | 5 +++ .../domain/repository/label_repository.dart | 2 + .../domain/state/create_new_label_state.dart | 18 +++++++++ .../usecases/create_new_label_interactor.dart | 29 ++++++++++++++ .../label_interactor_bindings.dart | 3 +- .../mailbox/data/network/mailbox_api.dart | 20 +--------- 10 files changed, 128 insertions(+), 22 deletions(-) create mode 100644 lib/features/labels/domain/state/create_new_label_state.dart create mode 100644 lib/features/labels/domain/usecases/create_new_label_interactor.dart diff --git a/lib/features/base/mixin/handle_error_mixin.dart b/lib/features/base/mixin/handle_error_mixin.dart index 153bf7108..242cfdd96 100644 --- a/lib/features/base/mixin/handle_error_mixin.dart +++ b/lib/features/base/mixin/handle_error_mixin.dart @@ -1,5 +1,6 @@ import 'package:core/utils/app_logger.dart'; import 'package:dartz/dartz.dart'; +import 'package:jmap_dart_client/jmap/core/error/method/error_method_response.dart'; import 'package:jmap_dart_client/jmap/core/error/set_error.dart'; import 'package:jmap_dart_client/jmap/core/id.dart'; import 'package:jmap_dart_client/jmap/core/method/response/set_response.dart'; @@ -76,4 +77,26 @@ mixin HandleSetErrorMixin { logWarning('HandleSetErrorMixin::handleSetResponse():remainedErrors: $remainedErrors'); return remainedErrors; } + + parseErrorForSetResponse(SetResponse? response, Id requestId) { + final mapError = + response?.notCreated ?? response?.notUpdated ?? response?.notDestroyed; + if (mapError != null && mapError.containsKey(requestId)) { + final setError = mapError[requestId]; + log('HandleSetErrorMixin::parseErrorForSetResponse():setError: $setError'); + if (setError?.type == ErrorMethodResponse.invalidArguments) { + throw InvalidArgumentsMethodResponse( + description: setError?.description, + ); + } else if (setError?.type == ErrorMethodResponse.invalidResultReference) { + throw InvalidResultReferenceMethodResponse( + description: setError?.description, + ); + } else { + throw UnknownMethodResponse(description: setError?.description); + } + } else { + throw UnknownMethodResponse(); + } + } } diff --git a/lib/features/labels/data/datasource/label_datasource.dart b/lib/features/labels/data/datasource/label_datasource.dart index 49385740e..18e227e95 100644 --- a/lib/features/labels/data/datasource/label_datasource.dart +++ b/lib/features/labels/data/datasource/label_datasource.dart @@ -3,4 +3,6 @@ import 'package:labels/model/label.dart'; abstract class LabelDatasource { Future> getAllLabels(AccountId accountId); + + Future