--- import { client } from '../../db/typesense'; import RarityIcon from '../../components/RarityIcon.astro'; import FirstEditionIcon from "../../components/FirstEditionIcon.astro"; export const prerender = false; import * as util from 'util'; // get the query from post request using form data const formData = await Astro.request.formData(); const query = formData.get('q')?.toString() || ''; const start = Number(formData.get('start')?.toString() || '0'); const { userId } = Astro.locals.auth(); // primary search values (for cards) let searchArray = [{ collection: 'inventories', filter_by: `userId:=${userId} && $skus($cards(id:*))`, per_page: 20, facet_by: '', max_facet_values: 0, page: Math.floor(start / 20) + 1, include_fields: '$skus(*),$cards(*)', }]; // on first load (start === 0) we want to get the facets for the filters // if (start === 0) { // for (const facet of Object.keys(facetFields)) { // searchArray.push({ // collection: 'cards', // filter_by: facetFilter(facet), // per_page: 0, // facet_by: facet, // max_facet_values: 500, // page: 1, // sort_by: '', // include_fields: '', // }); // } // } const searchRequests = { searches: searchArray }; const commonSearchParams = { q: query, query_by: 'content,setName,productLineName,rarityName,energyType,cardType' // query_by: 'userId', }; // use typesense to search for cards matching the query and return the productIds of the results const searchResults = await client.multiSearch.perform(searchRequests, commonSearchParams); const inventoryResults = searchResults.results[0] as any; console.log('inventoryResults', util.inspect(inventoryResults, { depth: null })); const pokemon = inventoryResults.hits?.map((hit: any) => hit.document) ?? []; const totalHits = inventoryResults?.found; console.log(`totalHits: ${totalHits}`); --- {pokemon.map((inventory:any) => { const sku = inventory.skus; const card = inventory.cards; const market = sku.marketPrice/100 || 0; const purchase = inventory.purchasePrice/100 || 0; const diff = market - purchase; const pct = purchase > 0 ? (diff / purchase) * 100 : 0; const isGain = diff >= 0; return (
{card.productName}
{card.setName}
{card.productName}
{isGain ? "▲" : "▼"} ${market.toFixed(2)}
{isGain ? "+" : "-"}${Math.abs(diff).toFixed(2)}
{isGain ? "+" : "-"}{Math.abs(pct).toFixed(2)}%
); })