first commit

This commit is contained in:
Lucas Saburido
2026-05-13 16:26:45 +01:00
commit cabf2025cd
252 changed files with 13524 additions and 0 deletions

View File

@@ -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);
});
}
}