Initial commit: Flutter app + PHP/MySQL backend on Hostinger
Replaces Firebase with a self-hosted PHP/MySQL API served from winded.prymsolutions.com. Includes full backend (schema, auth, events, teams, brackets, suggestions, stats, media, file upload) and updated Flutter repositories and domain models. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,49 @@
|
||||
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
||||
|
||||
import '../../events/domain/event.dart';
|
||||
import '../../events/infrastructure/events_repository.dart';
|
||||
|
||||
part 'admin_events_notifier.g.dart';
|
||||
|
||||
/// Live Firestore-backed stream of every event in the system, used by the
|
||||
/// admin panel. The public-facing [eventsStreamProvider] still emits mocked
|
||||
/// data; admins read straight through to the real collection.
|
||||
@riverpod
|
||||
Stream<List<Event>> adminEventsStream(AdminEventsStreamRef ref) {
|
||||
final repo = ref.watch(eventsRepositoryProvider);
|
||||
return repo.watchEvents();
|
||||
}
|
||||
|
||||
/// Imperative wrapper around the events repository write methods. The notifier
|
||||
/// is `AsyncValue<void>`-shaped so screens can wire it up the same way as the
|
||||
/// existing auth/suggestions notifiers.
|
||||
@riverpod
|
||||
class AdminEventsNotifier extends _$AdminEventsNotifier {
|
||||
@override
|
||||
Future<void> build() async {}
|
||||
|
||||
Future<String> create(Event event) async {
|
||||
final repo = ref.read(eventsRepositoryProvider);
|
||||
state = const AsyncLoading();
|
||||
try {
|
||||
final id = await repo.createEvent(event);
|
||||
state = const AsyncData(null);
|
||||
return id;
|
||||
} catch (e, st) {
|
||||
state = AsyncError(e, st);
|
||||
rethrow;
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> save(Event event) async {
|
||||
final repo = ref.read(eventsRepositoryProvider);
|
||||
state = const AsyncLoading();
|
||||
state = await AsyncValue.guard(() => repo.updateEvent(event));
|
||||
}
|
||||
|
||||
Future<void> delete(String id) async {
|
||||
final repo = ref.read(eventsRepositoryProvider);
|
||||
state = const AsyncLoading();
|
||||
state = await AsyncValue.guard(() => repo.deleteEvent(id));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user