# Menambahkan query search di Gofiber

#### Langkah-langkah Membuat Fitur Pencarian

1.  **Update Model Product untuk Mendukung Pencarian**: Tambahkan fungsi `SelectAllProducts` di `src/models/Products.go` untuk mendukung pencarian berdasarkan nama.

    ```go
    // src/models/Products.go

    func SelectAllProducts(name string) []*Product {
        var items []*Product
        name = "%" + name + "%"
        configs.DB.Preload("Category").Where("name LIKE ?", name).Find(&items)
        return items
    }
    ```
2.  **Update Model Category untuk Mendukung Pencarian**: Tambahkan fungsi `SelectAllCategories` di `src/models/Category.go` untuk mendukung pencarian berdasarkan nama.

    ```go
    // src/models/Category.go

    package models

    import (
    	"gofiber/src/configs"

    	"gorm.io/gorm"
    )

    type Category struct {
    	gorm.Model
    	Name     string       `json:"name" validate:"required,min=3,max=50"`
    	Image    string       `json:"image"`
    	Products []ApiProduct `json:"products"`
    }

    type ApiProduct struct {
    	Name       string  `json:"name" `
    	Price      float64 `json:"price" `
    	Stock      int     `json:"stock" `
    	CategoryID uint    `json:"category_id"`
    }

    func SelectAllCategories(name string) []*Category {
    	var categories []*Category
    	name = "%" + name + "%"
    	configs.DB.Preload("Products", func(db *gorm.DB) *gorm.DB {
    		var items []*ApiProduct
    		return db.Model(&Product{}).Find(&items)
    	}).Where("name LIKE ?", name).Find(&categories)
    	return categories
    }
    ```
3.  **Update Controller Product untuk Mendukung Pencarian**: Modifikasi fungsi `GetAllProducts` di `src/controllers/ProductController.go` untuk menangani parameter pencarian.

    ```go
    // src/controllers/ProductController.go

    package controllers

    import (
        "gofiber/src/models"
        "github.com/gofiber/fiber/v2"
    )

    func GetAllProducts(c *fiber.Ctx) error {
        keyword := c.Query("search")
        products := models.SelectAllProducts(keyword)
        return c.JSON(products)
    }
    ```
4.  **Update Controller Category untuk Mendukung Pencarian**: Modifikasi fungsi `GetAllCategories` di `src/controllers/CategoryController.go` untuk menangani parameter pencarian.

    ```go
    // src/controllers/CategoryController.go

    func GetAllCategories(c *fiber.Ctx) error {
    	keyword := c.Query("search")
    	categories := models.SelectAllCategories(keyword)
    	return c.JSON(categories)
    }
    ```

#### Penjelasan Langkah-langkah

1. **Update Model Product dan Category**:
   * Modifikasi model `Product` dan `Category` untuk menambahkan fungsi pencarian yang menggunakan query `LIKE` pada nama.
2. **Update Controller Product dan Category**:
   * Di dalam controller, ambil parameter query `search` dari URL menggunakan `c.Query("search", "")`.
   * Panggil fungsi pencarian di model yang telah dimodifikasi dengan parameter pencarian yang diambil dari URL.

Dengan langkah-langkah ini, Anda telah mengimplementasikan fitur pencarian pada produk dan kategori di aplikasi Fiber Anda. Hasil pencarian akan menampilkan daftar produk atau kategori yang sesuai dengan kata kunci pencarian yang diberikan.

{% embed url="https://github.com/zakimaliki/basic_gofiber_part_1/tree/4242db423cc3d7f084ad30849af1e07afc53b293" %}
