validated(); $avatarPath = null; if ($request->hasFile('avatar')) { $avatarPath = $request->file('avatar')->store('avatars', 'public'); } $user = User::create([ 'name' => $data['name'], 'email' => strtolower($data['email']), 'password' => Hash::make($data['password']), 'avatar_url' => $avatarPath, ]); $token = $user->createToken('todos', ['user'])->plainTextToken; return response()->json([ 'user' => new UserResource($user), 'token' => $token, ], 201); } public function login(LoginRequest $request): JsonResponse { $data = $request->validated(); $user = User::where('email', strtolower($data['email']))->first(); if (! $user || ! Hash::check($data['password'], $user->password)) { return response()->json([ 'message' => 'Identifiants invalides', ], 401); } $token = $user->createToken('todos' )->plainTextToken; return response()->json([ 'token' => $token, 'token_type' => 'Bearer', 'user' => new UserResource($user), ]); } public function logout(): JsonResponse { $request = request(); $request->user()->currentAccessToken()->delete(); return response()->json([ 'message' => 'Déconnecté avec succès' ]); } public function me(): JsonResponse { $user = auth()->user(); if (! $user) { return response()->json(['message' => 'Non authentifié'], 401); } return response()->json(new UserResource($user)); } public function update(UpdateUserRequest $request): JsonResponse { $user = $request->user(); $data = $request->validated(); if ($request->hasFile('avatar')) { if ($user->avatar_url) { Storage::disk('public')->delete($user->avatar_url); } $path = $request->file('avatar')->store('avatars', 'public'); $data['avatar_url'] = $path; } unset($data['avatar']); if (! empty($data)) { $user->update($data); } return response()->json(new UserResource($user->fresh())); } }