Files
penyaluran_app/lib/app/services/supabase_service.dart
Khafidh Fuadi b1665307c5 Tambahkan dependensi dan konfigurasi awal proyek
- Tambahkan dependensi utama: GetX, Supabase, SharedPreferences
- Konfigurasi struktur awal aplikasi dengan GetX
- Inisialisasi layanan Supabase
- Perbarui konfigurasi plugin untuk berbagai platform
- Ganti template default dengan struktur aplikasi baru
2025-03-08 10:20:57 +07:00

269 lines
7.5 KiB
Dart

import 'package:get/get.dart';
import 'package:supabase_flutter/supabase_flutter.dart';
class SupabaseService extends GetxService {
static SupabaseService get to => Get.find<SupabaseService>();
late final SupabaseClient client;
// Ganti dengan URL dan API key Supabase Anda
static const String supabaseUrl = String.fromEnvironment('SUPABASE_URL',
defaultValue: 'http://labulabs.net:8000');
static const String supabaseKey = String.fromEnvironment('SUPABASE_KEY',
defaultValue:
'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.ewogICJyb2xlIjogImFub24iLAogICJpc3MiOiAic3VwYWJhc2UiLAogICJpYXQiOiAxNzMxODYyODAwLAogICJleHAiOiAxODg5NjI5MjAwCn0.4IpwhwCVbfYXxb8JlZOLSBzCt6kQmypkvuso7N8Aicc');
Future<SupabaseService> init() async {
await Supabase.initialize(
url: supabaseUrl,
anonKey: supabaseKey,
);
client = Supabase.instance.client;
return this;
}
// Metode untuk mendaftar pengguna baru
Future<AuthResponse> signUp(String email, String password) async {
return await client.auth.signUp(
email: email,
password: password,
data: {'autoconfirm': true},
);
}
// Metode untuk login
Future<AuthResponse> signIn(String email, String password) async {
return await client.auth.signInWithPassword(
email: email,
password: password,
);
}
// Metode untuk logout
Future<void> signOut() async {
await client.auth.signOut();
}
// Metode untuk mendapatkan user saat ini
User? get currentUser => client.auth.currentUser;
// Metode untuk memeriksa apakah user sudah login
bool get isAuthenticated => currentUser != null;
// Metode untuk mendapatkan profil pengguna
Future<Map<String, dynamic>?> getUserProfile() async {
if (currentUser == null) return null;
final response = await client
.from('user_profile')
.select()
.eq('id', currentUser!.id)
.maybeSingle();
return response;
}
// Metode untuk mendapatkan role pengguna
Future<String?> getUserRole() async {
final profile = await getUserProfile();
return profile?['role'];
}
// Metode untuk mendapatkan data berdasarkan peran
Future<Map<String, dynamic>?> getRoleSpecificData(String role) async {
if (currentUser == null) return null;
switch (role) {
case 'WARGA':
return await getWargaByUserId();
case 'PETUGASVERIFIKASI':
return await getPetugasVerifikasiData();
case 'PETUGASDESA':
return await getPetugasDesaData();
case 'DONATUR':
return await getDonaturData();
default:
return null;
}
}
// Metode untuk mendapatkan data petugas verifikasi
Future<Map<String, dynamic>?> getPetugasVerifikasiData() async {
if (currentUser == null) return null;
final response = await client
.from('xx02_PetugasVerifikasi')
.select()
.eq('userId', currentUser!.id)
.maybeSingle();
return response;
}
// Metode untuk mendapatkan data petugas desa
Future<Map<String, dynamic>?> getPetugasDesaData() async {
if (currentUser == null) return null;
final response = await client
.from('xx01_PetugasDesa')
.select()
.eq('userId', currentUser!.id)
.maybeSingle();
return response;
}
// Metode untuk mendapatkan data donatur
Future<Map<String, dynamic>?> getDonaturData() async {
if (currentUser == null) return null;
final response = await client
.from('xx01_Donatur')
.select()
.eq('userId', currentUser!.id)
.maybeSingle();
return response;
}
// Metode untuk membuat data warga
Future<void> createWargaProfile({
required String nik,
required String namaLengkap,
required String jenisKelamin,
String? noHp,
String? alamat,
String? tempatLahir,
DateTime? tanggalLahir,
String? agama,
}) async {
if (currentUser == null) return;
await client.from('xx02_Warga').insert({
'NIK': nik,
'namaLengkap': namaLengkap,
'jenisKelamin': jenisKelamin,
'noHp': noHp,
'alamat': alamat,
'tempatLahir': tempatLahir,
'tanggalLahir': tanggalLahir?.toIso8601String(),
'agama': agama,
'userId': currentUser!.id,
'email': currentUser!.email,
});
}
// Metode untuk mendapatkan data warga berdasarkan userId
Future<Map<String, dynamic>?> getWargaByUserId() async {
if (currentUser == null) return null;
final response = await client
.from('xx02_Warga')
.select()
.eq('userId', currentUser!.id)
.maybeSingle();
return response;
}
// Metode untuk mendapatkan notifikasi pengguna
Future<List<Map<String, dynamic>>> getUserNotifications(
{bool unreadOnly = false}) async {
if (currentUser == null) return [];
final query = client.from('Notification').select();
// Tambahkan filter untuk user ID
final filteredQuery = query.eq('userId', currentUser!.id);
// Tambahkan filter untuk notifikasi yang belum dibaca jika diperlukan
final finalQuery =
unreadOnly ? filteredQuery.eq('isRead', false) : filteredQuery;
// Tambahkan pengurutan
final response = await finalQuery.order('CREATED_AT', ascending: false);
return List<Map<String, dynamic>>.from(response);
}
// Metode untuk menandai notifikasi sebagai telah dibaca
Future<void> markNotificationAsRead(int notificationId) async {
await client
.from('Notification')
.update({'isRead': true}).eq('notificationId', notificationId);
}
// Metode untuk mendapatkan data verifikasi warga
Future<List<Map<String, dynamic>>> getVerifikasiDataWarga() async {
if (currentUser == null) return [];
final response = await client
.from('xx02_VerifikasiDataWarga')
.select()
.order('CREATED_AT', ascending: false);
return List<Map<String, dynamic>>.from(response);
}
// Metode untuk mendapatkan data pengajuan bantuan
Future<List<Map<String, dynamic>>> getPengajuanBantuan() async {
if (currentUser == null) return [];
final response = await client
.from('xx02_PengajuanKelayakanBantuan')
.select()
.order('CREATED_AT', ascending: false);
return List<Map<String, dynamic>>.from(response);
}
// Metode untuk mendapatkan data skema bantuan
Future<List<Map<String, dynamic>>> getSkemaBantuan() async {
if (currentUser == null) return [];
final response = await client
.from('xx02_SkemaBantuan')
.select()
.order('CREATED_AT', ascending: false);
return List<Map<String, dynamic>>.from(response);
}
// Metode untuk mendapatkan data penyaluran bantuan
Future<List<Map<String, dynamic>>> getPenyaluranBantuan() async {
if (currentUser == null) return [];
final response = await client
.from('xx01_PenyaluranBantuan')
.select()
.order('CREATED_AT', ascending: false);
return List<Map<String, dynamic>>.from(response);
}
// Metode untuk mendapatkan data penitipan bantuan
Future<List<Map<String, dynamic>>> getPenitipanBantuan() async {
if (currentUser == null) return [];
final response = await client
.from('xx01_PenitipanBantuan')
.select()
.order('CREATED_AT', ascending: false);
return List<Map<String, dynamic>>.from(response);
}
// Metode untuk mendapatkan data pengaduan
Future<List<Map<String, dynamic>>> getPengaduan() async {
if (currentUser == null) return [];
final response = await client
.from('xx01_Pengaduan')
.select()
.order('CREATED_AT', ascending: false);
return List<Map<String, dynamic>>.from(response);
}
}