
for...in עוברת על השדות של המוצר שנשלח, ומעתיקה לכל שדה שיש לו ערך אל המוצר הקיים.request.params.id, והמאפיינים האחרים נלקחים מגוף הבקשה. ה-ID ממומר למספר עם סימן פלוס. השרת מחזיר 200 עם המוצר המעודכן.הטקסט המלא של הדקות הראשונות בהרצאה «עדכון מוצר - קורס NodeJS» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
כעת אנחנו רוצים לעדכן מוצר, כאן ויהיה put request. עדכון מוצר ב-put זה אומר שאנחנו מעדכנים את כל הפרמטרים של המוצר. אז אנחנו קודם כל צריכים להסתכל מה השינויים או התוספות שיש לנו לעשות.
אין לנו מה לגעת ברשימה של כל המוצרים, אין לנו מה לגעת בדל כרגע, הוא עושה את התפקיד בסדר גמור. ביזנס לוג'יק, כמובן שיש לנו כאן תוספת שאנחנו צריכים לבצע.
בואו נעשה פה קצת איזשהו שינוי כזה ואנחנו רוצים לבנות, טוב בואו נבנה את זה כאן. אז פה אנחנו רוצים לבצע פונקציה אסינג פאנקשן ובואו נקרא לה update product async.
עכשיו אנחנו רוצים לקבל את המוצר לעדכון product ולבצע איזשהו עדכון על המוצר הזה, לאתר אותו, לעדכן אותו, לשמור אותו בחזרה בקובץ. בואו אבל נעשה איזשהו טריק קטן, בואו נבנה את הפונקציה הזאת כך שהיא תתאים גם למצב של פוט וגם למצב של פאץ'.
זאת אומרת, היא מסוגלת בכל מקרה לעדכן את כל המידע שהביאו במוצר. אם הביאו את כל הפרמטרים של המוצר היא מעדכנת את כולם, אם הביאו חלק אז היא תעדכן רק חלק.
טוב, מה אנחנו צריכים לבצע? דבר ראשון, בואו נקבל את כל המוצרים. זה בעצם הקטע קוד הזה. יש לנו את כל המוצרים מהקובץ. עכשיו בואו נאתר את המוצר שאנחנו רוצים לעדכן.
נבנה פה product to update, נאתר על ידי product.find, נחפש את המוצר לפי ה-id שלו, product.id. שימו לב שבתוך המוצר חייב להיות גם ה-id.
יש לנו עכשיו את product to update. הדבר הראשון, אולי שלחו לי מוצר שלא קיים. אני לא רוצה עכשיו להתחיל לרוץ עליו ולעדכן. אז מה שאנחנו צריכים לבצע במקרה כזה זה לבדוק האם אין לנו שום דבר בפרודקט to update, כלומר הוחזר לנו מכאן מהפיינד את הערך undefined ולכן הif הזה יהיה true.
אם זה המצב נחזיר null key ואומר וואלה אין לי שום מוצר שכרגע בעצם נמצא עבור עדכון. אם כן, אנחנו יכולים לרוץ עליו על ידי לולת for each, כל פרופרטי זה בעצם לא for each, זה for in.
פרופרטי in product, לולת for in רצה על אובייקטים ו-for each רצה על מערכים. ובואו נבדוק האם קיים לנו אותו פרופרטי. אם פרודקט במיקום פרופרטי, הוא עונה מ-un-define, זאת אומרת שהביאו לי באמת ערך עבור אותו פרופרטי, אז product to update במיקום הפרופרטי הזה מקבל את מה שהביאו לי במוצר, product
במיקום פרופרטי. שוב, מה בעצם קורה בלולאה הזאת? בואו טיפה אולי נרווח את זה. יש לנו כאן קבלה של כל המוצרים, מציאת האובייקט של המוצר שרוצים לעדכן, אם אין אובייקט כזה נחזיר נעל, אם יש אובייקט כזה אנחנו ממשיכים, אנחנו רצים בלולאה על כל הפרופרטיז שנמצאים בתוך האובייקט פרודקט שיתקבל.
אם הפרופרטי אכן קיים, כלומר אין לו undefined, יש לו value אמיתי, אז אנחנו ניגשים לפרודקט to update הזה, שכמובן מכיל את אותו פרופרטי, כי זה המוצר שיש לנו בדאטאבייס ואנחנו מכניסים אליו את אותו ערך שהתקבל במוצר עצמו.
מי שלא כל כך מסתדר עם הלולה הזאת צריך לחזור לג'אווה סקריפט, לולאת for-in במקביל או בניגוד ללולאת for-each ש-for-each זה for-off.
for-off רצה על קולקשנים בלבד, for-in רצה על אובייקטים ויש לנו פה אובייקט לא קולקשן. כאשר סיימנו אנחנו חוזרים לשלוח לדאטאבייס את כל המוצרים, יש לנו פה await.dall.save all, הנה כל המוצרים שהמוצר כבר עודכן.
רגע, איך זה יכול להיות שהמוצר כבר עודכן? הרי מה הקשר בין אוסף המוצרים לבין המוצר הזה?