MongoDB ile TV dizileri için CRUD işlemleri eklendi

This commit is contained in:
2025-12-12 13:59:15 +03:00
parent 15611b1dc7
commit 609f522a9c
2 changed files with 307 additions and 163 deletions

View File

@@ -0,0 +1,74 @@
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 });
}