[ā§Ž.ā§Ģ] 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 āĻ –   Â
- āĻāĻŽāĻžāĻĻā§āϰ āĻĒā§āϰāĻĨāĻŽ āĻāĻžāĻ āĻšāĻŦā§ 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"
}
- āϝāĻĻāĻŋ āĻāĻŽāĻžāĻĻā§āϰ āĻā§āĻĄ āĻ āĻŋāĻāĻ āĻžāĻ āĻĨāĻžāĻā§ āϤāĻžāĻšāϞ⧠Postman āĻ āϰā§āϏāĻĒāύā§āϏ āĻāϏāĻŦā§ “Book was created successfully“ āϰā§āĻĢāĻžāϰā§āύā§āϏ āĻšāĻŋāϏā§āĻŦā§ āύāĻŋāĻā§āϰ āĻāĻŦāĻŋ āĻāĻž āĻĻā§āĻāϤ⧠āĻĒāĻžāϰāĻŋ –Â

[ā§Ž.ā§Ģ.⧍] Read āĻāϰ āĻāĻĻāĻŋ-āĻ āύā§āϤÂ
āĻāĻŦāĻžāϰ⧠āĻāĻžāĻ āĻļā§āϰ⧠āĻāϰāĻŦ CRUD āĻāϰ āĻĻā§āĻŦāĻŋāϤā§ā§ āĻĢāĻžāĻāĻļāύāĻžāϞāĻŋāĻāĻŋ, Read āύāĻŋā§ā§ :
- controllers/book.go āĻ –   Â
- āĻāĻŽāĻžāĻĻā§āϰ āĻĒā§āϰāĻĨāĻŽ āĻāĻžāĻ āĻšāĻŦā§ controllers/book.go āĻāϰ GetBooks() āĻĢāĻžāĻāĻļāύā§āĨ¤ āĻāĻŽāϰāĻž āĻāĻŽāĻžāĻĻā§āϰ GetBooks() āĻĢāĻžāĻāĻļāύ⧠⧍ āϧāϰāĻŖā§āϰ āĻāĻžāĻ āĻāϰāĻŦ –Â
- āĻŦāĻ āĻāϰ āύāĻŋāϰā§āĻĻāĻŋāώā§āĻ ID āĻĒāĻžāĻ āĻžāϞ⧠āĻļā§āϧ⧠āĻāĻ āĻŦāĻ āĻāϰ āĻĄāĻŋāĻā§āĻāϞāϏ āϰā§āϏāĻĒāύā§āϏ⧠āĻĒāĻžāĻŦā§āĨ¤
- āĻāϰ āĻā§āύ⧠āύāĻŋāϰā§āĻĻāĻŋāώā§āĻ ID āύāĻž āĻĒāĻžāĻ āĻžāύ⧠āĻšāϞ⧠āϏāĻŦ āĻŦāĻā§ā§āϰ āĻāĻāĻāĻž āϏāĻžāĻŽāĻžāϰāĻŋ āϞāĻŋāϏā§āĻ āϰā§āϏāĻĒāύā§āϏ āĻšāĻŋāϏā§āĻŦā§ āĻĒāĻžāĻ āĻžāĻŦā§āĨ¤Â
-  āĻāϰ āĻāύā§āϝ āĻāĻŽāϰāĻž āĻļā§āϰā§āϤā§āĻ 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 āĻāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰ
- 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 āĻ – Â
- āĻāĻžāĻ āĻā§āϞā§āĻ āĻ āύā§āĻāĻāĻž āĻĒā§āύāϰāĻžāĻŦā§āϤā§āϤāĻŋ āĻšāĻā§āĻā§āĨ¤ āĻāϏāϞā§āĻ āϤāĻžāĻāĨ¤ āĻŦāϞāĻž āϝāĻžā§ āĻāĻ āĻ āĻāĻļ 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 āϤ⧠:Â
-  āϝāĻāύ āĻāĻŽāϰāĻž *gorm.DB āĻāϰ āĻāύā§āϏāĻā§āϝāĻžāύā§āϏā§āϰ āϏāĻžāĻĨā§ repositories/book.go āĻ IBookRepo āĻāύā§āĻāĻžāϰāĻĢā§āϏ āĻŦāĻžāĻāύā§āĻĄ āĻāϰā§āĻāĻŋāϞāĻžāĻŽ BookDBInstance() āĻĢāĻžāĻāĻļāύā§āϰ āĻĻā§āĻŦāĻžāϰāĻž, āϤāĻāύ āϏā§āĻāĻžāύ⧠*gorm.DB āĻāϰ āĻāĻāĻāĻŋ āĻāύā§āϏāĻā§āϝāĻžāύā§āϏ āϰāĻŋāϏāĻŋāĻ āĻāϰā§āĻāĻŋāϞāĻžāĻŽāĨ¤ āĻāĻŋāύā§āϤ⧠āϏā§āĻāĻž āĻā§āĻĨāĻž āĻĨā§āĻā§ āĻāϏāĻāĻŋāϞ⧠āϤāĻž āĻāĻžāύāĻž āĻāĻŋāϞ āύāĻžāĨ¤
- āĻāĻ āĻŽā§āĻšā§āϰā§āϤ⧠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 āĻ –   Â
-  āϝāϤāĻā§āϞ⧠āĻĢāĻžāĻāĻļāύāĻžāϞāĻŋāĻāĻŋ āύāĻŋā§ā§ āĻāĻŽāϰāĻž āĻāĻžāĻ āĻāϰā§āĻāĻŋ āϤāĻžāϰ āĻŽāϧā§āϝ⧠āϏāĻŦāĻĨā§āĻā§ āϏāĻšāĻ āĻšāĻŦā§ Delete āύāĻŋā§ā§ āĻāĻžāĻ āĻāϰāĻžāĨ¤Â
-  āϏāĻŦāĻžāϰ āĻĒā§āϰāĻĨāĻŽā§ āĻāĻŽāϰāĻž 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"
}
]