140 lines
6.8 KiB
Diff
140 lines
6.8 KiB
Diff
--- seed.cjs 2026-06-23
|
|
+++ seed.cjs.new 2026-06-23
|
|
@@ -12,7 +12,7 @@
|
|
const adapter = new PrismaPg(pool);
|
|
const prisma = new PrismaClient({ adapter });
|
|
|
|
-const scentNames = [
|
|
+const brandNames = [
|
|
'ตะไคร้', 'ลาเวนเดอร์', 'วานิลลา', 'ซากุระ', 'มะลิ', 'ยูคาลิปตัส', 'เฟรชลาเวนเดอร์',
|
|
'เปเปอร์มิ้น', 'โอเชี่ยน', 'เซเว่นซี', 'ดอกแก้ว', 'ดอกโมก', 'ลีลาวดี', 'ส้ม', 'มะนาว',
|
|
'แคนตาลูป', 'แอปเปิ้ลแดง', 'แอปเปิ้ลเขียว', 'ดอกลิลลี่', 'โรสเมรี่', 'อัญชัน',
|
|
@@ -65,7 +65,7 @@
|
|
|
|
// Auto-create with default template if not exists
|
|
if (!fs.existsSync(descPath)) {
|
|
- const defaultDesc = `ผลิตภัณฑ์ ${config.name} กลิ่น {{scent}} มอบประสบการณ์ความหอมที่ผ่อนคลายและสดชื่น ช่วยให้บรรยากาศในห้องของคุณน่าอยู่มากยิ่งขึ้น`;
|
|
+ const defaultDesc = `ผลิตภัณฑ์ ${config.name} กลิ่น {{brand}} มอบประสบการณ์ความหอมที่ผ่อนคลายและสดชื่น ช่วยให้บรรยากาศในห้องของคุณน่าอยู่มากยิ่งขึ้น`;
|
|
fs.writeFileSync(descPath, defaultDesc, 'utf8');
|
|
}
|
|
|
|
@@ -78,7 +78,7 @@
|
|
}
|
|
const detailPath = path.join(detailsDir, `${safeName}.txt`);
|
|
if (!fs.existsSync(detailPath)) {
|
|
- const defaultDetail = `รายละเอียดฉบับเต็มของ ${config.name} กลิ่น {{scent}}\n- ส่วนประกอบนำเข้าคุณภาพสูง\n- กระจายความหอมได้ยาวนานในห้อง\n- ปลอดภัยต่อสุขภาพและเหมาะสำหรับทุกคนในครอบครัว`;
|
|
+ const defaultDetail = `รายละเอียดฉบับเต็มของ ${config.name} กลิ่น {{brand}}\n- ส่วนประกอบนำเข้าคุณภาพสูง\n- กระจายความหอมได้ยาวนานในห้อง\n- ปลอดภัยต่อสุขภาพและเหมาะสำหรับทุกคนในครอบครัว`;
|
|
fs.writeFileSync(detailPath, defaultDetail, 'utf8');
|
|
}
|
|
categoryConfigs[config.name] = categoryConfigs[config.name] || {};
|
|
@@ -122,17 +122,17 @@
|
|
process.stdout.write('✅ Seeded Core Menus.\n');
|
|
|
|
- // 1. Seed Scents & Categories
|
|
- const scents = [];
|
|
- for (const name of scentNames) {
|
|
- const s = await prisma.scent.upsert({
|
|
+ // 1. Seed Brands & Categories
|
|
+ const brands = [];
|
|
+ for (const name of brandNames) {
|
|
+ const s = await prisma.productBrand.upsert({
|
|
where: { name },
|
|
update: {},
|
|
create: { name }
|
|
});
|
|
- scents.push(s);
|
|
+ brands.push(s);
|
|
}
|
|
- process.stdout.write(`✅ Seeded ${scents.length} Scents.\n`);
|
|
+ process.stdout.write(`✅ Seeded ${brands.length} Brands.\n`);
|
|
|
|
const categories = [];
|
|
for (const config of categoryConfigs) {
|
|
@@ -145,43 +145,46 @@
|
|
}
|
|
process.stdout.write(`✅ Seeded ${categories.length} Categories.\n`);
|
|
|
|
- // 2. Cross Scents x Categories to create Products
|
|
+ // 2. Cross Brands x Categories to create Products
|
|
process.stdout.write('📦 Generating Products and Variants...\n');
|
|
let productCount = 0;
|
|
let variantCount = 0;
|
|
|
|
- for (const scent of scents) {
|
|
+ for (const brand of brands) {
|
|
for (const category of categories) {
|
|
- const productName = `${scent.name} ${category.name}`;
|
|
+ const productName = `${brand.name} ${category.name}`;
|
|
|
|
- // Get category description template and replace {{scent}}
|
|
- let productDescription = categoryDescriptions[category.name] || `Product ${scent.name} in category ${category.name}`;
|
|
- productDescription = productDescription.replace(/{{scent}}/g, scent.name);
|
|
+ // Get category description template and replace {{brand}}
|
|
+ let productDescription = categoryDescriptions[category.name] || `Product ${brand.name} in category ${category.name}`;
|
|
+ productDescription = productDescription.replace(/{{brand}}/g, brand.name);
|
|
+ // fallback for old template files that might still have {{scent}}
|
|
+ productDescription = productDescription.replace(/{{scent}}/g, brand.name);
|
|
|
|
let productDetails = category.detailsTemplate || '';
|
|
- productDetails = productDetails.replace(/{{scent}}/g, scent.name);
|
|
+ productDetails = productDetails.replace(/{{brand}}/g, brand.name);
|
|
+ productDetails = productDetails.replace(/{{scent}}/g, brand.name);
|
|
|
|
- // Upsert Product
|
|
- const product = await prisma.product.upsert({
|
|
- where: {
|
|
- scentId_categoryId: {
|
|
- scentId: scent.id,
|
|
- categoryId: category.id
|
|
- }
|
|
- },
|
|
- update: {
|
|
- name: productName,
|
|
- description: productDescription,
|
|
- details: productDetails
|
|
- },
|
|
- create: {
|
|
- name: productName,
|
|
- scentId: scent.id,
|
|
- categoryId: category.id,
|
|
- description: productDescription,
|
|
- details: productDetails
|
|
- }
|
|
- });
|
|
+ // Upsert Product manually since we don't have a unique constraint on brandId + categoryId
|
|
+ let product = await prisma.product.findFirst({
|
|
+ where: { brandId: brand.id, categoryId: category.id }
|
|
+ });
|
|
+ if (product) {
|
|
+ product = await prisma.product.update({
|
|
+ where: { id: product.id },
|
|
+ data: {
|
|
+ name: productName,
|
|
+ description: productDescription,
|
|
+ details: productDetails
|
|
+ }
|
|
+ });
|
|
+ } else {
|
|
+ product = await prisma.product.create({
|
|
+ data: {
|
|
+ name: productName,
|
|
+ brandId: brand.id,
|
|
+ categoryId: category.id,
|
|
+ description: productDescription,
|
|
+ details: productDetails
|
|
+ }
|
|
+ });
|
|
+ }
|
|
productCount++;
|
|
|
|
// 3. Create Default Product Image
|
|
@@ -235,7 +238,7 @@
|
|
|
|
process.stdout.write(`\n✨ Seeding Complete!\n`);
|
|
process.stdout.write(`📊 Summary:\n`);
|
|
- process.stdout.write(` - Scents: ${scents.length}\n`);
|
|
+ process.stdout.write(` - Brands: ${brands.length}\n`);
|
|
process.stdout.write(` - Categories: ${categories.length}\n`);
|
|
process.stdout.write(` - Products: ${productCount}\n`);
|
|
process.stdout.write(` - Variants: ${variantCount}\n`);
|