Revert "Merge pull request 'ui-update' (#1) from ui-update into main"

This reverts commit c9135c617b, reversing
changes made to 0f181833e5.
This commit is contained in:
2025-12-14 13:30:26 +03:00
parent c9135c617b
commit 5dd87c14b8
14 changed files with 317 additions and 933 deletions

View File

@@ -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;
}

View File

@@ -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 };

View File

@@ -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",

File diff suppressed because it is too large Load Diff