● Zion Boggan
repos/Docket/app/api/members/route.ts
zionboggan.com ↗
35 lines · typescript
History for this file →
1
import { NextResponse, type NextRequest } from "next/server";
2
import { parsePaging, type ItemList } from "@/lib/db";
3
import { getMembers, getMemberCounts, type MemberSummary } from "@/lib/feed";
4
import type { PartyCode } from "@/lib/neutrality";
5
 
6
export const dynamic = "force-dynamic";
7
 
8
export async function GET(req: NextRequest) {
9
  const sp = req.nextUrl.searchParams;
10
  const { limit, offset } = parsePaging(sp);
11
  const party = sp.get("party")?.toUpperCase().startsWith("R")
12
    ? "R"
13
    : sp.get("party")?.toUpperCase().startsWith("D")
14
      ? "D"
15
      : sp.get("party")?.toUpperCase().startsWith("I")
16
        ? "I"
17
        : undefined;
18
 
19
  const filter = {
20
    q: sp.get("q") || undefined,
21
    state: sp.get("state") || undefined,
22
    chamber: sp.get("chamber") || undefined,
23
    party: party as PartyCode | undefined,
24
  };
25
 
26
  const items = getMembers(filter);
27
  const total = filter.q || filter.state || filter.chamber || filter.party
28
    ? items.length
29
    : getMemberCounts().total;
30
  const paged = items.slice(offset, offset + limit);
31
  const body: ItemList<MemberSummary> = { items: paged, total, limit, offset };
32
  return NextResponse.json(body, {
33
    headers: { "Cache-Control": "public, s-maxage=300, stale-while-revalidate=600" },
34
  });
35
}