diff --git a/lib/features/staff/data/staff_repository.dart b/lib/features/staff/data/staff_repository.dart index 23e7dfd..982e58c 100644 --- a/lib/features/staff/data/staff_repository.dart +++ b/lib/features/staff/data/staff_repository.dart @@ -1,4 +1,5 @@ import 'package:flux/features/staff/models/staff_member_model.dart'; +import 'package:flux/features/store/models/store_model.dart'; import 'package:get_it/get_it.dart'; import 'package:supabase_flutter/supabase_flutter.dart'; @@ -45,6 +46,23 @@ class StaffRepository { .toList(); } + // Recupera i negozi associati ad un specifico membro + // Qui facciamo una JOIN per avere i dati del membro partendo dalla tabella di giunzione + Future> getStoresWithStaffMember( + String staffMemberId, + ) async { + final response = await _supabase + .from('staff_in_stores') + .select( + 'store (*)', + ) // Prende tutti i campi della tabella store collegata + .eq('staff_member_id', staffMemberId); + + return (response as List) + .map((item) => StoreModel.fromJson(item['store'])) + .toList(); + } + // Assegna un membro a un negozio Future assignToStore(String staffId, String storeId) async { await _supabase.from('staff_in_stores').insert({ diff --git a/lib/features/store/data/store_repository.dart b/lib/features/store/data/store_repository.dart index 96487b7..746e91f 100644 --- a/lib/features/store/data/store_repository.dart +++ b/lib/features/store/data/store_repository.dart @@ -1,14 +1,21 @@ +import 'package:flux/features/staff/models/staff_member_model.dart'; import 'package:get_it/get_it.dart'; import 'package:supabase_flutter/supabase_flutter.dart'; import '../models/store_model.dart'; class StoreRepository { - final SupabaseClient _client = GetIt.I.get(); + final SupabaseClient _supabase = GetIt.I.get(); /// Crea un nuovo negozio associato alla compagnia dell'utente - Future createStore(StoreModel store) async { + Future createStore(StoreModel store) async { try { - await _client.from('store').insert(store.toJson()); + final response = await _supabase + .from('store') + .upsert(store.toJson()) + .select() + .single(); + + return StoreModel.fromJson(response); } on PostgrestException catch (e) { // Intercettiamo errori specifici del database throw e.message; @@ -20,7 +27,7 @@ class StoreRepository { /// Recupera tutti i negozi di una determinata compagnia Future> getStoresByCompany(String companyId) async { try { - final response = await _client + final response = await _supabase .from('store') .select() .eq('company_id', companyId) @@ -33,4 +40,63 @@ class StoreRepository { throw 'Errore nel recupero dei negozi'; } } + + // --- LOGICA DI GIUNZIONE (Staff <-> Store) --- + + // Recupera i membri assegnati a uno specifico negozio + // Qui facciamo una JOIN per avere i dati del membro partendo dalla tabella di giunzione + Future> getStaffMembersInStore(String storeId) async { + final response = await _supabase + .from('staff_in_stores') + .select( + 'staff_member (*)', + ) // Prende tutti i campi della tabella staff_member collegata + .eq('store_id', storeId); + + return (response as List) + .map((item) => StaffMemberModel.fromJson(item['staff_member'])) + .toList(); + } + + // Recupera i negozi associati ad un specifico membro + // Qui facciamo una JOIN per avere i dati del membro partendo dalla tabella di giunzione + Future> getStoresWithStaffMember( + String staffMemberId, + ) async { + final response = await _supabase + .from('staff_in_stores') + .select( + 'store (*)', + ) // Prende tutti i campi della tabella store collegata + .eq('staff_member_id', staffMemberId); + + return (response as List) + .map((item) => StoreModel.fromJson(item['store'])) + .toList(); + } + + // Assegna un negozio a un membro + Future assignToMember(String staffId, String storeId) async { + await _supabase.from('staff_in_stores').insert({ + 'staff_member_id': staffId, + 'store_id': storeId, + }); + } + + // Rimuove l'assegnazione + Future removeFromStore(String staffId, String storeId) async { + await _supabase + .from('staff_in_stores') + .delete() + .eq('staff_member_id', staffId) + .eq('store_id', storeId); + } + + // Utility per pulire le assegnazioni esistenti prima di riscriverle + Future clearStoreAssignments(String staffId) async { + await _supabase + .from('staff_in_stores') + .delete() + .eq('staff_member_id', staffId); + } }