cvsa/packages/crawler/db/snapshot.ts
2025-05-05 01:53:33 +08:00

47 lines
1.3 KiB
TypeScript

import { LatestSnapshotType } from "@core/db/schema";
import { SnapshotNumber } from "mq/task/getVideoStats.ts";
import type { Psql } from "global.d.ts";
export async function getVideosNearMilestone(sql: Psql) {
const queryResult = await sql<LatestSnapshotType[]>`
SELECT ls.*
FROM latest_video_snapshot ls
RIGHT JOIN songs ON songs.aid = ls.aid
WHERE
(views >= 50000 AND views < 100000) OR
(views >= 900000 AND views < 1000000) OR
(views >= 9900000 AND views < 10000000)
UNION
SELECT ls.*
FROM latest_video_snapshot ls
WHERE
(views >= 90000 AND views < 100000) OR
(views >= 900000 AND views < 1000000) OR
(views >= 9900000 AND views < 10000000)
`;
return queryResult.map((row) => {
return {
...row,
aid: Number(row.aid),
};
});
}
export async function getLatestVideoSnapshot(sql: Psql, aid: number): Promise<null | SnapshotNumber> {
const queryResult = await sql<LatestSnapshotType[]>`
SELECT *
FROM latest_video_snapshot
WHERE aid = ${aid}
`;
if (queryResult.length === 0) {
return null;
}
return queryResult.map((row) => {
return {
...row,
aid: Number(row.aid),
time: new Date(row.time).getTime(),
};
})[0];
}