employeeRepository->filter($request->all()); return response()->json([ 'error' => false, 'data' => $employees, ]); } public function store(EmployeeRequest $request): JsonResponse { $request->validated(); try { DB::beginTransaction(); $employee = $this->employeeRepository->create([ 'firstname' => $request->firstname, 'lastname' => $request->lastname, 'username' => $request->username, 'email' => $request->email, 'phone' => $request->phone, 'birthday' => $request->birthday, 'address' => $request->address, 'password' => Hash::make($request->password), ]); $employee->syncRoles([$request->role]); DB::commit(); return response()->json([ 'error' => false, 'message' => 'Employee created successfully', 'data' => $employee->load('roles'), ], 201); } catch (\Exception $e) { DB::rollBack(); return response()->json([ 'error' => true, 'message' => $e->getMessage(), ], 500); } } public function show(int $id): JsonResponse { $employee = $this->employeeRepository->find($id); if (!$employee) { return response()->json([ 'error' => true, 'message' => "Can't find employee by ID #" . $id, ], 404); } return response()->json([ 'error' => false, 'data' => $employee->load('roles'), ]); } public function update(int $id, EmployeeRequest $request): JsonResponse { $employee = $this->employeeRepository->find($id); if (!$employee) { return response()->json([ 'error' => true, 'message' => "Can't find employee by ID #" . $id, ], 404); } $request->validated(); try { DB::beginTransaction(); $data = [ 'firstname' => $request->firstname, 'lastname' => $request->lastname, 'username' => $request->username, 'email' => $request->email, 'phone' => $request->phone, 'birthday' => $request->birthday, 'address' => $request->address, ]; if ($request->filled('password')) { $data['password'] = Hash::make($request->password); } $this->employeeRepository->update($id, $data); $employee->syncRoles([$request->role]); DB::commit(); return response()->json([ 'error' => false, 'message' => 'Employee updated successfully', 'data' => $this->employeeRepository->find($id)->load('roles'), ]); } catch (\Exception $e) { DB::rollBack(); return response()->json([ 'error' => true, 'message' => $e->getMessage(), ], 500); } } public function destroy(int $id): JsonResponse { $employee = $this->employeeRepository->find($id); if (!$employee) { return response()->json([ 'error' => true, 'message' => "Can't find employee by ID #" . $id, ], 404); } try { DB::beginTransaction(); $this->employeeRepository->delete($id); DB::commit(); return response()->json([ 'error' => false, 'message' => 'Employee deleted successfully', ]); } catch (\Exception $e) { DB::rollBack(); return response()->json([ 'error' => true, 'message' => $e->getMessage(), ], 500); } } public function roles(): JsonResponse { $roles = Role::where('guard_name', 'admin')->get(['id', 'name']); return response()->json([ 'error' => false, 'data' => $roles, ]); } }