Gofiber
  • Basic backend dengan Gofiber part 1
    • Pengenalan Gofiber
    • Instalasi Gofiber
    • Auto reload dengan air
    • Membaca semua data di struct dengan Gofiber
    • Membaca data spesifik di struct dengan Gofiber
    • Membuat data di struct dengan Gofiber
    • Mengupdate data di struct dengan Gofiber
    • Menghapus data di struct dengan Gofiber
    • Implementasi MVC di Gofiber
  • Basic backend dengan Gofiber part 2
    • Setting database menggunahkan gorm.io di Gofiber
    • Menambahkan query ke database di Gofiber
    • Membuat relasi dengan gorm di Gofiber
    • Membuat validasi dengan validator di Gofiber
    • Membuat CORS di Gofiber
    • Menghandle serangan XSS(Cross-Site Scripting) di Gofiber
    • Mengamankan header HTTP dengan helmet di Gofiber
    • Membuat middleware menggunahkan JWT(JSON Web Token) di Gofiber
    • Menambahkan query search di Gofiber
    • Menambahkan query sort di Gofiber
    • Membuat pagination di Gofiber
    • Membuat refresh token di Gofiber
    • Membuat local upload file di Gofiber
    • Membuat server upload dengan cloudinary di Gofiber
    • Membuat analisis code dengan GolangCI-Lint di Gofiber
Powered by GitBook
On this page
  1. Basic backend dengan Gofiber part 1

Menghapus data di struct dengan Gofiber

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:

  1. Tambahkan Route /product/:id dengan Method DELETE: Tambahkan route baru dengan method DELETE untuk menghapus produk berdasarkan ID.

  2. Temukan Produk yang Akan Dihapus: Di handler route /product/:id, temukan produk dengan ID yang sesuai dalam daftar produk yang ada.

  3. Hapus Produk: Setelah mendapatkan produk yang akan dihapus, hapus produk tersebut dari daftar produk.

  4. 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.

PreviousMengupdate data di struct dengan GofiberNextImplementasi MVC di Gofiber

Last updated 1 year ago