cvsa/packages/crawler/db/songs.ts
alikia2x 1a20d5afe0
update: schedule archive snapshots to next Saturday midnight
fix: no expire when acquiring lock for classifyVideos
ref: format
2025-05-31 12:13:56 +08:00

40 lines
1.0 KiB
TypeScript

import type { Psql } from "@core/db/psql.d.ts";
import { parseTimestampFromPsql } from "utils/formatTimestampToPostgre.ts";
export async function getNotCollectedSongs(sql: Psql) {
const rows = await sql<{ aid: number }[]>`
SELECT lr.aid
FROM labelling_result lr
WHERE lr.label != 0
AND NOT EXISTS (
SELECT 1
FROM songs s
WHERE s.aid = lr.aid
);
`;
return rows.map((row) => row.aid);
}
export async function aidExistsInSongs(sql: Psql, aid: number) {
const rows = await sql<{ exists: boolean }[]>`
SELECT EXISTS (
SELECT 1
FROM songs
WHERE aid = ${aid}
);
`;
return rows[0].exists;
}
export async function getSongsPublihsedAt(sql: Psql, aid: number) {
const rows = await sql<{ published_at: string }[]>`
SELECT published_at
FROM songs
WHERE aid = ${aid};
`;
if (rows.length === 0) {
return null;
}
return parseTimestampFromPsql(rows[0].published_at);
}