a
This commit is contained in:
57
lib/features/tracking/data/tracking_repository.dart
Normal file
57
lib/features/tracking/data/tracking_repository.dart
Normal file
@@ -0,0 +1,57 @@
|
||||
import 'package:flux/features/tracking/models/tracking_model.dart';
|
||||
import 'package:get_it/get_it.dart';
|
||||
import 'package:supabase_flutter/supabase_flutter.dart';
|
||||
|
||||
class TrackingRepository {
|
||||
final SupabaseClient _supabase = GetIt.I.get<SupabaseClient>();
|
||||
|
||||
TrackingRepository();
|
||||
|
||||
/// Recupera la cronologia di un'entità (Ticket o Operazione)
|
||||
Future<List<TrackingModel>> getTrackingsByParent({
|
||||
required String parentId, // <-- Reso obbligatorio
|
||||
required TrackingParentType parentType, // <-- Reso obbligatorio
|
||||
}) async {
|
||||
// Facciamo la query con la JOIN per recuperare il nome dello staff al volo
|
||||
final response = await _supabase
|
||||
.from('tracking')
|
||||
.select('*, staff_member(name)')
|
||||
.eq('parent_id', parentId)
|
||||
.eq('parent_type', parentType.name)
|
||||
.order(
|
||||
'created_at',
|
||||
ascending: true,
|
||||
); // ascending: true per avere la timeline dall'alto (vecchi) al basso (nuovi)
|
||||
|
||||
return response.map((map) => TrackingModel.fromMap(map)).toList();
|
||||
}
|
||||
|
||||
/// Inserisce un nuovo evento di tracking
|
||||
Future<void> logEvent(TrackingModel tracking) async {
|
||||
await _supabase.from('tracking').insert(tracking.toMap());
|
||||
}
|
||||
|
||||
/// Metodo helper rapido per loggare un cambio di stato o una nota
|
||||
Future<void> logQuickEvent({
|
||||
required String companyId,
|
||||
required String message,
|
||||
required TrackingType type,
|
||||
required String parentId, // <-- Reso obbligatorio
|
||||
required TrackingParentType parentType, // <-- Reso obbligatorio
|
||||
String? staffId,
|
||||
bool isInternal = true,
|
||||
}) async {
|
||||
final log = TrackingModel(
|
||||
createdAt:
|
||||
DateTime.now(), // Questo verrà ignorato dal toMap in fase di insert, ma serve al modello
|
||||
companyId: companyId,
|
||||
staffId: staffId,
|
||||
parentId: parentId,
|
||||
parentType: parentType,
|
||||
eventType: type,
|
||||
isInternal: isInternal,
|
||||
message: message,
|
||||
);
|
||||
await logEvent(log);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user