TKK_E32220332/lib/services/supabase_service.dart

109 lines
3.1 KiB
Dart

import 'package:supabase_flutter/supabase_flutter.dart';
class SupabaseService {
static final SupabaseService _instance = SupabaseService._internal();
factory SupabaseService() => _instance;
SupabaseService._internal();
final supabase = Supabase.instance.client;
// --- Auth ---
Future<AuthResponse> signUp(String email, String password, String fullName) async {
final response = await supabase.auth.signUp(
email: email,
password: password,
);
if (response.user != null) {
// Insert into profiles table
await supabase.from('profiles').insert({
'id': response.user!.id,
'nama_lengkap': fullName,
'username': email.split('@')[0],
});
}
return response;
}
Future<AuthResponse> signIn(String email, String password) async {
return await supabase.auth.signInWithPassword(
email: email,
password: password,
);
}
Future<void> signOut() async {
await supabase.auth.signOut();
}
User? get currentUser => supabase.auth.currentUser;
// --- Sensor Data (sensor_log) ---
Future<List<Map<String, dynamic>>> getSensorLogs() async {
return await supabase
.from('sensor_log')
.select()
.order('created_at', ascending: false)
.limit(20);
}
// --- Limits (batas_sensor) ---
Future<Map<String, dynamic>?> getBatasSensor() async {
final data = await supabase.from('batas_sensor').select().limit(1).single();
return data;
}
Future<void> updateBatasSensor(double suhuMin, double suhuMax, double rhMin, double rhMax) async {
await supabase.from('batas_sensor').update({
'suhu_min': suhuMin,
'suhu_max': suhuMax,
'rh_min': rhMin,
'rh_max': rhMax,
'updated_at': DateTime.now().toIso8601String(),
}).eq('id', 1);
}
// --- Interval (interval_setting) ---
Future<int> getIntervalSetting() async {
final data = await supabase.from('interval_setting').select('durasi_menit').limit(1).single();
return data['durasi_menit'] as int;
}
Future<void> updateIntervalSetting(int menit) async {
await supabase.from('interval_setting').update({
'durasi_menit': menit,
'update_at': DateTime.now().toIso8601String(),
}).eq('id', 1);
}
// --- Gallery (foto_dataset) ---
Future<List<Map<String, dynamic>>> getFotoDataset() async {
final List<dynamic> data = await supabase
.from('foto_dataset')
.select()
.order('created_at', ascending: false);
return List<Map<String, dynamic>>.from(data);
}
// --- Log Fan Status ---
Future<void> logFanAction(String fan1, String fan2, double suhu, double hum, double lux) async {
await supabase.from('sensor_log').insert({
'kipas1': fan1,
'kipas2': fan2,
'suhu': suhu,
'kelembapan': hum,
'intensitas': lux,
'timestamp': DateTime.now().toString().substring(0, 19),
});
}
Future<Map<String, dynamic>?> getLatestLog() async {
final List<dynamic> data = await supabase
.from('sensor_log')
.select()
.order('created_at', ascending: false)
.limit(1);
return data.isNotEmpty ? data.first as Map<String, dynamic> : null;
}
}