const categoryDb = require("../db/category.db"); // DB işlemleri için category.db.js'i import ediyoruz const dealDb = require("../db/deal.db"); /** * Kategoriyi slug'a göre bul * Bu fonksiyon, verilen slug'a sahip kategori bilgilerini döndürür */ async function findCategoryBySlug(slug) { try { // Kategori bilgisini slug'a göre buluyoruz const category = await categoryDb.findCategoryBySlug(slug, { include: { children: true, // Alt kategorileri de dahil edebiliriz deals: true, // Kategorinin deals ilişkisini alıyoruz }, }); if (!category) { throw new Error("Kategori bulunamadı"); } // Kategori breadcrumb'ını alıyoruz const breadcrumb = await categoryDb.getCategoryBreadcrumb(category.id); return { category, breadcrumb }; // Kategori ve breadcrumb'ı döndürüyoruz } catch (err) { throw new Error(`Kategori bulma hatası: ${err.message}`); } } async function getDealsByCategoryId(categoryId, page = 1, limit = 10, filters = {}) { try { // Sayfalama ve filtreleme için gerekli ayarlamaları yapıyoruz const take = Math.min(Math.max(Number(limit) || 10, 1), 100); // Limit ve sayfa sayısını hesaplıyoruz const skip = (Math.max(Number(page) || 1, 1) - 1) * take; // Sayfa başlangıcı // Kategorinin fırsatlarını almak için veritabanında sorgu yapıyoruz const where = { categoryId: categoryId, ...(filters.q && { OR: [ { title: { contains: filters.q, mode: 'insensitive' } }, { description: { contains: filters.q, mode: 'insensitive' } }, ], }), ...(filters.status && { status: filters.status }), ...(filters.price && { price: { gte: filters.price } }), // Fiyat filtresi // Diğer filtreler de buraya eklenebilir }; // `getDealCards` fonksiyonunu çağırıyoruz ve sayfalama, filtreleme işlemlerini geçiyoruz const deals = await dealDb.getDealCards({ where, skip, take, // Sayfalama işlemi için take parametresini gönderiyoruz }); return deals; // Fırsatları döndürüyoruz } catch (err) { throw new Error(`Kategoriye ait fırsatlar alınırken hata: ${err.message}`); } } module.exports = { findCategoryBySlug, getDealsByCategoryId, };