This commit is contained in:
2026-04-20 23:52:00 +02:00
parent c5b5b76bd6
commit a19fd1104f
37 changed files with 1546 additions and 428 deletions

View File

@@ -0,0 +1,100 @@
import 'package:flux/features/company/models/company_model.dart';
import 'package:flux/features/master_data/store/models/store_model.dart';
import 'package:flux/features/master_data/staff/models/staff_member_model.dart';
// Importa i tuoi modelli...
import 'package:supabase_flutter/supabase_flutter.dart';
class CoreRepository {
final _supabase = Supabase.instance.client;
// --- QUERY DI SESSIONE (Uso di maybeSingle per evitare crash) ---
Future<CompanyModel?> getCompanyByOwnerId(String userId) async {
try {
final response = await _supabase
.from('company')
.select()
.eq(
'owner_id',
userId,
) // <-- Assicurati di avere questo campo nel DB!
.maybeSingle();
if (response == null) return null;
return CompanyModel.fromMap(response);
} catch (e) {
throw Exception('Errore recupero azienda: $e');
}
}
Future<List<StoreModel>> getStoresByCompanyId(String companyId) async {
try {
final response = await _supabase
.from('store')
.select()
.eq('company_id', companyId)
.eq('is_active', true) // Buona pratica
.order('name'); // O come si chiama il campo nome
return (response as List).map((s) => StoreModel.fromMap(s)).toList();
} catch (e) {
throw Exception('Errore recupero negozi: $e');
}
}
Future<StaffMemberModel?> getStaffMemberByUserId(String userId) async {
try {
final response = await _supabase
.from('staff_member')
.select()
.eq('user_id', userId)
.maybeSingle();
if (response == null) return null;
return StaffMemberModel.fromMap(response);
} catch (e) {
throw Exception('Errore recupero profilo staff: $e');
}
}
// --- MUTAZIONI PER L'ONBOARDING ---
Future<CompanyModel> createCompany(CompanyModel company) async {
try {
final response = await _supabase
.from('company')
.insert(company.toMap())
.select()
.single();
return CompanyModel.fromMap(response);
} catch (e) {
throw Exception('Creazione azienda fallita: $e');
}
}
Future<StoreModel> createStore(StoreModel store) async {
try {
final response = await _supabase
.from('store')
.insert(store.toMap())
.select()
.single();
return StoreModel.fromMap(response);
} catch (e) {
throw Exception('Creazione negozio fallita: $e');
}
}
Future<StaffMemberModel> createStaffMember(StaffMemberModel staff) async {
try {
final response = await _supabase
.from('staff_member')
.insert(staff.toMap())
.select()
.single();
return StaffMemberModel.fromMap(response);
} catch (e) {
throw Exception('Creazione profilo staff fallita: $e');
}
}
}