From 2f0fdb7fd66bfd26a52cf50e6e03525d765ef2a2 Mon Sep 17 00:00:00 2001 From: farhan Date: Mon, 20 Nov 2023 15:51:08 +0700 Subject: [PATCH 1/2] feat: add clean architecture page --- content/D-clean-architecture.md | 882 ++++++++++++++++++++++++++++++++ content/images/D-run-server.png | Bin 0 -> 118948 bytes 2 files changed, 882 insertions(+) create mode 100644 content/D-clean-architecture.md create mode 100644 content/images/D-run-server.png diff --git a/content/D-clean-architecture.md b/content/D-clean-architecture.md new file mode 100644 index 000000000..3dd71c7ea --- /dev/null +++ b/content/D-clean-architecture.md @@ -0,0 +1,882 @@ +# D.4 Clean Architecture Golang +pada chapter ini kita akan praktek penerapan salah satu arsitektur yang banyak digunakan oleh developer, yaitu clean architecture. +> NOTE: Clean architecture tidak ada batasan apa saja teknologi atau bahasa pemrograman yang dipakai, namun di tutorial ini saya menggunakan golang native tanpa menggunakan framework seperti go-fiber, go-chi dan sebagainya untuk implementasi dari architecture ini. +## D.4.1 Penjelasan +Clean Architecture adalah sistem arsitektur yang dibuat oleh Robert C.Martin(Uncle Bob) yang merupakan berasal terdiri dari: Hexagonal Architecture, Onion Architecture, Screaming Architecture, dan sebagainya selama beberapa tahun. Arsitektur ini membuat setiap proses dibagi menjadi layer tersendiri yang berdiri sendiri tanpa ada interfensi dari layer atas. +Menurut Uncle Bob ada 5 keuntungan untuk memakai arsitektur ini, yaitu: +#### • Testable +Proses bisnis bisa di testing tanpa mengubah User Interface, Database, Webserver, atau external komponen. Kita bisa membuat dan menjalankan skenario testing proses tanpa mengubah komponen yang sudah ada. +#### • Independent of UI +User Interface lebih mudah untuk diubah tanpa mengubah seluruh yang ada di sistem. Sebagai contoh User Interface web bisa dengan console ui tanpa mengubah aturan proses bisnis. +#### • Independent of Database +Independen database yang berarti bisa mengganti database Oracle atau SQL Server ke MongoDB, BigTable, CouchDB, dan sebagainya. Jadi aturan proses bisnis tidak melompati ke database. +#### • Independent Framework +Clean architecture tidak mempunyai ketergantungan dengan beberapa library fitur yang ada di perangkat lunak. Ini seperti memperbolehkan menggunakan framework sebagai alat atau tool, daripada harus memaksa menambahkan di sistem kita ke dalam limitnya. +#### • Independent of any External +Secara fakta aturan proses bisnis kita secara sederhana tidak mengetahui apapun yang ada di eksternal layer. + +Di bawah ini adalah layer-layer diagram dari clean architecture + ![](https://blog.cleancoder.com/uncle-bob/images/2012-08-13-the-clean-architecture/CleanArchitecture.jpg) + Seperti yang terlihat ada 4 layer dibuat oleh uncle bob yaitu: Entities, Usecases, Interface Adapters, Framework & Drivers: + +#### 1. Entities +Entities digunakan untuk membuat object, method, atau bisa juga data structure dan function. Entities tidak melakukan perubahan yang ada diluar, jadi apabila ada perubahan di layer atas seperti usecase atau controller, entities tidak ada interfensi untuk merubah alur proses bisnis yang terjadi. +#### 2. Usecases +Layer Usecase ini berisi tentang alur proses bisnis di aplikasi spesifik. Layer ini merangkum dan mengimplementasikan dari entities menjadi alur bisnis proses yang dibuat. Di dalam usecase tidak ada perubahan yang berefek kepada entities. +#### 3. Interface Adapters +Interface Adapters memiliki struktur didalamnya antara lain, Controllers, Presenters dan Views. Layer ini dipakai untuk adaptor dengan layer usecase dan entities. Alur berjalannya layer interface adapter ini adalah dari controller mengirim data ke usecase, lalu dari usecase dilempar ke Presenter dan ke Views. +#### 4. Framework & Drivers +Layer ini adalah paling luar dari 3 layer diatas, secara umum layer ini tersusun dari framework dan alat seperti database, web framework, dan sebagainya. Di sini kalian tidak membuat code untuk menyambungkan komunikasi ke layer lainnya. + +## D.4.2 Persiapan +Kita akan mempersiapkan struktur folder untuk membuat clean architecture, karena architecture ini setiap layer harus dipisah maka kita akan membuat folder untuk setiap layer. Berikut ini struktur foldernya: + +```bash +. +├── configs +│ # configs berisi konfigurasi seperti database, logger, dan sebagainya. +├── controllers +│ # controller berisi route api dan menyisipkan layer usecase untuk melakukan bisnis proses. +├── entities +│ # entities isinya adalah untuk membuat model data, model method atau juga model function. +├── repositories +│ # repositories berisi function atau method dengan model entities yang sudah dibuat. +├── usecases +│ # usecases berisi function yang berisi ochestrator dari repositories. +└── main.go +``` +Lalu kita akan menyiapkan beberapa library golang yang dipakai untuk aplikasi kita: +- #### Godotenv +Godotenv library untuk membuat environment aplikasi. +``` go get -u github.com/joho/godotenv ``` +- #### Gorm +Gorm library digunakan untuk membuat orm database sql. +``` go get -u gorm.io/gorm ``` +- #### Go-playground Validator +Go-playground validator dipakai untuk membuat validasi dari request. +``` go get -u github.com/go-playground/validator/v10 ``` +- #### Gorm Postgres +Gorm postgres digunakan untuk orm database sql khusus untuk postgres. +``` go get -u gorm.io/driver/postgres ``` + +## D.4.3 Praktek +Setelah struktur folder project sudah dibuat, kita akan implementasi clean architecture pada tutorial ini. Di setiap layer kita akan membuat dependecy injection dari Entities, Usecase, dan Controller. +### D.4.3.1 Config +Kita akan membuat 1 folder bernama ``` config ```. Folder ini berisi konfigurasi yang akan kita pakai di aplikasi seperti environment, database, validator, dan lain-lain. +Kita buat file ``` .env ``` yang berisi konfigurasi database dan aplikasi. +- #### File .env +```env +DATABASE_HOST=127.0.0.1 +DATABASE_PORT=5432 +DATABASE_USERNAME=postgres +DATABASE_PASSWORD=postgres +DATABASE_NAME=testing-clean-architecture + +APP_NAME=clean-architeture-example +APP_HOST=127.0.0.1 +APP_PORT=9090 +APP_VERSIONAPI=v1 +``` +Untuk database kalian menyesuaikan dengan local kalian masing-masing. Di file ini juga kita membuat konfigurasi dari aplikasi seperti nama aplikasi, host, port, dan version api yang akan kita pakai. +Setelah sudah kita membuat 1 file lagi bernama ``` database.go ```, file ini berisi konfigurasi dan koneksi database postgres. +- #### File database.go +```go +package config + +import ( + "time" + + "gorm.io/driver/postgres" + "gorm.io/gorm" +) + +type DatabaseConfig struct { + Host string + Port string + Username string + Password string + DBname string +} + +func NewDatabaseConfig(config DatabaseConfig) (db *gorm.DB, err error) { + stringConnection := "host=" + config.Host + " user=" + config.Username + " password=" + config.Password + " dbname=" + config.DBname + " port=" + config.Port + " TimeZone=UTC" + db, err = gorm.Open(postgres.Open(stringConnection), &gorm.Config{}) + if err != nil { + return + } + + sqlDB, err := db.DB() + if err != nil { + return + } + + // SetConnMaxIdleTime: berfungsi untuk menetapkan jumlah maksimum waktu koneksi secara idle(tidak berjalan) + sqlDB.SetConnMaxIdleTime(1 * time.Minute) + // SetConnMaxLifetime: berfungsi menentukan maksimum waktu dapat digunakan kembali + sqlDB.SetConnMaxLifetime(10 * time.Minute) + // SetMaxIdleConns: berfungsi untuk menentukan jumlah connection tidak dijalankan(idle) + sqlDB.SetMaxIdleConns(20) + // SetMaxOpenConns: berfungsi untuk menetapkan jumlah open koneksi + sqlDB.SetMaxOpenConns(5) + + return +} +``` + +### D.4.3.2 Entities +Layer entities ini berisi data struct, method, function dan juga entities.Kita akan buat 3 file di folder ```entities``` dengan nama ``` products.go```, ```product_request.go```, dan ```product_response.go``` dengan isi kode dibawah ini: +- #### File products.go +```go +package entities + +import "gorm.io/gorm" + +type Products struct { + gorm.Model + ID int `gorm:"column:id"` + Name string `gorm:"column:name"` + Price float64 `gorm:"column:price"` + Weight float64 `gorm:"column:weight"` +} + +// Membuat model interface untuk repository product +type ProductRepository interface { + GetByID(id int) (Products, error) + Gets() ([]Products, error) + Create(product *Products) error + Update(product *Products) error + DeleteByID(id int) (Products, error) + Count() (int64, error) +} + +// Membuat model interface untuk usecase product +type ProductUsecase interface { + GetOne(id int) (ProductResponseJSON, error) + Gets() (ProductResponseJSON, error) + Create(product CreateProductRequest) (ProductResponseJSON, error) + Update(product UpdateProductRequest) (ProductResponseJSON, error) + DeleteByID(id int) (ProductResponseJSON, error) +} +``` +Pada file ```products.go``` kita membuat model untuk table database dan model repository dan usecase yang nanti akan di inject. +- #### File product_request.go +```go +package entities + +type CreateProductRequest struct { + Name string `json:"name" validate:"required"` + Price float64 `json:"price" validate:"required"` + Weight float64 `json:"weight" validate:"required"` +} + +type UpdateProductRequest struct { + ID int `json:"id" validate:"required"` + Name string `json:"name" validate:"required"` + Price float64 `json:"price" validate:"required"` + Weight float64 `json:"weight" validate:"required"` +} + +type DeleteProductRequest struct { + ID int `json:"id" validate:"required"` +} +``` +Pada file ```product_request.go``` kita membuat model untuk request data untuk proses api seperti insert, update, dan delete.Disamping itu juga di setiap tag request terdapat code ``` validate:"required" ``` yang berfungsi sebagai validasi bahwa setiap request tidak boleh kosong dan akan di lakukan oleh library go-playground validator. +- #### File product_response.go +```go +package entities + +// Struct request and response product +type ProductResponseJSON struct { + Data []Products `json:"data"` + Count int64 `json:"count"` + Success bool `json:"success"` + Message string `json:"message"` +} +``` +Pada file ```product_response.go``` kita membuat model untuk response data pada setiap api yang dibuat. Di sini kita hanya menambahkan tag json saja. + +### D.4.3.2 Repository +Di dalam folder ``` repositories ``` buat 1 file ``` product_repository.go ```. Di layer repository ini digunakan untuk meng-handle method database seperti gets, put, delete, get, dan sebagainya.Layer ini bertanggung jawab untuk database yang akan dipakai di aplikasi.Untuk code-nya seperti di bawah ini. +- #### File product_repository.go +```go +package repositories + +import ( + "clean-architecture-golang-example/entities" + "errors" + "log" + + "gorm.io/gorm" +) + +// ProductRepositores: repository untuk model product +type ProductRepositories struct { + database *gorm.DB +} + +// NewProductRepositories: Injeksi repository product model +func NewProductRepositories(conn *gorm.DB, isMigrate bool) entities.ProductRepository { + if isMigrate { + err := conn.AutoMigrate(entities.Products{}) + if err != nil { + log.Fatal("Migration Error:", err) + } + } + return &ProductRepositories{conn} +} + +// Create: digunakan untuk membuat insert data ke model product. +func (p *ProductRepositories) Create(product *entities.Products) error { + var err error + var tx *gorm.DB = p.database.Begin() + + query := tx.Model(entities.Products{}).Create(product) + err = query.Error + if err != nil { + tx.Rollback() + return err + } + + query = tx.Commit() + err = query.Error + if err != nil { + tx.Rollback() + return err + } + + return err +} + +// Count: digunakan untuk menghitung jumlah data product yang tersimpan. +func (p *ProductRepositories) Count() (int64, error) { + var count int64 + var err error + var tx *gorm.DB = p.database.Begin() + + query := tx.Model(entities.Products{}).Select("*").Count(&count) + err = query.Error + if err != nil { + return count, err + } + + query = tx.Commit() + err = query.Error + if err != nil { + return count, err + } + + return count, err +} + +// DelteByID: digunakan untuk menghapus data product dengan id yang dipilih. +func (p *ProductRepositories) DeleteByID(id int) (entities.Products, error) { + var product entities.Products + var err error + + queryFind := p.database.Model(entities.Products{}).Where("id = ?", id).Find(&product) + err = queryFind.Error + if err != nil { + if errors.Is(err, gorm.ErrRecordNotFound) { + return product, errors.New("ID is not found") + } + return product, err + } + + queryDelete := queryFind.Delete(&product) + err = queryDelete.Error + if err != nil { + return product, err + } + + return product, err +} + +// GetByID: digunakan untuk menampilkan data product yang sesuai dengan id yang dipilih. +func (p *ProductRepositories) GetByID(id int) (entities.Products, error) { + var result entities.Products + var err error + var tx *gorm.DB = p.database.Begin() + + query := tx.Model(&entities.Products{}).Where("id = ?", id).Where("deleted_at IS NULL").First(&result) + err = query.Error + if err != nil { + return result, err + } + + query = tx.Commit() + err = query.Error + if err != nil { + return result, err + } + + return result, err +} + +// Gets: digunakan untuk menampilkan semua data product. +func (p *ProductRepositories) Gets() ([]entities.Products, error) { + var results []entities.Products + var err error + var tx *gorm.DB = p.database.Begin() + + query := tx.Model(&entities.Products{}).Select("*").Where("deleted_at IS NULL").Scan(&results) + err = query.Error + if err != nil { + return results, err + } + + query = tx.Commit() + err = query.Error + if err != nil { + return results, err + } + + return results, err +} + +// Update: digunakan untuk update data product. +func (p *ProductRepositories) Update(product *entities.Products) error { + var err error + var tx *gorm.DB = p.database.Begin() + + queryFind := tx.Model(entities.Products{}).Where("id = ?", product.ID).Updates(&product) + err = queryFind.Error + if err != nil { + if errors.Is(err, gorm.ErrRecordNotFound) { + return errors.New("ID is not found") + } + return err + } + + queryFind = tx.Commit() + err = queryFind.Error + if err != nil { + return err + } + + return err +} +``` +Di dalam function ``` NewProductRepositories ``` terdapat 2 parameter yaitu: +- ``` conn *gorm.DB ``` digunakan untuk menerima connection database. Jadi untuk bagaimana query ini akan ke database atau konfigurasi kemana akan di ditambahkan ke file ``` main.go ``` +- ```isMigrate bool``` untuk menentukan pilihan apakah model ``` Products ``` di folder entities akan di migrasi ke database atau tidak. Migrasi ini akan di buat setelah server dijalankan. +Selain itu code ``` conn.AutoMigrate(entities.Products{}) ``` di dalam function tersebut digunakan untuk menjalankan migrasi ke database secara otomatis dengan model data yang kita buat. +Apabila kita lihat nilai return dari function ``` NewProductRepositories ``` adalah struct ``` ProductRepositories ``` dengan meng-injeksi ke model interface ``` entities.ProductRepository ```. Method dalam repository ini berisi query CRUD seperti biasa. + +### D.4.3.3 Usecase +Di folder usecase kita membuat 1 file bernama ``` product_usecase.go ```, file ini berisi orkestrator yang berisi method-method entities yang sudah kita siapkan sebelumnya. Pada layer ini bertugas untuk meng-handle logic bisnis proses. +- #### File product_usecase.go +```go +package usecases + +import ( + "clean-architecture-golang-example/entities" + "errors" + + "github.com/go-playground/validator/v10" +) + +// ProductUsecase: sebagai orchestrator bisnis proses product. +type ProductUsecase struct { + repository *entities.ProductRepository + valid *validator.Validate +} + +// NewProductUsecase: injeksi dari repository ke usecase +func NewProductUsecase(repository *entities.ProductRepository, valid *validator.Validate) entities.ProductUsecase { + return &ProductUsecase{repository, valid} +} + +// Create: digunakan untuk insert product ke repository. +func (usecase *ProductUsecase) Create(product entities.CreateProductRequest) (entities.ProductResponseJSON, error) { + var err error + var result entities.ProductResponseJSON + repo := *usecase.repository + err = usecase.valid.Struct(product) + if err != nil { + result = entities.ProductResponseJSON{ + Data: []entities.Products{}, + Count: 0, + Success: false, + Message: "Error validation:" + err.Error(), + } + return result, err + } + + count, err := repo.Count() + if err != nil { + result = entities.ProductResponseJSON{ + Data: []entities.Products{}, + Count: 0, + Success: false, + Message: "Error Internal Server:" + err.Error(), + } + return result, err + } + + var data = entities.Products{ + ID: int(count) + 1, + Name: product.Name, + Price: product.Price, + Weight: product.Weight, + } + + if err = repo.Create(&data); err != nil { + result = entities.ProductResponseJSON{ + Data: []entities.Products{}, + Count: 0, + Success: false, + Message: "Error Internal Server:" + err.Error(), + } + return result, err + } + + result = entities.ProductResponseJSON{ + Data: []entities.Products{data}, + Count: 1, + Success: true, + Message: "Create product success", + } + + return result, err +} + +// DeleteByID: digunakan untuk hapus product dengan id ke repository. +func (usecase *ProductUsecase) DeleteByID(id int) (entities.ProductResponseJSON, error) { + var result entities.ProductResponseJSON + if id == 0 { + return result, errors.New("ID must be not empty") + } + repo := *usecase.repository + data, err := repo.DeleteByID(id) + if err != nil { + result = entities.ProductResponseJSON{ + Data: []entities.Products{}, + Count: 0, + Success: false, + Message: "Error Internal Server:" + err.Error(), + } + return result, err + } + + result = entities.ProductResponseJSON{ + Data: []entities.Products{data}, + Count: 1, + Success: true, + Message: "Delete product success", + } + + return result, nil +} + +// GetOne: digunakan untuk mengambil data product dengan id yang sudah dipilih +func (usecase *ProductUsecase) GetOne(id int) (entities.ProductResponseJSON, error) { + var result entities.ProductResponseJSON + if id == 0 { + result = entities.ProductResponseJSON{ + Data: []entities.Products{}, + Count: 0, + Success: false, + Message: "Error Internal Server: ID must be not empty", + } + return result, errors.New("ID must be not empty") + } + repo := *usecase.repository + + data, err := repo.GetByID(id) + if err != nil { + result = entities.ProductResponseJSON{ + Data: []entities.Products{}, + Count: 0, + Success: false, + Message: "Error Internal Server: " + err.Error(), + } + return result, err + } + + result = entities.ProductResponseJSON{ + Data: []entities.Products{ + data, + }, + Count: 1, + Success: true, + } + + return result, nil +} + +// Gets: digunakan untuk menampilkan semua data product +func (usecase *ProductUsecase) Gets() (entities.ProductResponseJSON, error) { + repo := *usecase.repository + data, err := repo.Gets() + if err != nil { + return entities.ProductResponseJSON{}, err + } + + count, err := repo.Count() + if err != nil { + return entities.ProductResponseJSON{}, err + } + + result := entities.ProductResponseJSON{ + Data: data, + Count: count, + Success: true, + } + + return result, nil +} + +// Update: digunakan untuk mengubah data dengan id yang sudah dipilih +func (usecase *ProductUsecase) Update(product entities.UpdateProductRequest) (entities.ProductResponseJSON, error) { + err := usecase.valid.Struct(product) + var result entities.ProductResponseJSON + if err != nil { + return result, err + } + repo := *usecase.repository + var data = entities.Products{ + ID: product.ID, + Name: product.Name, + Price: product.Price, + Weight: product.Weight, + } + + if err = repo.Update(&data); err != nil { + return result, err + } + + count, err := repo.Count() + if err != nil { + return entities.ProductResponseJSON{}, err + } + + result = entities.ProductResponseJSON{ + Data: []entities.Products{data}, + Count: count, + Success: true, + Message: "Update product success", + } + + return result, nil +} + +``` +Seperti yang kita lihat, code di atas sama secara struktur dengan file ``` product_repository.go ``` namun di sini kita hanya memanggil method dari repository layer.Parameter ``` repository *entities.ProductRepository ``` adalah hasil injeksi dari repository layer yang sudah kita buat.Sebagai Contoh method ``` Gets() ``` di usecase berisi 2 method repository yang dipanggil yaitu ``` repo.Gets() ``` dan ``` repo.Count() ```.Sama seperti method di usecase yang lain.Di usecase ini tidak hanya dipakai untuk memanggil method repository layer saja namun kita juga gunakan untuk mapping data, membuat validasi data, dan masih banyak lagi. Untuk validasi code ``` err := usecase.valid.Struct(product) ``` dipakai untuk memvalidasi data dengan model request yang sudah kita sebelumnnya.Pada layer ini kita bisa memakai lebih dari 1 repository yang kita pakai. + +### D.4.3.4 Controller +Pada layer controller digunakan untuk bagaimana bentuk data yang nanti akan di tampilkan. Bentuk data bisa berupa REST API, HTML, XML, atau GRPC. Di layer ini juga layer usecase akan dipanggil dan nanti akan diolah oleh layer usecase secara mandiri. Kita buat 1 file baru dengan nama ``` product_controller.go ``` dengan code seperti di bawah ini. +- #### File product_controller.go +```go +package controllers + +import ( + "clean-architecture-golang-example/entities" + "encoding/json" + "log" + "net/http" + "strconv" +) + +type ProductController struct { + versionApi string + logger *log.Logger + http *http.ServeMux + usecase *entities.ProductUsecase +} + +func NewProductController(versionApi string, logger *log.Logger, http *http.ServeMux, usecase *entities.ProductUsecase) *ProductController { + controller := &ProductController{versionApi, logger, http, usecase} + controller.Route() + + return controller +} + +func (Controller *ProductController) Gets(w http.ResponseWriter, r *http.Request) { + w.Header().Set("Content-Type", "application/json") + + if r.Method == http.MethodGet { + id, _ := strconv.Atoi(r.URL.Query().Get("id")) + controller := *Controller.usecase + + if id == 0 { + result, err := controller.Gets() + if err != nil { + w.WriteHeader(http.StatusInternalServerError) + Controller.logger.Println("[ERROR]:" + err.Error()) + } else { + w.WriteHeader(http.StatusOK) + Controller.logger.Println("[SUCCESS]: Gets product is success") + } + + json.NewEncoder(w).Encode(result) + } else { + result, err := controller.GetOne(id) + if err != nil { + w.WriteHeader(http.StatusInternalServerError) + Controller.logger.Println("[ERROR]:" + err.Error()) + } else { + w.WriteHeader(http.StatusOK) + Controller.logger.Println("[SUCCESS]: Get product by id is success") + } + + json.NewEncoder(w).Encode(result) + } + } else { + w.WriteHeader(http.StatusMethodNotAllowed) + w.Write([]byte("Method not allowed")) + Controller.logger.Println("[ERROR]: method not allowed") + } +} + +func (Controller *ProductController) Create(w http.ResponseWriter, r *http.Request) { + w.Header().Set("Content-Type", "application/json") + + if r.Method == http.MethodPost { + var data entities.CreateProductRequest + + controller := *Controller.usecase + dec := json.NewDecoder(r.Body) + dec.DisallowUnknownFields() + + err := dec.Decode(&data) + if err != nil { + w.WriteHeader(http.StatusInternalServerError) + Controller.logger.Println("[ERROR]:" + err.Error()) + } + + result, err := controller.Create(data) + if err != nil { + w.WriteHeader(http.StatusInternalServerError) + Controller.logger.Println("[ERROR]:" + err.Error()) + } else { + w.WriteHeader(http.StatusCreated) + Controller.logger.Println("[SUCCESS]: Create product is success") + } + json.NewEncoder(w).Encode(result) + } else { + w.WriteHeader(http.StatusMethodNotAllowed) + w.Write([]byte("Method not allowed")) + Controller.logger.Println("[ERROR]: method not allowed") + } +} + +func (Controller *ProductController) Update(w http.ResponseWriter, r *http.Request) { + w.Header().Set("Content-Type", "application/json") + + if r.Method == http.MethodPut { + var data entities.UpdateProductRequest + + controller := *Controller.usecase + dec := json.NewDecoder(r.Body) + dec.DisallowUnknownFields() + + err := dec.Decode(&data) + if err != nil { + w.WriteHeader(http.StatusInternalServerError) + Controller.logger.Println("[ERROR]:" + err.Error()) + } + + result, err := controller.Update(data) + if err != nil { + w.WriteHeader(http.StatusInternalServerError) + Controller.logger.Println("[ERROR]:" + err.Error()) + } else { + w.WriteHeader(http.StatusOK) + Controller.logger.Println("[SUCCESS] Update product is success") + + } + json.NewEncoder(w).Encode(result) + } else { + w.WriteHeader(http.StatusMethodNotAllowed) + w.Write([]byte("Method not allowed")) + Controller.logger.Println("[ERROR]: method not allowed") + } +} + +func (Controller *ProductController) Delete(w http.ResponseWriter, r *http.Request) { + w.Header().Set("Content-Type", "application/json") + + if r.Method == http.MethodDelete { + var data entities.DeleteProductRequest + + controller := *Controller.usecase + dec := json.NewDecoder(r.Body) + dec.DisallowUnknownFields() + + err := dec.Decode(&data) + if err != nil { + w.WriteHeader(http.StatusInternalServerError) + Controller.logger.Println("[ERROR]:" + err.Error()) + } + + result, err := controller.DeleteByID(data.ID) + if err != nil { + w.WriteHeader(http.StatusInternalServerError) + Controller.logger.Println("[ERROR]:" + err.Error()) + } else { + w.WriteHeader(http.StatusOK) + Controller.logger.Println("[SUCCESS] Delete product is success") + + } + json.NewEncoder(w).Encode(result) + } else { + w.WriteHeader(http.StatusMethodNotAllowed) + w.Write([]byte("Method not allowed")) + Controller.logger.Println("[ERROR]: method not allowed") + } +} + +func (Controller *ProductController) Route() { + Controller.http.HandleFunc(Controller.versionApi+"/product/gets", Controller.Gets) + Controller.http.HandleFunc(Controller.versionApi+"/product/create", Controller.Create) + Controller.http.HandleFunc(Controller.versionApi+"/product/update", Controller.Update) + Controller.http.HandleFunc(Controller.versionApi+"/product/delete", Controller.Delete) +} +``` +Seperti yang kita lihat di layer ini juga menambahkan method ``` Route() ``` yang berfungsi untuk register url api yang akan kita pakai. Selain itu terdapat juga parameter ``` logger *log.Logger ``` yang dipakai untuk membuat log history proses dan ```http *http.ServeMux``` digunakan untuk membuat routing url api. Untuk routing lebih lengkapnya kalian bisa membaca ulang artikel ini: [B.2. Routing http.HandleFunc](https://dasarpemrogramangolang.novalagung.com/B-routing-http-handlefunc.html).Setelah 3 layer sudah dibuat maka kita hanya tinggal meng-injeksi tiap-tiap layer itu ke main function. +### D.4.3.5 Main Function +Setelah 3 layer sudah dibuat, kita akan membuat file ```main.go``` di directory yang sama. Tuliskan code-nya seperti di bawah ini. +```go +package main + +import ( + "clean-architecture-golang-example/config" + "clean-architecture-golang-example/controllers" + "clean-architecture-golang-example/repositories" + "clean-architecture-golang-example/usecases" + "context" + "fmt" + "log" + "net/http" + "os" + "os/signal" + "time" + + "github.com/go-playground/validator/v10" + "github.com/joho/godotenv" +) + +func main() { + err := godotenv.Load("config/.env") + if err != nil { + panic(fmt.Errorf("Error Environment : %s", err)) + } + + appConfig := struct { + name string + host string + port string + versionapi string + }{ + name: os.Getenv("APP_NAME"), + host: os.Getenv("APP_HOST"), + port: os.Getenv("APP_PORT"), + versionapi: "/api/" + os.Getenv("APP_VERSIONAPI"), + } + + envDBConfig := config.DatabaseConfig{ + Host: os.Getenv("DATABASE_HOST"), + Port: os.Getenv("DATABASE_PORT"), + Username: os.Getenv("DATABASE_USERNAME"), + Password: os.Getenv("DATABASE_PASSWORD"), + DBname: os.Getenv("DATABASE_Name"), + } + + Logger := log.New(os.Stdout, appConfig.name+" || ", log.LstdFlags) + validate := validator.New() + + db, err := config.NewDatabaseConfig(envDBConfig) + if err != nil { + panic(fmt.Errorf("Error Connection : %s", err)) + } + + serveMux := http.NewServeMux() + + // layer repository + productRepository := repositories.NewProductRepositories(db, true) + // layer usecase + productUsecase := usecases.NewProductUsecase(&productRepository, validate) + // layer controller + controllers.NewProductController(appConfig.versionapi, Logger, serveMux, &productUsecase) + + s := &http.Server{ + Addr: ":" + appConfig.port, + Handler: serveMux, + IdleTimeout: 120 * time.Second, // waktu maksimal untuk koneksi menggunakan TCP + ReadTimeout: 5 * time.Second, // waktu maksimal untuk membaca request dari client + WriteTimeout: 5 * time.Second, // waktu maksimal untuk menulis respon untuk client + } + + go func() { + Logger.Printf("Starting server on port :%s\n", appConfig.port) + err := s.ListenAndServe() + if err != nil { + Logger.Fatal(err) + } + }() + + // mendapatkan signal ketika signal tertangkap ada interupsi dan akan shutdown server + sigChan := make(chan os.Signal, 1) + signal.Notify(sigChan, os.Interrupt) + signal.Notify(sigChan, os.Kill) + + // block sampai signal diterima + sig := <-sigChan + Logger.Println("Received terminate, Graceful shutdown: ", sig) + + // menunggu maksimal 30 detik untuk operasi sudah selesai + tContext, _ := context.WithTimeout(context.Background(), 30*time.Second) + s.Shutdown(tContext) +} + +``` + +- ``` sigChan := make(chan os.Signal, 1) ``` adalah variable untuk 1 channel yang berisi signal notifikasi. Ini akan menerima notifikasi signal dengan kondisi diinterupsi atau dishutdown. +- ```signal.Notify``` code ini untuk mendaftarkan channel yang nantinya akan menerima notifikasi signal. +- Untuk http server kita menggunakan goroutine untuk running server. Jadi server bisa jalan terlebih dahulu tanpa menunggu yang lain. +- Di file ``` main.go ``` berisi banyak konfigurasi seperti database, logger, dan http server. Di sini juga layer-layer yang sudah kita buat di tempelkan di file ini sehingga bisnis proses dari 3 layer tersebut bisa digunakan. +## D.4.4 Testing +Setelah sudah membuat clean architecture, kita akan mengetest hasil dari implementasi yang sudah kita buat. Jalankan aplikasi server ``` main.go ```. +![](image/D-run-server.png) +Seperti yang kita bahas sebelumnya, model entities yang sudah kita buat akan migrasi ke konfigurasi database environment. Lalu kita akan mencoba testing menggunakan api dengan Postman. +Untuk testing di sini kita akan menggunakan api untuk insert data. Isikan request data seperti dibawah ini: +```json +{ + "name": "Pasta gigi", + "price": 100.0, + "weight": 9 +} +``` +Setelah itu langsung trigger, maka apabila sukses akan menampilkan response seperti ini. +```json +{ + "data": [ + { + "CreatedAt": "2023-10-08T02:07:02.1239668+07:00", + "UpdatedAt": "2023-10-08T02:07:02.1239668+07:00", + "DeletedAt": null, + "ID": 1, + "Name": "Pasta gigi", + "Price": 100, + "Weight": 9 + } + ], + "count": 1, + "success": true, + "message": "Create product success" +} +``` +Dengan ini kita sudah berhasil membuat clean architecture sederhana menggunakan golang. Untuk api yang lain kalian bisa testing sendiri. Seperti catatan yang saya lampirkan di atas architecture ini bebas bagaimana kalian implementasikannya seperti apa selama kalian paham dari konsep dari clean architecture ini. Kalian bisa menggunakan framework golang, library yang lain, perubahan nama layer, dan sebagainya. + +--- + - [Godotenv](https://github.com/joho/godotenv), MIT license + - [Gorm](https://github.com/go-gorm/gorm), MIT license + - [Go-playground-Validator](https://github.com/go-playground/validator), MIT Licence + - [Gorm-Postgres](https://github.com/go-gorm/postgres), MIT Licence +--- + +--- + \ No newline at end of file diff --git a/content/images/D-run-server.png b/content/images/D-run-server.png new file mode 100644 index 0000000000000000000000000000000000000000..ed821eeedc62ca2ee1e2481a3cfcfd3dd4e8f407 GIT binary patch literal 118948 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 literal 0 HcmV?d00001 From 5e523199e7082055d80c3a87f960c126d131a363 Mon Sep 17 00:00:00 2001 From: farhan Date: Mon, 20 Nov 2023 15:53:38 +0700 Subject: [PATCH 2/2] feat: fixing typo url images --- content/D-clean-architecture.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/D-clean-architecture.md b/content/D-clean-architecture.md index 3dd71c7ea..6796782cd 100644 --- a/content/D-clean-architecture.md +++ b/content/D-clean-architecture.md @@ -837,7 +837,7 @@ func main() { - Di file ``` main.go ``` berisi banyak konfigurasi seperti database, logger, dan http server. Di sini juga layer-layer yang sudah kita buat di tempelkan di file ini sehingga bisnis proses dari 3 layer tersebut bisa digunakan. ## D.4.4 Testing Setelah sudah membuat clean architecture, kita akan mengetest hasil dari implementasi yang sudah kita buat. Jalankan aplikasi server ``` main.go ```. -![](image/D-run-server.png) +![](images/D-run-server.png) Seperti yang kita bahas sebelumnya, model entities yang sudah kita buat akan migrasi ke konfigurasi database environment. Lalu kita akan mencoba testing menggunakan api dengan Postman. Untuk testing di sini kita akan menggunakan api untuk insert data. Isikan request data seperti dibawah ini: ```json