Vivasoft-logo

[ā§Ž.ā§Ģ] CRUD āĻĢāĻžāĻ‚āĻļāύāĻžāϞāĻŋāϟāĻŋāϰ āĻĒā§āĻ°ā§Ÿā§‹āĻ— (Applying CRUD functionality)

āĻāϤāĻ•ā§āώāĻŖ āϧāϰ⧇ āϝāĻž āĻ•āϰ⧇āĻ›āĻŋ āφāĻŽāϰāĻž āϤāĻž āĻ›āĻŋāϞ āĻĒā§āϰāĻœā§‡āĻ•ā§āϟ āĻ¸ā§āĻŸā§āϰāĻžāĻ•āϚāĻžāϰāĻŋāĻ‚āĨ¤ āĻāĻ•āϟāĻž āĻĒā§āϰāĻœā§‡āĻ•ā§āĻŸā§‡āϰ āϕ⧋āĻĨāĻžā§Ÿ āĻ•āĻŋ āĻšāĻšā§āϛ⧇, āĻ•āĻŋ āϧāϰāϪ⧇āϰ āϏāĻŽāĻ¸ā§āϝāĻžā§Ÿ āϕ⧋āĻĨāĻžā§Ÿ āĻšā§‡āĻ• āĻ•āϰāĻž āĻĒā§āĻ°ā§Ÿā§‹āϜāύ, āφāϰ āϕ⧋āĻĨāĻžāĻ“ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āφāύāĻž āϞāĻžāĻ—āϞ⧇ āϏ⧇āϟāĻž āϝāĻžāϤ⧇ āϏāĻšāĻœā§‡ āĻ•āϰāĻž āϝāĻžā§Ÿ, āχāĻ¤ā§āϝāĻžāĻĻāĻŋ āύāĻžāύāĻžāĻŦāĻŋāϧ āĻ•āĻžāĻœā§‡āϰ āϏ⧁āĻŦāĻŋāϧāĻžāϰ āϜāĻ¨ā§āϝ āφāĻŽāĻžāĻĻ⧇āϰ āĻāχ āĻ¸ā§āĻŸā§āϰāĻžāĻ•āϚāĻžāϰāĻŋāĻ‚ āĻāϰ āĻĒā§āĻ°ā§Ÿā§‹āϜāύ āĻ›āĻŋāϞāĨ¤Â 

āĻāĻ–āύ āφāĻŽāϰāĻž āĻ•āĻžāϜ āĻ•āϰāĻž āĻļ⧁āϰ⧁ āĻ•āϰāĻŦ āφāĻŽāĻžāĻĻ⧇āϰ CRUD API āĻāϰ āωāĻĒāϰāĨ¤ āĻāĻ•āĻžāϧāĻžāϰ⧇ āĻĒā§āϰāĻ¤ā§āϝ⧇āĻ• āϰāĻŋāĻ•ā§‹ā§Ÿā§‡āĻ¸ā§āϟ āĻ•āĻŋāĻ­āĻžāĻŦ⧇ āĻšā§āϝāĻžāĻ¨ā§āĻĄā§‡āϞ āĻ•āϰāĻŦ, āϰ⧇āϏāĻĒāĻ¨ā§āϏ āĻ•āĻŋāĻ­āĻžāĻŦ⧇ āϤ⧈āϰāĻŋ āĻ•āϰāĻŦ āĻāĻŦāĻ‚ āĻĄāĻžāϟāĻžāĻŦ⧇āϏ⧇āϰ āϏāĻžāĻĨ⧇ āĻ•āĻŋāĻ­āĻžāĻŦ⧇ āϝ⧋āĻ—āĻžāϝ⧋āĻ— āϰāĻ•ā§āώāĻž āĻ•āϰāĻŦ āϤāĻžāϰ āϏāĻŦāχ āĻĒāĻ°ā§āϝāĻžā§ŸāĻ•ā§āϰāĻŽā§‡ āχāĻŽāĻĒā§āϞāĻŋāĻŽā§‡āĻ¨ā§āϟ āĻ•āϰāĻŦ āĻāĻ–āύ āφāĻŽāϰāĻžāĨ¤

  • āϰ⧇āϏāĻĒāĻ¨ā§āϏ āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇ āĻ•āĻŋāϛ⧁ āĻ•āĻĨāĻž –

controllers/book.go āĻĨ⧇āϕ⧇ āφāĻŽāϰāĻž āϏāĻŦāϧāϰāύ⧇āϰ āϰ⧇āϏāĻĒāĻ¨ā§āϏ āχāωāϜāĻžāϰ⧇āϰ āĻ•āĻžāϛ⧇ āϰāĻŋāϟāĻžāĻ°ā§āύ āĻ•āϰāĻŦāĨ¤ āϏ⧁āϤāϰāĻžāĻ‚ āφāĻŽāĻžāĻĻ⧇āϰ āĻāχ āϰ⧇āϏāĻĒāĻ¨ā§āϏ⧇āϰ āĻ—āĻ āύāϟāĻž āϕ⧇āĻŽāύ āĻšāĻŦ⧇ āϤāĻž āφāĻŽāĻžāĻĻ⧇āϰ āϜāĻ¨ā§āϝ āϜāĻžāύāĻž āϜāϰ⧁āϰāĻŋāĨ¤ āĻāĻ•āϟāĻŋ āϰ⧇āϏāĻĒāĻ¨ā§āϏ⧇āϰ āωāĻĻāĻžāĻšāϰāĻŖ āĻĻāĻŋā§Ÿā§‡ āĻŦāĻžāĻ•āĻŋ āĻŦā§āϝāĻžāĻ–ā§āϝāĻž āĻĻā§‡ā§ŸāĻž āĻšāϞ⧋ – 

				
					e.JSON(http.StatusCreated, "Book was created successfully")

				
			

āĻāĻ–āĻžāύ⧇ e.JSON() āĻ ⧍ āϟāĻž āĻ­ā§āϝāĻžāϞ⧁ āĻĒāĻžāϏ āĻ•āϰāĻž āϝāĻžā§ŸāĨ¤ āĻāĻ• āĻšāĻšā§āϛ⧇ āĻ¸ā§āĻŸā§āϝāĻžāϟāĻžāϏ āϕ⧋āĻĄ āĻāĻŦāĻ‚ āĻ…āĻĒāϰāϟāĻŋ āĻšāϞ⧋ āϝ⧇āϕ⧋āύ⧋ āĻ•āĻŋāϛ⧁ āĨ¤ āωāĻĒāϰ⧇ āφāĻŽāϰāĻž http.StatusCreated āĻĻā§āĻŦāĻžāϰāĻž āĻŦ⧁āĻāĻŋā§Ÿā§‡āĻ›āĻŋ āĻ¸ā§āĻŸā§āϝāĻžāϟāĻžāϏ āϕ⧋āĻĄ 201 āϕ⧇, āϝ⧇āϟāĻž āĻĻā§āĻŦāĻžāϰāĻž āĻāĻ•āϜāύ āĻĄā§‡āϭ⧇āϞāĻĒāĻžāϰ āĻŦ⧁āĻāϤ⧇ āĻĒāĻžāϰāĻŦ⧇ āϝ⧇ āĻāĻ–āĻžāĻ¨ā§‡Â  āĻ•āĻŋāϛ⧁ āĻāĻ•āϟāĻžāϰ Create/Update āϏāĻžāĻ•āϏ⧇āϏāĻĢ⧁āϞ āĻšā§Ÿā§‡āϛ⧇āĨ¤ āĻĻā§āĻŦāĻŋāĻ¤ā§€ā§Ÿ āĻ­ā§āϝāĻžāϞ⧁āϰ āϜāĻ¨ā§āϝ āφāĻŽāϰāĻž āϝ⧇āϕ⧋āύ⧋ āĻ•āĻŋāϛ⧁ āĻĒāĻžāϏ āĻ•āϰāϤ⧇ āĻĒāĻžāϰāĻŋ āϝāĻž āϰāĻŋāĻ•ā§‹ā§Ÿā§‡āĻ¸ā§āϟ āĻ•āĻžāϰ⧀āϰ āĻ•āĻžāϛ⧇ āϤāĻĨā§āϝāĻŦāĻšā§āϞ āĻāĻŦāĻ‚ āϏāĻšāϜāĻŦā§‹āĻ§ā§āϝ āĻšāϞ⧇ āĻ­āĻžāϞ⧋ āĻšā§ŸāĨ¤

āϰ⧇āϏāĻĒāĻ¨ā§āϏ⧇āϰ āĻŦāĻŋāĻˇā§Ÿā§‡ āĻāχ āĻŦ⧇āϏāĻŋāĻ•āϟāĻž āϜāĻžāύāĻžāύ⧋āϰ āωāĻĻā§āĻĻ⧇āĻļā§āϝ āĻšāϞ⧋, āĻ•āĻ¨ā§āĻŸā§āϰ⧋āϞāĻžāϰ⧇ āφāĻŽāĻžāĻĻ⧇āϰ āĻāχ āϰ⧇āϏāĻĒāĻ¨ā§āϏ āύāĻŋā§Ÿā§‡ āĻŦāĻžāϰ āĻŦāĻžāϰ āĻ•āĻžāϜ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇āĨ¤ āϏ⧇āĻ–āĻžāύ⧇ āφāϰ⧋ āĻ…āύ⧇āĻ• āĻ¸ā§āĻŸā§āϝāĻžāϟāĻžāϏ āϕ⧋āĻĄ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻĻ⧇āĻ–āϤ⧇ āĻĒāĻžāĻŦā§‹āĨ¤ āĻŦāĻŋāĻ­āĻŋāĻ¨ā§āύ āĻ¸ā§āĻŸā§āϝāĻžāϟāĻžāϏ āϕ⧋āĻĄ āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇ āϜāĻžāύāĻžāϰ āϜāĻ¨ā§āϝ āĻāχ āϞāĻŋāĻ‚āĻ•āϟāĻŋ āϏāĻžāĻšāĻžāĻ¯ā§āϝ āĻ•āϰāĻŦ⧇āĨ¤Â 

 āĻļ⧁āϰ⧁ āĻ•āϰāĻž āϝāĻžāĻ• āϤāĻžāĻšāϞ⧇ āĻāχ āĻ…āĻ‚āĻļ⧇āϰ āĻ•āĻžāϜâ€Ļ 

[ā§Ž.ā§Ģ.ā§§] Create āĻāϰ āφāĻĻāĻŋ-āĻ…āĻ¨ā§āĻ¤Â 

āĻļ⧁āϰ⧁āϤ⧇āχ āφāĻŽāϰāĻž āĻ•āĻžāϜ āĻļ⧁āϰ⧁ āĻ•āϰāĻŦ CRUD āĻāϰ āĻĒā§āϰāĻĨāĻŽ āĻĢāĻžāĻ‚āĻļāύāĻžāϞāĻŋāϟāĻŋ, Create āύāĻŋā§Ÿā§‡ : 

  • controllers/book.go āĻ –    
  1. āφāĻŽāĻžāĻĻ⧇āϰ āĻĒā§āϰāĻĨāĻŽ āĻ•āĻžāϜ āĻšāĻŦ⧇ controllers/book.go āĻāϰ CreateBook() āĻĢāĻžāĻ‚āĻļāύ⧇āĨ¤ āύāϤ⧁āύ āĻŦāχ Create āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āĻĒā§āĻ°ā§Ÿā§‹āϜāĻ¨ā§€ā§Ÿ āϝ⧇ āχāύāĻĒ⧁āϟ āϗ⧁āϞ⧋ āφāϛ⧇ āϏ⧇āϗ⧁āϞ⧋ āφāĻŽāĻžāĻĻ⧇āϰ āĻŦāĻžāύāĻŋā§Ÿā§‡ āĻ¨ā§‡ā§ŸāĻž āĻ•āĻžāĻ¸ā§āϟāĻŽ Struct, BookRequest āĻāϰ āĻāĻ•āϟāĻŋ āχāĻ¨ā§āϏāĻŸā§āϝāĻžāĻ¨ā§āϏ reqBook āϏāĻžāĻĨ⧇ Bind āĻ•āϰ⧇ āĻĻ⧇āĻŦā§‹ – 
				
					  reqBook := &types.BookRequest{}
  if err := e.Bind(reqBook); err != nil {
      return e.JSON(http.StatusBadRequest, "Invalid Data")
  }

				
			

    2.  ECHO āϤ⧇ āφāĻ—āϤ āϕ⧋āύ⧋ āϰāĻŋāĻ•ā§‹ā§Ÿā§‡āĻ¸ā§āĻŸā§‡āϰ āĻĄāĻžāϟāĻž Bind āĻĻā§āĻŦāĻžāϰāĻž āϕ⧋āύ⧋ Struct āĻŦāĻž Map āĻ āĻ¨ā§‡ā§ŸāĻž āϝāĻžā§ŸāĨ¤ āωāĻĒāϰ⧇āϰ Bind āĻĢāĻžāĻ‚āĻļāύ āĻĻā§āĻŦāĻžāϰāĻžāĻ“ Book Create āĻ•āϰāĻžāϰ āϝāĻžāĻŦāĻ¤ā§€ā§Ÿ āĻĄāĻžāϟāĻž āφāĻŽāϰāĻž āϰāĻŋāĻ•ā§‹ā§Ÿā§‡āĻ¸ā§āϟ āĻŦāĻĄāĻŋ āĻĨ⧇āϕ⧇ reqBook āĻ āĻŽā§āϝāĻžāĻĒ āĻ•āϰ⧇ āĻĻāĻŋā§Ÿā§‡āĻ›āĻŋāĨ¤Â 

     3.  āĻĒāϰāĻŦāĻ°ā§āϤ⧀ āϧāĻžāĻĒ⧇ reqBook āĻāϰ āĻĢāĻŋāĻ˛ā§āĻĄ āĻĄāĻžāϟāĻž āϗ⧁āϞ⧋ models.Book āĻāϰ āĻāĻ•āϟāĻŋ āχāĻ¨ā§āϏāĻŸā§āϝāĻžāĻ¨ā§āϏ⧇ āύ⧇āĻŦā§‹āĨ¤ āĻ•āĻžāϰāĻŖ āĻĄāĻžāϟāĻžāĻŦ⧇āϏ āĻŸā§‡āĻŦāĻŋāϞ⧇ āύāϤ⧁āύ Book āϰāĻžāĻ–āϤ⧇ āϗ⧇āϞ⧇ āĻŸā§‡āĻŦāĻŋāϞ⧇āϰ āĻ¸ā§āĻ•āĻŋāĻŽāĻž Struct āĻāϰ āĻĒā§āĻ°ā§Ÿā§‹āϜāύ āĻĒā§œā§‡ – 

				
					  book := &models.Book{
       BookName:    reqBook.BookName,
       Author:      reqBook.Author,
       Publication: reqBook.Publication,
   }

				
			

    4.  āĻāĻŦāĻžāϰ⧇ āφāĻŽāϰāĻž āĻāχ book Struct āϟāĻŋ āϏāĻžāĻ°ā§āĻ­āĻŋāϏ⧇ āĻĒāĻžāĻ āĻŋā§Ÿā§‡ āĻĻ⧇āĻŦā§‹ āϝāĻžāϤ⧇ āĻ•āϰ⧇ āϏāĻžāĻ°ā§āĻ­āĻŋāϏ āĻĄāĻžāϟāĻžāĻŦ⧇āϏ āĻĢāĻžāĻ‚āĻļāύāϕ⧇ āĻāϟāĻž āĻĒāĻžāĻ āĻžāϤ⧇ āĻĒāĻžāϰ⧇ – 

				
					   if err := BookService.CreateBook(book); err != nil {
       return e.JSON(http.StatusInternalServerError, err.Error())
   }
   return e.JSON(http.StatusCreated, "Book was created successfully")
				
			

   5.  āωāĻĒāϰ⧇ BookService āĻāϰ CreateBook() āĻŽā§‡āĻĨāĻĄāϟāĻŋ āĻŦā§āϝāĻŦāĻšā§ƒāϤ āĻšā§Ÿā§‡āϛ⧇, āϝāĻž āĻĄāĻžāϟāĻžāĻŦ⧇āϏ āĻŸā§‡āĻŦāĻŋāϞ⧇ āύāϤ⧁āύ Book Create āĻ•āϰāĻž āϗ⧇āϞ⧇ āĻŦāĻž āύāĻž āϗ⧇āϞ⧇ āϰ⧇āϏāĻĒāĻ¨ā§āϏ āϰāĻŋāϟāĻžāĻ°ā§āύ āĻ•āϰāĻŦ⧇ āĻāĻŦāĻ‚ āϏ⧇ āĻ…āύ⧁āϝāĻžā§Ÿā§€ āĻ•āĻ¨ā§āĻŸā§āϰ⧋āϞāĻžāϰ āĻĨ⧇āϕ⧇ āϰ⧇āϏāĻĒāĻ¨ā§āϏ āϰāĻŋāϟāĻžāĻ°ā§āύ āĻ•āϰāĻž āĻšāĻŦ⧇āĨ¤ āĻāϰ āϜāĻ¨ā§āϝ āφāĻŽāĻžāĻĻ⧇āϰ “Go-bootcamp/pkg/services” āĻĒā§āϝāĻžāϕ⧇āϜāϟāĻŋ āχāĻŽāĻĒā§‹āĻ°ā§āϟ āĻ•āϰāĻž āϞāĻžāĻ—āĻŦ⧇āĨ¤Â 

    6.  āϤāĻžāĻšāϞ⧇ controllers/book.go āĻāϰ 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")
   }

				
			
  • services/book.go āĻ – 

     7.   controllers/book.go āĻāϰ CreateBook() āĻĨ⧇āϕ⧇ services/book.go āĻāϰ CreateBook() āĻ models.Book āĻāϰ āĻāĻ•āϟāĻŋ āχāĻ¨ā§āϏāĻŸā§āϝāĻžāĻ¨ā§āϏ āĻĒāĻžāĻ āĻžāύ⧋ āĻšā§Ÿā§‡āϛ⧇āĨ¤ āϏ⧇āϟāĻž āĻāĻ–āύ repositories/book.go āĻāϰ CreateBook() āĻŽā§‡āĻĨāĻĄā§‡ āĻĒāĻžāϏ āĻ•āϰāĻŦ āĨ¤ āϝ⧇āϟāĻž IBookRepo āĻāϰ repo āϤ⧇ āϰāĻžāĻ–āĻž āχāĻ¨ā§āϏāĻŸā§āϝāĻžāĻ¨ā§āϏ āĻĻā§āĻŦāĻžāϰāĻž āϏāĻŽā§āĻ­āĻŦ āĻšāĻŦ⧇āĨ¤Â  āĻāϰ āϜāĻ¨ā§āϝ āφāĻŽāĻžāĻĻ⧇āϰ “Go-bootcamp/pkg/repositories” āĻĒā§āϝāĻžāϕ⧇āϜāϟāĻŋ āχāĻŽāĻĒā§‹āĻ°ā§āϟ āĻ•āϰāĻž āϞāĻžāĻ—āĻŦā§‡Â 

– services/book.go

				
					  func (service *BookService) CreateBook(book *models.Book) error {
       if err := service.repo.CreateBook(book); err != nil {
           return errors.New("book was not created")
       }
       return nil
   }

				
			

     8.  āĻāĻ–āĻžāύ⧇ āĻĄāĻžāϟāĻžāĻŦ⧇āϏ⧇āϰ CreateBook() āĻŽā§‡āĻĨāĻĄ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āϝāĻĻāĻŋ āύāϤ⧁āύ Book āĻŸā§‡āĻŦāĻŋāϞ⧇ āύāĻž Create āĻ•āϰāĻž āϝāĻžā§Ÿ, āϏ⧇āĻ•ā§āώ⧇āĻ¤ā§āϰ⧇ āĻāϰāϰ āϰāĻŋāϟāĻžāĻ°ā§āύ āĻšāĻŦ⧇ āĻāĻŦāĻ‚ āϏāĻžāĻ°ā§āĻ­āĻŋāϏ⧇ “book was not created” āϰ⧇āϏāĻĒāĻ¨ā§āϏ āϟāĻŋ āϤ⧈āϰāĻŋ āĻšā§Ÿā§‡ āϤāĻž āĻ•āĻ¨ā§āĻŸā§āϰ⧋āϞāĻžāϰ⧇ āϰāĻŋāϟāĻžāĻ°ā§āύ āĻ•āϰāĻŦ⧇āĨ¤

     9.  repositories/book.go āĻ – 

    10.  āϏāĻŦāĻļ⧇āώ⧇ āĻĄāĻžāϟāĻžāĻŦ⧇āϏ⧇āϰ āϏāĻžāĻĨ⧇ āϏāϰāĻžāϏāϰāĻŋ āϝ⧋āĻ—āĻžāϝ⧋āϗ⧇āϰ āϜāĻ¨ā§āϝ repositories/book.go āĻāϰ CreateBook() āĻŽā§‡āĻĨāĻĄ models.Book āĻāϰ āĻāĻ•āϟāĻŋ āχāĻ¨ā§āϏāĻŸā§āϝāĻžāĻ¨ā§āϏ āϰāĻŋāϏāĻŋāĻ­ āĻ•āϰ⧇āϛ⧇āĨ¤ āϏ⧇āϟāĻž GORM āĻāϰ Create āĻŽā§‡āĻĨāĻĄ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇, āĻŸā§‡āĻŦāĻŋāϞ⧇ āϝ⧋āĻ— āĻ•āϰ⧇ āĻĻ⧇āĻŦā§‹ āĻāĻŦāĻ‚ āϏāĻŽā§āĻ­āĻŦ āύāĻž āĻšāϞ⧇ āĻāϰāϰ āϰāĻŋāϟāĻžāĻ°ā§āύ āĻ•āϰāĻž āĻšāĻŦ⧇ – 

repositories/book.go

				
					 func (repo *bookRepo) CreateBook(book *models.Book) error {
       if err := repo.db.Create(book).Error; err != nil {
           return err
       }
       return nil
   }

				
			

     11.  āĻāĻ–āĻžāύ⧇ repo.db āĻšāĻšā§āϛ⧇ āφāĻŽāĻžāĻĻ⧇āϰ āϞ⧋āĻ•āĻžāϞāĻŋ āĻ¸ā§āĻŸā§‹āϰ āĻ•āϰāĻž *gorm.DB āĻāϰ āχāĻ¨ā§āϏāĻŸā§āϝāĻžāĻ¨ā§āϏāĨ¤Â 

  • POSTMAN āĻāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰ

āĻ­āĻžāϞ⧋ āĻšā§Ÿ āϝāĻĻāĻŋ āĻāĻ•āϟāĻž āĻĢāĻžāĻ‚āĻļāύāĻžāϞāĻŋāϟāĻŋ āύāĻŋā§Ÿā§‡ āĻ•āĻžāϜ āĻ•āϰāĻž āĻļ⧇āώ⧇ āϏ⧇āϟāĻž āϏāĻžāĻĨ⧇ āϏāĻžāĻĨ⧇ āĻšā§‡āĻ• āĻ•āϰāĻž āĻšā§ŸāĨ¤ “localhost:9030/bookstore/book” route āĻ āύāĻŋāĻšā§‡āϰ json āĻ­ā§āϝāĻžāϞ⧁ āϟāĻž āϚāĻžāϞāĻŋā§Ÿā§‡ āφāĻŽāϰāĻž Create āĻĢāĻžāĻ‚āĻļāύāĻžāϞāĻŋāϟāĻŋ āĻ āĻŋāĻ•āĻ āĻžāĻ• āĻļ⧇āώ āĻ•āϰāϤ⧇ āĻĒ⧇āϰ⧇āĻ›āĻŋ āĻ•āĻŋāύāĻž āϤāĻž āĻšā§‡āĻ• āĻ•āϰāϤ⧇ āĻĒāĻžāϰāĻŋ – 

				
					 {
       "bookname" : "Killing Floor",
       "author" : "Lee Child",
       "publication" : "Oxford Press"
   }

				
			
  1. āϝāĻĻāĻŋ āφāĻŽāĻžāĻĻ⧇āϰ āϕ⧋āĻĄ āĻ āĻŋāĻ•āĻ āĻžāĻ• āĻĨāĻžāϕ⧇ āϤāĻžāĻšāϞ⧇ Postman āĻ āϰ⧇āϏāĻĒāĻ¨ā§āϏ āφāϏāĻŦ⧇ “Book was created successfully āϰ⧇āĻĢāĻžāϰ⧇āĻ¨ā§āϏ āĻšāĻŋāϏ⧇āĻŦ⧇ āύāĻŋāĻšā§‡āϰ āĻ›āĻŦāĻŋ āϟāĻž āĻĻ⧇āĻ–āϤ⧇ āĻĒāĻžāϰāĻŋ – 

[ā§Ž.ā§Ģ.⧍] Read āĻāϰ āφāĻĻāĻŋ-āĻ…āĻ¨ā§āĻ¤Â 

āĻāĻŦāĻžāϰ⧇ āĻ•āĻžāϜ āĻļ⧁āϰ⧁ āĻ•āϰāĻŦ CRUD āĻāϰ āĻĻā§āĻŦāĻŋāĻ¤ā§€ā§Ÿ āĻĢāĻžāĻ‚āĻļāύāĻžāϞāĻŋāϟāĻŋ, Read āύāĻŋā§Ÿā§‡ :

  • controllers/book.go āĻ –    
  1. āφāĻŽāĻžāĻĻ⧇āϰ āĻĒā§āϰāĻĨāĻŽ āĻ•āĻžāϜ āĻšāĻŦ⧇ controllers/book.go āĻāϰ GetBooks() āĻĢāĻžāĻ‚āĻļāύ⧇āĨ¤ āφāĻŽāϰāĻž āφāĻŽāĻžāĻĻ⧇āϰ GetBooks() āĻĢāĻžāĻ‚āĻļāύ⧇ ⧍ āϧāϰāϪ⧇āϰ āĻ•āĻžāϜ āĻ•āϰāĻŦ – 
    1. āĻŦāχ āĻāϰ āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ ID āĻĒāĻžāĻ āĻžāϞ⧇ āĻļ⧁āϧ⧁ āĻ“āχ āĻŦāχ āĻāϰ āĻĄāĻŋāĻŸā§‡āχāϞāϏ āϰ⧇āϏāĻĒāĻ¨ā§āϏ⧇ āĻĒāĻžāĻŦā§‹āĨ¤
    2. āφāϰ āϕ⧋āύ⧋ āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ ID āύāĻž āĻĒāĻžāĻ āĻžāύ⧋ āĻšāϞ⧇ āϏāĻŦ āĻŦāĻ‡ā§Ÿā§‡āϰ āĻāĻ•āϟāĻž āϏāĻžāĻŽāĻžāϰāĻŋ āϞāĻŋāĻ¸ā§āϟ āϰ⧇āϏāĻĒāĻ¨ā§āϏ āĻšāĻŋāϏ⧇āĻŦ⧇ āĻĒāĻžāĻ āĻžāĻŦā§‹āĨ¤Â 
  2.  āĻāϰ āϜāĻ¨ā§āϝ āφāĻŽāϰāĻž āĻļ⧁āϰ⧁āϤ⧇āχ echo.Context āĻ…āĻŦāĻœā§‡āĻ•ā§āϟ āĻĨ⧇āϕ⧇ āĻ•ā§ā§Ÿā§‡āϰāĻŋ āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāϟāĻžāϰ āĻšāĻŋāϏ⧇āĻŦ⧇ bookID āĻāϰ āϕ⧋āύ⧋ āĻŽāĻžāύ āφāϛ⧇ āĻ•āĻŋāύāĻž āϏ⧇āϟāĻž āĻšā§‡āĻ• āĻ•āϰāĻŦ āĨ¤
				
					tempBookID := e.QueryParam("bookID")

				
			

      3.  āĻāϰāĻĒāϰ āĻĒā§āϰāĻžāĻĒā§āϤāĻ­ā§āϝāĻžāϞ⧁āϟāĻŋ āĻĒāĻžāĻ°ā§āϏ āĻ•āϰ⧇ āχāĻ¨ā§āϟāĻŋāϜāĻžāϰ⧇ āϰ⧂āĻĒāĻžāĻ¨ā§āϤāϰ āĻ•āϰ⧇ āĻĻ⧇āĻ–āĻŦā§‹ āφāĻĻ⧌ āϕ⧋āύ⧋ āĻ­ā§āϝāĻžāϞ⧁ āĻĻā§‡ā§ŸāĻž āĻšā§Ÿā§‡āϛ⧇ āĻ•āĻŋāύāĻžāĨ¤

      4.   āĻāϰāĻĒāϰ BookService āĻāϰ āĻŽā§‡āĻĨāĻĄ GetBooks() āĻ āĻāχ bookID āĻĒāĻžāϏ āĻ•āϰāĻŦ āĻāĻŦāĻ‚ āϰ⧇āϏāĻĒāĻ¨ā§āϏ⧇āϰ āĻ…āĻĒ⧇āĻ•ā§āώāĻž āĻ•āϰāĻŦāĨ¤

controllers/book.go

				
					 func GetBooks(e echo.Context) error {
       tempBookID := e.QueryParam("bookID")
       bookID, err := strconv.ParseInt(tempBookID, 0, 0)
       if err != nil && tempBookID != "" {
           return e.JSON(http.StatusBadRequest, "Enter a valid book ID")
       }

       book, err := BookService.GetBooks(uint(bookID))

       if err != nil {
           return e.JSON(http.StatusBadRequest, err.Error())
       }

       return e.JSON(http.StatusOK, book)
   }

				
			

     5.  āϝāĻĻāĻŋ āϏāĻžāĻ°ā§āĻ­āĻŋāϏ āĻĨ⧇āϕ⧇ āĻāϰāϰ āϰāĻŋāϟāĻžāĻ°ā§āύ āĻšā§Ÿ, āϏ⧇āĻ•ā§āώ⧇āĻ¤ā§āϰ⧇ āϏ⧇āϟāĻž āĻĢāĻžāχāύāĻžāϞ āϰ⧇āϏāĻĒāĻ¨ā§āϏ āĻšāĻŋāϏ⧇āĻŦ⧇ āϰāĻŋāϟāĻžāĻ°ā§āύ āĻ•āϰāĻž āĻšāĻŦ⧇āĨ¤ āĻ…āĻ¨ā§āϝāĻĨāĻž āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āĻŦāχ āĻŦāĻž āĻŦāχ āĻāϰ āϏāĻŽāĻˇā§āϟāĻŋ āĻĢāĻžāχāύāĻžāϞ āϰ⧇āϏāĻĒāĻ¨ā§āϏ āĻšāĻŋāϏ⧇āĻŦ⧇ āϰāĻŋāϟāĻžāĻ°ā§āύ āĻ•āϰāĻž āĻšāĻŦ⧇āĨ¤

  •  services/book.go āĻ – 

     6.  services/book.go āĻāϰ GetBooks() āĻŽā§‡āĻĨāĻĄ bookID āϰāĻŋāϏāĻŋāĻ­ āĻ•āϰ⧇ āĻāĻŦāĻ‚ āϤāĻž āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ repositories/book.go āĻāϰ GetBooks() āĻŽā§‡āĻĨāĻĄāϕ⧇ āĻ•āϞ āĻ•āϰ⧇āϛ⧇āĨ¤Â 

      7.  āĻāϰāĻĒāϰ āϰ⧇āϏāĻĒāĻ¨ā§āϏ āĻšāĻŋāϏ⧇āĻŦ⧇ models.Book āĻāϰ āĻāĻ•āϟāĻŋ āĻ…ā§āϝāĻžāϰ⧇ āφāϏāĻŦ⧇āĨ¤ āϝāĻĻāĻŋ āĻ…ā§āϝāĻžāϰ⧇ āϟāĻŋ āĻļā§‚āĻ¨ā§āϝ āĻšā§Ÿā§‡ āĻĨāĻžāϕ⧇ āϤāĻžāĻšāϞ⧇ “no book found” āϰ⧇āϏāĻĒāĻ¨ā§āϏ āϟāĻŋ āĻ•āĻ¨ā§āĻŸā§āϰ⧋āϞāĻžāϰ⧇ āϰāĻŋāϟāĻžāĻ°ā§āύ āĻ•āϰāĻŦ⧇āĨ¤

      8. āϝāĻĻāĻŋ āĻ…ā§āϝāĻžāϰ⧇ āĻļā§‚āĻ¨ā§āϝ āύāĻž āĻšā§Ÿā§‡ āĻĨāĻžāϕ⧇ āϤāĻžāĻšāϞ⧇ āϤāĻž types.BookRequest āĻāϰ āĻ…ā§āϝāĻžāϰ⧇, āϝāĻž āφāĻŽāĻžāĻĻ⧇āϰ āϤ⧈āϰāĻŋ āĻāĻ•āϟāĻŋ āĻ•āĻžāĻ¸ā§āϟāĻŽ Struct, āϤāĻžāϤ⧇ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰ⧇ āϰāĻŋāϟāĻžāĻ°ā§āύ āĻ•āϰāĻŦāĨ¤

       9.  āĻāĻŽāύāϟāĻž āĻ•āϰāĻžāϰ āĻ•āĻžāϰāĻŖ āĻšāϞ⧋, āφāĻŽāϰāĻž models.Book Struct āϟāĻŋ āĻļ⧁āϧ⧁ āĻĄāĻžāϟāĻžāĻŦ⧇āϏ⧇āϰ āĻ…āĻĒāĻžāϰ⧇āĻļāύ⧇āϰ āĻ•āĻžāĻœā§‡ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻŦāĨ¤

 services/book.go

				
					 func (service *BookService) GetBooks(bookID uint) ([]types.BookRequest, error) {
       var allBooks []types.BookRequest
       book := service.repo.GetBooks(bookID)
       if len(book) == 0 {
           return nil, errors.New("no book found")
       }
       for _, val := range book {
           allBooks = append(allBooks, types.BookRequest{
               ID:          val.ID,
               BookName:    val.BookName,
               Author:      val.Author,
               Publication: val.Publication,
           })
       }
       return allBooks, nil
   }

				
			
  • repositories/book.go āĻ – 

     10.  repositories/book.go āĻ GetBooks() āĻŽā§‡āĻĨāĻĄā§‡ bookID āϰāĻŋāϏāĻŋāĻ­ āĻ•āϰāĻžāϰ āĻĒāϰ bookID āĻāϰ āĻāϭ⧇āχāϞ⧇āĻŦāĻŋāϞāĻŋāϟāĻŋ āĻ…āύ⧁āϝāĻžā§Ÿā§€ GORM āĻāϰ Find āĻŽā§‡āĻĨāĻĄ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āĻĒā§āϰāĻžāĻĒā§āϤ āĻĄāĻžāϟāĻžāϰ āϏāĻžāϰāĻŋāϗ⧁āϞ⧋ models.Book āĻāϰ āĻāĻ•āϟāĻŋ āĻ…ā§āϝāĻžāϰ⧇āϤ⧇ āϰ⧇āϖ⧇ āϰāĻŋāϟāĻžāĻ°ā§āύ āĻ•āϰāĻŦ⧇āĨ¤Â 

repositories/book.go

				
					func (repo *bookRepo) GetBooks(bookID uint) []models.Book {
       var Book []models.Book
       var err error

       if bookID != 0 {
           err = repo.db.Where("id = ?", bookID).Find(&Book).Error
       } else {
           err = repo.db.Find(&Book).Error
       }

       if err != nil {
           return []models.Book{}
       }
       return Book
   }

				
			
  • POSTMAN āĻāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰ

localhost:9030/bookstore/book” route āĻ GET āϰāĻŋāĻ•ā§‹ā§Ÿā§‡āĻ¸ā§āϟ āĻĒāĻžāĻ āĻŋā§Ÿā§‡ āφāĻŽāϰāĻž Read āĻĢāĻžāĻ‚āĻļāύāĻžāϞāĻŋāϟāĻŋ āĻ āĻŋāĻ•āĻ āĻžāĻ• āĻļ⧇āώ āĻ•āϰāϤ⧇ āĻĒ⧇āϰ⧇āĻ›āĻŋ āĻ•āĻŋāύāĻž āϤāĻž āĻšā§‡āĻ• āĻ•āϰāϤ⧇ āĻĒāĻžāϰāĻŋ – 
  • bookID āĻ•ā§ā§Ÿā§‡āϰāĻŋ āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāϟāĻžāϰ āĻ›āĻžā§œāĻž āϰ⧇āϏāĻĒāĻ¨ā§āϏ – 
				
					 [
       {
           "bookID": 1,
           "bookname": "Last Kill",
           "author": "Lee Child",
           "publication": "Oxford Press"
       },
       {
           "bookID": 2,
           "bookname": "Killing Floor",
           "author": "Lee Child",
           "publication": "Oxford Press"
       }
   ]

				
			

Postman āϰ⧇āĻĢāĻžāϰ⧇āĻ¨ā§āϏ – 

  • bookID āĻ•ā§ā§Ÿā§‡āϰāĻŋ āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāϟāĻžāϰ āϏāĻš āϰ⧇āϏāĻĒāĻ¨ā§āϏ- (localhost:9030/bookstore/book?bookID=2)
				
					 [
       {
           "bookID": 2,
           "bookname": "Killing Floor",
           "author": "Lee Child",
           "publication": "Oxford Press"
       }
   ]

				
			
  • Postman āϰ⧇āĻĢāĻžāϰ⧇āĻ¨ā§āϏ – 

[ā§Ž.ā§Ģ.ā§Š] Update āĻāϰ āφāĻĻāĻŋ-āĻ…āĻ¨ā§āĻ¤Â 

āĻāĻŦāĻžāϰ⧇ āĻ•āĻžāϜ āĻļ⧁āϰ⧁ āĻ•āϰāĻŦ CRUD āĻāϰ āϤ⧃āĻ¤ā§€ā§Ÿ āĻĢāĻžāĻ‚āĻļāύāĻžāϞāĻŋāϟāĻŋ, Update āύāĻŋā§Ÿā§‡ :

  • controllers/book.go āĻ –  
  1. āĻ•āĻžāϜ āϗ⧁āϞ⧋āχ āĻ…āύ⧇āĻ•āϟāĻž āĻĒ⧁āύāϰāĻžāĻŦ⧃āĻ¤ā§āϤāĻŋ āĻšāĻšā§āϛ⧇āĨ¤ āφāϏāϞ⧇āĻ“ āϤāĻžāχāĨ¤ āĻŦāϞāĻž āϝāĻžā§Ÿ āĻāχ āĻ…āĻ‚āĻļ Create, Read āĻāϰ āϏāĻŽāĻ¨ā§āĻŦā§Ÿā§‡ āĻ—āĻ āĻŋāϤ āĻ…āύ⧇āĻ•āϟāĻžāχāĨ¤Â 

     2.  āĻĒā§āϰāĻĨāĻŽā§‡āχ Update āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āĻĒā§āĻ°ā§Ÿā§‹āϜāĻ¨ā§€ā§Ÿ āϝ⧇ āχāύāĻĒ⧁āϟ āϗ⧁āϞ⧋ āφāϛ⧇ āϏ⧇āϗ⧁āϞ⧋ āφāĻŽāĻžāĻĻ⧇āϰ āĻŦāĻžāύāĻŋā§Ÿā§‡ āĻ¨ā§‡ā§ŸāĻž āĻ•āĻžāĻ¸ā§āϟāĻŽ Struct, BookRequest āĻāϰ āĻāĻ•āϟāĻŋ āχāĻ¨ā§āϏāĻŸā§āϝāĻžāĻ¨ā§āϏ reqBook āϏāĻžāĻĨ⧇ Bind āĻ•āϰ⧇ āĻĻ⧇āĻŦā§‹ – 

				
					   reqBook := &types.BookRequest{}
   if err := e.Bind(reqBook); err != nil {
       return e.JSON(http.StatusBadRequest, "Invalid Data")
   }

				
			

       3.  echo.Context āĻ…āĻŦāĻœā§‡āĻ•ā§āϟ āĻĨ⧇āϕ⧇ āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāϟāĻžāϰ āĻšāĻŋāϏ⧇āĻŦ⧇ bookID āĻāϰ āĻŽāĻžāύ āĻŦ⧇āϰ āĻ•āϰāĻŦ āĻāĻŦāĻ‚ āϤāĻž āĻĒāĻžāĻ°ā§āϏ āĻ•āϰ⧇ āχāĻ¨ā§āϟāĻŋāϜāĻžāϰ⧇ āϰ⧂āĻĒāĻžāĻ¨ā§āϤāϰ āĻ•āϰāĻŦāĨ¤ āϕ⧇āύāύāĻž āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāϟāĻžāϰ āĻ›āĻžā§œāĻž āφāĻŽāϰāĻž āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āĻŦāχ āĻāϰ āĻ­ā§āϝāĻžāϞ⧁ Update āĻ•āϰāϤ⧇ āĻĒāĻžāϰāĻŦ āύāĻž – 

				
					

   tempBookID := e.Param("bookID")
   bookID, err := strconv.ParseUint(tempBookID, 0, 0)
   if err != nil {
       return e.JSON(http.StatusBadRequest, "Enter a valid book ID")
   }

				
			

    4.  āĻāĻŦāĻžāϰ āφāĻŽāϰāĻž āĻĒā§‚āĻ°ā§āĻŦ⧇āϰ Read āĻĢāĻžāĻ‚āĻļāύāĻžāϞāĻŋāϟāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻŦ āĻ…āĻ°ā§āĻĨāĻžā§Ž āφāĻŦāĻžāϰ āϏāĻžāĻ°ā§āĻ­āĻŋāϏ⧇āϰ GetBooks() āĻŽā§‡āĻĨāĻĄāϕ⧇ āĻ•āϞ āĻ•āϰāĻŦ āĻāϟāĻž āĻĻ⧇āĻ–āϤ⧇ āϝ⧇ āωāĻ•ā§āϤ bookID āϏāĻŽā§āĻŦāϞāĻŋāϤ āϕ⧋āύ⧋ āĻŦāχ āφāĻŽāĻžāĻĻ⧇āϰ āĻĄāĻžāϟāĻžāĻŦ⧇āϏ⧇ āφāϛ⧇ āĻ•āĻŋāύāĻžāĨ¤ āφāϗ⧇āϰ āĻŽāϤāχ āĻāĻ•ā§āώ⧇āĻ¤ā§āϰ⧇āĻ“ āĻāĻ•āϟāĻŋ āĻ…ā§āϝāĻžāϰ⧇ āϰāĻŋāϟāĻžāĻ°ā§āύ āĻ•āϰāĻŦ⧇ āĻāĻŦāĻ‚ āĻ…ā§āϝāĻžāϰ⧇āϰ āϏāĻžāχāϜ āϝāĻĻāĻŋ ā§Ļ āύāĻž āĻšā§Ÿā§‡ āĻĨāĻžāϕ⧇ āϤāĻžāĻšāϞ⧇ āĻŦ⧁āĻāĻŦ āϝ⧇ āĻŦāχāϟāĻŋ āĻĄāĻžāϟāĻžāĻŦ⧇āϏ⧇ āĻŦāĻŋāĻĻā§āϝāĻŽāĻžāύ āφāϛ⧇ āφāϰ ā§Ļ āĻšā§Ÿā§‡ āĻĨāĻžāĻ•āϞ⧇ āφāĻŽāϰāĻž āϏāĻžāĻ°ā§āĻ­āĻŋāϏ āĻĨ⧇āϕ⧇āχ āĻāĻ•āϟāĻŋ āĻāϰāϰ āϰ⧇āϏāĻĒāĻ¨ā§āϏ āĻĒāĻžāĻŦā§‹ – 

				
					  existingBook, err := BookService.GetBooks(uint(bookID))
   if err != nil {
       return e.JSON(http.StatusBadRequest, err.Error())
   }

				
			

     5.  āĻāϰāĻĒāϰ models.Book āĻāϰ āύāϤ⧁āύ āĻāĻ•āϟāĻŋ āχāĻ¨ā§āϏāĻŸā§āϝāĻžāĻ¨ā§āϏ⧇ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāĻŋāϤ āĻ­ā§āϝāĻžāϞ⧁ āϗ⧁āϞ⧋ āϏ⧇āϟ āĻ•āϰāĻŦ –

				
					 updatedBook := &models.Book{
       ID:          uint(bookID),
       BookName:    existingBook[0].BookName,
       Author:      existingBook[0].Author,
       Publication: existingBook[0].Publication,
   }

				
			

      6.  āĻāĻŦāĻžāϰ⧇ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāĻŋāϤ āĻ­ā§āϝāĻžāϞ⧁āϗ⧁āϞ⧋ āϏāĻš models.Book āĻāϰ āχāĻ¨ā§āϏāĻŸā§āϝāĻžāĻ¨ā§āϏāϟāĻŋ āφāĻŽāϰāĻž services/book.go āĻāϰ UpdateBook() āĻŽā§‡āĻĨāĻĄā§‡ āĻĒāĻžāĻ āĻžāĻŦā§‹ āĻāĻŦāĻ‚ āĻāĻŦāĻ‚ āϏāĻžāĻ°ā§āĻ­āĻŋāϏ āĻĨ⧇āϕ⧇ āφāϏāĻž āϰ⧇āϏāĻĒāĻ¨ā§āϏ āĻ…āύ⧁āϝāĻžā§Ÿā§€ āĻĢāĻžāχāύāĻžāϞ āϰ⧇āϏāĻĒāĻ¨ā§āϏ āĻ—āĻ āύ āĻ•āϰāĻŦāĨ¤

       7.  āϤāĻžāĻšāϞ⧇ āĻ•āĻ¨ā§āĻŸā§āϰ⧋āϞāĻžāϰ⧇ āĻĢāĻžāχāύāĻžāϞ āϕ⧋āĻĄ āĻĻāĻžāρ⧜āĻžāĻšā§āϛ⧇ – 

controllers/book.go

				
					 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")
   }

				
			
  • services/book.go āĻ – 

      8.  services/book.go āĻāϰ UpdateBook() āĻŽā§‡āĻĨāĻĄ āĻĨ⧇āϕ⧇ repositories/book.go āĻāϰ UpdateBook() āĻŽā§‡āĻĨāĻĄā§‡ āύāϤ⧁āύ āĻĒā§āϰāĻžāĻĒā§āϤ models.Book āĻāϰ āχāĻ¨ā§āϏāĻŸā§āϝāĻžāĻ¨ā§āϏāϟāĻŋ āĻĒāĻžāĻ āĻŋā§Ÿā§‡ āĻĻ⧇āĻŦā§‹ āĻāĻŦāĻ‚ āĻāϰāϰ⧇āϰ āĻ…āĻĒ⧇āĻ•ā§āώāĻž āĻ•āϰāĻŦāĨ¤Â 

      9.  āĻāϰāϰ āϰāĻŋāϟāĻžāĻ°ā§āύ āĻšāϞ⧇ “book update was unsuccesful” āϰ⧇āϏāĻĒāĻ¨ā§āϏ āϤ⧈āϰāĻŋ āĻ•āϰ āĻ•āĻ¨ā§āĻŸā§āϰ⧋āϞāĻžāϰ⧇ āϰāĻŋāϟāĻžāĻ°ā§āύ āĻ•āϰāĻž āĻšāĻŦ⧇ – services/book.go

services/book.go

				
					 func (service *BookService) UpdateBook(book *models.Book) error {
       if err := service.repo.UpdateBook(book); err != nil {
           return errors.New("book update was unsuccesful")
       }
       return nil
   }

				
			
  • repositories/book.go āĻ – 

     10.  repositories/book.go āĻ models.Book āĻāϰ āχāĻ¨ā§āϏāĻŸā§āϝāĻžāĻ¨ā§āϏāϟāĻŋ āϰāĻŋāϏāĻŋāĻ­ āĻ•āϰāĻžāϰ āĻĒāϰ, āωāĻ•ā§āϤ models.Book āĻāϰ ID āĻ…āύ⧁āϏāĻžāϰ⧇ GORM āĻāϰ Save āĻŽā§‡āĻĨāĻĄ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āωāĻ•ā§āϤ āϏāĻžāϰāĻŋāϰ āϏāĻ•āϞ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāĻŋāϤ āĻ­ā§āϝāĻžāϞ⧁ Update āĻšā§Ÿā§‡ āϝāĻžāĻŦ⧇ – 

repositories/book.go

				
					   func (repo *bookRepo) UpdateBook(book *models.Book) error {
       if err := repo.db.Save(book).Error; err != nil {
           return err
       }
       return nil
   }

				
			

     11.  āĻ…āĻ¨ā§āϝāĻĨāĻž, Update āύāĻž āĻšā§Ÿā§‡ āĻĨāĻžāĻ•āϞ⧇ āϏāĻžāĻ°ā§āĻ­āĻŋāϏ⧇ āĻāϰāϰ āϰāĻŋāϟāĻžāĻ°ā§āύ āĻ•āϰāĻŦ⧇ āĻāĻŦāĻ‚ āϏ⧇ āĻ…āύ⧁āϝāĻžā§Ÿā§€ āϰ⧇āϏāĻĒāĻ¨ā§āϏ āĻœā§‡āύāĻžāϰ⧇āϟ āĻšāĻŦ⧇āĨ¤Â 

  • POSTMAN āĻāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰ

localhost:9030/bookstore/book/1” route āĻ āύāĻŋāĻšā§‡āϰ json āĻ­ā§āϝāĻžāϞ⧁, PUT āϰāĻŋāĻ•ā§‹ā§Ÿā§‡āĻ¸ā§āϟ āĻšāĻŋāϏ⧇āĻŦ⧇ āĻĒāĻžāĻ āĻŋā§Ÿā§‡, āφāĻŽāϰāĻž Update āĻĢāĻžāĻ‚āĻļāύāĻžāϞāĻŋāϟāĻŋ āĻ āĻŋāĻ•āĻ āĻžāĻ• āĻļ⧇āώ āĻ•āϰāϤ⧇ āĻĒ⧇āϰ⧇āĻ›āĻŋ āĻ•āĻŋāύāĻž āϤāĻž āĻšā§‡āĻ• āĻ•āϰāϤ⧇ āĻĒāĻžāϰāĻŋ –

  • āφāĻŽāĻžāĻĻ⧇āϰ āĻĄāĻžāϟāĻžāĻŦ⧇āϏ⧇āϰ āĻŸā§‡āĻŦāĻŋāϞ āϤ⧈āϰāĻŋāϰ āϏāĻŦāĻ•āĻŋāϛ⧁ connection/connection.go āϤ⧇ āĻĨāĻžāĻ•āϞ⧇āĻ“ āφāĻŽāϰāĻž āĻ•āĻŋāĻ¨ā§āϤ⧁ āϕ⧋āĻĨāĻžāĻ“ āĻĨ⧇āϕ⧇ āϤāĻž āĻ•āϞ āĻ•āϰāĻŋāύāĻŋ āĻ…āĻ°ā§āĻĨāĻžā§Ž āĻĄāĻžāϟāĻžāĻŦ⧇āϏ⧇āϰ āϕ⧋āύ āχāĻ¨ā§āϏāĻŸā§āϝāĻžāĻ¨ā§āϏ āϤ⧈āϰāĻŋ āĻ•āϰāĻŋāύāĻŋāĨ¤ āĻ•āĻžāϰāĻŖ, āϝāĻ–āύ āφāĻŽāϰāĻž connection/connection.go āĻāϰ āĻ•āĻžāϜ āĻļ⧇āώ āĻ•āϰ⧇āĻ›āĻŋāϞāĻžāĻŽ āϤāĻ–āύ⧋ āĻĄāĻžāϟāĻžāĻŦ⧇āϏ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āĻšāĻšā§āĻ›āĻŋāϞ āύāĻž āϕ⧋āĻĨāĻžāĻ“āĨ¤ āφāĻŽāϰāĻž āϜāĻžāύāĻŋ, āĻŦā§āϝāĻŦāĻšāĻžāϰ āύāĻž āĻ•āϰ⧇ āϕ⧋āύ⧋ āχāĻ¨ā§āϏāĻŸā§āϝāĻžāĻ¨ā§āϏ āĻĢ⧇āϞ⧇ āϰāĻžāĻ–āĻž āϝāĻžā§ŸāύāĻž Go āϤ⧇āĨ¤Â Â Â Â 

āφāϗ⧇āχ āĻŦāϞ⧇āĻ›āĻŋāϞāĻžāĻŽ āφāĻŽāϰāĻž āĻĢāĻŋāϰ⧇ āφāϏāĻŦ containers/serve.go āϤ⧇ : 

  1.  āϝāĻ–āύ āφāĻŽāϰāĻž *gorm.DB āĻāϰ āχāĻ¨ā§āϏāĻŸā§āϝāĻžāĻ¨ā§āϏ⧇āϰ āϏāĻžāĻĨ⧇ repositories/book.go āĻ IBookRepo āχāĻ¨ā§āϟāĻžāϰāĻĢ⧇āϏ āĻŦāĻžāχāĻ¨ā§āĻĄ āĻ•āϰ⧇āĻ›āĻŋāϞāĻžāĻŽ BookDBInstance() āĻĢāĻžāĻ‚āĻļāύ⧇āϰ āĻĻā§āĻŦāĻžāϰāĻž, āϤāĻ–āύ āϏ⧇āĻ–āĻžāύ⧇ *gorm.DB āĻāϰ āĻāĻ•āϟāĻŋ āχāĻ¨ā§āϏāĻŸā§āϝāĻžāĻ¨ā§āϏ āϰāĻŋāϏāĻŋāĻ­ āĻ•āϰ⧇āĻ›āĻŋāϞāĻžāĻŽāĨ¤ āĻ•āĻŋāĻ¨ā§āϤ⧁ āϏ⧇āϟāĻž āϕ⧋āĻĨāĻž āĻĨ⧇āϕ⧇ āφāϏāĻ›āĻŋāϞ⧋ āϤāĻž āϜāĻžāύāĻž āĻ›āĻŋāϞ āύāĻžāĨ¤
  2. āĻāχ āĻŽā§āĻšā§‚āĻ°ā§āϤ⧇ Serve() āĻĢāĻžāĻ‚āĻļāύ⧇ āφāĻŽāϰāĻž *gorm.DB āĻāϰ āĻāĻ•āϟāĻŋ āχāĻ¨ā§āϏāĻŸā§āϝāĻžāĻ¨ā§āϏ āϤ⧈āϰāĻŋ āĻ•āϰāĻŦā§‹ (āϝāĻžāϰ āϜāĻ¨ā§āϝ āφāĻŽāĻžāĻĻ⧇āϰ “Go-bootcamp/pkg/connection” āĻĒā§āϝāĻžāϕ⧇āϜāϟāĻŋ āχāĻŽāĻĒā§‹āĻ°ā§āϟ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇) āĻāĻŦāĻ‚ āϏ⧇āϟāĻž repositories/book.go āĻāϰ BookDBInstance() āĻĢāĻžāĻ‚āĻļāύ⧇ āĻĒāĻžāĻ āĻžāĻŦā§‹ āĨ¤ āĻāϜāĻ¨ā§āϝ āφāĻŽāĻžāĻĻ⧇āϰ “Go-bootcamp/pkg/repositories” āĻĒā§āϝāĻžāϕ⧇āϜāϟāĻŋ āχāĻŽāĻĒā§‹āĻ°ā§āϟ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇ – 
				
					   {
       "bookname": "Sonar tori",
       "author": "Rabindranath"
   }

				
			

āϝāĻĻāĻŋ āφāĻŽāĻžāĻĻ⧇āϰ āϕ⧋āĻĄ āĻ āĻŋāĻ•āĻ āĻžāĻ• āĻĨāĻžāϕ⧇ āϤāĻžāĻšāϞ⧇ Postman āĻ āϰ⧇āϏāĻĒāĻ¨ā§āϏ āφāϏāĻŦ⧇ “Book was updated successfully” āĻāĻŦāĻ‚ āφāĻŽāĻžāĻĻ⧇āϰ ID = 1 āĻŦāĻ‡ā§Ÿā§‡āϰ āĻ­ā§āϝāĻžāϞ⧁ āφāĻĒāĻĄā§‡āĻŸā§‡āĻĄ āĻšā§Ÿā§‡ āϝāĻžāĻŦ⧇ āĨ¤

āϰ⧇āĻĢāĻžāϰ⧇āĻ¨ā§āϏ āĻšāĻŋāϏ⧇āĻŦ⧇ āύāĻŋāĻšā§‡āϰ āĻ›āĻŦāĻŋ āϟāĻž āĻĻ⧇āĻ–āϤ⧇ āĻĒāĻžāϰāĻŋ – 

  • āĻāϰāĻĒāϰ⧇ āϝāĻĻāĻŋ āφāĻŽāϰāĻž āφāĻŦāĻžāϰ Read āϰāĻŋāĻ•ā§‹ā§Ÿā§‡āĻ¸ā§āϟ āĻĒāĻžāĻ āĻžāχ āϤāĻžāĻšāϞ⧇ āφāĻĒāĻĄā§‡āĻŸā§‡āĻĄ āĻŦāχāϟāĻŋ āĻĻ⧇āĻ–āϤ⧇ āĻĒāĻžāĻŦā§‹ (localhost:9030/bookstore/book?bookID=1) – 

				
					  [
       {
           "bookID": 1,
           "bookname": "Sonar tori",
           "author": "Rabindranath",
           "publication": "Oxford Press"
       }
   ]



				
			

[ā§Ž.ā§Ģ.ā§Ē] Delete āĻāϰ āφāĻĻāĻŋ-āĻ…āĻ¨ā§āĻ¤Â 

āĻāĻŦāĻžāϰ⧇ āĻ•āĻžāϜ āĻļ⧁āϰ⧁ āĻ•āϰāĻŦ CRUD āĻāϰ āϏāĻ°ā§āĻŦ⧇āĻļ⧇āώ āĻĢāĻžāĻ‚āĻļāύāĻžāϞāĻŋāϟāĻŋ, Delete āύāĻŋā§Ÿā§‡ : 

  • controllers/book.go āĻ –    
  1.  āϝāϤāϗ⧁āϞ⧋ āĻĢāĻžāĻ‚āĻļāύāĻžāϞāĻŋāϟāĻŋ āύāĻŋā§Ÿā§‡ āφāĻŽāϰāĻž āĻ•āĻžāϜ āĻ•āϰ⧇āĻ›āĻŋ āϤāĻžāϰ āĻŽāĻ§ā§āϝ⧇ āϏāĻŦāĻĨ⧇āϕ⧇ āϏāĻšāϜ āĻšāĻŦ⧇ Delete āύāĻŋā§Ÿā§‡ āĻ•āĻžāϜ āĻ•āϰāĻžāĨ¤Â 
  2.  āϏāĻŦāĻžāϰ āĻĒā§āϰāĻĨāĻŽā§‡ āφāĻŽāϰāĻž Update āĻ…āĻ‚āĻļ⧇āϰ āĻŽāϤ⧋ URL āĻĨ⧇āϕ⧇ āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāϟāĻžāϰ āϟāĻž āĻŦā§‡ā§œ āĻ•āϰ⧇ āύ⧇āĻŦ āĻāĻŦāĻ‚ āĻĒāĻžāĻ°ā§āϏ āĻ•āϰ⧇ āϤāĻž āχāĻ¨ā§āϟāĻŋāϜāĻžāϰ⧇ āϰ⧂āĻĒāĻžāĻ¨ā§āϤāϰ āĻ•āϰāĻŦ – 
				
					  tempBookID := e.Param("bookID")
   bookID, err := strconv.ParseUint(tempBookID, 0, 0)
   if err != nil {
       return e.JSON(http.StatusBadRequest, "Invalid Data")
   }

				
			

    3.  āĻāϰāĻĒāϰ services/book.go āĻāϰ GetBooks() āĻŽā§‡āĻĨāĻĄā§‡ āĻāĻ•āϟāĻž āϰāĻŋāĻ•ā§‹ā§Ÿā§‡āĻ¸ā§āϟ āĻĒāĻžāĻ āĻžāĻŦā§‹, āϝ⧇āϟāĻžāϰ āĻāϰāϰ āĻĒāĻžāĻ āĻžāύ⧋āϰ āωāĻĒāϰ āĻ­āĻŋāĻ¤ā§āϤāĻŋ āĻ•āϰ⧇ āφāĻŽāϰāĻž āĻŦ⧁āĻā§‡ āϝāĻžāĻŦā§‹ āϝ⧇ āĻ“āχ ID āϏāĻŽā§āĻŦāϞāĻŋāϤ āĻŦāχ āĻĄāĻžāϟāĻžāĻŦ⧇āϏ⧇ āφāϛ⧇ āĻ•āĻŋāύāĻžāĨ¤Â 

				
					   _, err = BookService.GetBooks(uint(bookID))
   if err != nil {
       return e.JSON(http.StatusBadRequest, err.Error())
   }

				
			

    4.  āϝāĻĻāĻŋ āĻĨ⧇āϕ⧇ āĻĨāĻžāϕ⧇ āϤāĻžāĻšāϞ⧇ āφāĻŽāϰāĻž āφāĻŦāĻžāϰ services/book.go āĻāϰ DeleteBook() āĻŽā§‡āĻĨāĻĄā§‡ bookID āĻĒāĻžāĻ āĻŋā§Ÿā§‡ āĻĻ⧇āĻŦā§‹ āĻāĻŦāĻ‚ āϰ⧇āϏāĻĒāĻ¨ā§āϏ⧇āϰ āĻ…āĻĒ⧇āĻ•ā§āώāĻž āĻ•āϰāĻŦāĨ¤ āϤāĻžāĻšāϞ⧇ controllers/book.go āĻāϰ āĻĢāĻžāχāύāĻžāϞ āϕ⧋āĻĄāϟāĻŋ āĻĻāĻžāρ⧜āĻžāĻšā§āϛ⧇ – 

controllers/book.go

				
					 func DeleteBook(e echo.Context) error {
       tempBookID := e.Param("bookID")
       bookID, err := strconv.ParseUint(tempBookID, 0, 0)
       if err != nil {
           return e.JSON(http.StatusBadRequest, "Invalid Data")
       }

       _, err = BookService.GetBooks(uint(bookID))
       if err != nil {
           return e.JSON(http.StatusBadRequest, err.Error())
       }

       if err := BookService.DeleteBook(uint(bookID)); err != nil {
           return e.JSON(http.StatusInternalServerError, err.Error())
       }

       return e.JSON(http.StatusOK, "Book was deleted successfully")
   }

				
			
  • services/book.go āĻ – 

     5.  services/book.go āĻāϰ DeleteBook() āĻŽā§‡āĻĨāĻĄ āĻĨ⧇āϕ⧇ repositories/book.go āĻāϰ DeleteBook() āĻŽā§‡āĻĨāĻĄā§‡ bookID āĻĒāĻžāϏ āĻ•āϰ⧇ āĻ…āĻĒ⧇āĻ•ā§āώāĻžā§Ÿ āĻĨāĻžāĻ•āĻŦ āĻĄāĻžāϟāĻžāĻŦ⧇āϏ⧇āϰ Delete āĻ…āĻĒāĻžāϰ⧇āĻļāύ āϰāĻžāύ āĻ•āϰāĻžāϰāĨ¤Â 

      6.  āϝāĻĻāĻŋ āϤāĻž āϏāĻĢāϞ āύāĻž āĻšā§Ÿ āϤāĻžāĻšāϞ⧇ āĻāϰāϰ āϰāĻŋāϟāĻžāĻ°ā§āύ āĻšāĻŦ⧇ āĻāĻŦāĻ‚ āĻ•āĻ¨ā§āĻŸā§āϰ⧋āϞāĻžāϰ⧇ “book deletion was unsuccesful” āϰ⧇āϏāĻĒāĻ¨ā§āϏ āĻĒāĻžāĻ āĻžāύ⧋ āĻšāĻŦ⧇āĨ¤ āĻ…āĻ¨ā§āϝāĻĨāĻž āϕ⧋āύ⧋ āĻāϰāϰ āĻĒāĻžāĻ āĻžāύ⧋ āĻšāĻŦ⧇ āύāĻž – 

service/book.go

				
					 func (service *BookService) DeleteBook(bookID uint) error {
       if err := service.repo.DeleteBook(bookID); err != nil {
           return errors.New("book deletion was unsuccessful")
       }
       return nil
   }

				
			
  • repositories/book.go āĻ – 

     7.   repositories/book.go āĻāϰ DeleteBook() āĻŽā§‡āĻĨāĻĄ āĻĨ⧇āϕ⧇ GORM āĻāϰ Delete āĻŽā§‡āĻĨāĻĄ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇, services/book.go āĻĨ⧇āϕ⧇ āĻĒā§āϰāĻžāĻĒā§āϤ bookID āĻ…āύ⧁āϏāĻžāϰ⧇ āωāĻ•ā§āϤ āϏāĻžāϰāĻŋāϰ āϏāĻ•āϞ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāĻŋāϤ āĻ­ā§āϝāĻžāϞ⧁ Delete āĻšā§Ÿā§‡ āϝāĻžāĻŦ⧇āĨ¤

     8.  Delete āύāĻž āĻšā§Ÿā§‡ āĻĨāĻžāĻ•āϞ⧇ āϏāĻžāĻ°ā§āĻ­āĻŋāϏ⧇ āĻāϰāϰ āϰāĻŋāϟāĻžāĻ°ā§āύ āĻ•āϰāĻŦ⧇ āĻāĻŦāĻ‚ āϏ⧇ āĻ…āύ⧁āϝāĻžā§Ÿā§€ āϰ⧇āϏāĻĒāĻ¨ā§āϏ āĻœā§‡āύāĻžāϰ⧇āϟ āĻšāĻŦ⧇ – 

repositories/book.go

				
					 func (repo *bookRepo) DeleteBook(bookID uint) error {
       var Book models.Book
       if err := repo.db.
           Where("id = ?", bookID).Delete(&Book).
           Error; err != nil {
           return err
       }
       return nil
   }

				
			
  • POSTMAN āĻāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰ

localhost:9030/bookstore/book/1” route āĻ DELETE āϰāĻŋāĻ•ā§‹ā§Ÿā§‡āĻ¸ā§āϟ āĻĒāĻžāĻ āĻŋā§Ÿā§‡ āφāĻŽāϰāĻž DELETE āĻĢāĻžāĻ‚āĻļāύāĻžāϞāĻŋāϟāĻŋ āĻ āĻŋāĻ•āĻ āĻžāĻ• āĻļ⧇āώ āĻ•āϰāϤ⧇ āĻĒ⧇āϰ⧇āĻ›āĻŋ āĻ•āĻŋāύāĻž āϤāĻž āĻšā§‡āĻ• āĻ•āϰāϤ⧇ āĻĒāĻžāϰāĻŋ – 

āϝāĻĻāĻŋ āφāĻŽāĻžāĻĻ⧇āϰ āϕ⧋āĻĄ āĻ āĻŋāĻ•āĻ āĻžāĻ• āĻĨāĻžāϕ⧇ āϤāĻžāĻšāϞ⧇ Postman āĻ āϰ⧇āϏāĻĒāĻ¨ā§āϏ āφāϏāĻŦ⧇ “Book was deleted successfully” āĻāĻŦāĻ‚ āφāĻŽāĻžāĻĻ⧇āϰ ID = 1 āĻŦāĻ‡ā§Ÿā§‡āϰ āϏāĻŦ āĻ­ā§āϝāĻžāϞ⧁ Delete āĻšā§Ÿā§‡ āϝāĻžāĻŦ⧇ āĨ¤

 

āϰ⧇āĻĢāĻžāϰ⧇āĻ¨ā§āϏ āĻšāĻŋāϏ⧇āĻŦ⧇ āύāĻŋāĻšā§‡āϰ āĻ›āĻŦāĻŋ āϟāĻž āĻĻ⧇āĻ–āϤ⧇ āĻĒāĻžāϰāĻŋ – 

āĻāϰāĻĒāϰ⧇ āϝāĻĻāĻŋ āφāĻŽāϰāĻž āφāĻŦāĻžāϰ Read āϰāĻŋāĻ•ā§‹ā§Ÿā§‡āĻ¸ā§āϟ āĻĒāĻžāĻ āĻžāχ āϤāĻžāĻšāϞ⧇ Delete āĻ•āϰāĻž āĻŦāχāϟāĻŋ āφāϰ āĻĻ⧇āĻ–āϤ⧇ āĻĒāĻžāĻŦā§‹ āύāĻž (localhost:9030/bookstore/book) –

				
					  [
       {
           "bookID": 2,
           "bookname": "Killing Floor",
           "author": "Lee Child",
           "publication": "Oxford Press"
       }
   ]