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