get('per_page', 15), 500); $filter = $request->get('filter'); $status = $request->get('status'); $query = $this->serverRepository->model->newQuery(); if ($filter) { $query->where(function ($q) use ($filter) { $q->where('name', 'like', "%{$filter}%") ->orWhere('ip_address', 'like', "%{$filter}%"); }); } if ($status) { $query->where('status', $status); } $paginator = $query->paginate($perPage); return response()->json([ 'error' => false, 'data' => [ 'items' => $paginator->items(), 'total' => $paginator->total(), 'per_page' => $paginator->perPage(), 'current_page' => $paginator->currentPage(), 'last_page' => $paginator->lastPage(), ], ]); } public function show(int $id): JsonResponse { $server = $this->serverRepository->find($id); if (!$server) { return response()->json(['error' => true, 'message' => "Không tìm thấy server #$id"], 404); } return response()->json(['error' => false, 'data' => $server]); } public function store(Request $request): JsonResponse { $request->validate([ 'name' => 'required|string|max:255', 'ip_address' => 'required|string|max:255', 'username' => 'required|string|max:255', 'password' => 'required|string|max:255', 'api_key' => 'nullable|string', 'status' => 'nullable|string|in:activated,Stopped', ]); DB::beginTransaction(); try { $data = $request->all(); $data['password'] = Crypt::encryptString($request->password); $server = $this->serverRepository->create($data); DB::commit(); return response()->json(['error' => false, 'data' => $server], 201); } catch (\Exception $e) { DB::rollBack(); return response()->json(['error' => true, 'message' => $e->getMessage()], 500); } } public function update(int $id, Request $request): JsonResponse { $server = $this->serverRepository->find($id); if (!$server) { return response()->json(['error' => true, 'message' => "Không tìm thấy server #$id"], 404); } $request->validate([ 'name' => 'required|string|max:255', 'ip_address' => 'required|string|max:255', 'username' => 'required|string|max:255', 'password' => 'nullable|string|max:255', 'api_key' => 'nullable|string', 'status' => 'nullable|string|in:activated,Stopped', ]); DB::beginTransaction(); try { $data = $request->except(['password']); if (!empty($request->password)) { $data['password'] = Crypt::encryptString($request->password); } $this->serverRepository->update($id, $data); DB::commit(); return response()->json(['error' => false, 'data' => $this->serverRepository->find($id)]); } catch (\Exception $e) { DB::rollBack(); return response()->json(['error' => true, 'message' => $e->getMessage()], 500); } } public function destroy(int $id): JsonResponse { $server = $this->serverRepository->find($id); if (!$server) { return response()->json(['error' => true, 'message' => "Không tìm thấy server #$id"], 404); } $this->serverRepository->delete($id); return response()->json(['error' => false, 'message' => 'Đã xoá server thành công']); } }