Skip to content

Commit 0cc5405

Browse files
author
hunglvh
committed
hung push
2 parents 8bd187f + 565c477 commit 0cc5405

File tree

82 files changed

+2058
-929
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

82 files changed

+2058
-929
lines changed

app/Http/Controllers/AuthController.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ public function login(Request $request)
5050
// Đăng nhập admin
5151
Auth::login($admin);
5252
// Chuyển hướng tới trang danh sách Khoa với thông báo thành công
53-
return redirect()->route('khoa.index')->with('success', 'Đăng nhập thành công');
53+
return redirect()->route('dashboard')->with('success', 'Đăng nhập thành công');
5454
}
5555

5656
// Nếu thông tin đăng nhập không đúng, quay lại trang trước và hiển thị lỗi

app/Http/Controllers/CaThiController.php

+44-3
Original file line numberDiff line numberDiff line change
@@ -96,9 +96,50 @@ public function destroy($kythi_id, $id) {
9696
}
9797

9898
// API JSON: Lấy danh sách các Ca thi dựa trên kythi_id
99-
public function apiIndex($kythi_id) {
100-
return response()->json(CaThi::where('kythi_id', $kythi_id)->get(), 200); // Trả về JSON danh sách các ca thi
101-
}
99+
public function apiIndex(Request $request, $kythi_id)
100+
{
101+
// Khởi tạo query để chọn các trường 'id', 'tenCa', 'thoiGianBatDau', 'thoiGianKetThuc', 'kythi_id', 'monhoc_id' và load các phòng thi
102+
$query = CaThi::select('id', 'tenCa', 'thoiGianBatDau', 'thoiGianKetThuc', 'kythi_id', 'monhoc_id')
103+
->where('kythi_id', $kythi_id)
104+
->with(['phongThis' => function ($query) {
105+
$query->select('id', 'tenPhongThi', 'cathi_id');
106+
}]);
107+
108+
// Kiểm tra nếu có tham số 'monhoc'
109+
if ($request->has('monhoc')) {
110+
$monhoc_id = $request->input('monhoc');
111+
$query->where('monhoc_id', $monhoc_id);
112+
}
113+
114+
// kiểm tra nếu có tham số 'search'
115+
if ($request->has('search')) {
116+
$search = $request->input('search');
117+
$query->where('tenCa', 'LIKE', "%$search%");
118+
}
119+
120+
// kiểm tra nếu có tham số 'all'
121+
if ($request->has('all')) {
122+
// nếu có tham số 'all', lấy tất cả các ca thi mà không có điều kiện thời gian
123+
$caThis = $query->get();
124+
} else {
125+
// nếu không có tham số 'all', chỉ lấy các ca thi trong thời gian hiện tại
126+
$now = now();
127+
$query->where(function ($query) use ($now) {
128+
$query->whereDate('thoiGianBatDau', '<=', $now)
129+
->whereDate('thoiGianKetThuc', '>=', $now);
130+
});
131+
$caThis = $query->get();
132+
}
133+
134+
// nếu không có kết quả
135+
if ($caThis->isEmpty()) {
136+
return response()->json(['message' => 'No results found'], 404);
137+
}
138+
139+
// Trả về dữ liệu ca thi cùng với phòng thi dưới dạng JSON với mã trạng thái 200
140+
return response()->json($caThis, 200);
141+
}
142+
102143

103144
// API JSON: Lưu Ca thi mới
104145
public function apiStore(Request $request, $kythi_id) {

app/Http/Controllers/CauHoiController.php

+33-3
Original file line numberDiff line numberDiff line change
@@ -154,8 +154,9 @@ public function destroy($id)
154154
public function apiIndex(Request $request)
155155
{
156156
// Tạo truy vấn để lấy danh sách câu hỏi
157-
$query = CauHoi::select('id', 'noiDung', 'typeAudio', 'typeVideo', 'typeImage', 'doKho', 'monhoc_id');
158-
157+
$query = CauHoi::select('id', 'noiDung', 'typeAudio', 'typeVideo', 'typeImage', 'doKho', 'monhoc_id')
158+
->with('monhoc'); // Eager load mối quan hệ với môn học
159+
159160
// Kiểm tra nếu có từ khóa tìm kiếm
160161
if ($request->has('search')) {
161162
$search = $request->input('search'); // Lấy từ khóa tìm kiếm từ request
@@ -164,9 +165,38 @@ public function apiIndex(Request $request)
164165
$query->where('tenMonHoc', 'LIKE', "%$search%");
165166
});
166167
}
167-
168+
169+
// Nếu có tham số 'monhoc', lọc kết quả theo 'monhoc_id'
170+
if ($request->filled('monhoc')) {
171+
$monhoc_id = $request->input('monhoc');
172+
$query->where('monhoc_id', $monhoc_id);
173+
}
174+
175+
// Nếu có tham số 'doKho', lọc kết quả theo 'doKho'
176+
if ($request->filled('doKho')) {
177+
$doKho = $request->input('doKho');
178+
$query->where('doKho', $doKho);
179+
}
180+
181+
// Nếu có tham số 'limit', giới hạn số lượng câu hỏi trả về
182+
if ($request->filled('limit')) {
183+
$limit = (int) $request->input('limit');
184+
$query->limit($limit);
185+
}
186+
187+
// Nếu có tham số 'random', sắp xếp ngẫu nhiên câu hỏi
188+
if ($request->has('random')) {
189+
$query->inRandomOrder();
190+
}
191+
168192
// Thực hiện truy vấn và lấy kết quả
169193
$cauHois = $query->get();
194+
195+
// nếu không có kết quả
196+
if ($cauHois->isEmpty()) {
197+
return response()->json(['message' => 'No results found'], 404);
198+
}
199+
170200
// Trả về kết quả dưới dạng JSON với mã trạng thái 200
171201
return response()->json($cauHois, 200);
172202
}

app/Http/Controllers/DeThiController.php

+36-7
Original file line numberDiff line numberDiff line change
@@ -145,14 +145,43 @@ public function destroy($id)
145145
// API JSON: Lấy danh sách các đề thi theo ID ca thi
146146
public function apiIndex(Request $request)
147147
{
148-
$caThiId = $request->get('cathi_id'); // Lấy ID ca thi từ request
149-
150-
// Lấy tất cả các đề thi với thông tin môn học và ca thi liên quan
151-
$query = DeThi::with('monHoc', 'caThi')
152-
->where('cathi_id', $caThiId); // Lọc theo ID ca thi
148+
// Khởi tạo query để chọn các trường cần thiết và kèm theo thông tin môn học và ca thi liên quan
149+
$query = DeThi::with('monHoc', 'caThi');
150+
151+
// Kiểm tra nếu có tham số 'kythi_id'
152+
if ($request->has('kythi')) {
153+
$kythi_id = $request->input('kythi');
154+
$query->whereHas('caThi', function ($q) use ($kythi_id) {
155+
$q->where('kythi_id', $kythi_id);
156+
});
157+
}
158+
159+
// Kiểm tra nếu có tham số 'cathi_id'
160+
if ($request->has('cathi')) {
161+
$cathi_id = $request->input('cathi');
162+
$query->where('cathi_id', $cathi_id);
163+
}
164+
165+
// kiểm tra nếu có tham số 'monhoc_id'
166+
if ($request->has('monhoc')) {
167+
$monhoc_id = $request->input('monhoc');
168+
$query->where('monhoc_id', $monhoc_id);
169+
}
170+
171+
// kiểm tra nếu có tham số 'search'
172+
if ($request->has('search')) {
173+
$search = $request->input('search');
174+
$query->where('tenDe', 'LIKE', "%$search%");
175+
}
176+
177+
$deThis = $query->get();
153178

154-
$deThis = $query->get(); // Thực hiện truy vấn và lấy dữ liệu
155-
// Trả về dữ liệu dưới dạng JSON với mã trạng thái 200
179+
// nếu không có kết quả
180+
if ($deThis->isEmpty()) {
181+
return response()->json(['message' => 'No results found'], 404);
182+
}
183+
184+
// trả về dữ liệu đề thi dưới dạng JSON với mã trạng thái 200
156185
return response()->json($deThis, 200);
157186
}
158187

app/Http/Controllers/KetQuaController.php

+24-17
Original file line numberDiff line numberDiff line change
@@ -25,44 +25,51 @@
2525

2626
use Illuminate\Http\Request;
2727
use App\Models\KetQua;
28-
use App\Models\SinhVien;
2928
use App\Models\DeThi;
29+
use Illuminate\Support\Facades\Auth;
3030

3131
class KetQuaController extends Controller
3232
{
3333
// Xem kết quả của sinh viên cho một đề thi qua API
3434
public function show($sinhvienId, $dethiId)
3535
{
36-
// Tìm kết quả của sinh viên với ID và đề thi được chỉ định
3736
$ketQua = KetQua::where('sinhvien_id', $sinhvienId)
3837
->where('dethi_id', $dethiId)
3938
->first();
4039

41-
// Nếu không tìm thấy kết quả, trả về thông báo lỗi 404
4240
if (!$ketQua) {
4341
return response()->json(['message' => 'Không tìm thấy kết quả.'], 404);
4442
}
4543

46-
// Nếu tìm thấy kết quả, trả về dữ liệu kết quả dưới dạng JSON với mã trạng thái 200
4744
return response()->json($ketQua, 200);
4845
}
4946

50-
// Views
51-
52-
// Hiển thị kết quả của sinh viên cho một đề thi qua giao diện
53-
public function view($sinhvienId, $dethiId)
47+
// Thêm kết quả qua API
48+
public function store(Request $request)
5449
{
55-
// Tìm kết quả của sinh viên với ID và đề thi được chỉ định
56-
$ketQua = KetQua::where('sinhvien_id', $sinhvienId)
57-
->where('dethi_id', $dethiId)
58-
->first();
50+
// Lấy sinh viên từ token đăng nhập (Sanctum)
51+
$sinhVien = Auth::guard('sanctum')->user();
5952

60-
// Nếu không tìm thấy kết quả, trả về view thông báo không tìm thấy kết quả
61-
if (!$ketQua) {
62-
return view('ketqua.notfound');
53+
if (!$sinhVien) {
54+
return response()->json(['message' => 'Không tìm thấy sinh viên đã đăng nhập.'], 401);
6355
}
6456

65-
// Nếu tìm thấy kết quả, trả về view hiển thị kết quả với dữ liệu kết quả
66-
return view('ketqua.show', compact('ketQua'));
57+
// Xác thực dữ liệu đầu vào từ request
58+
$request->validate([
59+
'diemSo' => 'required|numeric|min:0|max:10', // Kiểm tra điểm số là số và nằm trong khoảng 0-10
60+
'danhSachDapAn' => 'json', // Đáp án phải là JSON hợp lệ
61+
'dethi_id' => 'required|exists:tb_dethi,id', // Đề thi phải tồn tại
62+
]);
63+
64+
// Tạo mới kết quả và lưu vào cơ sở dữ liệu
65+
$ketQua = KetQua::create([
66+
'diemSo' => $request->diemSo,
67+
'danhSachDapAn' => $request->danhSachDapAn,
68+
'dethi_id' => $request->dethi_id,
69+
'sinhvien_id' => $sinhVien->id, // Chèn sinhvien_id từ sinh viên đã đăng nhập
70+
]);
71+
72+
// Trả về kết quả vừa được thêm với mã trạng thái 201
73+
return response()->json(['message' => 'Kết quả đã được lưu thành công.', 'ketQua' => $ketQua], 201);
6774
}
6875
}

app/Http/Controllers/KyThiController.php

+28-8
Original file line numberDiff line numberDiff line change
@@ -142,21 +142,41 @@ public function destroy($id)
142142
// Lấy danh sách kỳ thi dưới dạng JSON với khả năng tìm kiếm
143143
public function apiIndex(Request $request)
144144
{
145-
// Khởi tạo query để chọn các trường 'id', 'tenKyThi', 'ngayBatDau', và 'ngayKetThuc'
146-
$query = KyThi::select('id', 'tenKyThi', 'ngayBatDau', 'ngayKetThuc');
147-
148-
// Nếu có từ khóa tìm kiếm, thêm điều kiện vào query
145+
// Khởi tạo query để chọn các trường 'id', 'tenKyThi', 'ngayBatDau', và 'ngayKetThuc' và load các ca thi
146+
$query = KyThi::select('id', 'tenKyThi', 'ngayBatDau', 'ngayKetThuc')
147+
->with(['caThis' => function ($query) {
148+
$query->select('id', 'tenCa', 'thoiGianBatDau', 'thoiGianKetThuc', 'kythi_id');
149+
}]);
150+
151+
// Kiểm tra nếu có tham số 'search'
149152
if ($request->has('search')) {
150153
$search = $request->input('search');
151154
$query->where('tenKyThi', 'LIKE', "%$search%");
152155
}
153-
154-
// Thực hiện truy vấn và lấy kết quả
155-
$kyThis = $query->get();
156156

157-
// Trả về dữ liệu kỳ thi dưới dạng JSON với mã trạng thái 200
157+
// Kiểm tra nếu có tham số 'all'
158+
if ($request->has('all')) {
159+
// Nếu tham số 'all' có mặt, lấy tất cả kỳ thi mà không có điều kiện thời gian
160+
$kyThis = $query->get();
161+
} else {
162+
// Nếu không có tham số 'all', chỉ lấy kỳ thi trong thời gian hiện tại
163+
$now = now();
164+
$query->where(function ($query) use ($now) {
165+
$query->whereDate('ngayBatDau', '<=', $now)
166+
->whereDate('ngayKetThuc', '>=', $now);
167+
});
168+
$kyThis = $query->get();
169+
}
170+
171+
// nếu không có kết quả
172+
if ($kyThis->isEmpty()) {
173+
return response()->json(['message' => 'No results found'], 404);
174+
}
175+
176+
// Trả về dữ liệu kỳ thi cùng với ca thi dưới dạng JSON với mã trạng thái 200
158177
return response()->json($kyThis, 200);
159178
}
179+
160180

161181
// Lấy thông tin kỳ thi theo ID dưới dạng JSON
162182
public function apiShow($id)

app/Http/Controllers/LopController.php

+15-4
Original file line numberDiff line numberDiff line change
@@ -152,17 +152,28 @@ public function apiIndex(Request $request)
152152
{
153153
// Khởi tạo query để chọn các trường 'id', 'maLop', 'tenLop', và 'nganh_id' cùng với thông tin ngành
154154
$query = Lop::with('nganh')->select('id', 'maLop', 'tenLop', 'nganh_id');
155-
155+
156156
// Nếu có từ khóa tìm kiếm, thêm điều kiện vào query để tìm kiếm theo mã lớp hoặc tên lớp
157157
if ($request->has('search')) {
158158
$search = $request->input('search');
159159
$query->where('maLop', 'LIKE', "%$search%")
160-
->orWhere('tenLop', 'LIKE', "%$search%");
160+
->orWhere('tenLop', 'LIKE', "%$search%");
161161
}
162-
163-
// Thực hiện truy vấn và lấy kết quả
162+
163+
// Nếu có tham số 'nganh', lọc kết quả theo 'nganh_id'
164+
if ($request->has('nganh')) {
165+
$nganh_id = $request->input('nganh');
166+
$query->where('nganh_id', $nganh_id);
167+
}
168+
169+
// truy vấn và lấy kết quả
164170
$lops = $query->get();
165171

172+
// nếu không có kết quả
173+
if ($lops->isEmpty()) {
174+
return response()->json(['message' => 'No results found'], 404);
175+
}
176+
166177
// Trả về dữ liệu lớp học dưới dạng JSON với mã trạng thái 200
167178
return response()->json($lops, 200);
168179
}

app/Http/Controllers/MonHocController.php

+23-3
Original file line numberDiff line numberDiff line change
@@ -150,17 +150,37 @@ public function destroy($id)
150150
public function apiIndex(Request $request)
151151
{
152152
// Khởi tạo query để chọn các trường 'id', 'maMonHoc', 'tenMonHoc', và 'nganh_id'
153-
$query = MonHoc::select('id', 'maMonHoc', 'tenMonHoc', 'nganh_id');
154-
153+
$query = MonHoc::select('id', 'maMonHoc', 'tenMonHoc', 'nganh_id')
154+
->with('nganh.khoa'); // Eager load mối quan hệ nganh và khoa
155+
155156
// Nếu có từ khóa tìm kiếm, thêm điều kiện vào query để tìm kiếm theo mã môn học hoặc tên môn học
156157
if ($request->has('search')) {
157158
$search = $request->input('search');
158159
$query->where('maMonHoc', 'LIKE', "%$search%")
159160
->orWhere('tenMonHoc', 'LIKE', "%$search%");
160161
}
161-
162+
163+
// Nếu có tham số 'nganh', lọc kết quả theo 'nganh_id'
164+
if ($request->filled('nganh')) {
165+
$nganh_id = $request->input('nganh');
166+
$query->where('nganh_id', $nganh_id);
167+
}
168+
169+
// Nếu có tham số 'khoa', lọc kết quả theo 'khoa_id' thông qua mối quan hệ với ngành
170+
if ($request->filled('khoa')) {
171+
$khoa_id = $request->input('khoa');
172+
$query->whereHas('nganh', function ($query) use ($khoa_id) {
173+
$query->where('khoa_id', $khoa_id);
174+
});
175+
}
176+
162177
// Thực hiện truy vấn và lấy kết quả
163178
$monHocs = $query->get();
179+
180+
// nếu không có kết quả
181+
if ($monHocs->isEmpty()) {
182+
return response()->json(['message' => 'No results found'], 404);
183+
}
164184

165185
// Trả về dữ liệu môn học dưới dạng JSON với mã trạng thái 200
166186
return response()->json($monHocs, 200);

app/Http/Controllers/NganhController.php

+16-4
Original file line numberDiff line numberDiff line change
@@ -151,20 +151,32 @@ public function apiIndex(Request $request)
151151
{
152152
// Khởi tạo query để chọn các trường 'id', 'maNganh', 'tenNganh', và 'khoa_id' cùng với thông tin khoa
153153
$query = Nganh::with('khoa')->select('id', 'maNganh', 'tenNganh', 'khoa_id');
154-
154+
155155
// Nếu có từ khóa tìm kiếm, thêm điều kiện vào query để tìm kiếm theo mã ngành hoặc tên ngành
156156
if ($request->has('search')) {
157157
$search = $request->input('search');
158158
$query->where('maNganh', 'LIKE', "%$search%")
159159
->orWhere('tenNganh', 'LIKE', "%$search%");
160160
}
161-
162-
// Thực hiện truy vấn và lấy kết quả
161+
162+
// Nếu có tham số 'khoa', lọc kết quả theo 'khoa_id'
163+
if ($request->has('khoa')) {
164+
$khoa_id = $request->input('khoa');
165+
$query->where('khoa_id', $khoa_id);
166+
}
167+
168+
// truy vấn và lấy kết quả
163169
$nganhs = $query->get();
164-
170+
171+
// nếu không có kết quả
172+
if ($nganhs->isEmpty()) {
173+
return response()->json(['message' => 'No results found'], 404);
174+
}
175+
165176
// Trả về dữ liệu ngành học dưới dạng JSON với mã trạng thái 200
166177
return response()->json($nganhs, 200);
167178
}
179+
168180

169181
// Lấy thông tin ngành học theo ID dưới dạng JSON
170182
public function apiShow($id)

0 commit comments

Comments
 (0)