Add public catalog APIs, website slots, featured slots, and int category/product IDs.
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
co-authored by
Cursor
parent
15dd3597f0
commit
835c8a0ac1
@@ -0,0 +1,130 @@
|
||||
/**
|
||||
* Add subcategories under remaining women categories + men clothes.
|
||||
* Run: npx tsx scripts/fill-category-children.ts
|
||||
*/
|
||||
import { PrismaClient } from "@prisma/client";
|
||||
|
||||
const prisma = new PrismaClient();
|
||||
|
||||
const SUBS: Record<string, Array<[string, string]>> = {
|
||||
// پالتو و کت
|
||||
cmujwdqxd0001q9g7gbkdzp90: [
|
||||
["پالتو بلند", "Long Coat"],
|
||||
["کت کوتاه", "Short Coat"],
|
||||
["پالتو فوتر", "Wool Coat"],
|
||||
],
|
||||
// پیراهن
|
||||
cmujwdqxh0003q9g7ywj3xtkg: [
|
||||
["پیراهن کوتاه", "Short Dress"],
|
||||
["پیراهن بلند", "Long Dress"],
|
||||
["پیراهن مجلسی", "Party Dress"],
|
||||
],
|
||||
// شومیز
|
||||
cmujwdqxj0005q9g7dmrujmar: [
|
||||
["شومیز رسمی", "Formal Blouse"],
|
||||
["شومیز روزانه", "Casual Blouse"],
|
||||
["شومیز آستین کوتاه", "Short Sleeve"],
|
||||
],
|
||||
// تیشرت
|
||||
cmujwdqxl0007q9g72fa9i1u6: [
|
||||
["تیشرت ساده", "Basic Tee"],
|
||||
["تیشرت طرحدار", "Printed Tee"],
|
||||
["تیشرت یقهدار", "Collar Tee"],
|
||||
],
|
||||
// دامن
|
||||
cmujwdqxm0009q9g7dygpixfl: [
|
||||
["دامن کوتاه", "Mini Skirt"],
|
||||
["دامن متوسط", "Midi Skirt"],
|
||||
["دامن بلند", "Maxi Skirt"],
|
||||
],
|
||||
// لباس مجلسی
|
||||
cmujwdqxn000bq9g769r3oaq2: [
|
||||
["شب", "Evening"],
|
||||
["عروس", "Bridal"],
|
||||
["مهمانی", "Party"],
|
||||
],
|
||||
// کت و شلوار
|
||||
cmujwdqxo000dq9g7syqycf39: [
|
||||
["رسمی", "Formal"],
|
||||
["نیمهرسمی", "Semi Formal"],
|
||||
["کت تک", "Blazer"],
|
||||
],
|
||||
// کیف
|
||||
cmujwdqxp000fq9g7pww4264v: [
|
||||
["کیف دستی", "Handbag"],
|
||||
["کیف دوشی", "Shoulder Bag"],
|
||||
["کیف پول", "Wallet"],
|
||||
],
|
||||
// عینک
|
||||
cmujwdqxq000hq9g7hsyx1c6p: [
|
||||
["آفتابی", "Sunglasses"],
|
||||
["طبی", "Optical"],
|
||||
],
|
||||
// جوراب
|
||||
cmujwdqxr000jq9g7kesb73gy: [
|
||||
["کوتاه", "Ankle"],
|
||||
["بلند", "Knee High"],
|
||||
["ورزشی", "Sport"],
|
||||
],
|
||||
};
|
||||
|
||||
const MEN_ID = "cmtrlp2zu000dqmyewzr566tk";
|
||||
const MEN_CHILDREN: Array<[string, string]> = [
|
||||
["پیراهن", "Shirt"],
|
||||
["شلوار", "Pants"],
|
||||
["کت", "Jacket"],
|
||||
["تیشرت", "T-Shirt"],
|
||||
["کت و شلوار", "Suit"],
|
||||
];
|
||||
|
||||
async function ensureChild(
|
||||
storeId: string,
|
||||
parentId: string,
|
||||
nameFa: string,
|
||||
nameEn: string,
|
||||
sortOrder: number,
|
||||
) {
|
||||
const existing = await prisma.category.findFirst({
|
||||
where: { storeId, parentId, nameFa },
|
||||
});
|
||||
if (existing) {
|
||||
return prisma.category.update({
|
||||
where: { id: existing.id },
|
||||
data: { nameEn, sortOrder },
|
||||
});
|
||||
}
|
||||
return prisma.category.create({
|
||||
data: { storeId, parentId, nameFa, nameEn, sortOrder },
|
||||
});
|
||||
}
|
||||
|
||||
async function main() {
|
||||
for (const [parentId, children] of Object.entries(SUBS)) {
|
||||
const parent = await prisma.category.findUnique({ where: { id: parentId } });
|
||||
if (!parent) {
|
||||
console.warn("skip missing", parentId);
|
||||
continue;
|
||||
}
|
||||
for (let i = 0; i < children.length; i++) {
|
||||
const [nameFa, nameEn] = children[i]!;
|
||||
await ensureChild(parent.storeId, parentId, nameFa, nameEn, i);
|
||||
}
|
||||
console.log(`${parent.nameFa}: +${children.length}`);
|
||||
}
|
||||
|
||||
const men = await prisma.category.findUnique({ where: { id: MEN_ID } });
|
||||
if (men) {
|
||||
for (let i = 0; i < MEN_CHILDREN.length; i++) {
|
||||
const [nameFa, nameEn] = MEN_CHILDREN[i]!;
|
||||
await ensureChild(men.storeId, MEN_ID, nameFa, nameEn, i);
|
||||
}
|
||||
console.log(`لباس مردانه: +${MEN_CHILDREN.length}`);
|
||||
}
|
||||
}
|
||||
|
||||
main()
|
||||
.catch((err) => {
|
||||
console.error(err);
|
||||
process.exit(1);
|
||||
})
|
||||
.finally(() => prisma.$disconnect());
|
||||
@@ -0,0 +1,113 @@
|
||||
/**
|
||||
* One-off: fill Women Clothes category tree for Mana Collection.
|
||||
* Run: npx tsx scripts/fill-women-categories.ts
|
||||
*/
|
||||
import { PrismaClient } from "@prisma/client";
|
||||
|
||||
const prisma = new PrismaClient();
|
||||
|
||||
const WOMEN_ID = "cmtrlmy1r0003qmyebijmqbqt";
|
||||
const PANTS_ID = "cmtrlo4dn0009qmye6ere4659";
|
||||
const MANTEL_ID = "cmtrln6d80005qmye97lzhc01";
|
||||
const JEANS_ID = "cmtrlonpc000bqmyexzvqd500";
|
||||
|
||||
async function ensureChild(
|
||||
storeId: string,
|
||||
parentId: string,
|
||||
nameFa: string,
|
||||
nameEn: string,
|
||||
sortOrder: number,
|
||||
) {
|
||||
const existing = await prisma.category.findFirst({
|
||||
where: { storeId, parentId, nameFa },
|
||||
});
|
||||
if (existing) {
|
||||
return prisma.category.update({
|
||||
where: { id: existing.id },
|
||||
data: { nameEn, sortOrder },
|
||||
});
|
||||
}
|
||||
return prisma.category.create({
|
||||
data: { storeId, parentId, nameFa, nameEn, sortOrder },
|
||||
});
|
||||
}
|
||||
|
||||
async function main() {
|
||||
const women = await prisma.category.findUnique({ where: { id: WOMEN_ID } });
|
||||
if (!women) throw new Error("Women category not found");
|
||||
const { storeId } = women;
|
||||
|
||||
await prisma.category.update({
|
||||
where: { id: WOMEN_ID },
|
||||
data: { nameEn: "Women Clothes", sortOrder: 0 },
|
||||
});
|
||||
|
||||
const tops: Array<{
|
||||
nameFa: string;
|
||||
nameEn: string;
|
||||
sortOrder: number;
|
||||
id?: string;
|
||||
}> = [
|
||||
{ nameFa: "شلوار", nameEn: "Pants", sortOrder: 0, id: PANTS_ID },
|
||||
{ nameFa: "مانتو", nameEn: "Mantel", sortOrder: 1, id: MANTEL_ID },
|
||||
{ nameFa: "پالتو و کت", nameEn: "Coats", sortOrder: 2 },
|
||||
{ nameFa: "پیراهن", nameEn: "Dress", sortOrder: 3 },
|
||||
{ nameFa: "شومیز", nameEn: "Blouse", sortOrder: 4 },
|
||||
{ nameFa: "تیشرت", nameEn: "T-Shirt", sortOrder: 5 },
|
||||
{ nameFa: "دامن", nameEn: "Skirt", sortOrder: 6 },
|
||||
{ nameFa: "لباس مجلسی", nameEn: "Formal Dress", sortOrder: 7 },
|
||||
{ nameFa: "کت و شلوار", nameEn: "Suit", sortOrder: 8 },
|
||||
{ nameFa: "کیف", nameEn: "Bag", sortOrder: 9 },
|
||||
{ nameFa: "عینک", nameEn: "Glasses", sortOrder: 10 },
|
||||
{ nameFa: "جوراب", nameEn: "Socks", sortOrder: 11 },
|
||||
];
|
||||
|
||||
for (const row of tops) {
|
||||
if (row.id) {
|
||||
await prisma.category.update({
|
||||
where: { id: row.id },
|
||||
data: {
|
||||
nameFa: row.nameFa,
|
||||
nameEn: row.nameEn,
|
||||
sortOrder: row.sortOrder,
|
||||
},
|
||||
});
|
||||
} else {
|
||||
await ensureChild(
|
||||
storeId,
|
||||
WOMEN_ID,
|
||||
row.nameFa,
|
||||
row.nameEn,
|
||||
row.sortOrder,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
await prisma.category.update({
|
||||
where: { id: JEANS_ID },
|
||||
data: { nameFa: "شلوار جین", nameEn: "Jean Pants", sortOrder: 0 },
|
||||
});
|
||||
await ensureChild(storeId, PANTS_ID, "شلوار پارچهای", "Fabric Pants", 1);
|
||||
await ensureChild(storeId, PANTS_ID, "شلوارک", "Shorts", 2);
|
||||
|
||||
await ensureChild(storeId, MANTEL_ID, "بهاره", "Spring", 0);
|
||||
await ensureChild(storeId, MANTEL_ID, "پاییزه", "Autumn", 1);
|
||||
await ensureChild(storeId, MANTEL_ID, "مجلسی", "Formal", 2);
|
||||
|
||||
const children = await prisma.category.findMany({
|
||||
where: { parentId: WOMEN_ID },
|
||||
orderBy: { sortOrder: "asc" },
|
||||
select: { nameFa: true, nameEn: true, sortOrder: true },
|
||||
});
|
||||
console.log("Women children:", children.length);
|
||||
for (const c of children) {
|
||||
console.log(` ${c.sortOrder}. ${c.nameFa} / ${c.nameEn}`);
|
||||
}
|
||||
}
|
||||
|
||||
main()
|
||||
.catch((err) => {
|
||||
console.error(err);
|
||||
process.exit(1);
|
||||
})
|
||||
.finally(() => prisma.$disconnect());
|
||||
Reference in New Issue
Block a user