This commit is contained in:
2026-05-26 19:31:25 +02:00
parent 45455a16c4
commit 9d796d6e41
12 changed files with 785 additions and 62 deletions

View File

@@ -91,37 +91,46 @@ class TaskModel extends Equatable {
}
// --- SERIALIZZAZIONE DA SUPABASE ---
factory TaskModel.fromMap(Map<String, dynamic> json) {
factory TaskModel.fromMap(Map<String, dynamic> map) {
// 1. Gestiamo l'array nullo di Supabase trasformandolo in lista vuota
final List<String> parsedAssignedToIds = json['assigned_to_ids'] != null
? List<String>.from(json['assigned_to_ids'])
final List<String> parsedAssignedToIds = map['assigned_to_ids'] != null
? List<String>.from(map['assigned_to_ids'])
: [];
// 2. Mappiamo il JOIN dello staff, se presente
List<StaffMemberModel> parsedAssignedToStaff = [];
if (json['assigned_to_staff'] != null) {
final staffList = json['assigned_to_staff'] as List;
parsedAssignedToStaff = staffList
.map((s) => StaffMemberModel.fromMap(s as Map<String, dynamic>))
List<StaffMemberModel> staffList = [];
// Gestione del JSON proveniente dal Join nidificato (es. task_assignments -> staff_members)
if (map['task_assignments'] != null) {
staffList = (map['task_assignments'] as List)
.map((a) => a['staff_members'])
.where((s) => s != null)
.map((s) => StaffMemberModel.fromMap(s))
.toList();
}
// Gestione del JSON piatto (se mai lo userai in altre chiamate RPC o viste)
else if (map['assigned_to_staff'] != null) {
staffList = (map['assigned_to_staff'] as List)
.map((s) => StaffMemberModel.fromMap(s))
.toList();
}
return TaskModel(
id: json['id'] as String?,
companyId: json['company_id'] as String?,
title: json['title'] as String? ?? '',
description: json['description'] as String?,
id: map['id'] as String?,
companyId: map['company_id'] as String?,
title: map['title'] as String? ?? '',
description: map['description'] as String?,
assignedToIds: parsedAssignedToIds,
assignedToStaff: parsedAssignedToStaff,
createdById: json['created_by_id'] as String?,
dueDate: json['due_date'] != null
? DateTime.parse(json['due_date'] as String).toLocal()
assignedToStaff: staffList,
createdById: map['created_by_id'] as String?,
dueDate: map['due_date'] != null
? DateTime.parse(map['due_date'] as String).toLocal()
: null,
status: TaskStatusExtension.fromString(json['status'] as String?),
createdAt: json['created_at'] != null
? DateTime.parse(json['created_at'] as String).toLocal()
status: TaskStatusExtension.fromString(map['status'] as String?),
createdAt: map['created_at'] != null
? DateTime.parse(map['created_at'] as String).toLocal()
: null,
storeId: json['store_id'] as String?,
storeId: map['store_id'] as String?,
);
}