import 'package:stacked/stacked.dart'; import 'package:yimaru_app/app/app.locator.dart'; import 'package:yimaru_app/services/api_service.dart'; import '../models/course_catalog.dart'; import '../models/course_lesson.dart'; import '../models/course_module.dart'; import '../models/course_unit.dart'; class CourseService with ListenableServiceMixin { // Dependency injection final _apiService = locator(); // Initialization courseService() { listenToReactiveValues([_catalogs]); } // Course catalogs List _catalogs = []; List get catalogs => _catalogs; // Course units List _units = []; List get units => _units; // Course modules final List _modules = []; List get modules => _modules; // Course lessons List _lessons = []; List get lessons => _lessons; // Course catalogs Future getCourseCatalogs() async { _catalogs = await _apiService.getCourseCatalogs(); _catalogs.sort((a, b) => (a.sortOrder ?? 0).compareTo(b.sortOrder ?? 0)); notifyListeners(); } // Course units Future getCourseUnits(int id) async { _units = await _apiService.getCourseUnits(id); _units.sort((a, b) => (a.sortOrder ?? 0).compareTo(b.sortOrder ?? 0)); notifyListeners(); } // Course modules Future getCourseModules({ required int id, required int index, }) async { List modules = await _apiService.getCourseModules(id); modules.sort( (a, b) => (a.sortOrder ?? 0).compareTo(b.sortOrder ?? 0), ); final updatedUnit = _units[index].copyWith( modules: modules, ); _units[index] = updatedUnit; notifyListeners(); } // Course units Future getCourseLessons(int id) async { _lessons = await _apiService.getCourseLessons(id); _lessons.sort((a, b) => (a.sortOrder ?? 0).compareTo(b.sortOrder ?? 0)); notifyListeners(); } }