import 'package:flutter_riverpod/flutter_riverpod.dart'; import '../../../../core/config/admin_whitelist.dart'; import '../../../../core/supabase/supabase_providers.dart'; import '../../../auth/presentation/providers/auth_provider.dart'; import '../../data/services/admin_service.dart'; import '../../domain/models/admin_panel_data_model.dart'; final adminServiceProvider = Provider((ref) { final client = ref.watch(supabaseProvider); return AdminService(client); }); final isAdminProvider = Provider((ref) { final user = ref.watch(authStateProvider).value?.session?.user; return AdminWhitelist.isAdmin(user?.email); }); final adminPanelDataProvider = FutureProvider((ref) async { final isAdmin = ref.watch(isAdminProvider); if (!isAdmin) { throw StateError('UNAUTHORIZED ACCESS DETECTED.'); } return ref.watch(adminServiceProvider).fetchPanelData(); }); final adminControllerProvider = AutoDisposeAsyncNotifierProvider( AdminController.new, ); class AdminController extends AutoDisposeAsyncNotifier { @override Future build() async {} Future deletePost(String postId) async { state = const AsyncLoading(); state = await AsyncValue.guard(() async { await ref.read(adminServiceProvider).deletePost(postId); ref.invalidate(adminPanelDataProvider); }); } Future setUserBanned({ required String userId, required bool banned, }) async { state = const AsyncLoading(); state = await AsyncValue.guard(() async { await ref.read(adminServiceProvider).setUserBanned( userId: userId, banned: banned, ); ref.invalidate(adminPanelDataProvider); }); } Future setUserFeatured({ required String userId, required bool featured, }) async { state = const AsyncLoading(); state = await AsyncValue.guard(() async { await ref.read(adminServiceProvider).setUserFeatured( userId: userId, featured: featured, ); ref.invalidate(adminPanelDataProvider); }); } Future setPostFeatured({ required String postId, required bool featured, }) async { state = const AsyncLoading(); state = await AsyncValue.guard(() async { await ref.read(adminServiceProvider).setPostFeatured( postId: postId, featured: featured, ); ref.invalidate(adminPanelDataProvider); }); } Future setTrackFeatured({ required String trackId, required bool featured, }) async { state = const AsyncLoading(); state = await AsyncValue.guard(() async { await ref.read(adminServiceProvider).setTrackFeatured( trackId: trackId, featured: featured, ); ref.invalidate(adminPanelDataProvider); }); } }