feat(housekeeping): deliver economy vertical
This commit is contained in:
1 parent
1ec05cda39
commit
9c4b973faf
62 files changed
+6306
-1285
No files matched your search
@@ -0,0 +1,51 @@
|
||||
import "server-only";
|
||||
|
||||
import { PERMS } from "@/lib/permission-slugs";
|
||||
import {
|
||||
anyCapability,
|
||||
type HousekeepingCapabilityContext,
|
||||
} from "../../foundation/contracts";
|
||||
import { economyQuery } from "./queries/catalog";
|
||||
import type { EconomySearchCandidate } from "./search";
|
||||
|
||||
type EconomySearchKind = "catalog-pages" | "items" | "transactions";
|
||||
|
||||
const ROUTES = {
|
||||
"catalog-pages": [
|
||||
"economy.catalog.overview",
|
||||
anyCapability(PERMS.CATALOG_VIEW),
|
||||
],
|
||||
items: ["economy.items.overview", anyCapability(PERMS.CATALOG_VIEW)],
|
||||
transactions: [
|
||||
"economy.history.transactions",
|
||||
anyCapability(PERMS.SHOP_VIEW),
|
||||
],
|
||||
} as const;
|
||||
|
||||
export async function loadEconomySearchCandidates(
|
||||
kind: EconomySearchKind,
|
||||
context: HousekeepingCapabilityContext,
|
||||
term: string,
|
||||
limit: number,
|
||||
query: Pick<typeof economyQuery, "run"> = economyQuery,
|
||||
): Promise<readonly EconomySearchCandidate[]> {
|
||||
const [routeId, capability] = ROUTES[kind];
|
||||
const result = await query.run(context, {
|
||||
routeId,
|
||||
list: { search: term, pageSize: limit, offset: 0 },
|
||||
});
|
||||
if (!result.ok) throw new Error("Economy search query unavailable");
|
||||
return result.data.items.flatMap((item) =>
|
||||
item.href
|
||||
? [
|
||||
{
|
||||
id: `${routeId}:${item.id}`,
|
||||
title: item.title,
|
||||
description: item.description ?? item.status ?? item.amount,
|
||||
href: item.href,
|
||||
capability,
|
||||
},
|
||||
]
|
||||
: [],
|
||||
);
|
||||
}
|
||||
Reference in new issue
Block a user