马良AI写作初始化仓库
This commit is contained in:
169
AINoval/lib/models/user_ai_model_config_model.dart
Normal file
169
AINoval/lib/models/user_ai_model_config_model.dart
Normal file
@@ -0,0 +1,169 @@
|
||||
import 'package:meta/meta.dart'; // For @immutable
|
||||
import '../utils/date_time_parser.dart'; // Import the parser
|
||||
import 'package:equatable/equatable.dart'; // Import Equatable for Equatable mixin
|
||||
|
||||
/// 用户 AI 模型配置模型 (对应后端的 UserAIModelConfigResponse)
|
||||
@immutable // Good practice for value objects
|
||||
class UserAIModelConfigModel extends Equatable {
|
||||
final String id;
|
||||
final String userId;
|
||||
final String provider;
|
||||
final String modelName;
|
||||
final String alias;
|
||||
final String apiEndpoint;
|
||||
final bool isValidated;
|
||||
final bool isDefault;
|
||||
final DateTime createdAt;
|
||||
final DateTime updatedAt;
|
||||
final String? apiKey; // 添加apiKey字段,存储解密后的API密钥
|
||||
|
||||
/// 获取模型名称,用于显示
|
||||
String get name => (alias.isNotEmpty && alias != modelName) ? alias : modelName;
|
||||
|
||||
const UserAIModelConfigModel({
|
||||
required this.id,
|
||||
required this.userId,
|
||||
required this.provider,
|
||||
required this.modelName,
|
||||
required this.alias,
|
||||
required this.apiEndpoint,
|
||||
required this.isValidated,
|
||||
required this.isDefault,
|
||||
required this.createdAt,
|
||||
required this.updatedAt,
|
||||
this.apiKey, // 添加apiKey字段,可为空
|
||||
});
|
||||
|
||||
// 空实例,用于默认值
|
||||
factory UserAIModelConfigModel.empty() {
|
||||
return UserAIModelConfigModel(
|
||||
id: '',
|
||||
userId: '',
|
||||
provider: '',
|
||||
modelName: '',
|
||||
alias: '',
|
||||
apiEndpoint: '',
|
||||
isValidated: false,
|
||||
isDefault: false,
|
||||
createdAt: DateTime.now(),
|
||||
updatedAt: DateTime.now(),
|
||||
apiKey: null, // 默认为null
|
||||
);
|
||||
}
|
||||
|
||||
// 从JSON转换方法
|
||||
factory UserAIModelConfigModel.fromJson(Map<String, dynamic> json) {
|
||||
// Helper to safely get string, providing a default if null or wrong type
|
||||
String safeString(String key, [String defaultValue = '']) {
|
||||
return json[key] is String ? json[key] as String : defaultValue;
|
||||
}
|
||||
|
||||
// Helper to safely get bool, providing a default if null or wrong type
|
||||
bool safeBool(String key, [bool defaultValue = false]) {
|
||||
return json[key] is bool ? json[key] as bool : defaultValue;
|
||||
}
|
||||
|
||||
return UserAIModelConfigModel(
|
||||
id: safeString('id'), // Assuming 'id' is the key from backend
|
||||
userId: safeString('userId'),
|
||||
provider: safeString('provider'),
|
||||
modelName: safeString('modelName'),
|
||||
alias: safeString('alias'), // 使用safeString确保null安全
|
||||
apiEndpoint: safeString('apiEndpoint'), // 修复:使用safeString处理可能为null的apiEndpoint
|
||||
isValidated: safeBool('isValidated'),
|
||||
isDefault: safeBool('isDefault'),
|
||||
createdAt: parseBackendDateTime(json['createdAt']), // Use the parser
|
||||
updatedAt: parseBackendDateTime(json['updatedAt']), // Use the parser
|
||||
apiKey: json['apiKey'] as String?, // 添加API密钥,可为空
|
||||
);
|
||||
}
|
||||
|
||||
// 转换为JSON方法
|
||||
Map<String, dynamic> toJson() {
|
||||
return {
|
||||
'id': id,
|
||||
'userId': userId,
|
||||
'provider': provider,
|
||||
'modelName': modelName,
|
||||
'alias': alias,
|
||||
'apiEndpoint': apiEndpoint,
|
||||
'isValidated': isValidated,
|
||||
'isDefault': isDefault,
|
||||
'createdAt': createdAt.toIso8601String(), // Standard format for JSON
|
||||
'updatedAt': updatedAt.toIso8601String(), // Standard format for JSON
|
||||
'apiKey': apiKey, // 包含API密钥
|
||||
};
|
||||
}
|
||||
|
||||
// 复制方法
|
||||
UserAIModelConfigModel copyWith({
|
||||
String? id,
|
||||
String? userId,
|
||||
String? provider,
|
||||
String? modelName,
|
||||
String? alias,
|
||||
String? apiEndpoint,
|
||||
bool? isValidated,
|
||||
bool? isDefault,
|
||||
DateTime? createdAt,
|
||||
DateTime? updatedAt,
|
||||
String? apiKey, // 添加apiKey参数
|
||||
}) {
|
||||
return UserAIModelConfigModel(
|
||||
id: id ?? this.id,
|
||||
userId: userId ?? this.userId,
|
||||
provider: provider ?? this.provider,
|
||||
modelName: modelName ?? this.modelName,
|
||||
alias: alias ?? this.alias,
|
||||
apiEndpoint: apiEndpoint ?? this.apiEndpoint,
|
||||
isValidated: isValidated ?? this.isValidated,
|
||||
isDefault: isDefault ?? this.isDefault,
|
||||
createdAt: createdAt ?? this.createdAt,
|
||||
updatedAt: updatedAt ?? this.updatedAt,
|
||||
apiKey: apiKey ?? this.apiKey, // 复制apiKey
|
||||
);
|
||||
}
|
||||
|
||||
// --- Value Equality ---
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
if (identical(this, other)) return true;
|
||||
|
||||
return other is UserAIModelConfigModel &&
|
||||
other.id == id &&
|
||||
other.userId == userId &&
|
||||
other.provider == provider &&
|
||||
other.modelName == modelName &&
|
||||
other.alias == alias &&
|
||||
other.apiEndpoint == apiEndpoint &&
|
||||
other.isValidated == isValidated &&
|
||||
other.isDefault == isDefault &&
|
||||
other.createdAt == createdAt &&
|
||||
other.apiKey == apiKey && // 比较apiKey
|
||||
other.updatedAt == updatedAt;
|
||||
}
|
||||
|
||||
@override
|
||||
int get hashCode {
|
||||
return id.hashCode ^
|
||||
userId.hashCode ^
|
||||
provider.hashCode ^
|
||||
modelName.hashCode ^
|
||||
alias.hashCode ^
|
||||
apiEndpoint.hashCode ^
|
||||
isValidated.hashCode ^
|
||||
isDefault.hashCode ^
|
||||
createdAt.hashCode ^
|
||||
apiKey.hashCode ^ // 计算apiKey的哈希值
|
||||
updatedAt.hashCode;
|
||||
}
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'UserAIModelConfigModel(id: $id, userId: $userId, provider: $provider, modelName: $modelName, alias: $alias, apiEndpoint: $apiEndpoint, isValidated: $isValidated, isDefault: $isDefault, createdAt: $createdAt, updatedAt: $updatedAt, apiKey: ${apiKey != null ? '******' : 'null'})'; // 不显示完整apiKey
|
||||
}
|
||||
|
||||
@override
|
||||
List<Object?> get props => [id, userId, provider, modelName, alias, apiEndpoint, isValidated, isDefault, createdAt, updatedAt, apiKey]; // 添加apiKey到props
|
||||
}
|
||||
Reference in New Issue
Block a user