HotTRDealsBackend/services/category.service.js
2026-01-25 17:50:56 +00:00

70 lines
2.3 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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