Cloud Firestore adalah database terbaru dari Firebase untuk pengembangan aplikasi seluler. Database ini melanjutkan keberhasilan Realtime Database dengan model data baru yang lebih intuitif. Cloud Firestore juga memiliki fitur kueri yang lebih lengkap dan lebih cepat, serta fitur skala yang lebih mendalam dibandingkan dengan Realtime Database.

Baca artikel sebelumnya tentang Firebase dan Firestore.

Pada artikel kali ini kita akan membahas bagaimana cara membuat function connection pada bahasa GO dengan database Firestore.

untuk mengikuti tutorial ini pastikan kamu sudah mempunyai account GCP ( google cloud platform ), selanjutnya buka firebase console di linke berikut ini

link : https://console.firebase.google.com

Buat nama project anda, ikuti proses yang di persyaratkan oleh firebase

Pilih cloud firestore pada dashboard project anda, seperti gambar di bawah ini

screen firestore

 

Buat database firestore anda, setelah itu masuk menu setting > service dan buat access key untuk akses aplikasi kedalam database firebase anda.

Pilih konfigurasi SDK Admin untuk bahasa GO, kemudian download file dalam bentuk JSON. Isi file generate key-nya seperti di bawah ini:

{
  "type": "service_account",
  "project_id": "dfdfdf12",
  "private_key_id": "dfdfkdlfkldkfldd6a2",
  "private_key": "-----BEGIN PRIVATE KEY-----dkjkjgkfjgkfjgkf-----END PRIVATE KEY-----\n",
  "client_email": "xxx",
  "client_id": "xxx",
  "auth_uri": "https://accounts.google.com/o/oauth2/auth",
  "token_uri": "https://oauth2.googleapis.com/token",
  "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
  "client_x509_cert_url": "xxxx"
}

Selanjutnya kita akan buat sebuah project dengan bahasa GO, dengan struktur direktory project seperti gambar dibawah ini :

golang firestore

Buat file .env dan buat nama variable sebagai berikut

PORT=:8091
PROJECTID=id-project-firebase-anda
JSONKEY=key.json

Pada directory config, buat file dengan nama config.py dan buat function Connection. Perhatikan kode dibawah ini

package config
 
import (
	"context"
	"fmt"
	"gofirestore/globals"
	"log"
 
	firebase "firebase.google.com/go"
	"google.golang.org/api/option"
)
 
func Connection() (context.Context, *firebase.App) {
	ctx := context.Background()
	opt := option.WithCredentialsFile(globals.GetEnv("JSONKEY"))
	config := &firebase.Config{ProjectID: globals.GetEnv("PROJECTID")}
	app, err := firebase.NewApp(ctx, config, opt)
	if err != nil {
		fmt.Println("error cuiiiiiiiii")
		log.Fatalln(err)
	}
	return ctx, app
}

Buat directory product dan file handlers.go, di sini kita akan menguji function connection yang kita buat berhasil atau tidak. Perhatikan code di bawah ini

package products
 
import (
	"gofirestore/config"
	"gofirestore/globals"
	"gofirestore/models"
	"log"
	"net/http"
)
 
func ProductAll(w http.ResponseWriter, r *http.Request) {
	ctx, app := config.Connection()
	client, err := app.Firestore(ctx)
	if err != nil {
		log.Fatalln(err)
	}
	defer client.Close()
	if err != nil {
		globals.RespondWithJSON(w, http.StatusBadRequest, models.Result{
			Status:  http.StatusBadRequest,
			Message: "Database not found",
		})
		return
	}
 
	globals.RespondWithJSON(w, http.StatusOK, models.Result{
		Status:  http.StatusOK,
		Message: "Database found",
	})
	return
}

Buat folder dengan nama routes dan file dengan nama routes.go untuk melakukan routing url project kita. Perhatikan kode dibawah ini

package routes
 
import (
	"gofirestore/products"
	"log"
	"net/http"
 
	"github.com/alecthomas/template"
	"github.com/gorilla/mux"
)
 
func SetupRouter() *mux.Router {
	router := mux.NewRouter().StrictSlash(true)
	router.HandleFunc("/", getIndex)
	router.Handle("/products", http.HandlerFunc(products.ProductAll)).Methods("GET")
 
	return router
}
func getIndex(w http.ResponseWriter, r *http.Request) {
	t, err := template.ParseFiles("./html/index.html")
	if err != nil {
		log.Fatal("Error template rendering", err)
	}
	t.Execute(w, nil)
}

Pada file main.go, buat konfigurasi untuk mengatur port dan routing url dari project yang kita buat, perhatikan kode dibawah ini :

package main
 
import (
	"gofirestore/globals"
	"gofirestore/routes"
	"net/http"
	"time"
)
 
func main() {
	r := routes.SetupRouter()
	s := &http.Server{
		Addr:           globals.GetEnv("PORT"),
		Handler:        r,
		ReadTimeout:    30 * time.Second,
		WriteTimeout:   30 * time.Second,
		MaxHeaderBytes: 1 << 20,
	}
	s.ListenAndServe()
}

 

diatas kita telah menyelesaikan step by step untuk menghubungkan koneksi database firestore dan golang. selanjutnya kita perlu melakukan testing dengan cara menjalankan aplikasi kita, dengan command sebagai berikut :

go run main.go

baca artikel lainya :

Download kode lengkap di sini

 

Note : jika ada pertanyaan dan saran silahkan hubungi penulis