Mengupdate data di struct dengan Gofiber
package main
import (
"fmt"
"strconv"
"github.com/gofiber/fiber"
)
// Struct Product
type Product struct {
ID int `json:"id"`
Name string `json:"name"`
Price float64 `json:"price"`
Stock int `json:"stock"`
}
// Inisialisasi struct Product dengan data
func initProducts() []Product {
products := []Product{
{1, "Product A", 10.99, 100},
{2, "Product B", 20.50, 50},
{3, "Product C", 15.75, 75},
}
return products
}
func main() {
// Inisialisasi objek Fiber
app := fiber.New()
// Daftar produk
products := initProducts()
// Route untuk menampilkan semua produk
app.Get("/products", func(c *fiber.Ctx) {
// Kirim data produk dalam format JSON
c.JSON(products)
})
// Route untuk menampilkan detail produk berdasarkan ID
app.Get("/product/:id", func(c *fiber.Ctx) {
// Dapatkan ID produk dari parameter route
id, _ := strconv.Atoi(c.Params("id"))
// 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
c.JSON(foundProduct)
})
// Route untuk membuat produk baru
app.Post("/product", func(c *fiber.Ctx) {
// 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
}
// 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
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) {
// 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
}
// 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
c.Status(fiber.StatusOK).JSON(fiber.Map{
"message": fmt.Sprintf("Product with ID %d updated successfully", id),
"product": updatedProduct,
})
} else {
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)
}Last updated