groupBy('type'); $personalia = Personalia::all(); $education = Education::orderBy('startdatum', 'desc')->get(); $experience = WorkExperience::orderBy('startdatum', 'desc')->get(); return view('welcome', compact('skills', 'personalia', 'education', 'experience')); } public function getPersonalia(Personalia $personalia): JsonResponse { NotifyTelegramAboutPersonaliaClick::dispatch( $personalia, request()->ip(), request()->userAgent(), $this->ipHeaders(request()) ); return response()->json([ 'value' => $personalia->value, ]); } public function message(Request $request): JsonResponse { $validated = $request->validate([ 'name' => 'required|string|max:255', 'message' => 'required|string|max:5000', 'email' => 'nullable|email|max:255', 'phone' => 'nullable|string|max:50', ]); NotifyTelegramAboutContactMessage::dispatch( $validated['name'], $validated['message'], $request->ip(), $request->userAgent(), $validated['email'] ?? null, $validated['phone'] ?? null, $this->ipHeaders($request) ); return response()->json(['status' => 'success']); } public function pageVisit(PageVisitRequest $request): JsonResponse { NotifyTelegramAboutPageVisit::dispatch( $request->validated(), $request->ip(), $request->userAgent(), $request->header('Accept-Language'), $this->ipHeaders($request) ); return response()->json(['status' => 'queued']); } /** * @return array */ protected function ipHeaders(Request $request): array { return [ 'CF-Connecting-IP' => $request->header('CF-Connecting-IP'), 'X-Forwarded-For' => $request->header('X-Forwarded-For'), 'X-Real-IP' => $request->header('X-Real-IP'), 'Forwarded' => $request->header('Forwarded'), ]; } }