TF-3985 Navigate Paywall url when click Increase your space button

This commit is contained in:
dab246
2025-09-09 15:33:50 +07:00
committed by Dat H. Pham
parent c3ee166c00
commit f373cd3d37
22 changed files with 463 additions and 5 deletions
@@ -0,0 +1,40 @@
import 'package:core/utils/mail/domain.dart';
import 'package:core/utils/mail/mail_address.dart';
import 'package:equatable/equatable.dart';
import 'package:get/get.dart';
import 'package:tmail_ui_user/features/paywall/presentation/paywall_utils.dart';
class PaywallUrlPattern with EquatableMixin {
final String pattern;
PaywallUrlPattern(this.pattern);
String getQualifiedUrl({required String ownerEmail, String? domainName}) {
final mailAddress = _getMailAddress(ownerEmail: ownerEmail);
return PaywallUtils.buildPaywallUrlFromTemplate(
template: pattern,
localPart: mailAddress?.localPart,
domainName: mailAddress?.domain.domainName,
);
}
MailAddress? _getMailAddress({required String ownerEmail}) {
try {
return MailAddress.validateAddress(ownerEmail);
} catch (e) {
if (GetUtils.isEmail(ownerEmail)) {
final listPart = ownerEmail.split('@');
if (listPart.length == 2) {
return MailAddress(
localPart: listPart.first,
domain: Domain.of((listPart.last)),
);
}
}
return null;
}
}
@override
List<Object> get props => [pattern];
}
@@ -0,0 +1,5 @@
import 'package:tmail_ui_user/features/paywall/domain/model/paywall_url_pattern.dart';
abstract class PaywallRepository {
Future<PaywallUrlPattern> getPaywallUrl(String baseUrl);
}
@@ -0,0 +1,18 @@
import 'package:core/presentation/state/failure.dart';
import 'package:core/presentation/state/success.dart';
import 'package:tmail_ui_user/features/paywall/domain/model/paywall_url_pattern.dart';
class GettingPaywallUrl extends LoadingState {}
class GetPaywallUrlSuccess extends UIState {
final PaywallUrlPattern paywallUrlPattern;
GetPaywallUrlSuccess(this.paywallUrlPattern);
@override
List<Object> get props => [paywallUrlPattern];
}
class GetPaywallUrlFailure extends FeatureFailure {
GetPaywallUrlFailure(dynamic exception) : super(exception: exception);
}
@@ -0,0 +1,21 @@
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/paywall/domain/repository/paywall_repository.dart';
import 'package:tmail_ui_user/features/paywall/domain/state/get_paywall_url_state.dart';
class GetPaywallUrlInteractor {
final PaywallRepository _paywallRepository;
GetPaywallUrlInteractor(this._paywallRepository);
Stream<Either<Failure, Success>> execute(String baseUrl) async* {
try {
yield Right(GettingPaywallUrl());
final paywallUrl = await _paywallRepository.getPaywallUrl(baseUrl);
yield Right(GetPaywallUrlSuccess(paywallUrl));
} catch (e) {
yield Left(GetPaywallUrlFailure(e));
}
}
}