import 'package:dartz/dartz.dart'; import '../../repositories/company_repository.dart'; import '../../../models/company_model.dart'; import '../../../core/errors/failures.dart'; import '../base_usecase.dart'; /// 회사 수정 파라미터 class UpdateCompanyParams { final int id; final Company company; const UpdateCompanyParams({ required this.id, required this.company, }); } /// 회사 수정 UseCase class UpdateCompanyUseCase extends UseCase { // 레포지토리 기반으로 마이그레이션 final CompanyRepository _companyRepository; UpdateCompanyUseCase(this._companyRepository); @override Future> call(UpdateCompanyParams params) async { try { // 유효성 검증 final validationResult = _validateCompany(params.company); if (validationResult != null) { return Left(validationResult); } final result = await _companyRepository.updateCompany(params.id, params.company); return result; } on ServerFailure catch (e) { return Left(ServerFailure( message: e.message, originalError: e, )); } catch (e) { return Left(UnknownFailure( message: '회사 정보 수정 중 오류가 발생했습니다.', originalError: e, )); } } ValidationFailure? _validateCompany(Company company) { final errors = {}; if (company.name.isEmpty) { errors['name'] = '회사명을 입력해주세요.'; } if (company.address.isEmpty) { errors['address'] = '주소를 입력해주세요.'; } if (company.companyTypes.isEmpty) { errors['companyTypes'] = '회사 유형을 선택해주세요.'; } if (company.contactEmail != null && company.contactEmail!.isNotEmpty) { final emailRegex = RegExp(r'^[a-zA-Z0-9.]+@[a-zA-Z0-9]+\.[a-zA-Z]+'); if (!emailRegex.hasMatch(company.contactEmail!)) { errors['contactEmail'] = '올바른 이메일 형식이 아닙니다.'; } } if (company.contactPhone != null && company.contactPhone!.isNotEmpty) { final phoneRegex = RegExp(r'^01[0-9]{1}-?[0-9]{4}-?[0-9]{4}$'); if (!phoneRegex.hasMatch(company.contactPhone!)) { errors['contactPhone'] = '올바른 전화번호 형식이 아닙니다.'; } } if (errors.isNotEmpty) { return ValidationFailure( message: '입력값을 확인해주세요.', errors: errors, ); } return null; } }