feat: delete ticker from database when removed from portfolio

- Add DELETE support to /api/stocks endpoint via _method parameter
- Modify removeStock to delete db- prefixed entries from database
- Add confirmation dialog on delete button click
- Add test for stock deletion
This commit is contained in:
2026-05-14 10:29:27 +02:00
parent 3340fd11ca
commit 043c3d5afe
4 changed files with 62 additions and 23 deletions
+29 -7
View File
@@ -221,7 +221,25 @@ export default function Analyze() {
updatePositions();
}, [stocks.length]);
const removeStock = (id: string) => {
const removeStock = async (id: string) => {
const stock = stocks.find((s) => s.id === id);
if (!stock) return;
// Delete from database if this was a manually added stock (db- prefix)
if (id.startsWith("db-")) {
try {
const formData = new FormData();
formData.append("_method", "DELETE");
formData.append("ticker", stock.ticker);
await fetch("/api/stocks", {
method: "POST",
body: formData,
});
} catch (err) {
console.error("[analyze] Error deleting stock from DB:", err);
}
}
setStocks((s) => s.filter((stock) => stock.id !== id));
};
@@ -346,12 +364,16 @@ export default function Analyze() {
>
{stock.loading ? "Running..." : "Analyze"}
</button>
<button
onClick={() => removeStock(stock.id)}
className="bg-red-600 text-white px-3 py-1 rounded text-sm hover:bg-red-700"
>
Delete
</button>
<button
onClick={async () => {
if (confirm(`Remove ${stock.ticker}?`)) {
await removeStock(stock.id);
}
}}
className="bg-red-600 text-white px-3 py-1 rounded text-sm hover:bg-red-700"
>
Delete
</button>
</div>
</td>
</tr>