const prisma = require("./client"); // Prisma client /** * Kategoriyi slug'a göre bul */ async function findCategoryBySlug(slug, options = {}) { const s = String(slug ?? "").trim().toLowerCase(); return prisma.category.findUnique({ where: { slug: s }, select: options.select || undefined, include: options.include || undefined, }); } /** * Kategorinin fırsatlarını al * Sayfalama ve filtreler ile fırsatları çekiyoruz */ async function listCategoryDeals({ where = {}, skip = 0, take = 10 }) { return prisma.deal.findMany({ where, skip, take, orderBy: { createdAt: "desc" }, // Yeni fırsatlar önce gelsin }); } async function getCategoryBreadcrumb(categoryId, { includeUndefined = false } = {}) { let currentId = Number(categoryId); if (!Number.isInteger(currentId)) throw new Error("categoryId must be int"); const path = []; const visited = new Set(); // Bu döngü, root kategoriye kadar gidip breadcrumb oluşturacak while (true) { if (visited.has(currentId)) break; visited.add(currentId); const cat = await prisma.category.findUnique({ where: { id: currentId }, select: { id: true, name: true, slug: true, parentId: true }, // Yalnızca gerekli alanları seçiyoruz }); if (!cat) break; // Undefined'ı istersen breadcrumb'ta göstermiyoruz if (includeUndefined || cat.id !== 0) { path.push({ id: cat.id, name: cat.name, slug: cat.slug }); } if (cat.parentId === null || cat.parentId === undefined) break; currentId = cat.parentId; // Bir üst kategoriye geçiyoruz } return path.reverse(); // Kökten başlayarak, kategoriyi en son eklediğimiz için tersine çeviriyoruz } module.exports = { getCategoryBreadcrumb, findCategoryBySlug, listCategoryDeals, };