70 lines
2.3 KiB
JavaScript
70 lines
2.3 KiB
JavaScript
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,
|
||
};
|