# BUILD CRUD USING GO, FIBER, MYSQL, AND ATLAS
## Setup Project
### Membuat Proyek Baru:
```bash
mkdir go-crud-fiber
cd go-crud-fiber
```
### Inisialisasi Proyek Go:
Inisialisasi proyek Go dengan menjalankan perintah berikut:
```bash
go mod init go-crud-fiber
```
### Instal Fiber:
```bash
go get -u [Link]/gofiber/fiber/v2
```
### Membuat File Utama:
Buat file utama untuk aplikasi Anda, misalnya [Link].
```bash
package main
import "[Link]/gofiber/fiber/v2"
func main() {
app := [Link]()
[Link]("/", func(c *[Link]) error {
return [Link]("Hello, World!")
})
[Link](":3000")
}
```
### Menjalankan Aplikasi:
Jalankan aplikasi dengan perintah:
```bash
go run .
```
atau
```bash
go run [Link]
```
## Instalasi Atlas
### Instal Atlas
```bash
curl -sSf [Link] | sh
```
### Mencek Instalasi Atlas
Untuk mencek instalasi Atlas sudah sukses atau tidak, bisa ketikkan
perintah berikut:
```bash
atlas version
```
## Setup Database
Pada contoh ini, saya menggunakan MySQL yang berjalan dengan docker
Jalankan perintah:
```bash
docker run --rm -d --name atlas-demo -p 3306:3306 -e MYSQL_ROOT_PASSWORD=pass -e
MYSQL_DATABASE=example mysql
```
## Install Gorm & Membuat Entities
### Install Gorm
```bash
go get -u [Link]/gorm
go get -u [Link]/driver/mysql
```
### Membuat Entities
Buat folder dengan nama `entities` dan di dalamnya buat file `[Link]`
```go
package entities
import "time"
type Task struct {
ID uint `gorm:"primaryKey;autoIncrement" json:"id"`
TaskName string `json:"task_name"`
TaskDescription string `json:"task_description"`
CreatedAt [Link] `gorm:"autoCreateTime" json:"created_at"`
UpdatedAt [Link] `gorm:"autoUpdateTime" json:"updated_at"`
}
```
## Migration with Atlas dan Gorm
Ketikkan perintah berikut:
```bash
go get -u [Link]/atlas-provider-gorm
```
Selanjutnya fi root folder project, buat file `[Link]`
```atlas
data "external_schema" "gorm" {
program = [
"go",
"run",
"-mod=mod",
"[Link]/atlas-provider-gorm",
"load",
"--path", "./entities",
"--dialect", "mysql", // | postgres | sqlite | sqlserver
]
}
env "gorm" {
src = data.external_schema.[Link]
dev = "docker://mysql/8/dev"
migration {
dir = "[Link]
}
format {
migrate {
diff = "{{sql . \" \"}}"
}
}
}
```
Kemudian import `[Link]/atlas-provider-gorm/gormschema` di dalam file `[Link]`.
Lalu ketikkan perintah berikut:
```bash
go get [Link]/atlas-provider-gorm/gormschema
```
Buka kembali file `[Link]` dan tambahkan code berikut:
```go
stmts, err := [Link]("mysql").Load(&[Link]{})
if err != nil {
[Link]([Link], "failed to load gorm schema: %v\n", err)
[Link](1)
}
[Link]([Link], stmts)
```
Ketikkan perintah berikut di terminal:
```bash
atlas migrate diff --env gorm
```
Selanjutnya ketikkan berikut:
```bash
atlas migrate apply --env gorm -u
"mysql://root:supersecretpassword@localhost/crud"
```
## Setup Gorm Connection
Melakukan setup koneksi database dengan Gorm
Buat sebuah folder baru dengan nama `db` dan di dalamnya buat file dengan nama
`[Link]`
```go
package db
import (
"fmt"
"[Link]/driver/mysql"
"[Link]/gorm"
)
func DatabaseConnection() {
dsn := "root:supersecretpassword@tcp(localhost:3306)/go_atlas_crud"
db, err := [Link]([Link](dsn), &[Link]{})
if db != nil {
[Link]("Connection success")
}
if err != nil {
panic("failed to connect database")
}
}
```
Buka file `[Link]`, dan tambahkan code berikut:
```go
// koneksi database
[Link]()
```