58 lines
1.9 KiB
Dart
58 lines
1.9 KiB
Dart
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);
|
|
}
|
|
}
|