service = $service; } public function upload(AvatarUploadRequest $request): JsonResponse { $user = $request->user(); if (!$user) { return response()->json(['error' => 'Unauthorized'], 401); } $file = $request->file('avatar'); try { $hash = $this->service->storeFromUploadedFile($user->id, $file); return response()->json([ 'success' => true, 'hash' => $hash, 'url' => AvatarUrl::forUser((int) $user->id, $hash, 128), ], 200); } catch (RuntimeException $e) { logger()->warning('Avatar upload validation failed', [ 'user_id' => (int) $user->id, 'message' => $e->getMessage(), ]); return response()->json([ 'error' => 'Validation failed', 'message' => $e->getMessage(), ], 422); } catch (\Throwable $e) { logger()->error('Avatar upload failed', [ 'user_id' => (int) $user->id, 'message' => $e->getMessage(), ]); return response()->json(['error' => 'Processing failed'], 500); } } }