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 2

Membuat pagination di Gofiber

Langkah-langkah Implementasi Pagination

  1. Update Model Product untuk Mendukung Pagination:

    • Tambahkan parameter limit dan offset pada fungsi SelectAllProducts untuk mendukung pagination.

    • Gunakan parameter limit untuk menentukan jumlah item yang akan ditampilkan per halaman.

    • Gunakan parameter offset untuk 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
    }
  2. Update Controller Product untuk Mendukung Pagination:

    • Ambil parameter page dan limit dari query URL menggunakan c.Query.

    • Hitung offset berdasarkan nilai page dan limit.

    • Panggil fungsi SelectAllProducts di 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

  1. Update Model Product:

    • Di dalam model Product, tambahkan fungsi CountData untuk menghitung total data produk dalam database.

    • Modifikasi fungsi SelectAllProducts untuk menerima parameter limit dan offset yang digunakan untuk pagination.

  2. Update Controller Product:

    • Di dalam controller, ambil parameter page dan limit dari query URL menggunakan c.Query.

    • Hitung offset berdasarkan nilai page dan limit.

    • Panggil fungsi SelectAllProducts di 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.

PreviousMenambahkan query sort di GofiberNextMembuat refresh token di Gofiber

Last updated 1 year ago

GitHub - zakimaliki/basic_gofiber_part_1 at 0de91d775e060dea79ba2fbeff779ab61dab0c64GitHub
Logo