Week04/

directory
v0.0.3-0...-d1948f1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 30, 2023 License: MIT

README

Latihan kumpul disini

Backend Package

Pada bagian ini dijelaskan bagaimana membangun otorisasi pada backend, beberapa langkah yang dilakukan :

  • Membuat database backend
  • Membuat function golang
  • Membuat package golang dan merilisnya

Pastikan github pages sudah jalan di repo masing-masing.

Basis data

Dalam memilih basis data skala enterprise harus mengacu pada hasil survey Gartner.Buatlah masing-masing basis data dari studi kasus yang dipilih :

  • MongoDB

  • MySQL : https://www.freemysqlhosting.net/, https://www.db4free.net/, https://remotemysql.com/

  • Jika belum punya akun silahkan buat akun menggunakan akun Github (sign in) image image image

    Pada saat deploy Pilih Free Plan, Provider pilih Google Cloud, Region Pilih Jakarta, Nama Cluster sesuaikan saja, kemudian Create image Pada security quickstart silahkan pilih username dan password (Jangan lupa untuk save password di notepad kalian), kemudian create user image

    Untuk Tahap 2, klik Add Current My IP Address image Jika sudah klik Finish and Close image image

    Jika belum punya MongoDB Compass, silahkan download terlebih dahulu image

    Buka Mongo DB Compas, Kemudian Add New Connection, copy paste connection string pada gambar di atas, ganti Passwordnya dengan yang tadi sudah disimpan dan hapus kurung sikunya image Hasilnya seperti ini image Struktur tabel/collection di MongoDB terlihat seperti JSON image Pada mongodb.com untuk dapat diakses pada semua IP Address, klik ALLOW ACCESS FROM ANYWHERE atau dengan menuliskan 0.0.0.0/0 image

Pengembangan Backend

Pada sesi ini kita akan mencoba mengembangkan package golang. Langkah untuk membuat backend di golang :

  • Instalasi golang (https://go.dev/dl/)
  • Definisikan dahulu struct
  • Buatlah package dan fungsi menggunakan struct tersebut
  • Fungsi mengakses langsung database

Struct di golang

Komunikasi di golang menggunakan json dipermudah dengan adanya struct type. Struct type ini akan mendefinisikan bagaimana bentuk json yang berkomunikasi dari frontend menuju backend. Sebelumnya inisiasi dulu package yang akan kita buat, masuk ke folder kerja kita dan lakukan inisialisasi package

go mod init github.com/{username github kalian}/{nama repo kalian}/Week4/Site/{NPM masing-masing}

image

Buat file type.go pada folder tersebut. Kemudian isilah dengan struct yang akan kita buat. Perlu digaris bawahi dan wajib ada atribut :

  • bson : mendefinisikan nama field pada collection di database mongoDB
  • json : mendefinisikan nama atribut pada pertukaran json melalui API
  • omitempty : diperbolehkan tidak diisi / nullable
  • [] menunjukan data array didalam array
package namapackage

import (
	"go.mongodb.org/mongo-driver/bson/primitive"
)

type Karyawan struct {
	ID           primitive.ObjectID `bson:"_id,omitempty" json:"_id,omitempty"`
	Nama         string             `bson:"nama,omitempty" json:"nama,omitempty"`
	Phone_number string             `bson:"phone_number,omitempty" json:"phone_number,omitempty"`
	Jabatan      string             `bson:"jabatan,omitempty" json:"jabatan,omitempty"`
	Jam_kerja    []JamKerja         `bson:"jam_kerja,omitempty" json:"jam_kerja,omitempty"`
	Hari_kerja   []string           `bson:"hari_kerja,omitempty" json:"hari_kerja,omitempty"`
}

type JamKerja struct {
	Durasi     int      `bson:"durasi,omitempty" json:"durasi,omitempty"`
	Jam_masuk  string   `bson:"jam_masuk,omitempty" json:"jam_masuk,omitempty"`
	Jam_keluar string   `bson:"jam_keluar,omitempty" json:"jam_keluar,omitempty"`
	Gmt        int      `bson:"gmt,omitempty" json:"gmt,omitempty"`
	Hari       []string `bson:"hari,omitempty" json:"hari,omitempty"`
	Shift      int      `bson:"shift,omitempty" json:"shift,omitempty"`
	Piket_tim  string   `bson:"piket_tim,omitempty" json:"piket_tim,omitempty"`
}

type Presensi struct {
	ID           primitive.ObjectID `bson:"_id,omitempty" json:"_id,omitempty"`
	Longitude    float64            `bson:"longitude,omitempty" json:"longitude,omitempty"`
	Latitude     float64            `bson:"latitude,omitempty" json:"latitude,omitempty"`
	Location     string             `bson:"location,omitempty" json:"location,omitempty"`
	Phone_number string             `bson:"phone_number,omitempty" json:"phone_number,omitempty"`
	Datetime     primitive.DateTime `bson:"datetime,omitempty" json:"datetime,omitempty"`
	Checkin      string             `bson:"checkin,omitempty" json:"checkin,omitempty"`
	Biodata      Karyawan           `bson:"biodata,omitempty" json:"biodata,omitempty"`
}

type Lokasi struct {
	ID       primitive.ObjectID `bson:"_id,omitempty" json:"_id,omitempty"`
	Nama     string             `bson:"nama,omitempty" json:"nama,omitempty"`
	Batas    Geometry           `bson:"batas,omitempty" json:"batas,omitempty"`
	Kategori string             `bson:"kategori,omitempty" json:"kategori,omitempty"`
}

type Geometry struct {
	Type        string      `json:"type" bson:"type"`
	Coordinates interface{} `json:"coordinates" bson:"coordinates"`
}

Kompilasi dependensi dengan perintah

go mod tidy

image

Fungsi di golang

Edit Environtments Variables pada Windows Buka MongoDB Compass, kemudian pilih copy connection string image Paste pada environments variables, kemudian simpan image Jika sudah, close text editor (misal VSCode), kemudian buka lagi VSCodenya

Disini dipelajari bagaimana membuat fungsi dan menggunakan environment variabel di golang. Pertama simpan dahulu MONGOSTRING koneksi mongodb di environtment variabel windows atau sistem operasi. Buat file {nama file}.go yang berisi

package namapackage

import (
	"context"
	"fmt"
	"go.mongodb.org/mongo-driver/bson"
	"go.mongodb.org/mongo-driver/bson/primitive"
	"os"
	"time"

	"go.mongodb.org/mongo-driver/mongo"
	"go.mongodb.org/mongo-driver/mongo/options"
)

var MongoString string = os.Getenv("MONGOSTRING")

func MongoConnect(dbname string) (db *mongo.Database) {
	client, err := mongo.Connect(context.TODO(), options.Client().ApplyURI(MongoString))
	if err != nil {
		fmt.Printf("MongoConnect: %v\n", err)
	}
	return client.Database(dbname)
}

func InsertOneDoc(db string, collection string, doc interface{}) (insertedID interface{}) {
	insertResult, err := MongoConnect(db).Collection(collection).InsertOne(context.TODO(), doc)
	if err != nil {
		fmt.Printf("InsertOneDoc: %v\n", err)
	}
	return insertResult.InsertedID
}

func InsertPresensi(long float64,lat float64, lokasi string, phonenumber string, checkin string, biodata Karyawan) (InsertedID interface{}) {
	var presensi Presensi
	presensi.Latitude = long
	presensi.Longitude = lat
	presensi.Location = lokasi
	presensi.Phone_number = phonenumber
	presensi.Datetime = primitive.NewDateTimeFromTime(time.Now().UTC())
	presensi.Checkin = checkin
	presensi.Biodata = biodata
	return InsertOneDoc("tes_db", "presensi", presensi)
}

func GetKaryawanFromPhoneNumber(phone_number string) (staf Presensi) {
	karyawan := MongoConnect("tes_db").Collection("presensi")
	filter := bson.M{"phone_number": phone_number}
	err := karyawan.FindOne(context.TODO(), filter).Decode(&staf)
	if err != nil {
		fmt.Printf("getKaryawanFromPhoneNumber: %v\n", err)
	}
	return staf
}

rapihkan dependensi

go mod tidy

image

Testing Fungsi

Buat file dengan format {namafile}_test.go

package namapackage

import (
	"fmt"
	"testing"
)

func TestInsertPresensi(t *testing.T) {
	long := 98.345345
	lat := 123.561651
	lokasi := "Rumah"
	phonenumber := "68122221814"
	checkin := "masuk"
	biodata := Karyawan{
		Nama : "Drake",
		Phone_number : "628456456211",
		Jabatan : "Rakyat Biasa",
	}
	hasil:=InsertPresensi(long ,lat , lokasi , phonenumber , checkin , biodata )
	fmt.Println(hasil)
}

func TestGetKaryawanFromPhoneNumber(t *testing.T) {
	phonenumber := "68122221814"
	biodata:=GetKaryawanFromPhoneNumber(phonenumber)
	fmt.Println(biodata)
}


Jalankan testing

go test

Berhasil create dan view image

Untuk melihat hasil test pada MongoDB Compass image

Untuk menjalankan run test per fungsi bisa menggunakan perintah

go test -run ^NAMAFUNCTION$

Publish Package

Setting dahulu environtment variabel di windows : GOPROXY=proxy.golang.org image

lakukan langkah berikut :

git tag
git tag v0.0.1
git push origin --tags
go list -m github.com/indrariksa/ws@v0.0.1

image image

Jika sudah seharusnya package kalian ada di pkg.go.dev. Butuh waktu mungkin sekitar 1 minggu untuk rilis

Directories

Path Synopsis
Tugas

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL