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

@@ -1,3 +1,4 @@
import 'package:flux/core/enums_and_consts/consts.dart';
import 'package:flux/features/tasks/models/task_status.dart';
import 'package:supabase_flutter/supabase_flutter.dart';
// Sostituisci con i percorsi corretti di FLUX
@@ -18,10 +19,15 @@ class TaskRepository {
int? limit,
}) async {
try {
// 1. FASE FILTRI (PostgrestFilterBuilder)
// 1. FASE FILTRI: Usa il join esplicito stile "Notes"
var filterBuilder = _supabase
.from('tasks')
.select('*, assigned_to_staff:staff_members!task_assignments(*)')
.select('''
*,
task_assignments (
staff_members (*)
)
''')
.eq('company_id', companyId);
if (storeId != null) {
@@ -31,9 +37,8 @@ class TaskRepository {
}
if (staffId != null) {
filterBuilder = filterBuilder.or(
'staff_id.eq.$staffId,staff_id.is.null',
);
// Grazie al trigger, hai l'array pronto per il filtro senza impazzire!
filterBuilder = filterBuilder.contains('assigned_to_ids', [staffId]);
}
if (statuses != null && statuses.isNotEmpty) {
@@ -41,13 +46,11 @@ class TaskRepository {
filterBuilder = filterBuilder.inFilter('status', statusValues);
}
// 2. FASE TRASFORMAZIONI (PostgrestTransformBuilder)
// L'ordinamento lo facciamo sempre, quindi partiamo da qui
// 2. FASE TRASFORMAZIONI
var transformBuilder = filterBuilder
.order('due_date', ascending: true, nullsFirst: false)
.order('created_at', ascending: false, nullsFirst: false);
// Aggiungiamo il limite se richiesto
if (limit != null) {
transformBuilder = transformBuilder.limit(limit);
}
@@ -55,6 +58,7 @@ class TaskRepository {
// 3. ESECUZIONE DELLA QUERY
final response = await transformBuilder;
// 4. PARSING DEI DATI
return (response as List).map((json) => TaskModel.fromMap(json)).toList();
} catch (e) {
throw Exception('Errore nel recupero dei task: $e');
@@ -95,8 +99,9 @@ class TaskRepository {
// --- 3. AGGIORNAMENTO DEL TASK ---
Future<TaskModel> updateTask(TaskModel task) async {
if (task.id == null)
if (task.id == null) {
throw Exception('ID Task mancante. Impossibile aggiornare.');
}
try {
final taskData = task.toMap();
@@ -133,7 +138,7 @@ class TaskRepository {
try {
final response = await _supabase
.from('tasks')
.select('*, assigned_to_staff:staff!task_assignments(*)')
.select('*, assigned_to_staff:staff_members!task_assignments(*)')
.eq('id', taskId)
.single();
return TaskModel.fromMap(response);