validate([ 'name' => 'required|string|max:255', 'email' => 'required|email|unique:users', 'password' => 'required|string|min:8|confirmed', 'role' => 'sometimes|in:user,organizer', ]); // Standardrolle ist 'user', kann aber auf 'organizer' gesetzt werden $validated['role'] = $validated['role'] ?? 'user'; $user = User::create([ 'name' => $validated['name'], 'email' => $validated['email'], 'password' => Hash::make($validated['password']), 'role' => $validated['role'], ]); $token = $user->createToken('auth_token')->plainTextToken; return response()->json([ 'success' => true, 'message' => 'User erfolgreich registriert', 'user' => $user, 'token' => $token, ], 201); } /** * Login mit Email und Passwort. */ public function login(Request $request) { $validated = $request->validate([ 'email' => 'required|email', 'password' => 'required|string', ]); $user = User::where('email', $validated['email'])->first(); if (!$user || !Hash::check($validated['password'], $user->password)) { throw ValidationException::withMessages([ 'email' => ['Die eingegebenen Anmeldedaten sind ungültig.'], ]); } $token = $user->createToken('auth_token')->plainTextToken; return response()->json([ 'success' => true, 'message' => 'Login erfolgreich', 'user' => $user, 'token' => $token, ]); } /** * Logout - Token löschen. */ public function logout(Request $request) { $request->user()->currentAccessToken()->delete(); return response()->json([ 'success' => true, 'message' => 'Logout erfolgreich', ]); } /** * Aktuellen User abrufen. */ public function me(Request $request) { return response()->json([ 'success' => true, 'user' => $request->user(), ]); } /** * User-Profil aktualisieren. */ public function updateProfile(Request $request) { $validated = $request->validate([ 'name' => 'sometimes|string|max:255', 'email' => 'sometimes|email|unique:users,email,' . $request->user()->id, ]); $request->user()->update($validated); return response()->json([ 'success' => true, 'message' => 'Profil aktualisiert', 'user' => $request->user(), ]); } /** * Passwort ändern. */ public function changePassword(Request $request) { $validated = $request->validate([ 'current_password' => 'required|string', 'password' => 'required|string|min:8|confirmed', ]); if (!Hash::check($validated['current_password'], $request->user()->password)) { throw ValidationException::withMessages([ 'current_password' => ['Das aktuelle Passwort ist ungültig.'], ]); } $request->user()->update([ 'password' => Hash::make($validated['password']), ]); return response()->json([ 'success' => true, 'message' => 'Passwort geändert', ]); } }