From 59da16265515d2a5471bd816b3210ffa04806a3f Mon Sep 17 00:00:00 2001 From: dab246 Date: Thu, 29 Jul 2021 18:26:06 +0700 Subject: [PATCH] Add data layer for get Session --- .../data/datasource/session_datasource.dart | 5 +++++ .../session_datasource_impl.dart | 19 ++++++++++++++++ .../session/data/network/session_api.dart | 22 +++++++++++++++++++ .../repository/session_repository_impl.dart | 15 +++++++++++++ 4 files changed, 61 insertions(+) create mode 100644 lib/features/session/data/datasource/session_datasource.dart create mode 100644 lib/features/session/data/datasource_impl/session_datasource_impl.dart create mode 100644 lib/features/session/data/network/session_api.dart create mode 100644 lib/features/session/data/repository/session_repository_impl.dart diff --git a/lib/features/session/data/datasource/session_datasource.dart b/lib/features/session/data/datasource/session_datasource.dart new file mode 100644 index 000000000..f89c9e42d --- /dev/null +++ b/lib/features/session/data/datasource/session_datasource.dart @@ -0,0 +1,5 @@ +import 'package:jmap_dart_client/jmap/core/session/session.dart'; + +abstract class SessionDataSource { + Future getSession(); +} \ No newline at end of file diff --git a/lib/features/session/data/datasource_impl/session_datasource_impl.dart b/lib/features/session/data/datasource_impl/session_datasource_impl.dart new file mode 100644 index 000000000..61f4ac1f1 --- /dev/null +++ b/lib/features/session/data/datasource_impl/session_datasource_impl.dart @@ -0,0 +1,19 @@ +import 'package:jmap_dart_client/jmap/core/session/session.dart'; +import 'package:tmail_ui_user/features/session/data/datasource/session_datasource.dart'; +import 'package:tmail_ui_user/features/session/data/network/session_api.dart'; + +class SessionDataSourceImpl extends SessionDataSource { + + final SessionAPI sessionAPI; + + SessionDataSourceImpl(this.sessionAPI); + + @override + Future getSession() { + return Future.sync(() async { + return await sessionAPI.getSession(); + }).catchError((error) { + throw error; + }); + } +} \ No newline at end of file diff --git a/lib/features/session/data/network/session_api.dart b/lib/features/session/data/network/session_api.dart new file mode 100644 index 000000000..c0f6bce86 --- /dev/null +++ b/lib/features/session/data/network/session_api.dart @@ -0,0 +1,22 @@ +import 'dart:async'; + +import 'package:jmap_dart_client/http/http_client.dart'; +import 'package:jmap_dart_client/jmap/core/capability/capability_identifier.dart'; +import 'package:jmap_dart_client/jmap/core/capability/capability_properties.dart'; +import 'package:jmap_dart_client/jmap/core/session/get_session.dart'; +import 'package:jmap_dart_client/jmap/core/session/session.dart'; + +class SessionAPI { + + final HttpClient httpClient; + + SessionAPI(this.httpClient); + + Future getSession({Map)>? converters}) async { + final getSessionBuilder = GetSessionBuilder(httpClient); + + final result = await getSessionBuilder.build().execute(); + + return result; + } +} \ No newline at end of file diff --git a/lib/features/session/data/repository/session_repository_impl.dart b/lib/features/session/data/repository/session_repository_impl.dart new file mode 100644 index 000000000..39ec4df2e --- /dev/null +++ b/lib/features/session/data/repository/session_repository_impl.dart @@ -0,0 +1,15 @@ +import 'package:jmap_dart_client/jmap/core/session/session.dart'; +import 'package:tmail_ui_user/features/session/data/datasource/session_datasource.dart'; +import 'package:tmail_ui_user/features/session/domain/repository/session_repository.dart'; + +class SessionRepositoryImpl extends SessionRepository { + + final SessionDataSource sessionDataSource; + + SessionRepositoryImpl(this.sessionDataSource); + + @override + Future getSession() { + return sessionDataSource.getSession(); + } +} \ No newline at end of file