TF-4186 Add datasource/repository for save and get company server login info

This commit is contained in:
dab246
2025-12-03 11:16:39 +07:00
committed by Dat H. Pham
parent 860154acc1
commit 0bbcfd0f75
11 changed files with 202 additions and 0 deletions
@@ -21,3 +21,5 @@ class NoSuitableBrowserForOIDCException implements Exception {
}
}
class NotFoundCompanyServerLoginInfoException implements Exception {}
@@ -0,0 +1,12 @@
import 'package:equatable/equatable.dart';
class CompanyServerLoginInfo with EquatableMixin {
final String email;
const CompanyServerLoginInfo({
required this.email,
});
@override
List<Object> get props => [email];
}
@@ -0,0 +1,9 @@
import 'package:tmail_ui_user/features/login/domain/model/company_server_login_info.dart';
abstract class CompanyServerLoginRepository {
Future<void> saveCompanyServerLoginInfo(CompanyServerLoginInfo loginInfo);
Future<CompanyServerLoginInfo> getCompanyServerLoginInfo();
Future<void> removeCompanyServerLoginInfo();
}
@@ -0,0 +1,19 @@
import 'package:core/presentation/state/failure.dart';
import 'package:core/presentation/state/success.dart';
import 'package:tmail_ui_user/features/login/domain/model/company_server_login_info.dart';
class GettingCompanyServerLoginInfo extends LoadingState {}
class GetCompanyServerLoginInfoSuccess extends UIState {
final CompanyServerLoginInfo serverLoginInfo;
GetCompanyServerLoginInfoSuccess(this.serverLoginInfo);
@override
List<Object> get props => [serverLoginInfo];
}
class GetCompanyServerLoginInfoFailure extends FeatureFailure {
GetCompanyServerLoginInfoFailure(dynamic exception)
: super(exception: exception);
}
@@ -0,0 +1,11 @@
import 'package:core/presentation/state/failure.dart';
import 'package:core/presentation/state/success.dart';
class SavingCompanyServerLoginInfo extends LoadingState {}
class SaveCompanyServerLoginInfoSuccess extends UIState {}
class SaveCompanyServerLoginInfoFailure extends FeatureFailure {
SaveCompanyServerLoginInfoFailure(dynamic exception)
: super(exception: exception);
}
@@ -0,0 +1,24 @@
import 'dart:core';
import 'package:core/presentation/state/failure.dart';
import 'package:core/presentation/state/success.dart';
import 'package:dartz/dartz.dart';
import 'package:tmail_ui_user/features/login/domain/repository/company_server_login_repository.dart';
import 'package:tmail_ui_user/features/login/domain/state/get_company_server_login_info_state.dart';
class GetCompanyServerLoginInfoInteractor {
final CompanyServerLoginRepository _serverLoginRepository;
GetCompanyServerLoginInfoInteractor(this._serverLoginRepository);
Stream<Either<Failure, Success>> execute() async* {
try {
yield Right(GettingCompanyServerLoginInfo());
final serverLoginInfo =
await _serverLoginRepository.getCompanyServerLoginInfo();
yield Right(GetCompanyServerLoginInfoSuccess(serverLoginInfo));
} catch (exception) {
yield Left(GetCompanyServerLoginInfoFailure(exception));
}
}
}
@@ -0,0 +1,26 @@
import 'dart:core';
import 'package:core/presentation/state/failure.dart';
import 'package:core/presentation/state/success.dart';
import 'package:dartz/dartz.dart';
import 'package:tmail_ui_user/features/login/domain/model/company_server_login_info.dart';
import 'package:tmail_ui_user/features/login/domain/repository/company_server_login_repository.dart';
import 'package:tmail_ui_user/features/login/domain/state/save_company_server_login_info_state.dart';
class SaveCompanyServerLoginInfoInteractor {
final CompanyServerLoginRepository _serverLoginRepository;
SaveCompanyServerLoginInfoInteractor(this._serverLoginRepository);
Stream<Either<Failure, Success>> execute(
CompanyServerLoginInfo serverLoginInfo,
) async* {
try {
yield Right(SavingCompanyServerLoginInfo());
await _serverLoginRepository.saveCompanyServerLoginInfo(serverLoginInfo);
yield Right(SaveCompanyServerLoginInfoSuccess());
} catch (exception) {
yield Left(SaveCompanyServerLoginInfoFailure(exception));
}
}
}