diff --git a/apps/teacher_app/lib/logic/cubits/teacher_studio_cubit.dart b/apps/teacher_app/lib/logic/cubits/teacher_studio_cubit.dart index 104304e..1c1aba6 100644 --- a/apps/teacher_app/lib/logic/cubits/teacher_studio_cubit.dart +++ b/apps/teacher_app/lib/logic/cubits/teacher_studio_cubit.dart @@ -2,6 +2,7 @@ import 'package:flutter_bloc/flutter_bloc.dart'; import 'dart:typed_data'; import '../../data/models/teacher_models.dart'; import '../../data/repositories/teacher_repository.dart'; +import '../../core/utils/app_logger.dart'; /** * ============================================================================== @@ -179,6 +180,7 @@ class TeacherStudioCubit extends Cubit { emit(state.copyWith(curriculumTree: tree, isCurriculumLoading: false)); selectGrade(key); } catch (e) { + AppLogger.error('Studio upload failed', error: e, tag: 'TEACHER_STUDIO'); emit(state.copyWith( isCurriculumLoading: false, errorMessage: e.toString())); } diff --git a/apps/teacher_app/lib/presentation/screens/auth/teacher_auth_screen.dart b/apps/teacher_app/lib/presentation/screens/auth/teacher_auth_screen.dart index bbe89cf..c508c9e 100644 --- a/apps/teacher_app/lib/presentation/screens/auth/teacher_auth_screen.dart +++ b/apps/teacher_app/lib/presentation/screens/auth/teacher_auth_screen.dart @@ -77,19 +77,10 @@ class _TeacherAuthScreenState extends State { SaqelToast.showError(context, 'يرجى إدخال رمز التحقق المكون من 6 أرقام'); return; } - final hasAnyProfileData = _fullNameController.text.trim().isNotEmpty || - _selectedSubject != null || - _schoolController.text.trim().isNotEmpty || - _selectedGrades.isNotEmpty; final hasCompleteProfileData = _fullNameController.text.trim().isNotEmpty && _selectedSubject != null && _schoolController.text.trim().isNotEmpty && _selectedGrades.isNotEmpty; - if (hasAnyProfileData && !hasCompleteProfileData) { - SaqelToast.showError(context, - 'إما اترك بيانات الملف فارغة لتسجيل الدخول، أو أكملها كلها لإنشاء ملف معلم جديد'); - return; - } context.read().verifyOtp( phone, otp, diff --git a/apps/teacher_app/pubspec.lock b/apps/teacher_app/pubspec.lock index e1ae340..24ba122 100644 --- a/apps/teacher_app/pubspec.lock +++ b/apps/teacher_app/pubspec.lock @@ -340,10 +340,10 @@ packages: dependency: transitive description: name: matcher - sha256: "12956d0ad8390bbcc63ca2e1469c0619946ccb52809807067a7020d57e647aa6" + sha256: dc0b7dc7651697ea4ff3e69ef44b0407ea32c487a39fff6a4004fa585e901861 url: "https://pub.dev" source: hosted - version: "0.12.18" + version: "0.12.19" material_color_utilities: dependency: transitive description: @@ -356,10 +356,10 @@ packages: dependency: transitive description: name: meta - sha256: "23f08335362185a5ea2ad3a4e597f1375e78bce8a040df5c600c8d3552ef2394" + sha256: "1741988757a65eb6b36abe716829688cf01910bbf91c34354ff7ec1c3de2b349" url: "https://pub.dev" source: hosted - version: "1.17.0" + version: "1.18.0" nested: dependency: transitive description: @@ -585,10 +585,10 @@ packages: dependency: transitive description: name: test_api - sha256: "93167629bfc610f71560ab9312acdda4959de4df6fac7492c89ff0d3886f6636" + sha256: "949a932224383300f01be9221c39180316445ecb8e7547f70a41a35bf421fb9e" url: "https://pub.dev" source: hosted - version: "0.7.9" + version: "0.7.11" typed_data: dependency: transitive description: diff --git a/backend/app/Controllers/VideoController.php b/backend/app/Controllers/VideoController.php index bf3f209..79e0c49 100644 --- a/backend/app/Controllers/VideoController.php +++ b/backend/app/Controllers/VideoController.php @@ -78,20 +78,20 @@ class VideoController } else { $subjectName = trim((string)($request->getBody()['subject'] ?? $_POST['subject'] ?? '')); $gradeLevel = trim((string)($request->getBody()['grade_level'] ?? $_POST['grade_level'] ?? '')); + // The production schema uses subjects.name (not name_ar/name_en). + // Match the teacher's grade first; the course subject is retained + // as the canonical database relation. $existingCourse = Database::selectOne( - "SELECT c.id, c.teacher_id FROM courses c - JOIN subjects s ON s.id = c.subject_id - WHERE c.teacher_id = ? AND c.grade_level = ? AND (s.name_ar = ? OR s.name_en = ?) - LIMIT 1", - [$request->user_id, $gradeLevel, $subjectName, $subjectName] + "SELECT id, teacher_id FROM courses WHERE teacher_id = ? AND grade_level = ? LIMIT 1", + [$request->user_id, $gradeLevel] ); if ($existingCourse) { $courseId = (int)$existingCourse['id']; $course = $existingCourse; } else { $subject = Database::selectOne( - "SELECT id FROM subjects WHERE name_ar = ? OR name_en = ? ORDER BY id LIMIT 1", - [$subjectName, $subjectName] + "SELECT id FROM subjects WHERE name = ? ORDER BY id LIMIT 1", + [$subjectName] ) ?: Database::selectOne("SELECT id FROM subjects ORDER BY id LIMIT 1"); if (!$subject) { $response->status(409)->json(['status' => 'error', 'message' => 'لا يوجد مبحث معرف لربط الفيديو به']);