75 lines
2.0 KiB
JavaScript
75 lines
2.0 KiB
JavaScript
import { connectMongo } from "./db.js";
|
|
|
|
const COLLECTION = "tv_data";
|
|
|
|
async function getCollection() {
|
|
const { db } = await connectMongo();
|
|
const col = db.collection(COLLECTION);
|
|
await col.createIndex({ rootFolder: 1 });
|
|
await col.createIndex({ tvdbId: 1 });
|
|
await col.createIndex({ updatedAt: -1 });
|
|
return col;
|
|
}
|
|
|
|
function buildDocument(key, rootFolder, seriesData) {
|
|
const tvdbId = seriesData?.id ?? seriesData?.tvdbId ?? null;
|
|
return {
|
|
_id: key,
|
|
key,
|
|
rootFolder,
|
|
tvdbId,
|
|
name: seriesData?.name || null,
|
|
data: seriesData || {},
|
|
updatedAt: Date.now()
|
|
};
|
|
}
|
|
|
|
export async function upsertTvSeries(key, rootFolder, seriesData) {
|
|
const col = await getCollection();
|
|
const doc = buildDocument(key, rootFolder, seriesData);
|
|
await col.updateOne({ _id: key }, { $set: doc }, { upsert: true });
|
|
return doc.data;
|
|
}
|
|
|
|
export async function getTvSeriesByKey(key) {
|
|
const col = await getCollection();
|
|
const doc = await col.findOne({ _id: key });
|
|
return doc?.data || null;
|
|
}
|
|
|
|
export async function getTvSeriesByRoot(rootFolder) {
|
|
const col = await getCollection();
|
|
const docs = await col.find({ rootFolder }).toArray();
|
|
return docs.map((doc) => ({
|
|
key: doc.key,
|
|
rootFolder: doc.rootFolder,
|
|
data: doc.data
|
|
}));
|
|
}
|
|
|
|
export async function listAllTvSeries() {
|
|
const col = await getCollection();
|
|
const docs = await col.find({}).toArray();
|
|
return docs.map((doc) => ({
|
|
key: doc.key,
|
|
rootFolder: doc.rootFolder,
|
|
data: doc.data
|
|
}));
|
|
}
|
|
|
|
export async function listTvSeriesKeysForRoot(rootFolder) {
|
|
const col = await getCollection();
|
|
const docs = await col.find({ rootFolder }).project({ key: 1 }).toArray();
|
|
return docs.map((d) => d.key).filter(Boolean);
|
|
}
|
|
|
|
export async function removeTvSeriesByKey(key) {
|
|
const col = await getCollection();
|
|
await col.deleteOne({ _id: key });
|
|
}
|
|
|
|
export async function removeTvSeriesByRoot(rootFolder) {
|
|
const col = await getCollection();
|
|
await col.deleteMany({ rootFolder });
|
|
}
|