From 5d716a4d8ecfa760b4f7eae6eead2e5918185218 Mon Sep 17 00:00:00 2001 From: Zach Harding Date: Sun, 5 Apr 2026 16:32:44 -0400 Subject: [PATCH] added a fix for variant selection (without it cards with multiple versions would add all at form submit) --- src/db/schema.ts | 1 + src/pages/api/inventory.ts | 17 ++++++++++++----- src/pages/partials/card-modal.astro | 14 ++++++++++---- 3 files changed, 23 insertions(+), 9 deletions(-) diff --git a/src/db/schema.ts b/src/db/schema.ts index c19a5fd..7407e14 100644 --- a/src/db/schema.ts +++ b/src/db/schema.ts @@ -131,6 +131,7 @@ export const inventory = pokeSchema.table('inventory',{ catalogName: varchar({ length: 100 }), cardId: integer().notNull(), condition: varchar({ length: 255 }).notNull(), + variant: varchar({ length: 100 }).default('Normal'), quantity: integer(), purchasePrice: decimal({ precision: 10, scale: 2 }), note: varchar({ length:255 }), diff --git a/src/pages/api/inventory.ts b/src/pages/api/inventory.ts index 4a55960..4ce4901 100644 --- a/src/pages/api/inventory.ts +++ b/src/pages/api/inventory.ts @@ -2,7 +2,7 @@ import type { APIRoute } from 'astro'; import { db } from '../../db/index'; import { inventory, skus, cards } from '../../db/schema'; import { client } from '../../db/typesense'; -import { eq, and } from 'drizzle-orm'; +import { eq, and, sql } from 'drizzle-orm'; const GainLoss = (purchasePrice: any, marketPrice: any) => { if (!purchasePrice || !marketPrice) return '
N/A
'; @@ -20,6 +20,7 @@ const inventories = await db inventoryId: inventory.inventoryId, cardId: inventory.cardId, condition: inventory.condition, + variant: inventory.variant, quantity: inventory.quantity, purchasePrice: inventory.purchasePrice, note: inventory.note, @@ -35,7 +36,11 @@ const inventories = await db skus, and( eq(cards.productId, skus.productId), - eq(inventory.condition, skus.condition) + eq(inventory.condition, skus.condition), + eq( + sql`COALESCE(${inventory.variant}, 'Normal')`, + skus.variant + ) ) ) .where(and( @@ -49,7 +54,7 @@ const inventories = await db const purchasePriceDisplay = inv.purchasePrice ? `$${Number(inv.purchasePrice).toFixed(2)}` : '—'; return ` -
{ +const addToInventory = async (userId: string, cardId: number, condition: string, variant: string, purchasePrice: number, quantity: number, note: string, catalogName: string) => { const inv = await db.insert(inventory).values({ userId: userId, cardId: cardId, catalogName: catalogName, condition: condition, + variant: variant, purchasePrice: purchasePrice, quantity: quantity, note: note, @@ -147,11 +153,12 @@ export const POST: APIRoute = async ({ request, locals }) => { case 'add': const condition = formData.get('condition')?.toString() || 'Unknown'; + const variant = formData.get('variant')?.toString() || 'Normal'; const purchasePrice = Number(formData.get('purchasePrice')) || 0; const quantity = Number(formData.get('quantity')) || 1; const note = formData.get('note')?.toString() || ''; const catalogName = formData.get('catalogName')?.toString() || 'Default'; - await addToInventory(userId!, cardId, condition, purchasePrice, quantity, note, catalogName); + await addToInventory(userId!, cardId, condition, variant, purchasePrice, quantity, note, catalogName); break; case 'remove': diff --git a/src/pages/partials/card-modal.astro b/src/pages/partials/card-modal.astro index 23e13bd..b4f3437 100644 --- a/src/pages/partials/card-modal.astro +++ b/src/pages/partials/card-modal.astro @@ -181,6 +181,9 @@ for (const price of card?.prices ?? []) { } } +// ── Derive distinct variants available for this card ───────────────────── +const availableVariants = [...new Set(cardSkus.map(s => s.variant))].sort(); + const ebaySearchUrl = (card: any) => { return `https://www.ebay.com/sch/i.html?_nkw=${encodeURIComponent(card?.productUrlName)}+${encodeURIComponent(card?.set?.setUrlName)}+${encodeURIComponent(card?.number)}&LH_Sold=1&Graded=No&_dcat=183454`; }; @@ -360,13 +363,13 @@ const altSearchUrl = (card: any) => { })} {hasAccess && (