2025-08-01 00:36:05 +02:00
|
|
|
<?php
|
|
|
|
|
|
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
|
|
|
|
|
|
use App\Models\Asset;
|
2026-05-02 09:52:42 +02:00
|
|
|
use App\Models\User;
|
2025-08-01 00:36:05 +02:00
|
|
|
use Illuminate\Http\JsonResponse;
|
|
|
|
|
use Illuminate\Http\Request;
|
|
|
|
|
|
|
|
|
|
class AssetController extends Controller
|
|
|
|
|
{
|
|
|
|
|
public function index(): JsonResponse
|
|
|
|
|
{
|
|
|
|
|
$assets = Asset::orderBy('symbol')->get();
|
|
|
|
|
|
|
|
|
|
return response()->json($assets);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function current(): JsonResponse
|
|
|
|
|
{
|
2026-05-02 15:07:24 +02:00
|
|
|
$user = User::default();
|
2025-08-01 00:36:05 +02:00
|
|
|
|
|
|
|
|
return response()->json([
|
2026-05-02 15:07:24 +02:00
|
|
|
'asset' => $user->asset,
|
|
|
|
|
'price_tracking_enabled' => $user->price_tracking_enabled,
|
2025-08-01 00:36:05 +02:00
|
|
|
]);
|
|
|
|
|
}
|
|
|
|
|
|
2025-08-01 00:56:26 +02:00
|
|
|
public function setCurrent(Request $request)
|
2025-08-01 00:36:05 +02:00
|
|
|
{
|
|
|
|
|
$validated = $request->validate([
|
|
|
|
|
'symbol' => 'required|string|max:10',
|
|
|
|
|
'full_name' => 'nullable|string|max:255',
|
|
|
|
|
]);
|
|
|
|
|
|
|
|
|
|
$asset = Asset::findOrCreateBySymbol(
|
|
|
|
|
$validated['symbol'],
|
|
|
|
|
$validated['full_name'] ?? null
|
|
|
|
|
);
|
|
|
|
|
|
2026-05-02 15:07:24 +02:00
|
|
|
User::default()->update(['asset_id' => $asset->id]);
|
2025-08-01 00:36:05 +02:00
|
|
|
|
2025-08-01 00:56:26 +02:00
|
|
|
return back()->with('success', 'Asset set successfully!');
|
2025-08-01 00:36:05 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function store(Request $request): JsonResponse
|
|
|
|
|
{
|
|
|
|
|
$validated = $request->validate([
|
|
|
|
|
'symbol' => 'required|string|max:10|unique:assets,symbol',
|
|
|
|
|
'full_name' => 'nullable|string|max:255',
|
|
|
|
|
]);
|
|
|
|
|
|
|
|
|
|
$asset = Asset::create([
|
|
|
|
|
'symbol' => strtoupper($validated['symbol']),
|
|
|
|
|
'full_name' => $validated['full_name'],
|
|
|
|
|
]);
|
|
|
|
|
|
|
|
|
|
return response()->json([
|
|
|
|
|
'success' => true,
|
|
|
|
|
'message' => 'Asset created successfully!',
|
|
|
|
|
'asset' => $asset,
|
|
|
|
|
], 201);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function show(Asset $asset): JsonResponse
|
|
|
|
|
{
|
|
|
|
|
$asset->load('assetPrices');
|
|
|
|
|
$currentPrice = $asset->currentPrice();
|
|
|
|
|
|
|
|
|
|
return response()->json([
|
|
|
|
|
'asset' => $asset,
|
|
|
|
|
'current_price' => $currentPrice,
|
|
|
|
|
]);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function search(Request $request): JsonResponse
|
|
|
|
|
{
|
|
|
|
|
$query = $request->get('q');
|
2026-05-02 09:52:42 +02:00
|
|
|
|
|
|
|
|
if (! $query) {
|
2025-08-01 00:36:05 +02:00
|
|
|
return response()->json([]);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$assets = Asset::where('symbol', 'like', "%{$query}%")
|
|
|
|
|
->orWhere('full_name', 'like', "%{$query}%")
|
|
|
|
|
->orderBy('symbol')
|
|
|
|
|
->limit(10)
|
|
|
|
|
->get();
|
|
|
|
|
|
|
|
|
|
return response()->json($assets);
|
|
|
|
|
}
|
2026-05-02 09:52:42 +02:00
|
|
|
}
|