frontend/src/routes/api/update-watchlist/+server.ts
2024-10-11 17:36:26 +02:00

48 lines
1.7 KiB
TypeScript

import type { RequestHandler } from "./$types";
import { serialize } from "object-to-formdata";
export const POST = (async ({ request, locals }) => {
const { user, pb } = locals;
const data = await request.json();
const ticker = data?.ticker; // This can be a string (single ticker) or an array (list of tickers)
const watchListId = data?.watchListId;
let output;
try {
const watchList = await pb.collection("watchlist").getOne(watchListId);
if (Array.isArray(ticker)) {
// If `ticker` is a list, update the watchlist directly with the new list of tickers.
output = await pb.collection("watchlist").update(watchListId, {
ticker: ticker,
});
} else if (watchList?.ticker?.includes(ticker)) {
// Remove single ticker from the watchlist if it's already present.
const newTickerList = watchList?.ticker.filter((item) => item !== ticker);
output = await pb
.collection("watchlist")
.update(watchListId, { ticker: newTickerList });
} else {
// Add single ticker to the watchlist if it's not present.
const newTickerList = [...watchList?.ticker, ticker];
output = await pb
.collection("watchlist")
.update(watchListId, { ticker: newTickerList });
}
} catch (e) {
// If the watchlist doesn't exist, create a new one with either the single ticker or list.
output = await pb.collection("watchlist").create(
serialize({
user: user?.id,
ticker: Array.isArray(ticker)
? JSON.stringify(ticker)
: JSON.stringify([ticker]),
title: "Favorites",
})
);
}
return new Response(JSON.stringify(output));
}) satisfies RequestHandler;