155 lines
4.4 KiB
Dart
155 lines
4.4 KiB
Dart
// lib/entry/entry_controller.dart
|
|
|
|
import 'package:get/get.dart';
|
|
import 'package:rogapp/model/entry.dart';
|
|
import 'package:rogapp/model/event.dart';
|
|
import 'package:rogapp/model/team.dart';
|
|
import 'package:rogapp/model/category.dart';
|
|
import 'package:rogapp/services/api_service.dart';
|
|
|
|
class EntryController extends GetxController {
|
|
late final ApiService _apiService;
|
|
|
|
final entries = <Entry>[].obs;
|
|
final events = <Event>[].obs;
|
|
final teams = <Team>[].obs;
|
|
final categories = <NewCategory>[].obs;
|
|
|
|
final selectedEvent = Rx<Event?>(null);
|
|
final selectedTeam = Rx<Team?>(null);
|
|
final selectedCategory = Rx<NewCategory?>(null);
|
|
final selectedDate = Rx<DateTime?>(null);
|
|
|
|
final currentEntry = Rx<Entry?>(null);
|
|
|
|
@override
|
|
void onInit() async{
|
|
super.onInit();
|
|
await Get.putAsync(() => ApiService().init());
|
|
_apiService = Get.find<ApiService>();
|
|
|
|
try {
|
|
await Future.wait([
|
|
fetchEntries(),
|
|
fetchEvents(),
|
|
fetchTeams(),
|
|
fetchCategories(),
|
|
]);
|
|
if (Get.arguments != null && Get.arguments['entry'] != null) {
|
|
currentEntry.value = Get.arguments['entry'];
|
|
_initializeEntryData();
|
|
}
|
|
Get.putAsync(() => ApiService().init());
|
|
}catch(e){
|
|
print('Error initializing data: $e');
|
|
}
|
|
}
|
|
|
|
void _initializeEntryData() {
|
|
if (currentEntry.value != null) {
|
|
selectedEvent.value = currentEntry.value!.event;
|
|
selectedTeam.value = currentEntry.value!.team;
|
|
selectedCategory.value = currentEntry.value!.category;
|
|
selectedDate.value = currentEntry.value!.date;
|
|
}
|
|
}
|
|
|
|
Future<void> fetchEntries() async {
|
|
try {
|
|
final fetchedEntries = await _apiService.getEntries();
|
|
entries.assignAll(fetchedEntries);
|
|
} catch (e) {
|
|
print('Error fetching entries: $e');
|
|
}
|
|
}
|
|
|
|
Future<void> fetchEvents() async {
|
|
try {
|
|
final fetchedEvents = await _apiService.getEvents();
|
|
events.assignAll(fetchedEvents);
|
|
} catch (e) {
|
|
print('Error fetching events: $e');
|
|
}
|
|
}
|
|
|
|
Future<void> fetchTeams() async {
|
|
try {
|
|
final fetchedTeams = await _apiService.getTeams();
|
|
teams.assignAll(fetchedTeams);
|
|
} catch (e) {
|
|
print('Error fetching teams: $e');
|
|
}
|
|
}
|
|
|
|
Future<void> fetchCategories() async {
|
|
try {
|
|
final fetchedCategories = await _apiService.getCategories();
|
|
categories.assignAll(fetchedCategories);
|
|
} catch (e) {
|
|
print('Error fetching categories: $e');
|
|
}
|
|
}
|
|
|
|
Future<void> createEntry() async {
|
|
if (selectedEvent.value == null || selectedTeam.value == null ||
|
|
selectedCategory.value == null || selectedDate.value == null) {
|
|
Get.snackbar('Error', 'Please fill all fields');
|
|
return;
|
|
}
|
|
try {
|
|
final newEntry = await _apiService.createEntry(
|
|
selectedTeam.value!.id,
|
|
selectedEvent.value!.id,
|
|
selectedCategory.value!.id,
|
|
selectedDate.value!,
|
|
);
|
|
entries.add(newEntry);
|
|
Get.back();
|
|
} catch (e) {
|
|
print('Error creating entry: $e');
|
|
Get.snackbar('Error', 'Failed to create entry');
|
|
}
|
|
}
|
|
|
|
Future<void> updateEntry() async {
|
|
if (currentEntry.value == null) return;
|
|
try {
|
|
final updatedEntry = await _apiService.updateEntry(
|
|
currentEntry.value!.id,
|
|
selectedEvent.value!.id,
|
|
selectedCategory.value!.id,
|
|
selectedDate.value!,
|
|
);
|
|
final index = entries.indexWhere((entry) => entry.id == updatedEntry.id);
|
|
if (index != -1) {
|
|
entries[index] = updatedEntry;
|
|
}
|
|
Get.back();
|
|
} catch (e) {
|
|
print('Error updating entry: $e');
|
|
Get.snackbar('Error', 'Failed to update entry');
|
|
}
|
|
}
|
|
|
|
Future<void> deleteEntry() async {
|
|
if (currentEntry.value == null) return;
|
|
try {
|
|
await _apiService.deleteEntry(currentEntry.value!.id);
|
|
entries.removeWhere((entry) => entry.id == currentEntry.value!.id);
|
|
Get.back();
|
|
} catch (e) {
|
|
print('Error deleting entry: $e');
|
|
Get.snackbar('Error', 'Failed to delete entry');
|
|
}
|
|
}
|
|
|
|
void updateEvent(Event? value) => selectedEvent.value = value;
|
|
void updateTeam(Team? value) => selectedTeam.value = value;
|
|
void updateCategory(NewCategory? value) => selectedCategory.value = value;
|
|
void updateDate(DateTime value) => selectedDate.value = value;
|
|
|
|
bool isOwner() {
|
|
// Implement logic to check if the current user is the owner of the entry
|
|
return true; // Placeholder
|
|
}
|
|
} |