tracker; if (! $tracker) { return response()->json(null); } return response()->json($tracker->load('asset')); } public function store(Request $request): JsonResponse { $validated = $request->validate([ 'label' => 'required|string|max:255', 'unit' => 'required|string|max:50', 'price_tracking_enabled' => 'boolean', 'symbol' => 'nullable|string|max:10', 'full_name' => 'nullable|string|max:255', ]); $user = User::default(); $assetId = null; if (! empty($validated['symbol'])) { $asset = Asset::findOrCreateBySymbol($validated['symbol'], $validated['full_name'] ?? null); $assetId = $asset->id; } if ($user->tracker) { return response()->json(['error' => 'Tracker already exists.'], 409); } $tracker = $user->tracker()->create([ 'label' => $validated['label'], 'unit' => $validated['unit'], 'price_tracking_enabled' => $validated['price_tracking_enabled'] ?? false, 'asset_id' => $assetId, ]); return response()->json($tracker->load('asset'), 201); } public function update(Request $request): JsonResponse { $validated = $request->validate([ 'label' => 'sometimes|string|max:255', 'unit' => 'sometimes|string|max:50', 'price_tracking_enabled' => 'sometimes|boolean', 'symbol' => 'nullable|string|max:10', 'full_name' => 'nullable|string|max:255', ]); $tracker = User::default()->tracker; if (! $tracker) { return response()->json(['error' => 'No tracker found.'], 404); } if (array_key_exists('symbol', $validated)) { if ($validated['symbol']) { $asset = Asset::findOrCreateBySymbol($validated['symbol'], $validated['full_name'] ?? null); $tracker->asset_id = $asset->id; } else { $tracker->asset_id = null; } } $update = array_filter([ 'label' => $validated['label'] ?? null, 'unit' => $validated['unit'] ?? null, 'price_tracking_enabled' => $validated['price_tracking_enabled'] ?? null, 'asset_id' => $tracker->asset_id, ], fn ($v) => $v !== null); $tracker->update($update); return response()->json($tracker->load('asset')); } }