
_id של המוצר אין צורך לספק, כי MongoDB מייצר אותו.categoryId לקונסטרקטור ולמחלקה.string ו-required בהוספה ובעדכון מלא, ובעדכון חלקי (patch) רק string. מוסיפים הודעת שגיאה כמו missing category id, כדי להיות אחידים עם שאר ההודעות.request.body.categoryId לבדיקה. השם categoryId נשמר זהה בכל מקום כדי לא לטעות.addProductAsync: מחזירים Promise, ניגשים ל-products ומשתמשים ב-insertOne עם המוצר. ה-callback מקבל שגיאה ו-info שמתאר מה קרה, כולל result עם מספר הפריטים שנוספו. מחזירים את המוצר שכבר כולל _id.categoryId נשמר כ-string ולא כ-ObjectId. לכן לפני ההוספה מציבים product.categoryId = mongodb.ObjectID(product.categoryId)._id, ובודקים ב-Robo 3T שהמוצר נוסף ושה-categoryId הוא ObjectId.הטקסט המלא של הדקות הראשונות בהרצאה «הוספת מוצר חדש ל-MongoDB» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
אנחנו עוברים להוספה של מוצר חדש. כאשר אנחנו מוסיפים מוצר, בואו נסתכל רגע בדאטאבייס, אז אוטומטית מונגו דיבי תייצר לו underline ID.
אנחנו לא צריכים כמובן להביא לו את ה-underline ID, אנחנו יכולים לייצר ID כזה ולתת לו, ואז בעצם אנחנו אומרים למונגו דיבי לא לעשות את זה, אבל אין צורך, מונגו דיבי עושה את זה בשבילנו.
אנחנו נותנים name, price, stock ואנחנו גם רוצים הפעם לתת category ID שזה סטרינג ואוטומטית מונגו דיבי תדע איך ליישם את זה כאובג'קט ID. אנחנו צריכים לשלב פה גם את הcategory ID בכל הנושא הזה.
אז איך למעשה אנחנו הולכים לטפל בזה? קודם כל מה שאנחנו רוצים לעשות זה לחזור לפרודקט ולגרום למחלקת מודל שלנו לתמוך גם בקטגורי ID. אז בקונסטרקטור שלנו, בואו נקבל קטגורי ID בצורה כזאת, שזה ממש תואם לקטגורי ID כאן, ובואו ניגש לפה דיס נקודה קטגורי ID שווה קטגורי ID. דבר נוסף שאנחנו רוצים לבצע זה לשלב את הקטגורי ID בכל הוולידציות.
אז בואו ניגש לכל אחד מהוולידציות, ונוסיף פה גם categoryid joy.string שהיוזר שולח לי סטרינג ובואו נגדיר שזה required שלא יהיו שום בעיות עם הדבר הזה. אז ניגש לכאן ואת זה אנחנו רוצים להוסיף גם פה וגם פה כאשר בפאץ' זה לא require וזה רק סטרינג.
אז יש לנו כרגע גם תמיכה בקטגורי ID שהוא סטרינגי ובאוספה ובעדכון מלא הוא Required ובפאצ' עדכון חלקי הוא לא Required.
כאן כל הקונספט של ג'וי מוכן. האמת שפה אני רואה שיש לנו את זה שאם הוא לא נמצא אז אנחנו צריכים לומר לו Missing אז אולי נוסיף את זה פה ויש לנו רק את ה-required, אין לנו צורך בשני אלה וזה יהיה missing category ID רק בכדי שנהיה ממש אחידים עם כל הקוד הקודם שהיה לנו.
אם החלטנו שבפוסט אנחנו נותנים הודעות ולידציה משלנו אז בואו ניתן גם לזה הודעה משלנו. אוקיי המודל מוכן אנחנו רוצים לחזור לקונטרולר ולראות מה אנחנו צריכים לעשות בקונטרולר בשביל להתאים את הסיפור הזה.
יש לנו פה פוסט, הנה יש לנו פה מוצר חדש, אנחנו רוצים לבצע בדיקת ולידציה, אז מן הסתם אנחנו מוסיפים לבדיקה פה גם את מה שקשור לקטגורי ID. זה יהיה request body category ID. שימו לב שאם החלטנו שככה אנחנו מגדירים ID, איי גדולה די קטנה, אז בכל מקום זה מה שאנחנו עושים בכדי לא לטעות
באיזשהו מקום אחר אם נניח איי גדולה די גדולה או משהו כזה. וזה היתרונות של אחידות. אחרי שיש לנו את היצירה, כאן אנחנו מבצעים את הבדיקת ולידציה שבאמת שלחו לנו קטגוריה D, אחרת זה כמובן שגיאת 400, מנסים להוסיף את המוצר, הצלחנו, מחזירים את המוצר שהתווסף, אם הייתה חריגה,
עוברים הודעת שגיאה. Good, יש לנו כאן את הקונטרולר. בואו נעבור ללוג'יק ומה שאנחנו רוצים לעשות בלוג'יק זה לאתר את add product async. בואו ניפטר רגע מה async הזה.
קיבלנו מוצר ומה שאנחנו עושים זה כזה דבר. אנחנו רוצים, בואו ניפטר קודם כל מכל זה. יש לנו פה את ה-promise, נעשה copy paste ו-db collection products. אנחנו הולכים לפונקציה שנקראת insert one.
פונקציה מקבלת את המוצר ומקבלת את כל הפונקציה הזאת, error ו-info. הוא בייקט שאומר מה בעצם התרחש בסיפור הזה.
האם הצלחנו להוסיף, לא הצלחנו להוסיף, כמה פריטים התווספו וכולי. בואו נראה, רק יש לי הרגשה ששכחתי משהו, לא. זאת פונקציה מתחילה פה, מסתיימת לנו כאן ואז אנחנו סוגרים את הסוגריים האלה, נראה בסדר.
ואם הכל בסדר בואו רק נדפיס console.log של info.