Files
eh-downloader/routes/api/gallery/meta/[gids].ts
2024-10-03 14:28:22 +08:00

42 lines
1.3 KiB
TypeScript

import { Handlers } from "$fresh/server.ts";
import { get_task_manager } from "../../../../server.ts";
import {
gen_data,
gen_error,
JSONResult,
return_data,
return_error,
} from "../../../../server/utils.ts";
import { GMeta, User, UserPermission } from "../../../../db.ts";
import { isNumNaN, parseBigInt } from "../../../../utils.ts";
export const handler: Handlers = {
GET(_req, ctx) {
const u = <User | undefined> ctx.state.user;
if (
u && !u.is_admin &&
!(Number(u.permissions) & UserPermission.ReadGallery ||
Number(u.permissions) & UserPermission.ManageTasks)
) {
return return_error(403, "Permission denied.");
}
const gid = decodeURIComponent(ctx.params.gids);
const gids = new Set(
gid.split(",").map((v) => parseBigInt(v)).filter((v) =>
!isNumNaN(v)
).map((v) => BigInt(v)),
);
const m = get_task_manager();
const re: Record<string, JSONResult<GMeta>> = {};
for (const gid of gids) {
const meta = m.db.get_gmeta_by_gid(gid);
if (meta) {
re[gid.toString()] = gen_data(meta);
} else {
re[gid.toString()] = gen_error(404, "Not found");
}
}
return return_data(re);
},
};