// πŸ‘₯ κ΅μ‚¬μš© 학생 계정 관리 ν™”λ©΄μ˜ κΈ°λŠ₯(μ„œλ²„ 톡신/μƒνƒœ) λ‹΄λ‹Ή 컨트둀러. import 'dart:convert'; import 'package:flutter/foundation.dart'; import 'package:http/http.dart' as http; import '../config.dart'; class TeacherStudentManagementController extends ChangeNotifier { bool _isWorking = false; bool get isWorking => _isWorking; /// βž• 학생 계정 μΆ”κ°€. (성곡여뢀, λ©”μ‹œμ§€)λ₯Ό λ°˜ν™˜ν•œλ‹€ β€” UIκ°€ μ„±κ³΅ν–ˆμ„ λ•Œλ§Œ μž…λ ₯칸을 λΉ„μš΄λ‹€. Future<(bool success, String message)> addStudentAccount({ required String studentId, required String name, required String password, int? grade, }) async { _isWorking = true; notifyListeners(); try { final url = Uri.parse('$baseUrl/api/users/create'); final response = await http.post( url, headers: {"Content-Type": "application/json"}, body: jsonEncode({ "studentId": studentId, "name": name, "password": password, "grade": grade, }), ); final result = jsonDecode(utf8.decode(response.bodyBytes)); if (response.statusCode == 200 && result['status'] == 'success') { return (true, 'βœ… ${result['message'] ?? '계정이 μƒμ„±λ˜μ—ˆμŠ΅λ‹ˆλ‹€.'}'); } else { return (false, '❌ 생성 μ‹€νŒ¨: ${result['message'] ?? '였λ₯˜ λ°œμƒ'}'); } } catch (e) { return (false, '🚨 λ„€νŠΈμ›Œν¬ μ—λŸ¬: $e'); } finally { _isWorking = false; notifyListeners(); } } /// 🏫 이미 λ§Œλ“€μ–΄μ§„ 학생 κ³„μ •μ˜ 학년을 μ§€μ •/λ³€κ²½ν•œλ‹€. gradeκ°€ null이면 "λ―Έλ°°μ •"으둜 λ˜λŒλ¦°λ‹€. Future<(bool success, String message)> updateStudentGrade({ required String studentId, int? grade, }) async { _isWorking = true; notifyListeners(); try { final url = Uri.parse('$baseUrl/api/users/update-grade'); final response = await http.post( url, headers: {"Content-Type": "application/json"}, body: jsonEncode({"studentId": studentId, "grade": grade}), ); final result = jsonDecode(utf8.decode(response.bodyBytes)); if (response.statusCode == 200 && result['status'] == 'success') { return (true, 'βœ… ${result['message'] ?? '학년이 μ§€μ •λ˜μ—ˆμŠ΅λ‹ˆλ‹€.'}'); } else { return (false, '❌ μ§€μ • μ‹€νŒ¨: ${result['message'] ?? '였λ₯˜ λ°œμƒ'}'); } } catch (e) { return (false, '🚨 λ„€νŠΈμ›Œν¬ μ—λŸ¬: $e'); } finally { _isWorking = false; notifyListeners(); } } /// ❌ 학생 계정 μ‚­μ œ. Future<(bool success, String message)> deleteStudentAccount( String studentId, ) async { _isWorking = true; notifyListeners(); final url = Uri.parse('$baseUrl/api/users/delete'); try { final response = await http.delete( url, headers: {"Content-Type": "application/json"}, body: jsonEncode({"studentId": studentId}), ); if (response.statusCode == 200) { final resData = jsonDecode(utf8.decode(response.bodyBytes)); return (true, 'βœ… ${resData['message']}'); } else { return (false, '❌ μ‚­μ œ μ‹€νŒ¨ν•˜μ˜€μŠ΅λ‹ˆλ‹€.'); } } catch (e) { return (false, '❌ μ„œλ²„ μ—λŸ¬ λ°œμƒ'); } finally { _isWorking = false; notifyListeners(); } } }