createProduct doesn't save the correct output in the cache!!!
export const createProduct = async (req: Request, res: Response) => {
    try {
        console.log("Received product data:", req.body); // Log incoming data
        await query('BEGIN');

        const productData: CreateProductInput = req.body;

        // Adjust price if necessary
        let adjustedPrice = productData.price;
        if (productData.price < 1000) {
            adjustedPrice = parseFloat((productData.price * 1000).toFixed(2));
        }

        console.log("Inserting product with adjusted price:", adjustedPrice);

        // Insert product
        const productResult = await query(
            `INSERT INTO products (name, description, brand_id, has_color, has_size, product_type, price, qty, sold, created_at, updated_at)
             VALUES ($1, $2, $3, $4, $5, $6, $7, $8, 0, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP)
             RETURNING id, created_at, updated_at`,
            [
                productData.name,
                productData.description,
                productData.brand_id,
                Boolean(productData.has_color),
                Boolean(productData.has_size),
                productData.product_type,
                adjustedPrice,
                productData.qty
            ]
        );
        const productId = productResult.rows[0].id;
        console.log(`Inserted product ID: ${productId}`);

        // Insert category associations
        const categoryInsertPromises = productData.category_ids.map((categoryId: number) => {
            console.log(`Associating category ID ${categoryId} with product ID ${productId}`);
            return query(
                `INSERT INTO product_categories (product_id, category_id) 
                 VALUES ($1, $2)`,
                [productId, categoryId]
            );
        });
        await Promise.all(categoryInsertPromises);
        console.log('Inserted all category associations.');

        // Insert images
        const imagesInsertPromises = productData.images
            .filter((image: ImageInput) => image.url) // Ensure URL exists
            .map((image: ImageInput) => {
                console.log(`Inserting product image: ${image.url}`);
                return query(
                    `INSERT INTO images (product_id, url, color_id, size_id)
       VALUES ($1, $2, $3, $4)
       RETURNING id, color_id, size_id, url`,
                    [productId, image.url, image.color_id || null, image.size_id || null]
                );
            });
        const insertedImagesResults = await Promise.all(imagesInsertPromises);
        const insertedImages = insertedImagesResults.map((imgResult: any) => ({
            id: imgResult.rows[0].id,
            url: imgResult.rows[0].url,
            color_id: imgResult.rows[0].color_id,
            size_id: imgResult.rows[0].size_id
        }));
        console.log(`Inserted ${insertedImages.length} product images.`);

        // Handle colors and sizes based on product type
        const insertedColors: number[] = [];
        const insertedSizes: number[] = [];

        if (productData.has_color && productData.colors) {
            for (const color of productData.colors) {
                // Adjust color price if necessary
                let adjustedColorPrice = color.price;
                if (color.price < 1000) {
                    adjustedColorPrice = parseFloat((color.price * 1000).toFixed(2));
                }

                console.log(`Inserting color: ${color.name} with has_size: ${color.has_size}`);

                // Insert color with explicit boolean casting
                const colorResult = await query(
                    `INSERT INTO colors (product_id, name, price, qty, sold, has_size)
                     VALUES ($1, $2, $3, $4, 0, $5)
                     RETURNING id, has_size`,
                    [productId, color.name, adjustedColorPrice, color.qty, Boolean(color.has_size)]
                );
                const colorId = colorResult.rows[0].id;
                const colorHasSize = colorResult.rows[0].has_size;
                console.log(`Inserted color ID=${colorId}, has_size=${colorHasSize}`);

                insertedColors.push(colorId);

                // Insert color images
                const colorImagesInsertPromises = color.images.map((image: ImageInput) => {
                    console.log(`Inserting color image: ${image.url}`);
                    return query(
                        `INSERT INTO images (product_id, color_id, url, size_id)
                         VALUES ($1, $2, $3, $4)
                         RETURNING id, color_id, size_id, url`,
                        [productId, colorId, image.url, image.size_id || null]
                    );
                });
                const insertedColorImagesResults = await Promise.all(colorImagesInsertPromises);
                console.log(`Inserted ${insertedColorImagesResults.length} images for color ID=${colorId}`);

                if (color.has_size && color.sizes) {
                    for (const size of color.sizes) {
                        // Adjust size price if necessary
                        let adjustedSizePrice = size.price;
                        if (size.price < 1000) {
                            adjustedSizePrice = parseFloat((size.price * 1000).toFixed(2));
                        }

                        console.log(`Inserting size: ${size.name} with price: ${adjustedSizePrice}`);

                        // Insert size
                        const sizeResult = await query(
                            `INSERT INTO sizes (product_id, color_id, name, price, qty, sold)
                             VALUES ($1, $2, $3, $4, $5, 0)
                             RETURNING id`,
                            [productId, colorId, size.name, adjustedSizePrice, size.qty]
                        );
                        const sizeId = sizeResult.rows[0].id;
                        console.log(`Inserted size ID=${sizeId} for color ID=${colorId}`);
                        insertedSizes.push(sizeId);

                        // Insert size images
                        const sizeImagesInsertPromises = size.images.map((image: ImageInput) => {
                            console.log(`Inserting size image: ${image.url}`);
                            return query(
                                `INSERT INTO images (product_id, color_id, size_id, url)
                                 VALUES ($1, $2, $3, $4)
                                 RETURNING id, color_id, size_id, url`,
                                [productId, colorId, sizeId, image.url]
                            );
                        });
                        const insertedSizeImagesResults = await Promise.all(sizeImagesInsertPromises);
                        console.log(`Inserted ${insertedSizeImagesResults.length} images for size ID=${sizeId}`);
                    }
                }
            }
        } else if (productData.has_size && productData.sizes) {
            for (const size of productData.sizes) {
                // Adjust size price if necessary
                let adjustedSizePrice = size.price;
                if (size.price < 1000) {
                    adjustedSizePrice = parseFloat((size.price * 1000).toFixed(2));
                }

                console.log(`Inserting standalone size: ${size.name} with price: ${adjustedSizePrice}`);

                // Insert size
                const sizeResult = await query(
                    `INSERT INTO sizes (product_id, name, price, qty, sold)
                     VALUES ($1, $2, $3, $4, 0)
                     RETURNING id`,
                    [productId, size.name, adjustedSizePrice, size.qty]
                );
                const sizeId = sizeResult.rows[0].id;
                console.log(`Inserted standalone size ID=${sizeId}`);
                insertedSizes.push(sizeId);

                // Insert size images
                const sizeImagesInsertPromises = size.images.map((image: ImageInput) => {
                    console.log(`Inserting standalone size image: ${image.url}`);
                    return query(
                        `INSERT INTO images (product_id, size_id, url)
                         VALUES ($1, $2, $3)
                         RETURNING id, color_id, size_id, url`,
                        [productId, sizeId, image.url]
                    );
                });
                const insertedSizeImagesResults = await Promise.all(sizeImagesInsertPromises);
                console.log(`Inserted ${insertedSizeImagesResults.length} images for standalone size ID=${sizeId}`);
            }
        }

        // Construct the new product object as it would appear in the cache
        const newProduct: Product = {
            id: productId,
            name: productData.name,
            description: productData.description,
            brand_id: productData.brand_id,
            has_color: productData.has_color,
            has_size: productData.has_size,
            product_type: productData.product_type,
            price: adjustedPrice,
            qty: productData.qty,
            sold: 0,
            created_at: productResult.rows[0].created_at.toISOString(),
            updated_at: productResult.rows[0].updated_at.toISOString(),
            categories: productData.category_ids.map((cid: number) => ({
                id: cid,
                name: "", // Optional: Fetch and populate category names
                main_category_id: 0, // Optional: Set appropriately
                main_category_name: "" // Optional: Set appropriately
            })),
            colors: productData.has_color && productData.colors ? productData.colors.map((color, index) => ({
                id: insertedColors[index],
                name: color.name,
                price: color.price || 0,
                qty: color.qty,
                sold: 0,
                has_size: Boolean(color.has_size),
                sizes: Boolean(color.has_size) && color.sizes ? color.sizes.map((size, sIndex) => ({
                    id: insertedSizes[sIndex],
                    name: size.name,
                    price: size.price,
                    qty: size.qty,
                    sold: 0,
                    color_id: null, // Optional: Set if needed
                    images: size.images.map(img => img.url)
                })) : [],
                images: color.images.map(img => img.url)
            })) : [],
            sizes: productData.has_size && !productData.has_color && productData.sizes ? productData.sizes.map((size, index) => ({
                id: insertedSizes[index],
                name: size.name,
                price: size.price,
                qty: size.qty,
                sold: 0,
                color_id: null,
                images: size.images.map(img => img.url)
            })) : [],
            images: insertedImages
        };

        console.log("New product to cache:", newProduct); // Log new product

        // Update the cache
        addProductToCache(newProduct);

        await query('COMMIT');
        res.status(201).json({ message: 'Product added successfully!', productId });
    } catch (error) {
        await query('ROLLBACK');
        console.error('Error creating product:', error);
        res.status(500).json({ error: 'Internal server error' });
    }
};
example json:
{"products":[{"id":6,"name":"‏Anua Heartleaf Pore Clay Pack","description":"يقوم هذا القناع الطيني الكريمي بأمتصاص الزهم الزائد و إزالة الرؤوس السوداء بشكل فعال داخل المسام بسبب احتوائه Houttuynia Cordata الذي يتحكم في الدهون\nيحتوي على الكاولين لامتصاص الدهون\nيحتوي على مادة البنتونيت لتضييق المسام\nيحتوي على كيرسيتينول و هو المكون الرئيسي لأوراق القلب يوفر تهدئة البشرة ويتحكم في الدهون الزائدة لإزالة مشاكل المسام\nيعمل ايضا على إذابة خلايا الجلد الميتة القديمة على الجلد بلطف دون أي تهيج إضافة إلى تنعيم البشرة","brand_id":117,"has_color":false,"has_size":true,"product_type":"size","price":0,"qty":0,"sold":0,"created_at":"2024-08-24T00:51:27.907Z","updated_at":"2024-09-10T16:58:17.276Z","categories":[{"id":175,"name":"Masks","main_category_id":1,"main_category_name":"Face Care"}],"colors":[],"sizes":[{"id":1418,"name":"100 ML","price":22000,"qty":118,"sold":0,"color_id":null,"images":["1048.webp"]}],"images":[{"id":1588,"url":"1048.webp","color_id":null,"size_id":1418}]},{"id":7,"name":"‏Anua Heartleaf Pore Control CleanSsing Oil","description":"غسول منظف زيتي بالهارت ليف للمسامات من انوا\nمنظف زيتي بتركيبة لا تسبب انسداد المسامات ويحتوي على زيوت نباتية (بما في ذلك زيت الجوجوبا وفاكهة الزيتون وبذور العنب)، ويخلص البشرة من الشوائب بشكل فعال مع ترك لمسة نهائية منتعشة ورطبة. مناسب للبشرة المعرضة للحبوب.\nمميزاته وفوائده:\n‏* non-comedogenic تركيبة لا تسد المسامات مناسبة للبشرة الدهنية والمعرضة للحبوب\n* مستخلص هارتليف (houttuynia cordata) معروف جيدًا بتأثيره المضاد للالتهابات والمهدئ للبشرة.\n* مزيل مكياج خفيف يساعد على إزالة الشوائب في المسامات.\n* لا يحتوي على أي مواد مهيجة.\n* يحافظ على رطوبة بشرتك بعد التنظيف.\n* يناسب جميع انواع البشرات حتى الحساسة.","brand_id":117,"has_color":false,"has_size":true,"product_type":"size","price":0,"qty":0,"sold":0,"created_at":"2024-08-24T00:54:49.385Z","updated_at":"2024-09-28T13:21:34.815Z","categories":[{"id":168,"name":"Face Cleansers","main_category_id":1,"main_category_name":"Face Care"}],"colors":[],"sizes":[{"id":5043,"name":"200 ML","price":25000,"qty":100,"sold":0,"color_id":null,"images":[]}],"images":[{"id":9273,"url":"1049.webp","color_id":null,"size_id":null}]},{"id":9,"name":"‏La Roche Effaclar Astringent Lotion","description":"تونر للبشرة الدهنية و المعرضة للحبوب من la roche \n-يعمل على تقليل حجم المسام بشكل ملحوظ بعد إستخدامه بفضل مكوناته الفعٌالة التي تعمل على تنظيم الإفراز الدهني للوجه و تقشيره بلطف ويقلل من انسداد المسام المسببة لحب الشباب.\n-تلطيف البشرة وموازنة درجة الحموضة بعد خطوة التنظيف مما يعمل معادلة للبشره ولا يسبب جفاف للبشره \n-تنظيف عميق للمسام وإزالة بقايا الجلد الميت من مناطق الجلد التي غالبًا ما تُترك عند غسل وجهك.\n-تساعد المياه المعدنية La Roche-Posay على تهدئة البشرة وحمايتها ومضادات الأكسدة.","brand_id":70,"has_color":false,"has_size":true,"product_type":"size","price":0,"qty":0,"sold":0,"created_at":"2024-08-24T15:29:54.092Z","updated_at":"2024-09-18T09:42:49.283Z","categories":[{"id":169,"name":"Toners","main_category_id":1,"main_category_name":"Face Care"}],"colors":[],"sizes":[{"id":1431,"name":"200 ml","price":25000,"qty":19,"sold":0,"color_id":null,"images":["1052.jpeg"]}],"images":[{"id":3283,"url":"1052.jpeg","color_id":null,"size_id":1431}]},{"id":11,"name":"Aveeno Daily Moisturising Hand Cream","description":"مرطب يد يومي من أفينو\nيتكون من دقيق الشوفان، تعمل هذه التركيبة سريعة الامتصاص على ترطيب البشرة لمدة 24 ساعة، فهو يساعد على حماية وتغذية اليد العادية إلى الجافة. يمنحك بشرة صحية وأكثر مرونة من الاستخدام الأول، لا يحتوي عطور و مناسب لبشرة اليد الحساسة.","brand_id":86,"has_color":false,"has_size":true,"product_type":"size","price":0,"qty":0,"sold":0,"created_at":"2024-08-24T15:43:56.173Z","updated_at":"2024-09-10T21:04:29.869Z","categories":[{"id":163,"name":"Hand moisturiser","main_category_id":6,"main_category_name":"Hand Care"}],"colors":[],"sizes":[{"id":1430,"name":"75 ml","price":12000,"qty":10,"sold":0,"color_id":null,"images":["1056.jpeg"]}],"images":[{"id":1600,"url":"1056.jpeg","color_id":null,"size_id":1430}]},{"id":12,"name":"La Roche Posay Thermal Spring Water","description":"‏سبري ملطف ومرطب للبشره الحساسة المتهيجة بسبب العوامل الخارجية (الشمس ووسائل العناية بالبشرة وغيرها...) ويساعد على منع تقدم عمر الجلد. مضاد طبيعي للأكسدة.يمنح المزيج الفريد من المعادن والعناصر النادرة مثل السيلينيوم، ومياه الينابيع الحرارية من لاروش بوزيه خصائص مثبتة علميًا في الترطيب والنعومة ومضاد للأكسدة. تركيبة دقيقة. مناسب للكبار والأطفال.","brand_id":70,"has_color":false,"has_size":true,"product_type":"size","price":0,"qty":0,"sold":0,"created_at":"2024-08-24T15:50:28.619Z","updated_at":"2024-09-28T13:06:40.801Z","categories":[{"id":193,"name":"Mist","main_category_id":1,"main_category_name":"Face Care"}],"colors":[],"sizes":[{"id":5042,"name":"150 ml","price":15000,"qty":50,"sold":0,"color_id":null,"images":[]}],"images":[{"id":9272,"url":"1057.jpeg","color_id":null,"size_id":null}]},{"id":39,"name":"Vichy Normaderm ‏Phytosolution Intensive Purifying Gel","description":"‏جل منظف ​​للبشرة الدهنية والمعرضة لحب الشباب، مدعوم بالمعادن والبروبايوتيك. يزيل جزيئات الغبار والتلوث بشكل مثالي من الاستعمال الأول.يزيل لمعان البشرة فوراً ويؤخر إنتاج الزيوت خلال النهار. يقلل مظهر المسام ويقضي بشكلٍ فعال على الرؤوس السوداء.\nينقي ويزيل المكياج \nيخفض إنتاج الزهم الزائد وزيوت البشرة\nخالي من الكبريتات - خالي من الصابون - خالي من الكحول","brand_id":71,"has_color":false,"has_size":true,"product_type":"size","price":0,"qty":0,"sold":0,"created_at":"2024-08-24T19:11:33.876Z","updated_at":"2024-09-17T21:46:38.398Z","categories":[{"id":168,"name":"Face Cleansers","main_category_id":1,"main_category_name":"Face Care"}],"colors":[],"sizes":[{"id":896,"name":"200 ml","price":25000,"qty":14,"sold":0,"color_id":null,"images":["1737.jpeg"]}],"images":[{"id":3244,"url":"1737.jpeg","color_id":null,"size_id":896}]},{"id":41,"name":"‏Vichy Liftactiv A Retinol Specialist Deep Wrinkles Serum","description":"‏سيروم الريتنول من vichy\nيوفر فعالية بفضل تركيبته القوية لتقديم فوائد\nيعمل على تجديد البشرة ، ويعزز إنتاج الكولاجين ، وله خصائص مضادة للأكسدة. \n فهو فعال للغاية في تقليل التجاعيد العميقة بشكل واضح وتحسين تماسك البشرة. \nإلى جانب ذلك بفضل مفعولها المقوي تصبح البشرة أكثر  تناسقًا وإشراقًا. \nبفضل تقنية Retinol Guard ، فإن هذا المكون قادر على اختراق أعماق الجلد والعمل على جميع أنواع التجاعيد ، حتى أعمق التجاعيد \nملمسة حليبي يمتص بسرعة  ويترك ملمس غير دهني\n-مناسبة لجميع  أنواع البشرة.","brand_id":71,"has_color":false,"has_size":true,"product_type":"size","price":0,"qty":0,"sold":0,"created_at":"2024-08-24T19:21:15.242Z","updated_at":"2024-09-08T12:08:37.048Z","categories":[{"id":170,"name":"Serums","main_category_id":1,"main_category_name":"Face Care"}],"colors":[],"sizes":[{"id":897,"name":"30 ml","price":55000,"qty":3,"sold":0,"color_id":null,"images":["1738.jpeg"]}],"images":[{"id":1073,"url":"1738.jpeg","color_id":null,"size_id":897}]},{"id":42,"name":"Vichy Dercos Densi-solutions spray","description":"بخاخ ڤيشي ديركوس لتكثيف وزياده سمك الشعر\n-ڤيشي دينسي يحتوي علي ماده ستيموكسيدين التي تعمل على تنشيط للخلايا الجذعيه والبصيلات الخامله في فروه الراس. \nوبالتالي إعاده إنبات الشعر من جديد ويزيد من كثافته. \n-يحتوي أيضًا ماده الرامنوز التي تحفز نمو الشعر وتغذيه.\n-الريسفيراتول مضاد أكسده قوي ضد العوامل اللي تؤذي الفروه ويزيد من كفاءه ماده الستيموكسدين.\n-١٠ بخات صباحا و ١٠ بخات مساءا على الفروه وتوزع جيدا .","brand_id":71,"has_color":false,"has_size":true,"product_type":"size","price":0,"qty":0,"sold":0,"created_at":"2024-08-24T19:26:52.874Z","updated_at":"2024-09-08T12:05:14.585Z","categories":[{"id":9,"name":"Hair Treatments","main_category_id":3,"main_category_name":"Hair Care"}],"colors":[],"sizes":[{"id":895,"name":"100 ml","price":55000,"qty":1,"sold":0,"color_id":null,"images":["1736.jpeg"]}],"images":[{"id":1071,"url":"1736.jpeg","color_id":null,"size_id":895}]},{"id":43,"name":"Vichy Nutri Protein Restorative Shampoo","description":"شامبو مطور خصيصًا لمعالجة الجفاف بالشعر و الفروة بمزيج من المكونات الغذائية الطبيعية تصلح الجفاف الحاصل بسبب الحرارة و الاشعه الفوق البنفسجية يزيد ترطيب الشعر بشكل فوري يقلل من النهايات المتقصفة ينعم ملمس الشعر و يخلي حريري و صحي ولامع \nخالي من البارابين و السيليكون مناسب للاستخدام اليومي او اي وقت لغسل الشعر","brand_id":71,"has_color":false,"has_size":true,"product_type":"size","price":0,"qty":0,"sold":0,"created_at":"2024-08-24T19:28:42.186Z","updated_at":"2024-09-17T21:48:35.090Z","categories":[{"id":1,"name":"Shampoos","main_category_id":3,"main_category_name":"Hair Care"}],"colors":[],"sizes":[{"id":892,"name":"250 ml","price":25000,"qty":1,"sold":0,"color_id":null,"images":["1733.jpeg"]}],"images":[{"id":3245,"url":"1733.jpeg","color_id":null,"size_id":892}]},{"id":44,"name":"Vichy ‏Beauty Deo Anti-perspirant","description":"‏مزيل تعرق طبي يساعد بعلاج التعرق المفرط ويخفي رائحة العرق المزعجه \nبمفعول يصل لمده 48 ساعة \nبالاضافه على قدرته بتفتيح منطقة الابط وتبيضها\nملائم للجلد الحساس يحتوي على حمض الليبوهيدروكسي و الحبيبات اللؤلؤية تعمل على تحسين مظهر البشرة وتفتيحها","brand_id":71,"has_color":false,"has_size":true,"product_type":"size","price":0,"qty":0,"sold":0,"created_at":"2024-08-24T19:37:55.009Z","updated_at":"2024-09-17T11:16:11.775Z","categories":[{"id":182,"name":"Deodorant","main_category_id":2,"main_category_name":"Body Care"}],"colors":[],"sizes":[{"id":886,"name":"50 ml","price":20000,"qty":14,"sold":0,"color_id":null,"images":["1728.jpeg"]}],"images":[{"id":2956,"url":"1728.jpeg","color_id":null,"size_id":886}]},{"id":45,"name":"VICHY DEODORANT MINERAL 48 H","description":"مزيل عرق من فيجي\nخالي من أملاح الألمنيوم، مع أقصى درجة من الفعالية والكفاءة، من خلال ربط المعادن الموجودة في مياه فيتشي الحرارية مع الzinc gluconate \nلفعالية تستمر لمدة 48 ساعة بالاضافة الى  Provitamine B5 الذي يعمل كمهدئ للبشرة.\nمناسب لجميع انواع البشرة خاصة البشرة الحساسة\nخالي من الكحول والبرابين.","brand_id":71,"has_color":false,"has_size":true,"product_type":"size","price":0,"qty":0,"sold":0,"created_at":"2024-08-24T19:40:27.610Z","updated_at":"2024-09-17T11:17:48.913Z","categories":[{"id":182,"name":"Deodorant","main_category_id":2,"main_category_name":"Body Care"}],"colors":[],"sizes":[{"id":888,"name":"50 ml","price":20000,"qty":33,"sold":0,"color_id":null,"images":["1730.jpeg"]}],"images":[{"id":2961,"url":"1730.jpeg","color_id":null,"size_id":888}]},{"id":46,"name":"Vichy Clinical Control Deodorant & Antiperspirant 96 hour","description":"Vichy Clinical Control Deodorant & Antiperspirant 96 hour \nديودرنت مزيل للتعرق بفاعليته المقاومة للتعرق حتى تحت الضغوط اليومية.\nيناسب الرجال و النساء الذين يعانون من التعرق المفرط و يريدون الجمع بين مزيل للعرق فعال و كفاءة عالية تتحمله بشرتهم.\nخالي من الباربين والكحول يناسب البشره الحساسة","brand_id":71,"has_color":false,"has_size":true,"product_type":"size","price":0,"qty":0,"sold":0,"created_at":"2024-08-24T19:42:13.987Z","updated_at":"2024-09-23T19:02:26.409Z","categories":[{"id":182,"name":"Deodorant","main_category_id":2,"main_category_name":"Body Care"}],"colors":[],"sizes":[{"id":887,"name":"50 ml","price":20000,"qty":1,"sold":0,"color_id":null,"images":["1729.webp"]}],"images":[{"id":26,"url":"1729.webp","color_id":null,"size_id":887}]},{"id":47,"name":"Vichy Deodorant Anti-Transpirant Stress resist","description":"تركيبة لطيفة ، تستخدم خصيصا للبشرة الحساسة او المتهيجة\n‏‎لا يوجد اي بقايا لزجة أو دهنية او علامات بيضاء على \nالبشرة\nيزيل العرق لمدة 48 الى 72 ساعة وفعالية مضاد للعرق\n‏‎لايسبب الحساسية\nخالي من الكحول و البارابين و العطر","brand_id":71,"has_color":false,"has_size":true,"product_type":"size","price":0,"qty":0,"sold":0,"created_at":"2024-08-24T19:51:07.220Z","updated_at":"2024-09-23T19:03:13.596Z","categories":[{"id":182,"name":"Deodorant","main_category_id":2,"main_category_name":"Body Care"}],"colors":[],"sizes":[{"id":894,"name":"50 ml","price":20000,"qty":24,"sold":0,"color_id":null,"images":["1735.jpeg"]}],"images":[{"id":27,"url":"1735.jpeg","color_id":null,"size_id":894}]},{"id":48,"name":"‏Vichy Traitement Anti-Transpirant 48H Roll-On","description":"-مزيل العرق الطبي من فيشي\n-مناسب للرجال والنساء الذين يعانون من فرط التعرق\n-يمتاز تركيبته \" الهيبوالرجينيك \" بدقة بالغة تعمل على مقاومة التعرق بدون سد مسام العرق ، ما يعطي حماية أفضل على مدار 48 ساعة بدون أي أضرار .\n-مناسب للبشره الحساسةو لاتحتوي على الكحول ، ولاتحتوي على البارابين .\n-يمنح البشرة ملمساً ناعماً بدون الشعور بعدم الراحة ، أو ترك علامات بيضاء على الجلد أو الملابس .\n-يمنحك شعورًا بالانتعاش عند الاستعمال ، كما يترك طبقة بودرة رقيقة غير لزجة على البشرة .\n-لا يؤدي إلى إلحاق أي أذى بالبشرة حتى مع إزالة الشعر الزائد بالليزر أو بأي طريقة أخرى .\n-يمتاز بتركيبة ناعمة ، تجف بسرعة دون إزعاج البشرة","brand_id":71,"has_color":false,"has_size":true,"product_type":"size","price":0,"qty":0,"sold":0,"created_at":"2024-08-24T19:52:17.485Z","updated_at":"2024-09-23T19:00:22.400Z","categories":[{"id":182,"name":"Deodorant","main_category_id":2,"main_category_name":"Body Care"}],"colors":[],"sizes":[{"id":889,"name":"50 ml","price":20000,"qty":12,"sold":0,"color_id":null,"images":["1731.jpeg"]}],"images":[{"id":25,"url":"1731.jpeg","color_id":null,"size_id":889}]},{"id":49,"name":"Vichy Dercos Dry Shampoo","description":"شامبو جاف للشعر من فيشي\nيوفر مفعولًا مضادًا للإفرازات الدهنية بفضل التركيبة الغنية بالفيتامينات PP و B5 والبيوتين\nو يسمح هذا المزيج من المكونات النشطة للشعر باستعادة الحجم والملمس\nمضاد للحساسية و مناسب لفروة الرأس الحساسة\nطريقة الاستخدام : قبل استخدام الشامبو الجاف , مشط الشعر جيدا لتفكيك الجذو ثم رش وبعدها قم بتمشيط الشعر","brand_id":71,"has_color":false,"has_size":true,"product_type":"size","price":0,"qty":0,"sold":0,"created_at":"2024-08-24T19:55:01.394Z","updated_at":"2024-09-17T15:04:36.810Z","categories":[{"id":3,"name":"Dry Shampoos","main_category_id":3,"main_category_name":"Hair Care"}],"colors":[],"sizes":[{"id":893,"name":"150 ml","price":30000,"qty":0,"sold":0,"color_id":null,"images":["1734.jpeg"]}],"images":[{"id":3144,"url":"1734.jpeg","color_id":null,"size_id":893}]}],"total":826,"page":1,"itemsPerPage":15,"totalPages":56,"hasMore":true,"minPrice":0,"maxPrice":250000}
what it saves:
{"products":[{"id":861,"name":"Aanu Green Lemon Vitamin C Blemish Serum","description":"Anua سيروم فيتامين سي من\nيتكون هذا السيروم من مستخلص الليمون الأخضر و فيتامين C.\nيحتوي على كبسولات مملوءة بالبانثينول والجلوتاثيون والبيسابولول لتعزيز تأثيرات التفتيح والتهدئة مما يجعله مثاليًا لمحاربة فرط التصبغ. \nتهدف هذه التركيبة المدعومة علميًا إلى تقليل ظهور الشوائب على السطح وفي أعماق الجلد. \nكما أنه يساعد على تفتيح وتقليل التجاعيد بسبب مزيج فيتامين E وحمض الفيروليك وألفا بيسابولول والأدينوزين.","brand_id":117,"has_color":false,"has_size":true,"product_type":"size","price":0,"qty":0,"sold":0,"created_at":"2024-09-12T12:02:59.661Z","updated_at":"2024-09-12T12:02:59.661Z","categories":[{"id":170,"name":"Serums","main_category_id":1,"main_category_name":"Face Care"}],"colors":[],"sizes":[{"id":1697,"name":"20 ml","price":35000,"qty":11,"sold":0,"color_id":null,"images":["1984.jpeg"]}],"images":[{"id":1842,"url":"1984.jpeg","color_id":null,"size_id":1697}]},{"id":5016,"name":"AA","description":"aa","brand_id":91,"has_color":false,"has_size":true,"product_type":"size","price":0,"qty":0,"sold":0,"created_at":"2024-09-28T20:55:21.424Z","updated_at":"2024-09-28T20:55:21.424Z","categories":[{"id":163,"name":"","main_category_id":0,"main_category_name":""}],"colors":[],"sizes":[{"id":5054,"name":"40","price":40,"qty":40,"sold":0,"color_id":null,"images":["5029.jpg"]}],"images":[]}],"total":2,"page":1,"itemsPerPage":15,"totalPages":1,"hasMore":false,"minPrice":0,"maxPrice":250000}

however createProduct works absolutely fine! it adds all the information correctly to the database and after revalidating the cache everything gets back to normal... however here there are so much issues like a lot of properties doesn't even exist in the original json and the price if less than 1000 it should be multiplied by 1000, the images are incorrect, and so much more wrong stuff!!!