[ā§Ž.ā§Ŧ] āĻā§āϝāĻžāϞāĻŋāĻĄā§āĻļāύ (Validation)
Create āĻāĻŦāĻ Update āĻ āĻĒāĻžāϰā§āĻļāύā§āϰ āĻā§āώā§āϤā§āϰā§, āϝ⧠āĻĄāĻžāĻāĻž āĻāĻŽāϰāĻž āĻĄāĻžāĻāĻžāĻŦā§āϏ āĻā§āĻŦāĻŋāϞ⧠āϰāĻžāĻāĻŦ āϤāĻžāĻ āύā§āύā§āϝāϤāĻŽ āĻā§ā§āĻžāϞāĻŋāĻāĻŋ āĻŽā§āĻāύāĻā§āĻāύ āĻāϰāĻž āĻāĻŦāĻļā§āϝāĻāĨ¤ āύāĻāϞ⧠āϝā§āϏāĻāϞ āϏāĻŽāϏā§āϝāĻžāϰ āϏāĻŽā§āĻŽā§āĻā§āύ āĻāĻŽāϰāĻž āĻšāϤ⧠āĻĒāĻžāϰāĻŋ –Â
- āĻā§āύ⧠āĻāĻ āĻŦāĻž āĻāĻāĻžāϧāĻŋāĻ āĻĢāĻŋāϞā§āĻĄā§āϰ āĻā§āϝāĻžāϞ⧠āĻāĻžāϞāĻŋ āĻ āĻŦāϏā§āĻĨāĻžā§ āĻā§āĻŦāĻŋāϞ⧠āĻāύā§āĻā§āϰāĻŋ āĻšā§ā§ āϝā§āϤ⧠āĻĒāĻžāϰā§āĨ¤Â
- āϝā§āĻā§āύ⧠āĻĢāĻŋāϞā§āĻĄā§āϰ āĻā§āϝāĻžāϞā§āϰ āϞāĻŋāĻŽāĻŋāĻ āĻ āϤāĻŋāĻā§āϰāĻŽ āĻšā§ā§ āϝā§āϤ⧠āĻĒāĻžāϰā§āĨ¤
- āϝ⧠āĻĢāĻŋāϞā§āĻĄ āϝā§āϧāϰāĻŖā§āϰ āĻĄāĻžāĻāĻž āĻāĻžāĻāĻĒ āĻā§āϰāĻšāĻŖ āĻāϰ⧠āĻĨāĻžāĻā§ āϤāĻžāϰ āĻŦāĻžāĻāϰā§āϰ āĻ āύā§āϝ āĻā§āύ⧠āĻĄāĻžāĻāĻž āĻāĻžāĻāĻĒā§āϰ āĻā§āϝāĻžāϞ⧠āĻā§āϞ⧠āĻāύāĻĒā§āĻ āĻšā§ā§ āϝā§āϤ⧠āĻĒāĻžāϰ⧠āĻāϤā§āϝāĻžāĻĻāĻŋ āĨ¤Â
āĻ āϧāϰāĻŖā§āϰ āĻ āύāĻžāĻāĻžāĻā§āĻā§āώāĻŋāϤ āĻĒāϰāĻŋāϏā§āĻĨāĻŋāϤāĻŋ āĻā§āĻžāύā§āϰ āĻāύā§āϝ āĻāĻŽāϰāĻž āύāϤā§āύ āĻĄāĻžāĻāĻž Create āĻŦāĻž Update āĻāϰāĻžāϰ āĻĒā§āϰā§āĻŦā§ āϤāĻž āĻāĻāĻāĻž āĻā§āϝāĻžāϞāĻŋāĻĄā§āĻļāύ āĻā§āĻā§āϰ āĻŽāϧā§āϝ āĻĻāĻŋā§ā§ āĻĒāĻžāĻ āĻžāĻŦā§ āĻāĻŦāĻ āύāĻŋā§āĻŽā§āϰ āĻŦāĻžāĻāϰā§āϰ āĻā§āύ āĻĄāĻžāĻāĻž āĻāύāĻĒā§āĻ āĻšā§ā§ āĻĨāĻžāĻāϞ⧠āϤāĻž āĻāĻžāύāĻŋā§ā§ āĻĻā§āĻŦā§ āĨ¤ āϝ⧠āύāĻŋā§āĻŽāĻā§āϞ⧠āĻāĻŽāϰāĻž āύāĻŋāĻļā§āĻāĻŋāϤ āĻāϰāĻŦ :Â
- BookName āĻāĻŦāĻ Author āĻĢāĻŋāϞā§āĻĄ āĻāĻžāϞāĻŋ āĻĨāĻžāĻāĻž āϝāĻžāĻŦā§ āύāĻž, Publication āĻāϰ āĻĨāĻžāĻāĻž āĻŦāĻž āύāĻž āĻĨāĻžāĻāĻžā§ āĻāĻŋāĻā§ āĻšāĻŦā§ āύāĻžāĨ¤
- BookName āĻāϰ āĻā§āϝāĻžāϰā§āĻā§āĻāĻžāϰ āϞāĻŋāĻŽāĻŋāĻ āĻĨāĻžāĻāĻŦā§ 1 āĻĨā§āĻā§ 50 āĻāϰ āĻŽāϧā§āϝ⧠āĨ¤
- 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 āĻ –Â
-  āĻĒā§āϰāĻĨāĻŽā§āĻ āĻā§āϝāĻžāϞāĻŋāĻĄā§āĻļāύā§āϰ āĻā§āĻĄāĻāĻŋ āĻĻā§āĻā§ āύā§āĻ, āϤāĻžāĻšāϞ⧠āĻŦā§āĻāϤ⧠āϏā§āĻŦāĻŋāϧāĻž āĻšāĻŦā§ āĻāĻŋ āĻāϰā§āĻāĻŋ āĻāĻŽāϰāĻž –Â
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")
}
āĻāϰāĻ āĻŽāϧā§āϝ āĻĻāĻŋā§ā§, āĻ āϤāĻŋ āϏāĻšāĻā§āĻ āĻāĻŽāϰāĻž āĻāĻŽāĻžāĻĻā§āϰ āĻĒā§āϰāĻā§āĻā§āĻā§ āĻā§āϝāĻžāϞāĻŋāĻĄā§āĻļāύ āϝā§āĻ āĻāϰ⧠āĻĢā§āϞāϞāĻžāĻŽ…Â