2b595c40cd
Hand-rolled to match the server's actual JSON shapes: - AdminRequest carries user_id (UUID, not username); kind switches which title field is the display name - AdminQuarantineItem aggregates reports per track with reason_counts and a nested reports[] list, mirroring adminQueueRowView - AdminUser includes display_name + auto_approve_requests - Invite uses invited_by UUID + note (server hardcodes 24h TTL) Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
34 lines
1.1 KiB
Dart
34 lines
1.1 KiB
Dart
/// Mirrors `adminUserView` from internal/api/admin_users.go. Distinct
|
|
/// from MyProfile because admin endpoints expose `auto_approve_requests`
|
|
/// and the canonical `created_at` that the user-scoped /me response
|
|
/// intentionally omits.
|
|
///
|
|
/// The list endpoint wraps these in `{"users": [...]}`; the parsing of
|
|
/// the envelope is done in `AdminUsersApi`, not here.
|
|
class AdminUser {
|
|
const AdminUser({
|
|
required this.id,
|
|
required this.username,
|
|
this.displayName,
|
|
required this.isAdmin,
|
|
required this.autoApproveRequests,
|
|
required this.createdAt,
|
|
});
|
|
|
|
final String id;
|
|
final String username;
|
|
final String? displayName;
|
|
final bool isAdmin;
|
|
final bool autoApproveRequests;
|
|
final String createdAt;
|
|
|
|
factory AdminUser.fromJson(Map<String, dynamic> j) => AdminUser(
|
|
id: j['id'] as String? ?? '',
|
|
username: j['username'] as String? ?? '',
|
|
displayName: j['display_name'] as String?,
|
|
isAdmin: j['is_admin'] as bool? ?? false,
|
|
autoApproveRequests: j['auto_approve_requests'] as bool? ?? false,
|
|
createdAt: j['created_at'] as String? ?? '',
|
|
);
|
|
}
|