import 'package:dartz/dartz.dart'; import '../../../services/user_service.dart'; import '../../../models/user_model.dart' as model; import '../../../core/constants/app_constants.dart'; import '../../../core/errors/failures.dart'; import '../base_usecase.dart'; /// 사용자 수정 파라미터 class UpdateUserParams { final int id; final String? email; final String? name; final String? role; final int? companyId; final String? phone; final String? position; final bool? isActive; const UpdateUserParams({ required this.id, this.email, this.name, this.role, this.companyId, this.phone, this.position, this.isActive, }); } /// 사용자 정보 수정 UseCase class UpdateUserUseCase extends UseCase { final UserService _userService; UpdateUserUseCase(this._userService); @override Future> call(UpdateUserParams params) async { try { // 유효성 검증 final validationResult = _validateUpdateInput(params); if (validationResult != null) { return Left(validationResult); } final user = await _userService.updateUser( params.id, email: params.email, name: params.name, role: params.role, companyId: params.companyId, phone: params.phone, position: params.position, ); return Right(user); } catch (e) { if (e.toString().contains('찾을 수 없')) { return Left(ValidationFailure( message: '사용자를 찾을 수 없습니다.', code: 'USER_NOT_FOUND', originalError: e, )); } else if (e.toString().contains('권한')) { return Left(PermissionFailure( message: '사용자 정보를 수정할 권한이 없습니다.', code: 'PERMISSION_DENIED', originalError: e, )); } else { return Left(ServerFailure( message: '사용자 정보 수정 중 오류가 발생했습니다.', originalError: e, )); } } } ValidationFailure? _validateUpdateInput(UpdateUserParams params) { final errors = {}; // 이메일 검증 (제공된 경우) if (params.email != null && params.email!.isNotEmpty) { if (!AppConstants.emailRegex.hasMatch(params.email!)) { errors['email'] = '올바른 이메일 형식이 아닙니다.'; } } // 역할 검증 (제공된 경우) if (params.role != null && !['S', 'M', 'U', 'V'].contains(params.role)) { errors['role'] = '올바른 역할을 선택해주세요.'; } // 전화번호 검증 (제공된 경우) if (params.phone != null && params.phone!.isNotEmpty) { if (!AppConstants.phoneRegex.hasMatch(params.phone!)) { errors['phone'] = '올바른 전화번호 형식이 아닙니다.'; } } if (errors.isNotEmpty) { return ValidationFailure( message: '입력값을 확인해주세요.', errors: errors, ); } return null; } }