File size: 4,566 Bytes
5103c2a
 
 
 
 
 
 
 
 
864926d
 
5103c2a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
864926d
 
5103c2a
 
 
 
 
 
 
 
 
864926d
 
5103c2a
864926d
5103c2a
 
 
 
 
864926d
 
5103c2a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
864926d
 
5103c2a
 
 
 
 
 
 
 
 
864926d
 
5103c2a
 
 
 
 
 
864926d
 
5103c2a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
864926d
 
5103c2a
 
 
 
864926d
 
5103c2a
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
const usersTable = document.getElementById("usersTable");
const teacherSelect = document.getElementById("teacherSelect");
const studentSelect = document.getElementById("studentSelect");
const coursesTable = document.getElementById("coursesTable");
const courseSelect = document.getElementById("courseSelect");
const enrollmentsTable = document.getElementById("enrollmentsTable");

// --- USERS ---
async function fetchUsers() {
  // Added slash: /users/
  const res = await fetch("/users/");
  const users = await res.json();

  usersTable.innerHTML = `<tr><th>ID</th><th>Name</th><th>Email</th><th>Role</th><th>Action</th></tr>`;
  teacherSelect.innerHTML = `<option disabled selected>Select Teacher</option>`;
  studentSelect.innerHTML = `<option disabled selected>Select Student</option>`;

  users.forEach(u => {
    usersTable.innerHTML += `
      <tr>
        <td>${u.id}</td>
        <td><strong>${u.name}</strong></td>
        <td>${u.email}</td>
        <td><span style="background:${u.role === 'Teacher' ? '#e0e7ff' : '#d1fae5'}; color:${u.role === 'Teacher' ? '#4338ca' : '#065f46'}; padding: 2px 8px; border-radius: 10px; font-size: 0.8em;">${u.role}</span></td>
        <td><button class="btn-danger" onclick="deleteUser(${u.id})">Delete</button></td>
      </tr>`;

    if (u.role === "Teacher") teacherSelect.innerHTML += `<option value="${u.id}">${u.name}</option>`;
    if (u.role === "Student") studentSelect.innerHTML += `<option value="${u.id}">${u.name}</option>`;
  });
}

async function addUser() {
  const name = document.getElementById("name").value;
  const email = document.getElementById("email").value;
  const role = document.getElementById("role").value;
  if(!name || !email) return alert("Fill details");

  // Added slash: /users/
  await fetch("/users/", {
    method: "POST", 
    headers: {"Content-Type": "application/json"},
    body: JSON.stringify({ name, email, role })
  });
  fetchUsers();
}

async function deleteUser(id) {
  if(!confirm("Are you sure? This will delete their courses/enrollments too.")) return;
  // Added slash: /users/${id}/
  await fetch(`/users/${id}/`, { method: "DELETE" });
  fetchUsers();
  fetchCourses();      
  fetchEnrollments(); 
}

// --- COURSES ---
async function fetchCourses() {
  // Added slash: /courses/
  const res = await fetch("/courses/");
  const courses = await res.json();

  coursesTable.innerHTML = `<tr><th>ID</th><th>Title</th><th>Teacher</th><th>Action</th></tr>`;
  courseSelect.innerHTML = `<option disabled selected>Select Course</option>`;

  courses.forEach(c => {
    coursesTable.innerHTML += `
      <tr>
        <td>${c.id}</td>
        <td><strong>${c.title}</strong></td>
        <td>${c.teacher}</td>
        <td><button class="btn-danger" onclick="deleteCourse(${c.id})">Delete</button></td>
      </tr>`;
    courseSelect.innerHTML += `<option value="${c.id}">${c.title}</option>`;
  });
}

async function createCourse() {
  const title = document.getElementById("courseTitle").value;
  const teacher_id = teacherSelect.value;
  if (!title.trim()) return alert("Title required");

  // Added slash: /courses/
  await fetch("/courses/", {
    method: "POST",
    headers: {"Content-Type": "application/json"},
    body: JSON.stringify({ title, teacher_id })
  });
  fetchCourses();
}

async function deleteCourse(id) {
  if(!confirm("Delete this course?")) return;
  // Added slash: /courses/${id}/
  await fetch(`/courses/${id}/`, { method: "DELETE" });
  fetchCourses();
  fetchEnrollments();
}

// --- ENROLLMENTS ---
async function fetchEnrollments() {
  // Added slash: /enrollments/
  const res = await fetch("/enrollments/");
  const data = await res.json();

  enrollmentsTable.innerHTML = `<tr><th>Student</th><th>Course</th><th>Teacher</th><th>Action</th></tr>`;
  
  data.forEach(e => {
    enrollmentsTable.innerHTML += `
      <tr>
        <td><strong>${e.student}</strong></td>
        <td>${e.course}</td>
        <td>${e.teacher}</td>
        <td><button class="btn-danger" onclick="deleteEnrollment(${e.id})">Un-enroll</button></td>
      </tr>`;
  });
}

async function enrollStudent() {
  const s_id = studentSelect.value;
  const c_id = courseSelect.value;
  // Added slash before query params: /enrollments/?...
  await fetch(`/enrollments/?student_id=${s_id}&course_id=${c_id}`, { method: "POST" });
  fetchEnrollments();
}

async function deleteEnrollment(id) {
  // Added slash: /enrollments/${id}/
  await fetch(`/enrollments/${id}/`, { method: "DELETE" });
  fetchEnrollments();
}

fetchUsers();
fetchCourses();
fetchEnrollments();