diff --git a/labels/lib/labels.dart b/labels/lib/labels.dart index 4b9c3052e..0b9052814 100644 --- a/labels/lib/labels.dart +++ b/labels/lib/labels.dart @@ -2,3 +2,12 @@ export 'package:labels/model/label.dart'; export 'package:labels/model/hex_color.dart'; export 'package:labels/utils/labels_constants.dart'; + +export 'package:labels/method/set/set_label_method.dart'; +export 'package:labels/method/set/set_label_response.dart'; +export 'package:labels/method/get/get_label_method.dart'; +export 'package:labels/method/get/get_label_response.dart'; +export 'package:labels/method/changes/changes_label_method.dart'; +export 'package:labels/method/changes/changes_label_response.dart'; + +export 'package:labels/extensions/label_extension.dart'; diff --git a/lib/features/labels/data/datasource/label_datasource.dart b/lib/features/labels/data/datasource/label_datasource.dart new file mode 100644 index 000000000..49385740e --- /dev/null +++ b/lib/features/labels/data/datasource/label_datasource.dart @@ -0,0 +1,6 @@ +import 'package:jmap_dart_client/jmap/account_id.dart'; +import 'package:labels/model/label.dart'; + +abstract class LabelDatasource { + Future> getAllLabels(AccountId accountId); +} diff --git a/lib/features/labels/data/datasource_impl/label_datasource_impl.dart b/lib/features/labels/data/datasource_impl/label_datasource_impl.dart new file mode 100644 index 000000000..0012ea5e4 --- /dev/null +++ b/lib/features/labels/data/datasource_impl/label_datasource_impl.dart @@ -0,0 +1,22 @@ +import 'package:jmap_dart_client/jmap/account_id.dart'; +import 'package:labels/model/label.dart'; +import 'package:tmail_ui_user/features/labels/data/datasource/label_datasource.dart'; +import 'package:tmail_ui_user/features/labels/data/network/label_api.dart'; +import 'package:tmail_ui_user/main/exceptions/exception_thrower.dart'; + +class LabelDatasourceImpl extends LabelDatasource { + final LabelApi _labelApi; + final ExceptionThrower _exceptionThrower; + + LabelDatasourceImpl(this._labelApi, this._exceptionThrower); + + @override + Future> getAllLabels(AccountId accountId) { + return Future.sync(() async { + return await _labelApi.getAllLabels(accountId); + }).catchError((error, stackTrace) async { + await _exceptionThrower.throwException(error, stackTrace); + throw error; + }); + } +} diff --git a/lib/features/labels/data/network/label_api.dart b/lib/features/labels/data/network/label_api.dart new file mode 100644 index 000000000..9794083cb --- /dev/null +++ b/lib/features/labels/data/network/label_api.dart @@ -0,0 +1,26 @@ +import 'package:jmap_dart_client/http/http_client.dart'; +import 'package:jmap_dart_client/jmap/account_id.dart'; +import 'package:jmap_dart_client/jmap/jmap_request.dart'; +import 'package:labels/labels.dart'; + +class LabelApi { + final HttpClient _httpClient; + + LabelApi(this._httpClient); + + Future> getAllLabels(AccountId accountId) async { + final builder = JmapRequestBuilder(_httpClient, ProcessingInvocation()); + final method = GetLabelMethod(accountId); + final invocation = builder.invocation(method); + + final result = + await (builder..usings(method.requiredCapabilities)).build().execute(); + + final response = result.parse( + invocation.methodCallId, + GetLabelResponse.deserialize, + ); + + return response?.list ?? []; + } +} diff --git a/lib/features/labels/data/repository/label_repository_impl.dart b/lib/features/labels/data/repository/label_repository_impl.dart new file mode 100644 index 000000000..f1cca9153 --- /dev/null +++ b/lib/features/labels/data/repository/label_repository_impl.dart @@ -0,0 +1,15 @@ +import 'package:jmap_dart_client/jmap/account_id.dart'; +import 'package:labels/model/label.dart'; +import 'package:tmail_ui_user/features/labels/data/datasource/label_datasource.dart'; +import 'package:tmail_ui_user/features/labels/domain/repository/label_repository.dart'; + +class LabelRepositoryImpl extends LabelRepository { + final LabelDatasource _labelDatasource; + + LabelRepositoryImpl(this._labelDatasource); + + @override + Future> getAllLabels(AccountId accountId) { + return _labelDatasource.getAllLabels(accountId); + } +} diff --git a/lib/features/labels/domain/repository/label_repository.dart b/lib/features/labels/domain/repository/label_repository.dart new file mode 100644 index 000000000..2ae7b15fd --- /dev/null +++ b/lib/features/labels/domain/repository/label_repository.dart @@ -0,0 +1,6 @@ +import 'package:jmap_dart_client/jmap/account_id.dart'; +import 'package:labels/model/label.dart'; + +abstract class LabelRepository { + Future> getAllLabels(AccountId accountId); +} diff --git a/lib/features/labels/domain/state/get_all_label_state.dart b/lib/features/labels/domain/state/get_all_label_state.dart new file mode 100644 index 000000000..a7f3bdf3e --- /dev/null +++ b/lib/features/labels/domain/state/get_all_label_state.dart @@ -0,0 +1,18 @@ +import 'package:core/presentation/state/failure.dart'; +import 'package:core/presentation/state/success.dart'; +import 'package:labels/model/label.dart'; + +class GettingAllLabel extends LoadingState {} + +class GetAllLabelSuccess extends UIState { + final List