products.ts raw

   1  import productsData from './products.json';
   2  import { getDb } from './db';
   3  
   4  export interface Product {
   5    id: number;
   6    name: string;
   7    name_en: string;
   8    slug: string;
   9    description: string;
  10    description_en: string;
  11    price_cents: number;
  12    unit_size: number;
  13    unit: string;
  14    images: string;
  15    category: string;
  16    stock_count: number;
  17    harvest_year: number | null;
  18    usage: string;
  19    usage_en: string;
  20    ord: number;
  21    created_at: string;
  22  }
  23  
  24  export function seedProducts() {
  25    const db = getDb();
  26    const count = db.query('SELECT COUNT(*) as c FROM products').get() as { c: number };
  27    if (count.c > 0) return count.c;
  28    const stmt = db.prepare(
  29      `INSERT INTO products (name, name_en, slug, description, description_en, price_cents, unit_size, unit, images, category, stock_count, harvest_year, usage, usage_en, ord)
  30       VALUES ($name, $name_en, $slug, $description, $description_en, $price_cents, $unit_size, $unit, $images, $category, $stock_count, $harvest_year, $usage, $usage_en, $ord)`
  31    );
  32    productsData.forEach((p: any, i: number) => {
  33      const img = p.image || '';
  34      stmt.run({
  35        $name: p.name,
  36        $name_en: p.name_en || '',
  37        $slug: p.slug,
  38        $description: p.description || '',
  39        $description_en: p.description_en || '',
  40        $price_cents: p.price_cents,
  41        $unit_size: p.unit_size || (p.unit === 'kg' ? 1000 : 100),
  42        $unit: 'g',
  43        $images: img ? JSON.stringify([img]) : '[]',
  44        $category: p.category || 'bilki',
  45        $stock_count: p.in_stock !== undefined ? p.in_stock : 1,
  46        $harvest_year: p.harvest_year || null,
  47        $usage: p.usage || '',
  48        $usage_en: p.usage_en || '',
  49        $ord: i,
  50      });
  51    });
  52    return (productsData as any[]).length;
  53  }
  54  
  55  export function getAllProducts(): Product[] {
  56    return getDb().query('SELECT * FROM products ORDER BY ord, id').all() as Product[];
  57  }
  58  
  59  export function getProductBySlug(slug: string): Product | null {
  60    return (getDb().query('SELECT * FROM products WHERE slug = ?').get(slug) as Product) || null;
  61  }
  62  
  63  export function getProductsByCategory(category: string): Product[] {
  64    return getDb().query('SELECT * FROM products WHERE category = ? ORDER BY id').all(category) as Product[];
  65  }
  66  
  67  export function getCategories(): { category: string; count: number }[] {
  68    return getDb().query('SELECT category, COUNT(*) as count FROM products GROUP BY category ORDER BY category').all() as { category: string; count: number }[];
  69  }
  70  
  71  export function firstImage(images: string): string {
  72    try {
  73      const arr = JSON.parse(images);
  74      return arr?.[0] || '/images/logo.png';
  75    } catch { return images || '/images/logo.png'; }
  76  }
  77  
  78  export function parseImages(images: string): string[] {
  79    try { return JSON.parse(images); } catch { return []; }
  80  }
  81