import { z } from "zod"; import { IdParam } from "../common.ts"; import * as instances from "../instances.ts"; import { crud, del, ep, instanceTest, R } from "./shared.ts"; export const instancesApi = { // ── 实例 ── libraryRoots: { ...crud( "/library-roots", "库根", { row: instances.LibraryRoot, create: instances.LibraryRootCreate, update: instances.LibraryRootUpdate, }, R, ), test: instanceTest("/library-roots/{id}/test", "检查库根在线(目录 + 哨兵文件)"), remove: del("/library-roots/{id}", "删除库根"), }, downloaderInstances: { ...crud( "/downloader-instances", "下载器实例", { row: instances.DownloaderInstance, create: instances.DownloaderInstanceCreate, update: instances.DownloaderInstanceUpdate, }, R, ), test: ep({ method: "post", path: "/downloader-instances/{id}/test", scope: "admin", summary: "测试下载器连接", params: IdParam, response: z.object({ ok: z.boolean(), version: z.string().nullable(), message: z.string().nullable() }), }), remove: del("/downloader-instances/{id}", "删除下载器实例"), }, mediaServerInstances: { ...crud( "/media-server-instances", "媒体服务器实例", { row: instances.MediaServerInstance, create: instances.MediaServerInstanceCreate, update: instances.MediaServerInstanceUpdate, }, R, ), test: instanceTest("/media-server-instances/{id}/test", "测试媒体服务器连接"), remove: del("/media-server-instances/{id}", "删除媒体服务器实例"), }, pathMappings: { ...crud( "/path-mappings", "路径映射", { row: instances.PathMapping, create: instances.PathMappingCreate, update: instances.PathMappingUpdate, }, R, ), verify: ep({ method: "post", path: "/path-mappings/{id}/verify", scope: "admin", summary: "校验路径映射可读写与挂载健康", params: IdParam, response: instances.PathMapping, }), remove: del("/path-mappings/{id}", "删除路径映射"), }, } as const;