TF-233 Add mailbox name validator

This commit is contained in:
dab246
2022-02-22 16:04:12 +07:00
committed by Dat H. Pham
parent eec37295c8
commit 8f356a4ee3
19 changed files with 318 additions and 15 deletions
@@ -0,0 +1,21 @@
import 'package:core/core.dart';
import 'package:dartz/dartz.dart';
import 'package:tmail_ui_user/features/mailbox_creator/domain/extensions/list_validator_extension.dart';
import 'package:tmail_ui_user/features/mailbox_creator/domain/model/verification/new_name_request.dart';
import 'package:tmail_ui_user/features/mailbox_creator/domain/model/verification/validator.dart';
import 'package:tmail_ui_user/features/mailbox_creator/domain/state/verify_name_view_state.dart';
class CompositeNameValidator extends Validator<NewNameRequest> {
final List<Validator> _listValidator;
CompositeNameValidator(this._listValidator);
@override
Either<Failure, Success> validate(NewNameRequest newNameRequest) {
return _listValidator.isNotEmpty
? _listValidator.getValidatorNameViewState(newNameRequest)
: Right<Failure, Success>(VerifyNameViewState());
}
}
@@ -0,0 +1,28 @@
import 'package:core/core.dart';
import 'package:dartz/dartz.dart';
import 'package:tmail_ui_user/features/mailbox_creator/domain/exceptions/verify_name_exception.dart';
import 'package:tmail_ui_user/features/mailbox_creator/domain/model/verification/new_name_request.dart';
import 'package:tmail_ui_user/features/mailbox_creator/domain/model/verification/validator.dart';
import 'package:tmail_ui_user/features/mailbox_creator/domain/state/verify_name_view_state.dart';
class DuplicateNameValidator extends Validator<NewNameRequest> {
final List<String> _listName;
DuplicateNameValidator(this._listName);
@override
Either<Failure, Success> validate(NewNameRequest newNameRequest) {
if (newNameRequest.value != null) {
final nameExist = _listName
.map((nameItem) => nameItem.toLowerCase())
.contains(newNameRequest.value!.toLowerCase());
if (nameExist) {
return Left<Failure, Success>(VerifyNameFailure(DuplicatedNameException()));
} else {
return Right<Failure, Success>(VerifyNameViewState());
}
} else {
return Right<Failure, Success>(VerifyNameViewState());
}
}
}
@@ -0,0 +1,19 @@
import 'package:core/core.dart';
import 'package:dartz/dartz.dart';
import 'package:tmail_ui_user/features/mailbox_creator/domain/exceptions/verify_name_exception.dart';
import 'package:tmail_ui_user/features/mailbox_creator/domain/model/verification/new_name_request.dart';
import 'package:tmail_ui_user/features/mailbox_creator/domain/model/verification/validator.dart';
import 'package:tmail_ui_user/features/mailbox_creator/domain/state/verify_name_view_state.dart';
class EmptyNameValidator extends Validator<NewNameRequest> {
@override
Either<Failure, Success> validate(NewNameRequest newNameRequest) {
if (newNameRequest.value == null || newNameRequest.value!.isEmpty) {
return Left<Failure, Success>(VerifyNameFailure(EmptyNameException()));
} else {
return Right<Failure, Success>(VerifyNameViewState());
}
}
}
@@ -0,0 +1,11 @@
import 'package:equatable/equatable.dart';
class NewNameRequest with EquatableMixin {
final String? value;
NewNameRequest(this.value);
@override
List<Object?> get props => [value];
}
@@ -0,0 +1,20 @@
import 'package:core/core.dart';
import 'package:dartz/dartz.dart';
import 'package:tmail_ui_user/features/mailbox_creator/domain/exceptions/verify_name_exception.dart';
import 'package:tmail_ui_user/features/mailbox_creator/domain/extensions/name_validator_string_extension.dart';
import 'package:tmail_ui_user/features/mailbox_creator/domain/model/verification/new_name_request.dart';
import 'package:tmail_ui_user/features/mailbox_creator/domain/model/verification/validator.dart';
import 'package:tmail_ui_user/features/mailbox_creator/domain/state/verify_name_view_state.dart';
class SpecialCharacterValidator extends Validator<NewNameRequest> {
@override
Either<Failure, Success> validate(NewNameRequest newNameRequest) {
if (newNameRequest.value != null && newNameRequest.value!.hasSpecialCharactersInName()) {
return Left<Failure, Success>(VerifyNameFailure(SpecialCharacterException()));
} else {
return Right<Failure, Success>(VerifyNameViewState());
}
}
}
@@ -0,0 +1,7 @@
import 'package:core/core.dart';
import 'package:dartz/dartz.dart';
abstract class Validator<T> {
Either<Failure, Success> validate(T value);
}