Skip to content

Commit 0bbcfd0

Browse files
dab246hoangdat
authored andcommitted
TF-4186 Add datasource/repository for save and get company server login info
1 parent 860154a commit 0bbcfd0

11 files changed

+202
-0
lines changed
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import 'package:tmail_ui_user/features/login/domain/model/company_server_login_info.dart';
2+
3+
abstract class CompanyServerLoginDataSource {
4+
Future<void> saveCompanyServerLoginInfo(CompanyServerLoginInfo loginInfo);
5+
6+
Future<CompanyServerLoginInfo> getCompanyServerLoginInfo();
7+
8+
Future<void> removeCompanyServerLoginInfo();
9+
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
import 'package:tmail_ui_user/features/login/data/datasource/company_server_login_datasource.dart';
2+
import 'package:tmail_ui_user/features/login/data/local/company_server_login_cache_manager.dart';
3+
import 'package:tmail_ui_user/features/login/domain/model/company_server_login_info.dart';
4+
import 'package:tmail_ui_user/main/exceptions/exception_thrower.dart';
5+
6+
class CompanyServerLoginDatasourceImpl implements CompanyServerLoginDataSource {
7+
final CompanyServerLoginCacheManager _loginCacheManager;
8+
final ExceptionThrower _exceptionThrower;
9+
10+
CompanyServerLoginDatasourceImpl(
11+
this._loginCacheManager,
12+
this._exceptionThrower,
13+
);
14+
15+
@override
16+
Future<CompanyServerLoginInfo> getCompanyServerLoginInfo() {
17+
return Future.sync(() {
18+
return _loginCacheManager.getCompanyServerLoginInfo();
19+
}).catchError(_exceptionThrower.throwException);
20+
}
21+
22+
@override
23+
Future<void> removeCompanyServerLoginInfo() {
24+
return Future.sync(() async {
25+
return await _loginCacheManager.removeCompanyServerLoginInfo();
26+
}).catchError(_exceptionThrower.throwException);
27+
}
28+
29+
@override
30+
Future<void> saveCompanyServerLoginInfo(CompanyServerLoginInfo loginInfo) {
31+
return Future.sync(() async {
32+
return await _loginCacheManager.saveCompanyServerLoginInfo(loginInfo);
33+
}).catchError(_exceptionThrower.throwException);
34+
}
35+
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
import 'package:shared_preferences/shared_preferences.dart';
2+
import 'package:tmail_ui_user/features/login/domain/exceptions/login_exception.dart';
3+
import 'package:tmail_ui_user/features/login/domain/model/company_server_login_info.dart';
4+
5+
class CompanyServerLoginCacheManager {
6+
static const String _companyServerLoginInfoKey = 'COMPANY_SERVER_LOGIN_INFO';
7+
8+
const CompanyServerLoginCacheManager(this._sharedPreferences);
9+
10+
final SharedPreferences _sharedPreferences;
11+
12+
CompanyServerLoginInfo getCompanyServerLoginInfo() {
13+
final userEmail = _sharedPreferences.getString(_companyServerLoginInfoKey);
14+
if (userEmail?.trim().isNotEmpty == true) {
15+
return CompanyServerLoginInfo(email: userEmail!);
16+
} else {
17+
throw NotFoundCompanyServerLoginInfoException();
18+
}
19+
}
20+
21+
Future<void> saveCompanyServerLoginInfo(
22+
CompanyServerLoginInfo companyServerLoginInfo,
23+
) async {
24+
await _sharedPreferences.setString(
25+
_companyServerLoginInfoKey, companyServerLoginInfo.email);
26+
}
27+
28+
Future<void> removeCompanyServerLoginInfo() async {
29+
await _sharedPreferences.remove(_companyServerLoginInfoKey);
30+
}
31+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
import 'package:tmail_ui_user/features/login/data/datasource/company_server_login_datasource.dart';
2+
import 'package:tmail_ui_user/features/login/domain/model/company_server_login_info.dart';
3+
import 'package:tmail_ui_user/features/login/domain/repository/company_server_login_repository.dart';
4+
5+
class CompanyServerLoginRepositoryImpl implements CompanyServerLoginRepository {
6+
final CompanyServerLoginDataSource _serverLoginDataSource;
7+
8+
CompanyServerLoginRepositoryImpl(this._serverLoginDataSource);
9+
10+
@override
11+
Future<CompanyServerLoginInfo> getCompanyServerLoginInfo() {
12+
return _serverLoginDataSource.getCompanyServerLoginInfo();
13+
}
14+
15+
@override
16+
Future<void> removeCompanyServerLoginInfo() {
17+
return _serverLoginDataSource.removeCompanyServerLoginInfo();
18+
}
19+
20+
@override
21+
Future<void> saveCompanyServerLoginInfo(CompanyServerLoginInfo loginInfo) {
22+
return _serverLoginDataSource.saveCompanyServerLoginInfo(loginInfo);
23+
}
24+
}

lib/features/login/domain/exceptions/login_exception.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,3 +21,5 @@ class NoSuitableBrowserForOIDCException implements Exception {
2121
}
2222
}
2323

24+
class NotFoundCompanyServerLoginInfoException implements Exception {}
25+
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import 'package:equatable/equatable.dart';
2+
3+
class CompanyServerLoginInfo with EquatableMixin {
4+
final String email;
5+
6+
const CompanyServerLoginInfo({
7+
required this.email,
8+
});
9+
10+
@override
11+
List<Object> get props => [email];
12+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import 'package:tmail_ui_user/features/login/domain/model/company_server_login_info.dart';
2+
3+
abstract class CompanyServerLoginRepository {
4+
Future<void> saveCompanyServerLoginInfo(CompanyServerLoginInfo loginInfo);
5+
6+
Future<CompanyServerLoginInfo> getCompanyServerLoginInfo();
7+
8+
Future<void> removeCompanyServerLoginInfo();
9+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import 'package:core/presentation/state/failure.dart';
2+
import 'package:core/presentation/state/success.dart';
3+
import 'package:tmail_ui_user/features/login/domain/model/company_server_login_info.dart';
4+
5+
class GettingCompanyServerLoginInfo extends LoadingState {}
6+
7+
class GetCompanyServerLoginInfoSuccess extends UIState {
8+
final CompanyServerLoginInfo serverLoginInfo;
9+
10+
GetCompanyServerLoginInfoSuccess(this.serverLoginInfo);
11+
12+
@override
13+
List<Object> get props => [serverLoginInfo];
14+
}
15+
16+
class GetCompanyServerLoginInfoFailure extends FeatureFailure {
17+
GetCompanyServerLoginInfoFailure(dynamic exception)
18+
: super(exception: exception);
19+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import 'package:core/presentation/state/failure.dart';
2+
import 'package:core/presentation/state/success.dart';
3+
4+
class SavingCompanyServerLoginInfo extends LoadingState {}
5+
6+
class SaveCompanyServerLoginInfoSuccess extends UIState {}
7+
8+
class SaveCompanyServerLoginInfoFailure extends FeatureFailure {
9+
SaveCompanyServerLoginInfoFailure(dynamic exception)
10+
: super(exception: exception);
11+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
import 'dart:core';
2+
3+
import 'package:core/presentation/state/failure.dart';
4+
import 'package:core/presentation/state/success.dart';
5+
import 'package:dartz/dartz.dart';
6+
import 'package:tmail_ui_user/features/login/domain/repository/company_server_login_repository.dart';
7+
import 'package:tmail_ui_user/features/login/domain/state/get_company_server_login_info_state.dart';
8+
9+
class GetCompanyServerLoginInfoInteractor {
10+
final CompanyServerLoginRepository _serverLoginRepository;
11+
12+
GetCompanyServerLoginInfoInteractor(this._serverLoginRepository);
13+
14+
Stream<Either<Failure, Success>> execute() async* {
15+
try {
16+
yield Right(GettingCompanyServerLoginInfo());
17+
final serverLoginInfo =
18+
await _serverLoginRepository.getCompanyServerLoginInfo();
19+
yield Right(GetCompanyServerLoginInfoSuccess(serverLoginInfo));
20+
} catch (exception) {
21+
yield Left(GetCompanyServerLoginInfoFailure(exception));
22+
}
23+
}
24+
}

0 commit comments

Comments
 (0)