import 'package:dartz/dartz.dart'; import 'package:injectable/injectable.dart'; import '../../../core/errors/failures.dart'; import '../../repositories/user_repository.dart'; import '../base_usecase.dart'; /// 사용자명 중복 확인 파라미터 class CheckUsernameAvailabilityParams { final String username; const CheckUsernameAvailabilityParams({ required this.username, }); } /// 사용자명 사용 가능 여부 확인 UseCase (서버 API v0.2.1 대응) /// 사용자 생성 및 수정 시 사용자명 중복 검증 @injectable class CheckUsernameAvailabilityUseCase extends UseCase { final UserRepository _userRepository; CheckUsernameAvailabilityUseCase(this._userRepository); @override Future> call(CheckUsernameAvailabilityParams params) async { // 입력값 검증 if (params.username.trim().isEmpty) { return Left(ValidationFailure( message: '사용자명을 입력해주세요.', errors: {'username': '사용자명을 입력해주세요.'}, )); } if (params.username.length < 3) { return Left(ValidationFailure( message: '사용자명은 3자 이상이어야 합니다.', errors: {'username': '사용자명은 3자 이상이어야 합니다.'}, )); } // 사용자명 형식 검증 (영문, 숫자, 언더스코어만) if (!RegExp(r'^[a-zA-Z0-9_]+$').hasMatch(params.username)) { return Left(ValidationFailure( message: '사용자명은 영문, 숫자, 언더스코어만 사용 가능합니다.', errors: {'username': '사용자명은 영문, 숫자, 언더스코어만 사용 가능합니다.'}, )); } return await _userRepository.checkUsernameAvailability(params.username); } }