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:jmap_dart_client/jmap/quotas/get/get_quota_method.dart'; import 'package:jmap_dart_client/jmap/quotas/get/get_quota_response.dart'; import 'package:tmail_ui_user/features/quotas/domain/model/exceptions/quotas_exception.dart'; import 'package:tmail_ui_user/features/quotas/domain/model/quotas_response.dart'; class QuotasAPI { final HttpClient _httpClient; QuotasAPI(this._httpClient); Future getQuotas(AccountId accountId) async { final requestBuilder = JmapRequestBuilder(_httpClient, ProcessingInvocation()); final getQuotaMethod = GetQuotaMethod(accountId); final getQuotaInvocation = requestBuilder.invocation(getQuotaMethod); final response = await (requestBuilder ..usings(getQuotaMethod.requiredCapabilities)) .build() .execute(); final getQuotaResponse = response.parse( getQuotaInvocation.methodCallId, GetQuotaResponse.deserialize, ); if(getQuotaResponse != null) { return QuotasResponse( accountId: getQuotaResponse.accountId, notFound: getQuotaResponse.notFound, quotas: getQuotaResponse.list, state: getQuotaResponse.state, ); } else { throw NotFoundQuotasException(); } } }