Pada tahapan ini kita akan menambahkan validasi untuk setiap request yang dikirim ke dalam API. Misalkan pada request tambah, ubah dan hapus. Validasi yang kita gunakan adalah package github.com/go-playground/validator.
Jika kita lihat pada dokumentasinya, ada fungsi yang akan kita pakai pada package tersebut dengan melakukan pengecekan struct yang akan kita validasi.
err := validate.Struct(myStruct)
validateErrors := err(.Validator.ValidationErrors)
Maka kita perlu tambahkan beberapa tags pada fields yang ada pada struct yang akan kita validasi.
Menambahkan Dependency Validator
Pertama kita tambahkan terlebih dahulu package validator yang akan kita butuhkan kepada projek dengan menggunakan golang modul.
go get github.com/go-playground/validator/v10
Lalu import validator package tersebut kepada kode yang kita gunakan
import "github.com/go-playground/validator/v10"
Menambahkan Validasi pada Struct
Pada request create artikel ada beberapa validasi yang harus kita terapkan dengan menambahkan pada struct create request seperti dibawah ini.
type ArticleCreateRequest struct {
Title string `validate:"required,max=160,min=0"`
Content string `validate:"required"`
CreateAt time.Time
}
Selanjutnya tambahkan juga request pada request update artikel
type ArticleUpdateRequest struct {
ID int64 `validate:"required"`
Title string `validate:"required,max=160,min=0"`
Content string `validate:"required"`
UpdateAt time.Time
}
Setelah struct menambahkan validator di setiap fields yang membutuhkan validasi selanjutnya kita tambahkan inisialisasi validator pada handler.
type Delivery struct {
articleUsecase usecase.ArticleUsecase
validate *validator.Validate
}
func New(articleUsecase usecase.ArticleUsecase) *Delivery {
return &Delivery{
articleUsecase: articleUsecase,
validate: validator.New(),
}
}
Dan menambahkan validasi struct pada fungsi Create
dan Update
pada handler posisikan sebelum mengakses ke dalam usecase layer.
func (d *Delivery) Store(w http.ResponseWriter, r *http.Request, params httprouter.Params) {
...
...
err = d.validate.Struct(request)
if err != nil {
response.Code = http.StatusBadRequest
response.Status = err.Error()
}
...
...
}
Dan pada fungsi Update
kita tambahkan juga pada handler seperti ini.
func (d *Delivery) Update(w http.ResponseWriter, r *http.Request, params httprouter.Params) {
...
...
err = d.validate.Struct(request)
if err != nil {
response.Code = http.StatusBadRequest
response.Status = err.Error()
}
...
...
}
Semua fungsi yang kita membutuhkan validasi request sudah kita terapkan sehingga ketika ada request dari user validator ini bekerja agar isian form yang pada struct tersebut tidak berisikan kosong dan sesuai aturan yang sudah ditentukan oleh kita.