diff --git a/backend/src/admin/admin.service.ts b/backend/src/admin/admin.service.ts index 069d77a..b583eef 100644 --- a/backend/src/admin/admin.service.ts +++ b/backend/src/admin/admin.service.ts @@ -101,7 +101,7 @@ export class AdminService { const [data, total] = await Promise.all([ this.prisma.product.findMany({ where, skip, take: limit, orderBy: { createdAt: 'desc' }, - include: { category: true } + include: { category: true, symptoms: true } }), this.prisma.product.count({ where }) ]); @@ -114,7 +114,7 @@ export class AdminService { } async createProduct(data: any) { - return this.prisma.product.create({ + const product = await this.prisma.product.create({ data: { artNo: data.artNo, nameFa: data.nameFa, @@ -138,10 +138,21 @@ export class AdminService { slug: data.slug || data.artNo, } }); + + if (data.symptoms && Array.isArray(data.symptoms)) { + await this.prisma.productSymptom.createMany({ + data: data.symptoms.map((s: string) => ({ + productId: product.id, + symptom: s.trim() + })).filter((s: any) => s.symptom.length > 0) + }); + } + + return product; } async updateProduct(id: string, data: any) { - return this.prisma.product.update({ + const product = await this.prisma.product.update({ where: { id }, data: { artNo: data.artNo, @@ -166,6 +177,20 @@ export class AdminService { slug: data.slug || data.artNo, } }); + + if (data.symptoms !== undefined && Array.isArray(data.symptoms)) { + await this.prisma.productSymptom.deleteMany({ where: { productId: id } }); + if (data.symptoms.length > 0) { + await this.prisma.productSymptom.createMany({ + data: data.symptoms.map((s: string) => ({ + productId: id, + symptom: s.trim() + })).filter((s: any) => s.symptom.length > 0) + }); + } + } + + return product; } async deleteProduct(id: string) { diff --git a/frontend/admin-panel/src/pages/Products.tsx b/frontend/admin-panel/src/pages/Products.tsx index c29e066..4304317 100644 --- a/frontend/admin-panel/src/pages/Products.tsx +++ b/frontend/admin-panel/src/pages/Products.tsx @@ -43,7 +43,8 @@ export default function Products() { metaDescription: '', keywords: '', canonicalUrl: '', - slug: '' + slug: '', + symptoms: [] as string[] }); const fetchData = async () => { @@ -104,14 +105,16 @@ export default function Products() { metaDescription: product.metaDescription || '', keywords: product.keywords || '', canonicalUrl: product.canonicalUrl || '', - slug: product.slug || '' + slug: product.slug || '', + symptoms: product.symptoms ? product.symptoms.map((s: any) => s.symptom) : [] }); } else { setEditingProduct(null); setFormData({ artNo: '', nameFa: '', nameEn: '', scientificTagline: '', description: '', shortDescription: '', categoryId: '', priceValue: 0, priceDisplay: '', unit: '', packageSize: 0, dosageLogic: '', suitableFor: 'سگ و گربه', - imageUrl: '', metaTitle: '', metaDescription: '', keywords: '', canonicalUrl: '', slug: '' + imageUrl: '', metaTitle: '', metaDescription: '', keywords: '', canonicalUrl: '', slug: '', + symptoms: [] }); } setActiveTab('general'); @@ -335,12 +338,52 @@ export default function Products() { -
پس از نوشتن هر علامت درمانی (مثلاً «درد مفاصل»)، کلید Enter را فشار دهید.
+