
PUT: איך לשלוף את הספר, לדרוס את שדותיו, לשמור ולהחזיר אותו.UpdateBook מקבלת ספר ומחזירה את המעודכן, כי REST API צריך להחזיר אותו. קודם מביאים את הספר מהמסד עם GetOneBook לפי book.Id.Title, Description ו-Price לפי הספר שהתקבל, מבצעים SaveChanges ומחזירים את dbBook.dbBook הוא null, מחזירים null, ולכן טיפוס ההחזרה הוא Book?.UpdateBook עם HttpPut ונתיב api/books. ה-ID מגיע מה-route עם [FromRoute], והספר מהגוף עם [FromBody].book.Id = id ומתעלמים ממה שנשלח. בנייה נכונה של השרת מכתיבה לפרונט את המוסכמה.Ok עם 200, כי אין סטטוס מיוחד לעדכון.PUT.הטקסט המלא של הדקות הראשונות בהרצאה «עדכון מלא ב-SQL Database» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
אחרי שאוספנו ספר, בואו נעדכן ספר. בואו נבנה פונקציה public book update. תקבל בוק לצורך עדכון, תעדכן אותו ותחזיר את המעודכן, כי אנחנו יודעים ש-RST API צריך להחזיר אותו בחזרה.
טוב, קודם כל בואו נביא את הספר מהדטאבייס. יכול להיות ששלחו לי פה איזשהו ספר שכבר מאיזושהי סיבה לא קיים בדטאבייס, אז אולי הוא יחזור כנל.
אז הנה יש לנו פה את ה-dbbook, וכבר בנינו פונקציה שנקראת getOneBook, ניתן לה את ה-book.id, והיא תביא לנו את הספר as is מה-database. אם יש לנו את הספר מה-database, אנחנו יכולים להיכנס ל-dbbook.title, ולהדכן אותו לפי ה-book שהתקבל, בואו נעשה את אותו הדבר גם ל-description, נגדיר description, ו...
ל-price, book.price. אחרי שהתקנו את כל ההסדות, ניגש ונבצע db save changes, ונחזיר את ה-db book שכבר מכיל את הערכים החדשים.
יש לנו פה איזשהו warning שאנחנו צריכים לטפל בו, ואם הדבר הזה נל, אולי שלחו לי איזה book עם ID שלא קיים, אז כמובן הפונקציה הזאת שכבר בנינו מקודם כאן, תחזיר לנו נל, אז...
מה שנעשה זה פשוט נבדוק אם db book ו-null לא היה ספר כזה, אז תחזיר לי בחזרה null, וזה אומר שגם הפונקציה הזאת צריכה להחזיר book עם סימן שאלה.
יש לנו פה בסרוויס פונקציה שיודעת לעדכן ספר מלא. שימו לב כמה קוד זה דרש מאיתנו, כאשר אנחנו לא רוצים את הקוד הזה ברמת הקונטרולרים, ולכן...
יש לנו פה שימוש בסרוויסים. בואו ניקח את הפונקציה הזאת, נעתיק אותה בקונטרולר, נדביק, אנחנו רוצים לא HTTP POST, אלא HTTP PUT, אנחנו רוצים לגלוש ל-API BOOKS, ואם אתם זוכרים, הניהול הנכון זה שה-ID מוגדר פה.
אז קודם כל אנחנו רוצים שהפונקציה הזאת תקבל, קודם כל שנקרא לה UPDATE BOOK, ושתקבל את ה-ID מה-Route, אז נגדיר From Route Int ID, רגע, נרווח פה טיפה, ואת שאר הספר מה-Body, From Body.
עכשיו, כאשר המשתמש או ה-frontend או ה-postman, לא משנה מי, שולחים לנו את ה-JSON ל-Update Book, הם אמורים לשלוח לנו את ה-ID ב-Route, אם הם לא ישלחו לנו את ה-ID ב-Route, כמו גם, הפונקציה הזאת לא תתבצע כי היא חייבת לקבל ID בראות וזאת גם השיטה הנכונה כאשר אנחנו עושים Update אבל היא צריכה לשלוח
לי את הבוק בבאדי יכול להיות שהבוק בבאדי כבר מכיל ID יכול להיות שה-ID אותו הדבר כמו ה-ID הזה יכול להיות שה-ID בכלל שונה אני לא יודע זה הנקודה ברסט-אפי לא מעניין אותי כשאני בונה רסט-אפי מה הפרונט שולח?
יש מוסכמה בינלאומית הפרונט צריך לעמוד במוסכמה אני מכתיב לו אותה כשאני בונה את השרת ולכן... אני לא יודע אם פה יש ID, אם ה-ID הוא אותו הדבר כמו ה-ID הזה, אם ה-ID שונה או בכלל אין ID, לכן מה שאנחנו עושים זה book.id שווה