// πŸ† 학년별 κ³΅λΆ€μ‹œκ°„ λž­ν‚Ή ν™”λ©΄μ˜ κΈ°λŠ₯(μ„œλ²„ 톡신/μƒνƒœ) λ‹΄λ‹Ή 컨트둀러. import 'dart:convert'; import 'package:flutter/foundation.dart'; import 'package:http/http.dart' as http; import '../config.dart'; class StudyRankingController extends ChangeNotifier { final int grade; StudyRankingController({required this.grade}); bool _isLoading = true; String _period = 'today'; // today / week / total String _scope = 'grade'; // grade / all List _ranking = []; bool get isLoading => _isLoading; String get period => _period; String get scope => _scope; List get ranking => _ranking; Future init() => fetchRanking(); Future setPeriod(String period) async { if (_period == period) return; _period = period; await fetchRanking(); } Future setScope(String scope) async { if (_scope == scope) return; _scope = scope; await fetchRanking(); } Future fetchRanking() async { _isLoading = true; notifyListeners(); try { final gradeParam = _scope == 'grade' ? '&grade=$grade' : ''; final response = await http.get( Uri.parse('$baseUrl/api/study/ranking?period=$_period$gradeParam'), ); if (response.statusCode == 200) { final data = jsonDecode(utf8.decode(response.bodyBytes)); _ranking = data['ranking'] ?? []; } } catch (_) { // 쑰용히 λ¬΄μ‹œ - λ§ˆμ§€λ§‰μœΌλ‘œ λ°›μ•„μ˜¨ λž­ν‚Ήμ„ μœ μ§€ν•œλ‹€. } finally { _isLoading = false; notifyListeners(); } } }