Browse Source

feat(media): add me media assets query parser and tests

Made-with: Cursor
tags/邮箱功能前置
npmrun 3 weeks ago
parent
commit
8b1b8d73b1
  1. 22
      server/utils/me-media-assets-query.test.ts
  2. 26
      server/utils/me-media-assets-query.ts

22
server/utils/me-media-assets-query.test.ts

@ -0,0 +1,22 @@
import { describe, expect, test } from "bun:test";
import { parseMeMediaAssetsQuery } from "./me-media-assets-query";
describe("parseMeMediaAssetsQuery", () => {
test("defaults: {} -> { page: 1, pageSize: 20 }", () => {
expect(parseMeMediaAssetsQuery({})).toEqual({ page: 1, pageSize: 20 });
});
test("pageSize 10 and 50 are accepted", () => {
expect(parseMeMediaAssetsQuery({ pageSize: "10" })).toEqual({ page: 1, pageSize: 10 });
expect(parseMeMediaAssetsQuery({ pageSize: "50" })).toEqual({ page: 1, pageSize: 50 });
});
test("pageSize 15 throws with statusCode 400", () => {
try {
parseMeMediaAssetsQuery({ pageSize: "15" });
expect.unreachable();
} catch (e: unknown) {
expect(e).toMatchObject({ statusCode: 400 });
}
});
});

26
server/utils/me-media-assets-query.ts

@ -0,0 +1,26 @@
import { createError } from "h3";
function parsePositiveInt(raw: string | undefined, fallback: number, label: string): number {
if (raw === undefined || raw === "") {
return fallback;
}
const n = Number(raw);
if (!Number.isInteger(n) || n < 1) {
throw createError({ statusCode: 400, statusMessage: `${label} 须为正整数` });
}
return n;
}
const ALLOWED_PAGE_SIZES = new Set([10, 20, 50]);
export function parseMeMediaAssetsQuery(q: { page?: string; pageSize?: string }): {
page: number;
pageSize: number;
} {
const page = parsePositiveInt(q.page, 1, "page");
const pageSizeRaw = parsePositiveInt(q.pageSize, 20, "pageSize");
if (!ALLOWED_PAGE_SIZES.has(pageSizeRaw)) {
throw createError({ statusCode: 400, statusMessage: "pageSize 须为 10、20 或 50" });
}
return { page, pageSize: pageSizeRaw };
}
Loading…
Cancel
Save