Как проверить множественную вложенную структуру - PullRequest
0 голосов
/ 21 февраля 2020

Я пытаюсь проверить эту структуру, мои данные - это объект с одним свойством объекта, у этого может быть несколько объектов со своими собственными свойствами, когда я отправляю данные, govalidator отвечает с ошибкой. Я использую эту библиотеку https://github.com/thedevsaddam/govalidator

Это моя структура:

type Receta struct {
    RecetaID        int    `json:"RecetaId"`
    RecetaNombre    string `json:"RecetaNombre"`
    RecetaCodigo    string `json:"RecetaCodigo"`
    RecetaCategoria string `json:"RecetaCategoria"`
    RecetaSub       string `json:"RecetaSub"`
    ListaReceta     []ListaReceta
}

type Recetas []Receta

type ListaReceta struct {
    IDInsumo         int    `json:"idInsumo"`
    RecetaID         int    `json:"RecetaId"`
    NombreInsumo     string `json:"nombreInsumo"`
    UniddcmpraInsumo string `json:"uniddcmpraInsumo"`
    Tipo             string `json:"tipo"`
    Inicial          string `json:"inicial"`
}

Это моя функция для проверки:

func (p *Api) CreateReceta(w http.ResponseWriter, r *http.Request) {

    rules := govalidator.MapData{
        "RecetaNombre":     []string{"between:0,15"},
        "RecetaCodigo":     []string{"required", "between:0,30"},
        "RecetaCategoria":  []string{"between:0,12"},
        "RecetaSub":        []string{"between:0,12"},
        "idInsumo":         []string{"between:0,12"},
        "nombreInsumo":     []string{"between:0,12"},
        "uniddcmpraInsumo": []string{"between:0,12"},
        "tipo":             []string{"between:0,12"},
        "inicial":          []string{"between:0,12"},
    }

    messages := govalidator.MapData{
        "RecetaNombre":     []string{"between:El nombre de este campo debe tener entre 0 a 12"},
        "RecetaCodigo":     []string{"between:El nombre de este campo debe tener entre 0 a 12"},
        "RecetaCategoria":  []string{"between:El nombre de este campo debe tener entre 0 a 12"},
        "RecetaSub":        []string{"between:El nombre de este campo debe tener entre 0 a 12"},
        "idInsumo":         []string{"between:El nombre de este campo debe tener entre 0 a 12"},
        "uniddcmpraInsumo": []string{"between:El nombre de este campo debe tener entre 0 a 12"},
        "tipo":             []string{"between:El nombre de este campo debe tener entre 0 a 12"},
        "inicial":          []string{"between:El nombre de este campo debe tener entre 0 a 12"},
        "nombreInsumo":     []string{"between:El nombre de este campo debe tener entre 0 a 12"},
    }

    opts := govalidator.Options{
        Request:         r,
        Rules:           rules,
        Messages:        messages,
        RequiredDefault: false,
    }
    v := govalidator.New(opts)
    e := v.Validate()

    if len(e) != 0 {
        errValidate := map[string]interface{}{"validation": e}
        respondwithJSON(w, http.StatusBadRequest, errValidate)
        return
    }
    receta := models.Receta{}

    r.ParseForm()

    receta.RecetaNombre = r.FormValue("RecetaNombre")
    receta.RecetaCodigo = r.FormValue("RecetaCodigo")
    receta.RecetaCategoria = r.FormValue("RecetaCategoria")
    receta.RecetaSub = r.FormValue("RecetaSub")

    newID, err := p.repo.CreateRecet(r.Context(), &receta)

    fmt.Println(newID)
    if err != nil {
        respondWithError(w, http.StatusInternalServerError, "Server error")
        return
    }
    id := strconv.Itoa(int(newID))

    respondwithJSON(w, http.StatusCreated, map[string]string{"message": "Successfully created", "ID": id})

}

вот как отправляются мои данные:

data from client

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...