34 lines
663 B
Go
34 lines
663 B
Go
|
package validators
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
"github.com/go-playground/validator/v10"
|
||
|
"golang-test/database"
|
||
|
"golang-test/libs"
|
||
|
"log"
|
||
|
)
|
||
|
|
||
|
var Validate *validator.Validate
|
||
|
|
||
|
func init() {
|
||
|
Validate = validator.New()
|
||
|
err := Validate.RegisterValidation("custom_unique", UniqueValidator)
|
||
|
if err != nil {
|
||
|
return
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func UniqueValidator(fl validator.FieldLevel) bool {
|
||
|
db := database.Connector()
|
||
|
|
||
|
field := fl.Field().String()
|
||
|
structType := libs.ToSnakeCase(fl.Top().Type().Name()) + "s"
|
||
|
param := fl.Param()
|
||
|
log.Println(field, structType, param)
|
||
|
|
||
|
var count int64
|
||
|
db.Table(structType).Where(fmt.Sprintf("%s = ?", param), field).Count(&count)
|
||
|
|
||
|
return count == 0
|
||
|
}
|