2025-08-10 01:20:45 +05:30
|
|
|
import 'package:freezed_annotation/freezed_annotation.dart';
|
|
|
|
|
|
|
|
|
|
part 'folder.freezed.dart';
|
|
|
|
|
|
|
|
|
|
@freezed
|
|
|
|
|
sealed class Folder with _$Folder {
|
|
|
|
|
const factory Folder({
|
|
|
|
|
required String id,
|
|
|
|
|
required String name,
|
|
|
|
|
String? parentId,
|
2025-08-17 00:05:30 +05:30
|
|
|
String? userId,
|
|
|
|
|
DateTime? createdAt,
|
|
|
|
|
DateTime? updatedAt,
|
|
|
|
|
@Default(false) bool isExpanded,
|
2025-08-10 01:20:45 +05:30
|
|
|
@Default([]) List<String> conversationIds,
|
2025-08-17 00:05:30 +05:30
|
|
|
Map<String, dynamic>? meta,
|
|
|
|
|
Map<String, dynamic>? data,
|
|
|
|
|
Map<String, dynamic>? items,
|
2025-08-10 01:20:45 +05:30
|
|
|
}) = _Folder;
|
|
|
|
|
|
2025-08-17 00:05:30 +05:30
|
|
|
factory Folder.fromJson(Map<String, dynamic> json) {
|
|
|
|
|
// Extract conversation IDs from items.chats if available
|
|
|
|
|
final items = json['items'] as Map<String, dynamic>?;
|
|
|
|
|
final chats = items?['chats'] as List?;
|
|
|
|
|
|
|
|
|
|
// Handle both string IDs and conversation objects
|
|
|
|
|
final conversationIds = chats?.map((chat) {
|
|
|
|
|
if (chat is String) {
|
|
|
|
|
return chat;
|
|
|
|
|
} else if (chat is Map<String, dynamic>) {
|
|
|
|
|
return chat['id'] as String? ?? '';
|
|
|
|
|
}
|
|
|
|
|
return '';
|
|
|
|
|
}).where((id) => id.isNotEmpty).toList().cast<String>() ?? <String>[];
|
|
|
|
|
|
|
|
|
|
// Handle Unix timestamp conversion
|
|
|
|
|
DateTime? parseTimestamp(dynamic timestamp) {
|
|
|
|
|
if (timestamp == null) return null;
|
|
|
|
|
if (timestamp is int) {
|
|
|
|
|
return DateTime.fromMillisecondsSinceEpoch(timestamp * 1000);
|
|
|
|
|
}
|
|
|
|
|
if (timestamp is String) {
|
|
|
|
|
return DateTime.parse(timestamp);
|
|
|
|
|
}
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Create the modified JSON with proper field mapping
|
|
|
|
|
return Folder(
|
|
|
|
|
id: json['id'] as String,
|
|
|
|
|
name: json['name'] as String,
|
|
|
|
|
parentId: json['parent_id'] as String?,
|
|
|
|
|
userId: json['user_id'] as String?,
|
|
|
|
|
createdAt: parseTimestamp(json['created_at']),
|
|
|
|
|
updatedAt: parseTimestamp(json['updated_at']),
|
|
|
|
|
isExpanded: json['is_expanded'] as bool? ?? false,
|
|
|
|
|
conversationIds: conversationIds,
|
|
|
|
|
meta: json['meta'] as Map<String, dynamic>?,
|
|
|
|
|
data: json['data'] as Map<String, dynamic>?,
|
|
|
|
|
items: json['items'] as Map<String, dynamic>?,
|
|
|
|
|
);
|
|
|
|
|
}
|
2025-08-10 01:20:45 +05:30
|
|
|
}
|