import { useMutation, useQuery } from "@tanstack/react-query"; import { DiscoverCalendar, type DiscoverItem, DiscoverList, DiscoverMatchResult } from "@umt/contracts"; import { api } from "~/lib/api.ts"; import { getParsed, parseOrThrow } from "./library.ts"; // 发现:bgm.tv 每日放送、豆瓣热门(服务端缓存 1 小时);点条目时匹配 TMDB 作品。 export const discoverKeys = { calendar: ["discover", "calendar"] as const, hot: (kind: "movie" | "tv") => ["discover", "douban-hot", kind] as const, }; export function useBangumiCalendar(enabled = true) { return useQuery({ queryKey: discoverKeys.calendar, enabled, queryFn: ({ signal }) => getParsed(DiscoverCalendar, "/discover/bangumi-calendar", {}, signal), staleTime: 30 * 60_000, }); } export function useDoubanHot(kind: "movie" | "tv", enabled = true) { return useQuery({ queryKey: discoverKeys.hot(kind), enabled, queryFn: ({ signal }) => getParsed(DiscoverList, "/discover/douban-hot", { kind }, signal), staleTime: 30 * 60_000, }); } export function useDiscoverMatch() { return useMutation({ mutationFn: async (it: DiscoverItem) => parseOrThrow( DiscoverMatchResult, await api.post("/discover/tmdb-match", { source: it.source, id: it.id, title: it.title, aliases: it.aliases, year: it.year, kind: it.kind, }), "/discover/tmdb-match", ), }); }