43 lines
1.1 KiB
Dart
43 lines
1.1 KiB
Dart
import 'package:fpdart/fpdart.dart';
|
|
import '../../../../core/errors/failures.dart';
|
|
import '../../../../shared/domain/usecases/usecase.dart';
|
|
import '../entities/user.dart';
|
|
import '../repositories/auth_repository.dart';
|
|
|
|
class LoginParams {
|
|
final String email;
|
|
final String password;
|
|
|
|
const LoginParams({
|
|
required this.email,
|
|
required this.password,
|
|
});
|
|
}
|
|
|
|
class LoginUseCase implements UseCase<User, LoginParams> {
|
|
final AuthRepository repository;
|
|
|
|
LoginUseCase(this.repository);
|
|
|
|
@override
|
|
Future<Either<Failure, User>> call(LoginParams params) async {
|
|
// Validate email format
|
|
if (!_isValidEmail(params.email)) {
|
|
return Left(ValidationFailure('Invalid email format'));
|
|
}
|
|
|
|
// Validate password
|
|
if (params.password.length < 6) {
|
|
return Left(ValidationFailure('Password must be at least 6 characters'));
|
|
}
|
|
|
|
return repository.login(
|
|
email: params.email,
|
|
password: params.password,
|
|
);
|
|
}
|
|
|
|
bool _isValidEmail(String email) {
|
|
return RegExp(r'^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$').hasMatch(email);
|
|
}
|
|
} |