diff --git a/lib/db/generated/kysely.ts b/lib/db/generated/kysely.ts index 6f300df..981d756 100644 --- a/lib/db/generated/kysely.ts +++ b/lib/db/generated/kysely.ts @@ -192,6 +192,7 @@ export interface Component { description: string; extra: string | null; flag: Generated; + is_extended_promotional: number | null; joints: number; last_on_stock: Generated; last_update: number; @@ -809,6 +810,7 @@ export interface VComponent { mfr: string | null; package: string | null; preferred: number | null; + is_extended_promotional: number | null; price: string | null; stock: number | null; subcategory: string | null; diff --git a/routes/components/list.tsx b/routes/components/list.tsx index 8d26b56..f566e66 100644 --- a/routes/components/list.tsx +++ b/routes/components/list.tsx @@ -23,6 +23,7 @@ export default withWinterSpec({ search: z.string().optional(), is_basic: z.boolean().optional(), is_preferred: z.boolean().optional(), + is_extended_promotional: z.boolean().optional(), }), jsonResponse: z.any(), } as const)(async (req, ctx) => { @@ -39,6 +40,8 @@ export default withWinterSpec({ "price", "extra", "basic", + "preferred", + "is_extended_promotional", ]) .limit(limit) .orderBy("stock", "desc") @@ -59,6 +62,10 @@ export default withWinterSpec({ query = query.where("preferred", "=", 1) } + if (req.query.is_extended_promotional) { + query = query.where("is_extended_promotional", "=", 1) + } + if (req.query.search) { const search = req.query.search // TypeScript now knows this is defined within this block const searchPattern = `%${search}%` @@ -82,6 +89,7 @@ export default withWinterSpec({ package: c.package, is_basic: Boolean(c.basic), is_preferred: Boolean(c.preferred), + is_extended_promotional: Boolean(c.is_extended_promotional), description: c.description, stock: c.stock, price: extractSmallQuantityPrice(c.price), @@ -126,6 +134,17 @@ export default withWinterSpec({ /> +
+ +
diff --git a/tests/routes/components/list.test.ts b/tests/routes/components/list1.test.ts similarity index 76% rename from tests/routes/components/list.test.ts rename to tests/routes/components/list1.test.ts index 061f1c3..f9b6e29 100644 --- a/tests/routes/components/list.test.ts +++ b/tests/routes/components/list1.test.ts @@ -6,4 +6,8 @@ test("GET /components/list with json param returns component data", async () => const res = await axios.get("/components/list?json=true") expect(res.data).toHaveProperty("components") expect(Array.isArray(res.data.components)).toBe(true) + + if (res.data.components.length > 0) { + expect(res.data.components[0]).toHaveProperty("is_extended_promotional") + } }) diff --git a/tests/routes/components/list2.test.ts b/tests/routes/components/list2.test.ts new file mode 100644 index 0000000..590280c --- /dev/null +++ b/tests/routes/components/list2.test.ts @@ -0,0 +1,12 @@ +import { test, expect } from "bun:test" +import { getTestServer } from "tests/fixtures/get-test-server" + +test("GET /components/list supports is_extended_promotional filter", async () => { + const { axios } = await getTestServer() + const res = await axios.get( + "/components/list?json=true&is_extended_promotional=true", + ) + + expect(res.data).toHaveProperty("components") + expect(Array.isArray(res.data.components)).toBe(true) +})