first commit
This commit is contained in:
@@ -0,0 +1,99 @@
|
||||
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<AdminService>((ref) {
|
||||
final client = ref.watch(supabaseProvider);
|
||||
return AdminService(client);
|
||||
});
|
||||
|
||||
final isAdminProvider = Provider<bool>((ref) {
|
||||
final user = ref.watch(authStateProvider).value?.session?.user;
|
||||
return AdminWhitelist.isAdmin(user?.email);
|
||||
});
|
||||
|
||||
final adminPanelDataProvider = FutureProvider<AdminPanelDataModel>((ref) async {
|
||||
final isAdmin = ref.watch(isAdminProvider);
|
||||
if (!isAdmin) {
|
||||
throw StateError('UNAUTHORIZED ACCESS DETECTED.');
|
||||
}
|
||||
return ref.watch(adminServiceProvider).fetchPanelData();
|
||||
});
|
||||
|
||||
final adminControllerProvider =
|
||||
AutoDisposeAsyncNotifierProvider<AdminController, void>(
|
||||
AdminController.new,
|
||||
);
|
||||
|
||||
class AdminController extends AutoDisposeAsyncNotifier<void> {
|
||||
@override
|
||||
Future<void> build() async {}
|
||||
|
||||
Future<void> deletePost(String postId) async {
|
||||
state = const AsyncLoading();
|
||||
state = await AsyncValue.guard(() async {
|
||||
await ref.read(adminServiceProvider).deletePost(postId);
|
||||
ref.invalidate(adminPanelDataProvider);
|
||||
});
|
||||
}
|
||||
|
||||
Future<void> 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<void> 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<void> 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<void> 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);
|
||||
});
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user