refactor(apps): 重构数据层目录结构并新增启动预热编排器

This commit is contained in:
zl-q
2026-03-29 20:26:30 +08:00
parent 33340de8f9
commit 4db9a13bfe
108 changed files with 1653 additions and 1320 deletions
@@ -0,0 +1,63 @@
enum FriendRequestStatus { pending, accepted, rejected }
class FriendUser {
final String id;
final String username;
final String? avatarUrl;
const FriendUser({
required this.id,
required this.username,
required this.avatarUrl,
});
factory FriendUser.fromJson(Map<String, dynamic> json) {
return FriendUser(
id: json['id'] as String,
username: json['username'] as String,
avatarUrl: json['avatar_url'] as String?,
);
}
}
class FriendRequest {
final String id;
final FriendUser sender;
final FriendUser recipient;
final String? content;
final FriendRequestStatus status;
final DateTime createdAt;
const FriendRequest({
required this.id,
required this.sender,
required this.recipient,
required this.content,
required this.status,
required this.createdAt,
});
factory FriendRequest.fromJson(Map<String, dynamic> json) {
return FriendRequest(
id: json['id'] as String,
sender: FriendUser.fromJson(json['sender'] as Map<String, dynamic>),
recipient: FriendUser.fromJson(json['recipient'] as Map<String, dynamic>),
content: json['content'] as String?,
status: _friendRequestStatusFromApi(json['status'] as String),
createdAt: DateTime.parse(json['created_at'] as String),
);
}
}
FriendRequestStatus _friendRequestStatusFromApi(String raw) {
switch (raw) {
case 'pending':
return FriendRequestStatus.pending;
case 'accepted':
return FriendRequestStatus.accepted;
case 'rejected':
return FriendRequestStatus.rejected;
default:
throw StateError('Unsupported friend request status: $raw');
}
}
@@ -0,0 +1,41 @@
class UserProfile {
final String id;
final String username;
final String? phone;
final String? avatarUrl;
final String? bio;
const UserProfile({
required this.id,
required this.username,
this.phone,
this.avatarUrl,
this.bio,
});
factory UserProfile.fromJson(Map<String, dynamic> json) {
return UserProfile(
id: json['id'] as String,
username: json['username'] as String,
phone: json['phone'] as String?,
avatarUrl: json['avatar_url'] as String?,
bio: json['bio'] as String?,
);
}
}
class UserUpdateRequest {
final String? username;
final String? avatarUrl;
final String? bio;
const UserUpdateRequest({this.username, this.avatarUrl, this.bio});
Map<String, dynamic> toJson() {
return {
if (username != null) 'username': username,
if (avatarUrl != null) 'avatar_url': avatarUrl,
if (bio != null) 'bio': bio,
};
}
}
@@ -0,0 +1,19 @@
class UserSummary {
final String id;
final String username;
final String? avatarUrl;
const UserSummary({
required this.id,
required this.username,
required this.avatarUrl,
});
factory UserSummary.fromJson(Map<String, dynamic> json) {
return UserSummary(
id: json['id'] as String,
username: json['username'] as String,
avatarUrl: json['avatar_url'] as String?,
);
}
}