From a1705758df12d6e9b912628ec3e28dc419ee1b63 Mon Sep 17 00:00:00 2001 From: kandrusyak Date: Wed, 2 Aug 2023 15:57:56 +0300 Subject: [PATCH] add validation --- main.go | 9 +++++++++ model/event.go | 8 ++++---- model/pd.go | 10 +++++----- 3 files changed, 18 insertions(+), 9 deletions(-) diff --git a/main.go b/main.go index 4b33c56..de3b62f 100644 --- a/main.go +++ b/main.go @@ -12,6 +12,8 @@ import ( "gorm.io/gorm/logger" "log" "os" + "reflect" + "strings" "time" ) @@ -40,6 +42,13 @@ func main() { db.AutoMigrate(&model.Event{}) validate := validator.New() + validate.RegisterTagNameFunc(func(fld reflect.StructField) string { + name := strings.SplitN(fld.Tag.Get("json"), ",", 2)[0] + if name == "-" { + return "" + } + return name + }) var h = &handler.Handler{DB: db, Validator: validate} diff --git a/model/event.go b/model/event.go index f92e5e4..55e4d7b 100644 --- a/model/event.go +++ b/model/event.go @@ -21,8 +21,8 @@ type Event struct { } type CreateEvent struct { - Start time.Time `json:"start" validate:"required"` - End time.Time `json:"end" validate:"required"` - Person PersonalInformation `json:"person" validate:"required"` - MedicId uuid.UUID `json:"medic_id" validate:"required"` + Start time.Time `json:"start" validate:"required,gt"` + End time.Time `json:"end" validate:"required,gtfield=Start"` + Person *PersonalInformation `json:"person" validate:"required,dive"` + MedicId uuid.UUID `json:"medic_id" validate:"required"` } diff --git a/model/pd.go b/model/pd.go index 7584b96..86cb02b 100644 --- a/model/pd.go +++ b/model/pd.go @@ -3,11 +3,11 @@ package model import "github.com/google/uuid" type PersonalInformation struct { - ID uuid.UUID `json:"id,omitempty"` - FirstName string `json:"first_name,omitempty"` - LastName string `json:"last_name,omitempty"` - Patronymic string `json:"patronymic,omitempty"` - Phone string `json:"phone,omitempty"` + ID uuid.UUID `json:"id,omitempty" validate:"required_without_all=FirstName LastName Patronymic Phone"` + FirstName string `json:"first_name,omitempty" validate:"required_without=ID"` + LastName string `json:"last_name,omitempty" validate:"required_without=ID"` + Patronymic string `json:"patronymic,omitempty" validate:"required_without=ID"` + Phone string `json:"phone,omitempty" validate:"required_without=ID"` } type PersonalInformationCreate struct {