Files
bvandeusen 2b595c40cd feat(flutter): admin DTOs (request, quarantine item, user, invite)
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>
2026-05-08 21:51:33 -04:00

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? ?? '',
);
}