Skip to content

Commit d215c45

Browse files
committed
Added filtering and search functionality to APIs
1 parent fb33756 commit d215c45

10 files changed

+278
-42
lines changed

app/Http/Controllers/CaThiController.php

+40-2
Original file line numberDiff line numberDiff line change
@@ -96,9 +96,47 @@ 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
99+
public function apiIndex(Request $request, $kythi_id)
100+
{
101+
// Khởi tạo query để chọn các trường 'thoiGianBatDau' và 'thoiGianKetThuc'
102+
$query = CaThi::select('id', 'tenCa', 'thoiGianBatDau', 'thoiGianKetThuc', 'kythi_id', 'monhoc_id')
103+
->where('kythi_id', $kythi_id);
104+
105+
// Kiểm tra nếu có tham số 'monhoc'
106+
if ($request->has('monhoc')) {
107+
$monhoc_id = $request->input('monhoc');
108+
$query->where('monhoc_id', $monhoc_id);
109+
}
110+
111+
// kiểm tra nếu có tham số 'search'
112+
if ($request->has('search')) {
113+
$search = $request->input('search');
114+
$query->where('tenCa', 'LIKE', "%$search%");
115+
}
116+
117+
// kiểm tra nếu có tham số 'all'
118+
if ($request->has('all')) {
119+
// 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
120+
$caThis = $query->get();
121+
} else {
122+
// nếu không có tham số 'all', chỉ lấy các ca thi trong thời gian hiện tại
123+
$now = now();
124+
$query->where(function ($query) use ($now) {
125+
$query->whereDate('thoiGianBatDau', '<=', $now)
126+
->whereDate('thoiGianKetThuc', '>=', $now);
127+
});
128+
$caThis = $query->get();
129+
}
130+
131+
// nếu không có kết quả
132+
if ($caThis->isEmpty()) {
133+
return response()->json(['message' => 'No results found'], 404);
134+
}
135+
136+
// Trả về dữ liệu ca thi dưới dạng JSON với mã trạng thái 200
137+
return response()->json($caThis, 200);
101138
}
139+
102140

103141
// API JSON: Lưu Ca thi mới
104142
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

+35-4
Original file line numberDiff line numberDiff line change
@@ -145,12 +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-
149-
// Lấy tất cả các đề thi với thông tin môn học và ca thi liên quan
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
150149
$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();
151178

152-
$deThis = $query->get(); // Thực hiện truy vấn và lấy dữ liệu
153-
// 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
154185
return response()->json($deThis, 200);
155186
}
156187

app/Http/Controllers/KyThiController.php

+21-5
Original file line numberDiff line numberDiff line change
@@ -144,16 +144,32 @@ public function apiIndex(Request $request)
144144
{
145145
// Khởi tạo query để chọn các trường 'id', 'tenKyThi', 'ngayBatDau', và 'ngayKetThuc'
146146
$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
147+
148+
// Kiểm tra nếu có tham số 'search'
149149
if ($request->has('search')) {
150150
$search = $request->input('search');
151151
$query->where('tenKyThi', 'LIKE', "%$search%");
152152
}
153-
154-
// Thực hiện truy vấn và lấy kết quả
155-
$kyThis = $query->get();
153+
154+
// Kiểm tra nếu có tham số 'all'
155+
if ($request->has('all')) {
156+
// 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
157+
$kyThis = $query->get();
158+
} else {
159+
// Nếu không có tham số 'all', chỉ lấy kỳ thi trong thời gian hiện tại
160+
$now = now();
161+
$query->where(function ($query) use ($now) {
162+
$query->whereDate('ngayBatDau', '<=', $now)
163+
->whereDate('ngayKetThuc', '>=', $now);
164+
});
165+
$kyThis = $query->get();
166+
}
156167

168+
// nếu không có kết quả
169+
if ($kyThis->isEmpty()) {
170+
return response()->json(['message' => 'No results found'], 404);
171+
}
172+
157173
// Trả về dữ liệu kỳ thi dưới dạng JSON với mã trạng thái 200
158174
return response()->json($kyThis, 200);
159175
}

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)

app/Http/Controllers/PhongThiController.php

+26-5
Original file line numberDiff line numberDiff line change
@@ -142,18 +142,39 @@ public function apiIndex(Request $request)
142142
{
143143
// Khởi tạo query builder để truy vấn bảng PhongThi
144144
$query = PhongThi::query();
145-
146-
// Nếu có 'cathi_id', thêm điều kiện vào query để lọc theo 'cathi_id'
147-
if ($request->has('cathi_id')) {
148-
$query->where('cathi_id', $request->input('cathi_id'));
145+
146+
// Kiểm tra nếu có tham số 'kythi_id'
147+
if ($request->has('kythi')) {
148+
$kythi_id = $request->input('kythi');
149+
$query->whereHas('caThi', function ($q) use ($kythi_id) {
150+
$q->where('kythi_id', $kythi_id);
151+
});
149152
}
150-
153+
154+
// Kiểm tra nếu có tham số 'cathi_id'
155+
if ($request->has('cathi')) {
156+
$cathi_id = $request->input('cathi');
157+
$query->where('cathi_id', $cathi_id);
158+
}
159+
160+
// Kiểm tra nếu có tham số 'search'
161+
if ($request->has('search')) {
162+
$search = $request->input('search');
163+
$query->where('tenPhongThi', 'LIKE', "%$search%");
164+
}
165+
151166
// Thực hiện truy vấn và lấy danh sách phòng thi
152167
$phongThis = $query->get();
153168

169+
// nếu không có kết quả
170+
if ($phongThis->isEmpty()) {
171+
return response()->json(['message' => 'No results found'], 404);
172+
}
173+
154174
// Trả về dữ liệu phòng thi dưới dạng JSON với mã trạng thái 200
155175
return response()->json($phongThis, 200);
156176
}
177+
157178

158179
// Phương thức lấy thông tin phòng thi theo ID dưới dạng JSON
159180
public function apiShow($id)

0 commit comments

Comments
 (0)