TF-1014: [Dev] Show quota at the bottom of mailbox

This commit is contained in:
ManhNTX
2022-11-09 16:49:01 +07:00
committed by Dat H. Pham
parent 21f027246b
commit 75495e7d1f
28 changed files with 508 additions and 6 deletions
@@ -0,0 +1,6 @@
import 'package:jmap_dart_client/jmap/account_id.dart';
import 'package:tmail_ui_user/features/quotas/domain/model/quotas_response.dart';
abstract class QuotasDataSource {
Future<QuotasResponse> getQuotas(AccountId accountId);
}
@@ -0,0 +1,21 @@
import 'package:jmap_dart_client/jmap/account_id.dart';
import 'package:tmail_ui_user/features/quotas/data/datasource/quotas_data_source.dart';
import 'package:tmail_ui_user/features/quotas/data/network/quotas_api.dart';
import 'package:tmail_ui_user/features/quotas/domain/model/quotas_response.dart';
import 'package:tmail_ui_user/main/exceptions/exception_thrower.dart';
class QuotasDataSourceImpl extends QuotasDataSource{
final QuotasAPI _quotasAPI;
final ExceptionThrower _exceptionThrower;
QuotasDataSourceImpl(this._quotasAPI, this._exceptionThrower);
@override
Future<QuotasResponse> getQuotas(AccountId accountId) {
return Future.sync(() async {
return await _quotasAPI.getQuotas(accountId);
}).catchError((error) {
_exceptionThrower.throwException(error);
});
}
}
@@ -0,0 +1,39 @@
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<QuotasResponse> 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<GetQuotaResponse>(
getQuotaInvocation.methodCallId, GetQuotaResponse.deserialize);
if(getQuotaResponse != null) {
return QuotasResponse(
accountId: getQuotaResponse.accountId,
notFound: getQuotaResponse.notFound,
quotas: getQuotaResponse.list,
state: getQuotaResponse.state,
);
} else {
throw NotFoundQuotasException();
}
}
}
@@ -0,0 +1,15 @@
import 'package:jmap_dart_client/jmap/account_id.dart';
import 'package:tmail_ui_user/features/quotas/data/datasource/quotas_data_source.dart';
import 'package:tmail_ui_user/features/quotas/domain/model/quotas_response.dart';
import 'package:tmail_ui_user/features/quotas/domain/repository/quotas_repository.dart';
class QuotasRepositoryImpl extends QuotasRepository {
final QuotasDataSource _dataSource;
QuotasRepositoryImpl(this._dataSource);
@override
Future<QuotasResponse> getQuotas(AccountId accountId) {
return _dataSource.getQuotas(accountId);
}
}