Validation

  • Setiap payload request yang masuk harus divalidasi

  • Kita akan menggunakan validator v.9

  • Setiap struct di payload request ditambahkan tag validator

package request

import (
    "essentials/models"
    "strconv"
)

// NewUserRequest : format json request for new user
type NewUserRequest struct {
    Username   string `json:"username" validate:"required"`
    Email      string `json:"email" validate:"required"`
    Password   string `json:"password" validate:"required"`
    RePassword string `json:"re_password" validate:"required"`
}

// Transform NewUserRequest to User
func (u *NewUserRequest) Transform() *models.User {
    var user models.User
    user.Username = u.Username
    user.Email = u.Email
    user.Password = u.Password

    return &user
}

// UserRequest : format json request for update user
type UserRequest struct {
    ID       uint64 `json:"id" validate:"required"`
    IsActive string `json:"is_active"`
}

// Transform UserRequest to User
func (u *UserRequest) Transform(user *models.User) *models.User {
    if u.ID == user.ID {
        if len(u.IsActive) > 0 {
            user.IsActive, _ = strconv.ParseBool(u.IsActive)
        }
    }

    return user
}
  • Pengecekan bisa dilakukan secara generic di helper request libaries/api/request.go

  • Adakalanya kita ingin validasi dilakukan secara khusus di suatu payload request. Untuk itu kita akan membuat validasi di helper request adalah optional.

  • Kemudian kita tambahkan validasi khusus di payload request yang membutuhkan validasi khusus.

  • Selanjutnya setiap call api.Decode() perlu memberitahu apakah akan menggunakan validasi global atau tidak dengan melempar parameter boolean musValidate. Dan mungkin perlu memanggil fungsi Validate khusus userRequest.Validate()

  • Berikut contoh perubahan di file usecases/user_usecase.go

  • Dan ini contoh validasi yang dilakukan secara global di helper request pada method Update di file controllers/users.go

Last updated

Was this helpful?