Revert "Merge pull request 'ui-update' (#1) from ui-update into main"
This reverts commitc9135c617b, reversing changes made to0f181833e5.
This commit is contained in:
@@ -1,39 +0,0 @@
|
||||
import { MongoClient } from "mongodb";
|
||||
|
||||
const MONGO_HOST = process.env.MONGO_HOST || "mongo";
|
||||
const MONGO_PORT = process.env.MONGO_PORT || "27017";
|
||||
const MONGO_DB = process.env.MONGO_DB || "dupe";
|
||||
const MONGO_USER = process.env.MONGO_USER || "dupe";
|
||||
const MONGO_PASS = process.env.MONGO_PASS || "dupe";
|
||||
const MONGO_AUTH_SOURCE = process.env.MONGO_AUTH_SOURCE || "admin";
|
||||
|
||||
const DEFAULT_URI = `mongodb://${encodeURIComponent(MONGO_USER)}:${encodeURIComponent(
|
||||
MONGO_PASS
|
||||
)}@${MONGO_HOST}:${MONGO_PORT}/${encodeURIComponent(MONGO_DB)}?authSource=${encodeURIComponent(
|
||||
MONGO_AUTH_SOURCE
|
||||
)}`;
|
||||
|
||||
const MONGO_URI = process.env.MONGO_URI || DEFAULT_URI;
|
||||
|
||||
let client = null;
|
||||
let db = null;
|
||||
|
||||
export async function connectMongo() {
|
||||
if (client && db) return { client, db };
|
||||
|
||||
const mongoClient = new MongoClient(MONGO_URI, {
|
||||
maxPoolSize: 10,
|
||||
serverSelectionTimeoutMS: 5000
|
||||
});
|
||||
|
||||
await mongoClient.connect();
|
||||
client = mongoClient;
|
||||
db = mongoClient.db(MONGO_DB);
|
||||
|
||||
console.log(`📦 MongoDB bağlantısı hazır (db: ${db.databaseName})`);
|
||||
return { client, db };
|
||||
}
|
||||
|
||||
export function getDb() {
|
||||
return db;
|
||||
}
|
||||
@@ -1,154 +0,0 @@
|
||||
import { connectMongo } from "./db.js";
|
||||
|
||||
const COLLECTION = "tv_data";
|
||||
const TVDB_KEY_PREFIX = "tvdb-";
|
||||
|
||||
function canonicalTvdbKey(tvdbId) {
|
||||
if (tvdbId === null || tvdbId === undefined) return null;
|
||||
return `${TVDB_KEY_PREFIX}${tvdbId}`;
|
||||
}
|
||||
|
||||
async function getCollection() {
|
||||
const { db } = await connectMongo();
|
||||
const col = db.collection(COLLECTION);
|
||||
await col.createIndex({ rootFolder: 1 });
|
||||
await col.createIndex({ rootFolders: 1 });
|
||||
await col.createIndex({ tvdbId: 1 }, { sparse: true });
|
||||
await col.createIndex({ updatedAt: -1 });
|
||||
return col;
|
||||
}
|
||||
|
||||
function buildDocument(key, rootFolder, seriesData) {
|
||||
const tvdbId = seriesData?.id ?? seriesData?.tvdbId ?? null;
|
||||
return {
|
||||
_id: key,
|
||||
key,
|
||||
rootFolder,
|
||||
rootFolders: rootFolder ? [rootFolder] : [],
|
||||
tvdbId,
|
||||
name: seriesData?.name || null,
|
||||
data: seriesData || {},
|
||||
updatedAt: Date.now()
|
||||
};
|
||||
}
|
||||
|
||||
export async function upsertTvSeries(key, rootFolder, seriesData) {
|
||||
const col = await getCollection();
|
||||
const tvdbId = seriesData?.id ?? seriesData?.tvdbId ?? null;
|
||||
const canonicalKey = tvdbId !== null ? canonicalTvdbKey(tvdbId) : null;
|
||||
const targetKey = canonicalKey || key;
|
||||
|
||||
const existingByTvdb =
|
||||
tvdbId !== null ? await col.findOne({ tvdbId }) : null;
|
||||
const existing =
|
||||
existingByTvdb ||
|
||||
(await col.findOne({ _id: targetKey })) ||
|
||||
(await col.findOne({ _id: key }));
|
||||
|
||||
const desiredKey = canonicalKey || existingByTvdb?._id || targetKey;
|
||||
const doc = buildDocument(
|
||||
desiredKey,
|
||||
rootFolder || existing?.rootFolder,
|
||||
seriesData
|
||||
);
|
||||
|
||||
const rootSet = new Set(existing?.rootFolders || []);
|
||||
if (existing?.rootFolder) rootSet.add(existing.rootFolder);
|
||||
if (rootFolder) rootSet.add(rootFolder);
|
||||
doc.rootFolders = Array.from(rootSet);
|
||||
doc.rootFolder = doc.rootFolder || doc.rootFolders[0] || null;
|
||||
doc.tvdbId = tvdbId;
|
||||
doc.key = canonicalKey || doc._id;
|
||||
doc._id = doc.key;
|
||||
|
||||
await col.updateOne({ _id: doc._id }, { $set: doc }, { upsert: true });
|
||||
|
||||
// Eğer eski bir anahtar farklıysa temizle
|
||||
if (existing && existing._id !== doc._id) {
|
||||
await col.deleteOne({ _id: existing._id }).catch(() => {});
|
||||
}
|
||||
|
||||
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({
|
||||
$or: [{ rootFolder }, { rootFolders: rootFolder }]
|
||||
})
|
||||
.toArray();
|
||||
return docs.map((doc) => ({
|
||||
key: doc.key,
|
||||
rootFolder: doc.rootFolder,
|
||||
rootFolders: doc.rootFolders || [],
|
||||
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,
|
||||
rootFolders: doc.rootFolders || [],
|
||||
data: doc.data
|
||||
}));
|
||||
}
|
||||
|
||||
export async function listTvSeriesKeysForRoot(rootFolder) {
|
||||
const col = await getCollection();
|
||||
const docs = await col
|
||||
.find({
|
||||
$or: [{ rootFolder }, { rootFolders: 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();
|
||||
const cursor = col.find({
|
||||
$or: [{ rootFolder }, { rootFolders: rootFolder }]
|
||||
});
|
||||
|
||||
// Silmek yerine root'u listeden çıkar; boş kalırsa kaydı kaldır
|
||||
// Not: cursor.forEach async callback desteklemez, manual loop
|
||||
while (await cursor.hasNext()) {
|
||||
const doc = await cursor.next();
|
||||
const roots = new Set(doc.rootFolders || []);
|
||||
if (doc.rootFolder) roots.add(doc.rootFolder);
|
||||
roots.delete(rootFolder);
|
||||
|
||||
if (roots.size === 0) {
|
||||
await col.deleteOne({ _id: doc._id });
|
||||
} else {
|
||||
const nextRootFolder = Array.from(roots)[0];
|
||||
await col.updateOne(
|
||||
{ _id: doc._id },
|
||||
{
|
||||
$set: {
|
||||
rootFolder: nextRootFolder,
|
||||
rootFolders: Array.from(roots),
|
||||
updatedAt: Date.now()
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export { canonicalTvdbKey };
|
||||
@@ -8,7 +8,6 @@
|
||||
"dependencies": {
|
||||
"cors": "^2.8.5",
|
||||
"express": "^4.19.2",
|
||||
"mongodb": "^6.9.0",
|
||||
"jsonwebtoken": "^9.0.2",
|
||||
"mime-types": "^2.1.35",
|
||||
"multer": "^1.4.5-lts.1",
|
||||
|
||||
776
server/server.js
776
server/server.js
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user