Membuat pagination di Gofiber
Langkah-langkah Implementasi Pagination
Update Model Product untuk Mendukung Pagination:
Tambahkan parameter
limitdanoffsetpada fungsiSelectAllProductsuntuk mendukung pagination.Gunakan parameter
limituntuk menentukan jumlah item yang akan ditampilkan per halaman.Gunakan parameter
offsetuntuk menentukan posisi awal data yang akan diambil.
// src/models/Products.go package models import ( "gofiber/src/configs" "gorm.io/gorm" ) type Product struct { gorm.Model Name string `json:"name" validate:"required,min=3,max=100"` Price float64 `json:"price" validate:"required,min=0"` Stock int `json:"stock" validate:"required,min=0"` CategoryID uint `json:"category_id"` Category Category `json:"category"` } func SelectAllProducts(sort, name string, limit, offset int) []*Product { var items []*Product name = "%" + name + "%" configs.DB.Preload("Category").Order(sort).Limit(limit).Offset(offset).Where("name LIKE ?", name).Find(&items) return items } func CountData() int64 { var result int64 configs.DB.Table("products").Count(&result) return result }Update Controller Product untuk Mendukung Pagination:
Ambil parameter
pagedanlimitdari query URL menggunakanc.Query.Hitung
offsetberdasarkan nilaipagedanlimit.Panggil fungsi
SelectAllProductsdi model dengan parameter yang telah diambil.Hitung jumlah total data dengan menggunakan fungsi
CountData.Hitung jumlah total halaman (
totalPage) dengan membagi total data dengan limit.Kembalikan respons JSON yang berisi data produk, informasi halaman, dan informasi total data.
// src/controllers/ProductController.go package controllers import ( "gofiber/src/models" "math" "strconv" "strings" "github.com/gofiber/fiber/v2" ) func GetAllProducts(c *fiber.Ctx) error { pageOld := c.Query("page") limitOld := c.Query("limit") page, _ := strconv.Atoi(pageOld) if page == 0 { page = 1 } limit, _ := strconv.Atoi(limitOld) if limit == 0 { limit = 5 } offset := (page - 1) * limit sort := c.Query("sorting") if sort == "" { sort = "ASC" } sortby := c.Query("orderBy") if sortby == "" { sortby = "name" } sort = sortby + " " + strings.ToLower(sort) keyword := c.Query("search") products := models.SelectAllProducts(sort, keyword, limit, offset) totalData := models.CountData() totalPage := math.Ceil(float64(totalData) / float64(limit)) result := map[string]interface{}{ "data": products, "currentPage": page, "limit": limit, "totalData": totalData, "totalPage": totalPage, } return c.JSON(result) }
Penjelasan Langkah-langkah
Update Model Product:
Di dalam model
Product, tambahkan fungsiCountDatauntuk menghitung total data produk dalam database.Modifikasi fungsi
SelectAllProductsuntuk menerima parameterlimitdanoffsetyang digunakan untuk pagination.
Update Controller Product:
Di dalam controller, ambil parameter
pagedanlimitdari query URL menggunakanc.Query.Hitung
offsetberdasarkan nilaipagedanlimit.Panggil fungsi
SelectAllProductsdi model dengan parameter yang telah diambil.Hitung jumlah total data dengan menggunakan fungsi
CountData.Hitung jumlah total halaman (
totalPage) dengan membagi total data dengan limit.Kembalikan respons JSON yang berisi data produk, informasi halaman, dan informasi total data.
Dengan langkah-langkah ini, Anda telah berhasil mengimplementasikan fitur pagination pada daftar produk dalam aplikasi Anda. Hal ini memungkinkan pengguna untuk menavigasi antara berbagai halaman data dengan lebih efisien.
Last updated