/// Result of API validation operations class ValidationResult { const ValidationResult._({ required this.isValid, required this.status, required this.message, this.errors = const [], this.warnings = const [], this.data, }); const ValidationResult.success( String message, { dynamic data, List warnings = const [], }) : this._( isValid: true, status: ValidationStatus.success, message: message, warnings: warnings, data: data, ); const ValidationResult.warning( String message, { List warnings = const [], dynamic data, }) : this._( isValid: true, status: ValidationStatus.warning, message: message, warnings: warnings, data: data, ); const ValidationResult.error( String message, { List errors = const [], List warnings = const [], }) : this._( isValid: false, status: ValidationStatus.error, message: message, errors: errors, warnings: warnings, ); final bool isValid; final ValidationStatus status; final String message; final List errors; final List warnings; final dynamic data; bool get hasWarnings => warnings.isNotEmpty; bool get hasErrors => errors.isNotEmpty; @override String toString() { final buffer = StringBuffer(); buffer.write('ValidationResult('); buffer.write('status: $status, '); buffer.write('message: $message'); if (hasErrors) { buffer.write(', errors: ${errors.length}'); } if (hasWarnings) { buffer.write(', warnings: ${warnings.length}'); } buffer.write(')'); return buffer.toString(); } /// Convert to a detailed map for logging/debugging Map toMap() { return { 'isValid': isValid, 'status': status.name, 'message': message, 'errors': errors, 'warnings': warnings, 'hasData': data != null, }; } } enum ValidationStatus { success, warning, error } /// Exception thrown when validation fails critically class ValidationException implements Exception { const ValidationException(this.result); final ValidationResult result; @override String toString() => 'ValidationException: ${result.message}'; }