Files
homaroma/apps/backend/prisma/seed.cjs.patch
T
2026-06-23 20:02:29 -04:00

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`);