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:
package main
import (
"fmt"
"strconv"
"github.com/gofiber/fiber/v2"
)
// Struct Product
type Product struct {
ID int `json:"id"`
Name string `json:"name"`
Price float64 `json:"price"`
Stock int `json:"stock"`
}
func main() {
// 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 JSON
return 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 sesuai
var foundProduct Product
for _, p := range products {
if p.ID == id {
foundProduct = p
break
}
}
// Kirim detail produk dalam format JSON
return c.JSON(foundProduct)
})
// Route untuk membuat produk baru
app.Post("/product", func(c *fiber.Ctx) error {
// Parse data yang dikirim oleh klien
var newProduct Product
if 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 respons
return 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 klien
var updatedProduct Product
if err := c.BodyParser(&updatedProduct); err != nil {
c.Status(fiber.StatusBadRequest).JSON(fiber.Map{
"message": "Invalid request body",
})
return err
}
// Temukan produk dengan ID yang sesuai
var foundIndex int = -1
for i, p := range products {
if p.ID == id {
foundIndex = i
break
}
}
// Jika produk ditemukan, perbarui produk
if foundIndex != -1 {
products[foundIndex] = updatedProduct
return 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 dihapus
var foundIndex int = -1
for i, p := range products {
if p.ID == id {
foundIndex = i
break
}
}
// Jika produk ditemukan, hapus produk
if 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")
}
coba menggunahkan postman dengan method delete dengan endpoint
http://localhost:3000/product/3
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.