From f03ef878932f2ea2e9357c270de167bd1468409d Mon Sep 17 00:00:00 2001 From: janiceelamm Date: Fri, 21 Nov 2025 14:32:02 -0500 Subject: [PATCH] implement filter-general function --- src/app/api/filter-general/route.ts | 24 +++++++++++++++ src/lib/api/filter_general.ts | 45 +++++++++++++++++++++++++++++ 2 files changed, 69 insertions(+) create mode 100644 src/app/api/filter-general/route.ts create mode 100644 src/lib/api/filter_general.ts diff --git a/src/app/api/filter-general/route.ts b/src/app/api/filter-general/route.ts new file mode 100644 index 0000000..807dc9f --- /dev/null +++ b/src/app/api/filter-general/route.ts @@ -0,0 +1,24 @@ +import { filter_general } from "@/lib/api/filter_general"; + +export async function GET(request: Request) { + const { searchParams } = new URL(request.url); + + const op = searchParams.get("op"); + const column = searchParams.get("column"); + const values = searchParams.getAll("values"); + + if (!op || !column || values.length == 0) { + return Response.json( + { data: null, error: "Missing op, column, or values." }, + { status: 400 } + ); + } + + const result = await filter_general(op, column, values); + + if (result.error) { + return Response.json(result, { status: 400 }); + } + + return Response.json(result, { status: 200 }); +} diff --git a/src/lib/api/filter_general.ts b/src/lib/api/filter_general.ts new file mode 100644 index 0000000..c745cb2 --- /dev/null +++ b/src/lib/api/filter_general.ts @@ -0,0 +1,45 @@ +import { createClient } from "../client/supabase/server"; + +export async function filter_general( + op: string, + column: string, + values: string[] +) { + const valid_columns = [ + "name_org", + "pseudonym", + "pronouns", + "email", + "phone", + "position", + "opt_in_communication", + ]; + + if (!valid_columns.includes(column)) { + return { data: null, error: "Invalid column name" }; + } + + const client = await createClient(); + + if (values.length == 0) { + return { data: null, error: "No values provided." }; + } + + if (op == "AND") { + const uniqueValues = [...new Set(values)]; + + if (uniqueValues.length > 1) { + return { data: [], error: null }; // Return empty result if there are multiple unique values + } + + const value = uniqueValues[0]; + + const result = await client.from("Volunteers").select().eq(column, value); + return result; + } + if (op == "OR") { + const result = await client.from("Volunteers").select().in(column, values); + return result; + } + return { data: null, error: "Invalid operation." }; +}