116 lines
2.2 KiB
TypeScript
116 lines
2.2 KiB
TypeScript
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
|
|
};
|
|
}
|
|
);
|