validate([ 'email' => ['required', 'string', 'lowercase', 'email', 'max:255', 'unique:' . User::class], 'first_name' => ['required', 'string', 'max:64'], 'last_name' => ['required', 'string', 'max:64'], 'phone' => ['required', 'string', 'max:13'], 'role' => ['required', 'string', 'uppercase', 'in:STUDENT,EMPLOYER'], // študentské info 'student_data' => ['required_if:role,STUDENT', 'array'], 'student_data.address' => ['required_if:role,STUDENT', 'string', 'max:64'], 'student_data.personal_email' => ['required_if:role,STUDENT', 'string', 'email'], 'student_data.study_field' => ['required_if:role,STUDENT', 'string', 'max:32'], // firemné info 'company_data' => ['required_if:role,EMPLOYER', 'array'], 'company_data.name' => ['required_if:role,EMPLOYER', 'string', 'max:64'], 'company_data.address' => ['required_if:role,EMPLOYER', 'string', 'max:64'], 'company_data.ico' => ['required_if:role,EMPLOYER', 'integer'], 'company_data.hiring' => ['required_if:role,EMPLOYER', 'boolean'], ]); DB::beginTransaction(); try { $user = User::create([ 'email' => $request->email, 'first_name' => $request->first_name, 'last_name' => $request->last_name, 'name' => "{$request->first_name} {$request->last_name}", 'phone' => $request->phone, 'role' => $request->role, 'password' => Hash::make($password), 'activation_token' => $activation_token ]); if ($user->role === "STUDENT") { StudentData::create([ 'user_id' => $user->id, 'address' => $request->student_data['address'], 'personal_email' => $request->student_data['personal_email'], 'study_field' => $request->student_data['study_field'], ]); } else if ($user->role === "EMPLOYER") { Company::create([ 'name' => $request->company_data['name'], 'address' => $request->company_data['address'], 'ico' => $request->company_data['ico'], 'contact' => $user->id, 'hiring' => $request->company_data['hiring'], ]); } DB::commit(); } catch (\Exception $e) { DB::rollBack(); throw $e; } Mail::to($user)->sendNow(new UserRegistrationCompleted($user->name, $activation_token)); event(new Registered($user)); return response()->noContent(); } public function activate(Request $request) { $request->validate([ 'token' => ['required', 'string', 'exists:users,activation_token'], 'password' => ['required', 'string', 'min:8'], ]); $user = User::where('activation_token', '=', $request->token)->first(); if (!$user) { return response()->json(['message' => 'Invalid activation token'], 400); } $user->active = true; $user->activation_token = null; $user->password = Hash::make($request->password); $user->save(); Mail::to($user)->sendNow(new UserAccountActivated($user->name)); return response()->noContent(); } public function reset_password(Request $request): Response { $request->validate([ 'email' => ['required', 'string', 'lowercase', 'email', 'max:255'], ]); $user = User::whereEmail($request->email)->first(); if (!$user) { return response(status: 400); } $newPassword = bin2hex(random_bytes(16)); $user->password = Hash::make($newPassword); $user->save(); Mail::to($user)->sendNow(new UserPasswordReset($user->name, $newPassword)); return response()->noContent(); } public function reset_password_2(Request $request): Response { $request->validate([ 'id' => ['required', 'string', 'lowercase', 'email', 'max:255'], 'password' => ['required', 'string', 'lowercase', 'email', 'max:255'], ]); $user = User::whereEmail($request->email)->first(); if (!$user) { return response(status: 400); } $user->password = Hash::make($request->password); $user->save(); return response()->noContent(); } }