48 lines
1.7 KiB
TypeScript
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;
|