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

Menambahkan query ke database di Gofiber

Untuk melanjutkan proyek Anda, pertama-tama, mari kita integrasikan langkah-langkah untuk membuat query di model Product. Kemudian, kita akan memperbarui kontroler ProductController sesuai dengan kode yang diberikan.

  1. SelectAllProducts(): Fungsi ini digunakan untuk mengambil semua produk dari database menggunakan GORM. Kemudian, data produk tersebut dikembalikan dalam bentuk slice dari pointer ke struct Product.

  2. SelectProductById(id int): Fungsi ini digunakan untuk mengambil detail produk berdasarkan ID yang diberikan. Jika produk dengan ID yang diberikan tidak ditemukan, nil akan dikembalikan. Jika ditemukan, detail produk akan dikembalikan dalam bentuk pointer ke struct Product.

  3. *PostProduct(item Product) error: Fungsi ini digunakan untuk menambahkan produk baru ke dalam database. Jika proses penambahan berhasil, nil akan dikembalikan. Jika terjadi kesalahan, error akan dikembalikan.

  4. *UpdateProduct(id int, newProduct Product) error: Fungsi ini digunakan untuk memperbarui produk berdasarkan ID yang diberikan. Jika proses pembaruan berhasil, nil akan dikembalikan. Jika terjadi kesalahan, error akan dikembalikan.

  5. DeleteProduct(id int) error: Fungsi ini digunakan untuk menghapus produk berdasarkan ID yang diberikan. Jika proses penghapusan berhasil, nil akan dikembalikan. Jika terjadi kesalahan, error akan dikembalikan.

src/models/Products.go

package models

import (
	"gofiber/src/configs"
	"gorm.io/gorm"
)

type Product struct {
	gorm.Model
	Name  string  `json:"name"`
	Price float64 `json:"price"`
	Stock int     `json:"stock"`
}

func SelectAllProducts() []*Product {
	var items []*Product
	configs.DB.Find(&items)
	return items
}

func SelectProductById(id int) *Product {
	var item Product
	configs.DB.First(&item, "id = ?", id)
	return &item
}

func PostProduct(item *Product) error {
	result := configs.DB.Create(&item)
	return result.Error
}

func UpdateProduct(id int, newProduct *Product) error {
	result := configs.DB.Model(&Product{}).Where("id = ?", id).Updates(newProduct)
	return result.Error
}

func DeleteProduct(id int) error {
	result := configs.DB.Delete(&Product{}, "id = ?", id)
	return result.Error
}
  1. *GetAllProduct(c fiber.Ctx) error: Fungsi ini mengembalikan semua produk dalam database sebagai respons JSON.

  2. *GetDetailProduct(c fiber.Ctx) error: Fungsi ini mengembalikan detail produk berdasarkan ID yang diberikan dalam respons JSON. Jika produk tidak ditemukan, respons status "Product not found" akan dikirim.

  3. *CreateProduct(c fiber.Ctx) error: Fungsi ini digunakan untuk menambahkan produk baru ke dalam database. Jika proses penambahan berhasil, respons "Product created successfully" akan dikirim.

  4. *UpdateProduct(c fiber.Ctx) error: Fungsi ini digunakan untuk memperbarui produk berdasarkan ID yang diberikan. Jika proses pembaruan berhasil, respons "Product updated successfully" akan dikirim.

  5. *DeleteProduct(c fiber.Ctx) error: Fungsi ini digunakan untuk menghapus produk berdasarkan ID yang diberikan. Jika proses penghapusan berhasil, respons "Product deleted successfully" akan dikirim.

src/controllers/ProductsControllers.go

package controllers

import (
	"fmt"
	"gofiber/src/models"
	"strconv"

	"github.com/gofiber/fiber/v2"
)

func GetAllProducts(c *fiber.Ctx) error {
	products := models.SelectAllProducts()
	return c.JSON(products)
}

func GetProductById(c *fiber.Ctx) error {
	id, _ := strconv.Atoi(c.Params("id"))
	foundProduct := models.SelectProductById(id)
	if foundProduct == nil {
		return c.Status(fiber.StatusNotFound).JSON(fiber.Map{
			"message": "Product not found",
		})
	}
	return c.JSON(foundProduct)
}

func CreateProduct(c *fiber.Ctx) error {
	var newProduct models.Product
	if err := c.BodyParser(&newProduct); err != nil {
		c.Status(fiber.StatusBadRequest).JSON(fiber.Map{
			"message": "Invalid request body",
		})
		return err
	}
	models.PostProduct(&newProduct)
	return c.Status(fiber.StatusCreated).JSON(fiber.Map{
		"message": "Product created successfully",
	})
}

func UpdateProduct(c *fiber.Ctx) error {
	id, _ := strconv.Atoi(c.Params("id"))

	var updatedProduct models.Product
	if err := c.BodyParser(&updatedProduct); err != nil {
		c.Status(fiber.StatusBadRequest).JSON(fiber.Map{
			"message": "Invalid request body",
		})
		return err
	}
	err := models.UpdateProduct(id, &updatedProduct)
	if err != nil {
		return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{
			"message": fmt.Sprintf("Failed to update product with ID %d", id),
		})
	}
	return c.Status(fiber.StatusOK).JSON(fiber.Map{
		"message": fmt.Sprintf("Product with ID %d updated successfully", id),
	})
}

func DeleteProduct(c *fiber.Ctx) error {
	id, _ := strconv.Atoi(c.Params("id"))
	err := models.DeleteProduct(id)
	if err != nil {
		return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{
			"message": fmt.Sprintf("Failed to delete product with ID %d", id),
		})
	}
	return c.Status(fiber.StatusOK).JSON(fiber.Map{
		"message": fmt.Sprintf("Product with ID %d deleted successfully", id),
	})
}

Dengan memperbarui model dan kontroler sesuai dengan kode yang diberikan, Anda telah menambahkan fungsi untuk melakukan operasi database dengan menggunakan GORM. Sekarang, kontroler akan memanggil fungsi-fungsi yang sesuai dari model untuk mengakses dan memanipulasi data produk dalam database.

PreviousSetting database menggunahkan gorm.io di GofiberNextMembuat relasi dengan gorm di Gofiber

Last updated 1 year ago