Ini adalah Layered Architecture kalau dilihat secara struktur partisinya
- Sistem eksternal melakukan permintaan (HTTP, gRPC, Messaging, dll) ke delivery, contoh permintaan dari sistem eksternal adalah request HTTP get dari client, request gRPC dari client, baca pesan dari message broker, atau baca cache dari redis
- Delivery akan mengakses model request untuk setiap request yang masuk, dan memanggil model response, untuk mengembalikan response data dari use case ke sistem eksternal
- Delivery akan memanggil use case, didalam use case berisi bisnis logic (transaksi, validasi, dll)
- Use case membuat instance baru dari entity dan mengisi data entity dari request model
- Use case memanggil repository, untuk menyimpan data instance entity yg telah dibuat ke database
- Repository menggunakan data entity untuk melakukan operasi database
- Repository melakukan operasi basis data ke database
- Use case memberikan response yang sesuai berdasarkan model response
- Lalu jika ada data yang perlu dikirim ke sistem eksternal, maka use case akan memanggil gateway, dan gateway akan mengirimkan data ke sistem eksternal
- Gateway juga akan mengaksesl model untuk data yang dikirim ke sistem eksternal
- Gateway akan melakukan permintaan mengirimkan data ke sistem eksternal
- Golang : https://github.com/golang/go
- MySQL : https://github.com/mysql/mysql-server
- Minio : https://github.com/minio/minio
- GoFiber (HTTP Framework) : https://github.com/gofiber/fiber
- GoFiber CORS (CORS Middleware) : https://docs.gofiber.io/api/middleware/cors
- GORM (ORM) : https://github.com/go-gorm/gorm
- Viper (Configuration) : https://github.com/spf13/viper
- Go Migrate (Database Migration) : https://github.com/golang-migrate/migrate
- Go Playground Validator (Validation) : https://github.com/go-playground/validator
- Logrus (Logger) : https://github.com/sirupsen/logrus
- Go Midtrans : https://github.com/veritrans/go-midtrans
- Go Oauth2 : https://pkg.go.dev/golang.org/x/oauth2#section-readme
- Go Minio : https://pkg.go.dev/github.com/minio/minio-go/v7#section-readme
Semua konfigurasi add di file config.json
.
Semua api spec ada di folder api-spec
.
Semua database migration ada di folder db/migrations
.
go install -tags 'mysql' github.com/golang-migrate/migrate/v4/cmd/migrate@latest
migrate create -ext sql -dir db/migrations create_table_xxx
migrate -database "mysql://root:root_password@tcp(localhost:3306)/crowdfunding_db?charset=utf8mb4&parseTime=True&loc=Local" -path db/migrations up
go mod tidy
go run cmd/web/main.go
- Pertama, tambahkan data dan jalankan test untuk membuat 2 default user di CreateDefaultUser di file helper_test.go
- Login ke salah satu akun untuk melakukan testing
- Lalu tambahkan access token ke dalam file config.json di data test
- Access token hanya bertahan selama 1 jam, jadi lakukan refresh token jika sudah expired
- setelah itu jalankan keseluruhan test dengan perintah berikut
# jalankan semua test
go test -v ./test/
# jalankan test dengan nama tertentu
go test -v -run TestCreateDefaultUser ./test/