Vivasoft-logo

[ā§Ž.ā§Ŧ] āĻ­ā§āϝāĻžāϞāĻŋāĻĄā§‡āĻļāύ (Validation)

Create āĻāĻŦāĻ‚ Update āĻ…āĻĒāĻžāϰ⧇āĻļāύ⧇āϰ āĻ•ā§āώ⧇āĻ¤ā§āϰ⧇, āϝ⧇ āĻĄāĻžāϟāĻž āφāĻŽāϰāĻž āĻĄāĻžāϟāĻžāĻŦ⧇āϏ āĻŸā§‡āĻŦāĻŋāϞ⧇ āϰāĻžāĻ–āĻŦ āϤāĻžāĻ“ āύ⧁āĻ¨ā§āϝāϤāĻŽ āĻ•ā§‹ā§ŸāĻžāϞāĻŋāϟāĻŋ āĻŽā§‡āχāύāĻŸā§‡āχāύ āĻ•āϰāĻž āφāĻŦāĻļā§āϝāĻ•āĨ¤ āύāχāϞ⧇ āϝ⧇āϏāĻ•āϞ āϏāĻŽāĻ¸ā§āϝāĻžāϰ āϏāĻŽā§āĻŽā§āĻ–ā§€āύ āφāĻŽāϰāĻž āĻšāϤ⧇ āĻĒāĻžāϰāĻŋ – 

  • āϕ⧋āύ⧋ āĻāĻ• āĻŦāĻž āĻāĻ•āĻžāϧāĻŋāĻ• āĻĢāĻŋāĻ˛ā§āĻĄā§‡āϰ āĻ­ā§āϝāĻžāϞ⧁ āĻ–āĻžāϞāĻŋ āĻ…āĻŦāĻ¸ā§āĻĨāĻžā§Ÿ āĻŸā§‡āĻŦāĻŋāϞ⧇ āĻāĻ¨ā§āĻŸā§āϰāĻŋ āĻšā§Ÿā§‡ āϝ⧇āϤ⧇ āĻĒāĻžāϰ⧇āĨ¤Â 
  • āϝ⧇āϕ⧋āύ⧋ āĻĢāĻŋāĻ˛ā§āĻĄā§‡āϰ āĻ­ā§āϝāĻžāϞ⧁āϰ āϞāĻŋāĻŽāĻŋāϟ āĻ…āϤāĻŋāĻ•ā§āϰāĻŽ āĻšā§Ÿā§‡ āϝ⧇āϤ⧇ āĻĒāĻžāϰ⧇āĨ¤
  • āϝ⧇ āĻĢāĻŋāĻ˛ā§āĻĄ āϝ⧇āϧāϰāϪ⧇āϰ āĻĄāĻžāϟāĻž āϟāĻžāχāĻĒ āĻ—ā§āϰāĻšāĻŖ āĻ•āϰ⧇ āĻĨāĻžāϕ⧇ āϤāĻžāϰ āĻŦāĻžāχāϰ⧇āϰ āĻ…āĻ¨ā§āϝ āϕ⧋āύ⧋ āĻĄāĻžāϟāĻž āϟāĻžāχāĻĒ⧇āϰ āĻ­ā§āϝāĻžāϞ⧁ āϭ⧁āϞ⧇ āχāύāĻĒ⧁āϟ āĻšā§Ÿā§‡ āϝ⧇āϤ⧇ āĻĒāĻžāϰ⧇ āχāĻ¤ā§āϝāĻžāĻĻāĻŋ āĨ¤Â 

āĻ āϧāϰāϪ⧇āϰ āĻ…āύāĻžāĻ•āĻžāĻ™ā§āĻ•ā§āώāĻŋāϤ āĻĒāϰāĻŋāĻ¸ā§āĻĨāĻŋāϤāĻŋ āĻā§œāĻžāύ⧋āϰ āϜāĻ¨ā§āϝ āφāĻŽāϰāĻž āύāϤ⧁āύ āĻĄāĻžāϟāĻž Create āĻŦāĻž Update āĻ•āϰāĻžāϰ āĻĒā§‚āĻ°ā§āĻŦ⧇ āϤāĻž āĻāĻ•āϟāĻž āĻ­ā§āϝāĻžāϞāĻŋāĻĄā§‡āĻļāύ āĻšā§‡āϕ⧇āϰ āĻŽāĻ§ā§āϝ āĻĻāĻŋā§Ÿā§‡ āĻĒāĻžāĻ āĻžāĻŦā§‹ āĻāĻŦāĻ‚ āύāĻŋ⧟āĻŽā§‡āϰ āĻŦāĻžāχāϰ⧇āϰ āϕ⧋āύ āĻĄāĻžāϟāĻž āχāύāĻĒ⧁āϟ āĻšā§Ÿā§‡ āĻĨāĻžāĻ•āϞ⧇ āϤāĻž āϜāĻžāύāĻŋā§Ÿā§‡ āĻĻ⧇āĻŦā§‹ āĨ¤ āϝ⧇ āύāĻŋ⧟āĻŽāϗ⧁āϞ⧋ āφāĻŽāϰāĻž āύāĻŋāĻļā§āϚāĻŋāϤ āĻ•āϰāĻŦ : 

  1. BookName āĻāĻŦāĻ‚ Author āĻĢāĻŋāĻ˛ā§āĻĄ āĻ–āĻžāϞāĻŋ āĻĨāĻžāĻ•āĻž āϝāĻžāĻŦ⧇ āύāĻž, Publication āĻāϰ āĻĨāĻžāĻ•āĻž āĻŦāĻž āύāĻž āĻĨāĻžāĻ•āĻžā§Ÿ āĻ•āĻŋāϛ⧁ āĻšāĻŦ⧇ āύāĻžāĨ¤
  2. BookName āĻāϰ āĻ•ā§āϝāĻžāϰ⧇āĻ•ā§āϟāĻžāϰ āϞāĻŋāĻŽāĻŋāϟ āĻĨāĻžāĻ•āĻŦ⧇ 1 āĻĨ⧇āϕ⧇ 50 āĻāϰ āĻŽāĻ§ā§āϝ⧇ āĨ¤
  3. Author āĻāϰ āĻ•ā§āϝāĻžāϰ⧇āĻ•ā§āϟāĻžāϰ āϞāĻŋāĻŽāĻŋāϟ āĻĨāĻžāĻ•āĻŦ⧇ 5 āĻĨ⧇āϕ⧇ 50 āĻāϰ āĻŽāĻ§ā§āϝ⧇ āĨ¤

āĻāĻŦāĻžāϰ⧇ āĻĒāĻžāϞāĻž āχāĻŽāĻĒā§āϞāĻŋāĻŽā§‡āĻ¨ā§āĻŸā§‡āĻļāύ⧇āϰāĨ¤ āĻ­ā§āϝāĻžāϞāĻŋāĻĄā§‡āĻļāύ⧇āϰ āϜāĻ¨ā§āϝ āφāĻŽāϰāĻž “ozzo-validation” āĻĒā§āϝāĻžāϕ⧇āϜāϟāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻŦāĨ¤ āĻĒā§āϝāĻžāϕ⧇āϜāϟāĻŋ āύāĻžāĻŽāĻžāύ⧋āϰ āϜāĻ¨ā§āϝ āϟāĻžāĻ°ā§āĻŽāĻŋāύāĻžāϞ⧇ āύāĻŋāĻšā§‡āϰ āĻ•āĻŽāĻžāĻ¨ā§āĻĄāϟāĻŋ āϰāĻžāύ āĻ•āϰāĻŋ –

go get github.com/Go-ozzo/ozzo-validation

  • āĻ­ā§āϝāĻžāϞāĻŋāĻĄā§‡āĻļāύ⧇āϰ āĻ•āĻžāϜ āϕ⧋āĻĨāĻžā§Ÿ āĻšāĻŦ⧇?

āφāĻŽāĻžāĻĻ⧇āϰ āĻ­ā§āϝāĻžāϞāĻŋāĻĄā§‡āĻļāύ⧇āϰ āĻĒ⧁āϰ⧋ āϕ⧋āĻĄāϟāĻŋ āĻĨāĻžāĻ•āĻŦ⧇ types/structures.go āϤ⧇āĨ¤ āϕ⧇āύāύāĻž, ozzo-validation āĻāϰ Validate() āĻĢāĻžāĻ‚āĻļāύāϟāĻž āĻāĻ•āϟāĻž Struct āĻāϰ āĻŽā§‡āĻĨāĻĄ āĻšāĻŋāϏ⧇āĻŦ⧇ āϝ⧋āĻ— āĻ•āϰ⧇ āĻĻāĻŋāϤ⧇ āĻšā§ŸāĨ¤ āĻāĻ•ā§āώ⧇āĻ¤ā§āϰ⧇ āφāĻŽāϰāĻž echo.Context āĻĨ⧇āϕ⧇ āϰāĻŋāĻ•ā§‹ā§Ÿā§‡āĻ¸ā§āϟ āĻĄāĻžāϟāĻž Bind āĻ•āϰ⧇āĻ›āĻŋ āĻĒā§āϰāĻ¤ā§āϝ⧇āĻ•āĻŦāĻžāϰ types/structures.go āĻāϰ BookRequest āύāĻžāĻŽā§‡āϰ Struct āĻāϰ āχāĻ¨ā§āϏāĻŸā§āϝāĻžāĻ¨ā§āϏ⧇āĨ¤ āϏ⧁āϤāϰāĻžāĻ‚ BookRequest āĻāϰ āĻ­ā§āϝāĻžāϞāĻŋāĻĄā§‡āĻļāύ⧇āϰ āϜāĻ¨ā§āϝ āĻāϰ Validate() āĻĢāĻžāĻ‚āĻļāύāϟāĻŋ āĻāϰ āϏāĻžāĻĨ⧇āχ āϰāĻžāĻ–āĻŦāĨ¤Â 

  • types/structures.go āĻ – 
  1.  āĻĒā§āϰāĻĨāĻŽā§‡āχ āĻ­ā§āϝāĻžāϞāĻŋāĻĄā§‡āĻļāύ⧇āϰ āϕ⧋āĻĄāϟāĻŋ āĻĻ⧇āϖ⧇ āύ⧇āχ, āϤāĻžāĻšāϞ⧇ āĻŦ⧁āĻāϤ⧇ āϏ⧁āĻŦāĻŋāϧāĻž āĻšāĻŦ⧇ āĻ•āĻŋ āĻ•āϰ⧇āĻ›āĻŋ āφāĻŽāϰāĻž – 

types/structures.go

				
					  func (book BookRequest) Validate() error {
       return validation.ValidateStruct(&book,
           validation.Field(&book.BookName,
               validation.Required.Error("Book name cannot be empty"),
               validation.Length(1, 50)),
           validation.Field(&book.Author,
               validation.Required.Error("Author name cannot be empty"),
               validation.Length(5, 50)),
       )
   }



				
			

     2.   Validate() āĻĢāĻžāĻ‚āĻļāύ āĻļ⧁āϧ⧁ āĻāϰāϰ⧇āϰ āĻ–ā§‹āρāĻœā§‡ āĻĨāĻžāϕ⧇ āĻāĻŦāĻ‚ āύāĻŋ⧟āĻŽā§‡āϰ āĻŦāĻžāχāϰ⧇ āϗ⧇āϞ⧇āχ āϤāĻž āĻāϰāϰ āĻšāĻŋāϏ⧇āĻŦ⧇ āϰāĻŋāϟāĻžāĻ°ā§āύ āĻ•āϰ⧇ āĻĨāĻžāϕ⧇āĨ¤Â 

     3.   āϝ⧇ āĻĢāĻŋāĻ˛ā§āĻĄā§‡ āφāĻŽāϰāĻž āύāĻŋ⧟āĻŽ āϏ⧇āϟ āĻ•āϰāϤ⧇ āϚāĻžāχ, āϏ⧇āϟāĻž validation.Field() āĻŽā§‡āĻĨāĻĄā§‡ āύāĻŋā§Ÿā§‡ āĻĒā§āĻ°ā§Ÿā§‹āϜāύāĻŽāϤ āĻāĻ• āĻāĻ• āĻ•āϰ⧇ āύāĻŋ⧟āĻŽ āϏ⧇āϟ āĻ•āϰāϤ⧇ āĻĒāĻžāϰāĻŋāĨ¤Â 

     4.  āĻāĻ–āĻžāύ⧇ āφāĻŽāϰāĻž BookName āĻ“ Author āĻĢāĻŋāĻ˛ā§āĻĄā§‡āϰ āϜāĻ¨ā§āϝ, āχāύāĻĒ⧁āϟ āύāĻž āĻĻāĻŋāϞ⧇ āĻāĻŦāĻ‚ āϰ⧇āĻžā§āĻœā§‡āϰ āĻŦāĻžāχāϰ⧇ āĻĄāĻžāϟāĻž āχāύāĻĒ⧁āϟ āĻĻāĻŋāϞ⧇ āĻāϰāϰ āϰāĻŋāϟāĻžāĻ°ā§āύ āĻ•āϰāĻžāϰ āĻŦā§āϝāĻŦāĻ¸ā§āĻĨāĻž āĻ•āϰ⧇āĻ›āĻŋāĨ¤Â 

  • controllers/book.go āĻ – 

     5.  āĻ­ā§āϝāĻžāϞāĻŋāĻĄā§‡āĻļāύ⧇āϰ āĻĢāĻžāĻ‚āĻļāύ āϞ⧇āĻ–āĻž āĻļ⧇āώ⧇ āĻāĻ–āύ āφāĻŽāĻžāĻĻ⧇āϰ āĻ•āĻžāϜ āĻšāĻšā§āϛ⧇ controllers/book.go āϤ⧇ āĻĢ⧇āϰāϤ āĻ¯ā§‡ā§Ÿā§‡ CreateBook() āĻ“ UpdateBook() āĻĢāĻžāĻ‚āĻļāύ⧇ āĻāϰ āĻĒā§āĻ°ā§Ÿā§‹āĻ— āĻ•āϰāĻžāĨ¤Â 

     6.  CreateBook() āĻāϰ āĻ•ā§āώ⧇āĻ¤ā§āϰ⧇ āϰāĻŋāĻ•ā§‹ā§Ÿā§‡āĻ¸ā§āϟ āĻĨ⧇āϕ⧇ āχāύāĻĒ⧁āϟ āĻĄāĻžāϟāĻž types.BookRequest āĻāϰ āĻāĻ•āϟāĻŋ āχāĻ¨ā§āϏāĻŸā§āϝāĻžāĻ¨ā§āϏ⧇ Bind āĻ•āϰāĻžāϰ āĻĒāϰ āϤāĻž Validate() āĻŽā§‡āĻĨāĻĄ āϰāĻžāύ āĻ•āϰ⧇ āĻĻ⧇āĻ–āĻŦ āĻāĻŦāĻ‚ āύāĻŋ⧟āĻŽā§‡āϰ āĻŦāĻžāχāϰ⧇ āϗ⧇āϞ⧇ āϏ⧇āϟāĻž āĻāϰāϰ āĻšāĻŋāϏ⧇āĻŦ⧇ āϰ⧇āϏāĻĒāĻ¨ā§āϏ⧇ āĻĒāĻžāĻ āĻžāĻŦā§‹ – 

				
					   reqBook := &types.BookRequest{}
   if err := e.Bind(reqBook); err != nil {
       return e.JSON(http.StatusBadRequest, consts.InvalidInput)
   }
   if err := reqBook.Validate(); err != nil {
       return e.JSON(http.StatusBadRequest, err.Error())
   }

				
			

     7.   āϤāĻžāĻšāϞ⧇ CreateBook() āĻāϰ āϏāĻ°ā§āĻŦāĻļ⧇āώ āϰ⧂āĻĒ āĻĻāĻžāρ⧜āĻžāĻšā§āϛ⧇ – 

controllers/book.go

				
					func CreateBook(e echo.Context) error {
       reqBook := &types.BookRequest{}
       if err := e.Bind(reqBook); err != nil {
           return e.JSON(http.StatusBadRequest, "Invalid Data")
       }
       if err := reqBook.Validate(); err != nil {
           return e.JSON(http.StatusBadRequest, err.Error())
       }
       book := &models.Book{
           BookName:    reqBook.BookName,
           Author:      reqBook.Author,
           Publication: reqBook.Publication,
       }
       if err := BookService.CreateBook(book); err != nil {
           return e.JSON(http.StatusInternalServerError, err.Error())
       }
       return e.JSON(http.StatusCreated, "Book was created successfully")
   }

				
			

      8.  UpdateBook() āĻāϰ āĻ•ā§āώ⧇āĻ¤ā§āϰ⧇āĻ“ āϰāĻŋāĻ•ā§‹ā§Ÿā§‡āĻ¸ā§āϟ āĻĨ⧇āϕ⧇ āχāύāĻĒ⧁āϟ āĻĄāĻžāϟāĻž types.BookRequest āĻāϰ āĻāĻ•āϟāĻŋ āχāĻ¨ā§āϏāĻŸā§āϝāĻžāĻ¨ā§āϏ⧇ Bind āĻ•āϰāĻžāϰ āĻĒāϰ āϤāĻž Validate() āĻŽā§‡āĻĨāĻĄ āϰāĻžāύ āĻ•āϰ⧇ āĻĻ⧇āĻ–āĻŦ āĻāĻŦāĻ‚ āύāĻŋ⧟āĻŽā§‡āϰ āĻŦāĻžāχāϰ⧇ āϗ⧇āϞ⧇ āϏ⧇āϟāĻž āĻāϰāϰ āĻšāĻŋāϏ⧇āĻŦ⧇ āϰ⧇āϏāĻĒāĻ¨ā§āϏ⧇ āĻĒāĻžāĻ āĻžāĻŦā§‹ – 

				
					

   reqBook := &types.BookRequest{}
   if err := e.Bind(reqBook); err != nil {
       return e.JSON(http.StatusBadRequest, consts.InvalidInput)
   }
   if err := reqBook.Validate(); err != nil {
       return e.JSON(http.StatusBadRequest, err.Error())
   }

				
			

    9.  āϤāĻžāĻšāϞ⧇ UpdateBook() āĻāϰ āϏāĻ°ā§āĻŦāĻļ⧇āώ āϰ⧂āĻĒ āĻĻāĻžāρ⧜āĻžāĻšā§āϛ⧇ – 

				
					 func UpdateBook(e echo.Context) error {
       reqBook := &types.BookRequest{}
       if err := e.Bind(reqBook); err != nil {
           return e.JSON(http.StatusBadRequest, consts.InvalidInput)
       }
       
       if err := reqBook.Validate(); err != nil {
           return e.JSON(http.StatusBadRequest, err.Error())
       }
       
       tempBookID := e.Param("bookID")
       bookID, err := strconv.ParseUint(tempBookID, 0, 0)
       if err != nil {
           return e.JSON(http.StatusBadRequest, consts.InvalidID)
       }
       
       existingBook, err := BookService.GetBooks(uint(bookID))
       if err != nil {
           return e.JSON(http.StatusBadRequest, err.Error())
       }
       
       updatedBook := &models.Book{
           ID:          uint(bookID),
           BookName:    existingBook[0].BookName,
           Author:      existingBook[0].Author,
           Publication: existingBook[0].Publication,
       }
       
       if err := BookService.UpdateBook(updatedBook); err != nil {
           return e.JSON(http.StatusInternalServerError, err.Error())
       }

       return e.JSON(http.StatusCreated, "Book was updated successfully")
   }

				
			

āĻāϰāχ āĻŽāĻ§ā§āϝ āĻĻāĻŋā§Ÿā§‡, āĻ…āϤāĻŋ āϏāĻšāĻœā§‡āχ āφāĻŽāϰāĻž āφāĻŽāĻžāĻĻ⧇āϰ āĻĒā§āϰāĻœā§‡āĻ•ā§āĻŸā§‡ āĻ­ā§āϝāĻžāϞāĻŋāĻĄā§‡āĻļāύ āϝ⧋āĻ— āĻ•āϰ⧇ āĻĢ⧇āϞāϞāĻžāĻŽ…Â