import { Api, Post, Query, useContext, useInject } from "@midwayjs/hooks"; import { RedisService } from "@midwayjs/redis"; import { prisma } from "../../utils/prisma"; import { getSong } from "../../utils/netease"; export default Api( Post(), Query<{ id: string, bangumi: string }>(), async () => { const ctx = useContext(); const client = await useInject(RedisService); const { id, bangumi } = ctx.query; if (!id || !bangumi) { return { code: 0, msg: "Required id or bangumi" } } // 查重 const isExist = await prisma.aCGM.findUnique({ where: { music_id: Number(id) } }); if (isExist) { return { code: 0, msg: "this song are existed" } } let result; // 尝试使用缓存 const cached = await client.lrange(`api-next:163:${id}`, 0, 7); if (cached.length) { result = { id: Number(id), title: cached[0], artist: cached[1], album: cached[2], alias: cached[3], cover: cached[4], lyric: cached[5], sub_lyric: cached[6], link: cached[7], served: Boolean(cached[8]), cached: true }; } // 全新获取 const song = await getSong(id); if (song) { await client.rpush(`api-next:163:${id}`, song.title, song.artist, song.album, song.alias, song.cover, song.lyric, song.sub_lyric, song.link, song.served, err => { err && console.log(err); } ); await client.expire(`api-next:163:${id}`, 21600); console.log(song); result = { ...song, cached: false } } console.log(result); // 有数据支撑 if (result) { // 创建数据 await prisma.aCGM.create({ data: { title: result.title, artist: result.artist, album: result.album, alias: result.alias, bangumi, music_id: Number(id), } }); return { code: 1, msg: "Success", data: result }; } return { code: 0, msg: "Failed", data: undefined }; } );