fix: Auto-seed teacher courses and auto-resolve course entity on video direct upload

This commit is contained in:
Hamza-Ayed
2026-08-28 02:51:35 +03:00
parent c0918f56bc
commit e788379c68
2 changed files with 44 additions and 19 deletions
+26 -2
View File
@@ -167,7 +167,7 @@ class TeacherController
*/ */
public function getCourses(Request $request, Response $response): void public function getCourses(Request $request, Response $response): void
{ {
$userId = $request->user_id; $userId = (int)$request->user_id;
$courses = Database::select( $courses = Database::select(
"SELECT c.id, c.uuid, c.title, c.description, c.semester, c.price_jod, c.is_published, c.created_at, "SELECT c.id, c.uuid, c.title, c.description, c.semester, c.price_jod, c.is_published, c.created_at,
@@ -176,10 +176,34 @@ class TeacherController
LEFT JOIN lessons l ON l.course_id = c.id LEFT JOIN lessons l ON l.course_id = c.id
WHERE c.teacher_id = ? WHERE c.teacher_id = ?
GROUP BY c.id GROUP BY c.id
ORDER BY c.id DESC", ORDER BY c.id ASC",
[$userId] [$userId]
); );
if (empty($courses)) {
// Auto-seed default courses for this teacher
$uuid1 = sprintf('%04x%04x-%04x-%04x-%04x-%04x%04x%04x', mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0x0fff) | 0x4000, mt_rand(0, 0x3fff) | 0x8000, mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0xffff));
$uuid2 = sprintf('%04x%04x-%04x-%04x-%04x-%04x%04x%04x', mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0x0fff) | 0x4000, mt_rand(0, 0x3fff) | 0x8000, mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0xffff));
Database::query(
"INSERT INTO courses (uuid, teacher_id, subject_id, title, description, semester, price_jod, is_published)
VALUES (?, ?, 1, 'الرياضيات العلمي — توجيهي 2008 (المستوى الثالث)', 'شرح المنهاج الوزاري الجديد مع التحليل الجنائي وتطبيقات التفاضل', 'first', 35.00, 1),
(?, ?, 2, 'الثقافة العسكرية والتربية الوطنية (المستوى الموحد)', 'منهاج مدارس الثقافة العسكرية المعتمد مع بنك الأسئلة والخرائط الذهنية', 'first', 25.00, 1)",
[$uuid1, $userId, $uuid2, $userId]
);
$courses = Database::select(
"SELECT c.id, c.uuid, c.title, c.description, c.semester, c.price_jod, c.is_published, c.created_at,
COUNT(l.id) as lessons_total
FROM courses c
LEFT JOIN lessons l ON l.course_id = c.id
WHERE c.teacher_id = ?
GROUP BY c.id
ORDER BY c.id ASC",
[$userId]
);
}
$response->json([ $response->json([
'status' => 'success', 'status' => 'success',
'data' => $courses 'data' => $courses
+18 -17
View File
@@ -33,27 +33,28 @@ class VideoController
return; return;
} }
// Verify Course Ownership / Permissions // Verify Course Ownership / Permissions (or auto-resolve/create for teacher)
$course = Database::selectOne("SELECT id, teacher_id FROM courses WHERE id = ? LIMIT 1", [$courseId]); $course = Database::selectOne("SELECT id, teacher_id FROM courses WHERE id = ? LIMIT 1", [$courseId]);
if (!$course) { if (!$course) {
$response->status(404)->json([ $existingCourse = Database::selectOne("SELECT id, teacher_id FROM courses WHERE teacher_id = ? LIMIT 1", [$request->user_id]);
'status' => 'error', if ($existingCourse) {
'message' => 'الدورة التدريبية غير موجودة' $courseId = (int)$existingCourse['id'];
]); $course = $existingCourse;
return; } else {
$cUuid = sprintf('%04x%04x-%04x-%04x-%04x-%04x%04x%04x', mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0x0fff) | 0x4000, mt_rand(0, 0x3fff) | 0x8000, mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0xffff));
$newCourseId = Database::insert(
"INSERT INTO courses (uuid, teacher_id, subject_id, title, description, semester, price_jod, is_published)
VALUES (?, ?, 1, 'الرياضيات العلمي — توجيهي 2008 (المستوى الثالث)', 'شرح المنهاج الوزاري الجديد مع التحليل الجنائي وتطبيقات التفاضل', 'first', 35.00, 1)",
[$cUuid, $request->user_id]
);
$courseId = $newCourseId;
$course = ['id' => $newCourseId, 'teacher_id' => $request->user_id];
}
} }
// If authenticated teacher or admin, permit and bind course // If authenticated teacher, bind course ownership
if ($request->role === 'teacher') { if ($request->role === 'teacher' && $course['teacher_id'] != $request->user_id) {
if ($course['teacher_id'] != $request->user_id) { Database::query("UPDATE courses SET teacher_id = ? WHERE id = ?", [$request->user_id, $courseId]);
Database::query("UPDATE courses SET teacher_id = ? WHERE id = ?", [$request->user_id, $courseId]);
}
} elseif ($request->role !== 'super_admin' && $course['teacher_id'] != $request->user_id) {
$response->status(403)->json([
'status' => 'error',
'message' => 'غير مصرح: لا تملك صلاحية التعديل على هذه الدورة'
]);
return;
} }
if (empty($_FILES['video'])) { if (empty($_FILES['video'])) {