feat: service set repos and cubit
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:supabase_flutter/supabase_flutter.dart';
|
||||
import '../models/service_model.dart';
|
||||
// Importa gli altri modelli se sono in file separati
|
||||
@@ -6,24 +7,48 @@ class ServicesRepository {
|
||||
final _supabase = Supabase.instance.client;
|
||||
|
||||
// --- RECUPERO TUTTI I SERVIZI ---
|
||||
Future<List<ServiceModel>> fetchAllServices() async {
|
||||
Future<List<ServiceModel>> fetchServices({
|
||||
required int offset,
|
||||
int limit = 50,
|
||||
String? searchTerm,
|
||||
DateTimeRange? dateRange,
|
||||
}) async {
|
||||
try {
|
||||
// La stringa di selezione tira giù il padre e TUTTI i record correlati dalle tabelle figlie
|
||||
final response = await _supabase
|
||||
.from('service')
|
||||
.select('''
|
||||
*,
|
||||
energy_service(*),
|
||||
fin_service(*),
|
||||
entertainment_service(*)
|
||||
''')
|
||||
.order('created_at', ascending: false);
|
||||
var query = _supabase.from('service').select('''
|
||||
*,
|
||||
energy_service(*),
|
||||
fin_service(*),
|
||||
entertainment_service(*)
|
||||
''');
|
||||
|
||||
return (response as List)
|
||||
// Filtro per range di date
|
||||
if (dateRange != null) {
|
||||
query = query
|
||||
.gte('created_at', dateRange.start.toIso8601String())
|
||||
.lte('created_at', dateRange.end.toIso8601String());
|
||||
}
|
||||
|
||||
// Ordinamento e Paginazione
|
||||
final response = await query
|
||||
.order('created_at', ascending: false)
|
||||
.range(offset, offset + limit - 1);
|
||||
|
||||
final List<ServiceModel> services = (response as List)
|
||||
.map((map) => ServiceModel.fromMap(map))
|
||||
.toList();
|
||||
|
||||
// Filtro testuale lato client per semplicità (o potresti farlo in SQL se preferisci)
|
||||
if (searchTerm != null && searchTerm.isNotEmpty) {
|
||||
return services.where((s) {
|
||||
// Qui cercheremo per numero pratica o note (il nome cliente lo vedremo poi con le Join)
|
||||
return s.number.toLowerCase().contains(searchTerm.toLowerCase()) ||
|
||||
s.note.toLowerCase().contains(searchTerm.toLowerCase());
|
||||
}).toList();
|
||||
}
|
||||
|
||||
return services;
|
||||
} catch (e) {
|
||||
throw Exception('Errore nel recupero servizi: $e');
|
||||
throw Exception('Errore fetch: $e');
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user