Untuk menambahkan fitur menghapus produk (delete product), kita perlu menambahkan route baru, yaitu /product/:id, yang akan menerima permintaan DELETE untuk menghapus produk berdasarkan ID. Berikut adalah langkah-langkahnya:
Tambahkan Route /product/:id dengan Method DELETE: Tambahkan route baru dengan method DELETE untuk menghapus produk berdasarkan ID.
Temukan Produk yang Akan Dihapus: Di handler route /product/:id, temukan produk dengan ID yang sesuai dalam daftar produk yang ada.
Hapus Produk: Setelah mendapatkan produk yang akan dihapus, hapus produk tersebut dari daftar produk.
Kirim Respon: Kirim respons kepada klien untuk memberitahu bahwa produk telah berhasil dihapus.
Berikut adalah implementasinya:
coba menggunahkan postman dengan method delete dengan endpoint
Dalam kode di atas, kita menambahkan route /product/:id dengan method DELETE untuk menghapus produk berdasarkan ID. Di dalam handler untuk route tersebut, kita temukan produk dengan ID yang sesuai dalam daftar produk yang ada, lalu hapus produk tersebut dari daftar. Setelah itu, kita kirim respons kepada klien untuk memberitahu bahwa produk telah berhasil dihapus.
packagemainimport ("fmt""strconv""github.com/gofiber/fiber/v2")// Struct ProducttypeProductstruct { ID int`json:"id"` Name string`json:"name"` Price float64`json:"price"` Stock int`json:"stock"`}funcmain() {// Inisialisasi objek Fiber app := fiber.New() products := []Product{ {1, "Product A", 10.99, 100}, {2, "Product B", 20.50, 50}, {3, "Product C", 15.75, 75}, }// Route untuk menampilkan data produk app.Get("/products", func(c *fiber.Ctx) error {// Kirim data produk dalam format JSONreturn c.JSON(products) })// Route untuk menampilkan detail produk berdasarkan ID app.Get("/product/:id", func(c *fiber.Ctx) error {// Dapatkan ID produk dari parameter route paramId := c.Params("id") id, _ := strconv.Atoi(paramId)// Temukan produk dengan ID yang sesuaivar foundProduct Productfor _, p :=range products {if p.ID == id { foundProduct = pbreak } }// Kirim detail produk dalam format JSONreturn c.JSON(foundProduct) })// Route untuk membuat produk baru app.Post("/product", func(c *fiber.Ctx) error {// Parse data yang dikirim oleh klienvar newProduct Productif err := c.BodyParser(&newProduct); err !=nil { c.Status(fiber.StatusBadRequest).JSON(fiber.Map{"message": "Invalid request body", })return err }// Generate ID untuk produk baru (misalnya, ID terakhir + 1) newProduct.ID =len(products) +1// Tambahkan produk baru ke daftar produk products =append(products, newProduct)// Kirim responsreturn c.Status(fiber.StatusCreated).JSON(fiber.Map{"message": "Product created successfully","product": newProduct, }) })// Route untuk memperbarui produk berdasarkan ID app.Put("/product/:id", func(c *fiber.Ctx) error {// Dapatkan ID produk dari parameter route id, _ := strconv.Atoi(c.Params("id"))// Parse data yang dikirim oleh klienvar updatedProduct Productif err := c.BodyParser(&updatedProduct); err !=nil { c.Status(fiber.StatusBadRequest).JSON(fiber.Map{"message": "Invalid request body", })return err }// Temukan produk dengan ID yang sesuaivar foundIndex int=-1for i, p :=range products {if p.ID == id { foundIndex = ibreak } }// Jika produk ditemukan, perbarui produkif foundIndex !=-1 { products[foundIndex] = updatedProductreturn c.Status(fiber.StatusOK).JSON(fiber.Map{"message": fmt.Sprintf("Product with ID %d updated successfully", id),"product": updatedProduct, }) } else {return c.Status(fiber.StatusNotFound).JSON(fiber.Map{"message": fmt.Sprintf("Product with ID %d not found", id), }) } })// Route untuk menghapus produk berdasarkan ID app.Delete("/product/:id", func(c *fiber.Ctx)error {// Dapatkan ID produk dari parameter route id, _ := strconv.Atoi(c.Params("id"))// Temukan indeks produk yang akan dihapusvar foundIndex int=-1for i, p :=range products {if p.ID == id { foundIndex = ibreak } }// Jika produk ditemukan, hapus produkif foundIndex !=-1 {// Hapus produk dari slice menggunakan teknik slice trick products =append(products[:foundIndex], products[foundIndex+1:]...)return c.Status(fiber.StatusOK).JSON(fiber.Map{"message": fmt.Sprintf("Product with ID %d deleted successfully", id), }) } else {return c.Status(fiber.StatusNotFound).JSON(fiber.Map{"message": fmt.Sprintf("Product with ID %d not found", id), }) } })// Jalankan server di port tertentu app.Listen(":3000")}