package model_classes import ( "net/http" "strconv" . "git.andr3h3nriqu3s.com/andr3/fyp/logic/models/utils" "git.andr3h3nriqu3s.com/andr3/fyp/logic/utils" . "git.andr3h3nriqu3s.com/andr3/fyp/logic/utils" ) func models_data_list_json(w http.ResponseWriter, r *http.Request, c *Context) *Error { id, err := GetIdFromUrl(r, "id") if err != nil { return c.JsonBadRequest("Model Class not found!") } page := 0 if r.URL.Query().Has("page") { page_url := r.URL.Query().Get("page") page_url_number, err := strconv.Atoi(page_url) if err != nil { return c.JsonBadRequest("Page is not a number") } page = page_url_number } var class_row struct { Name string Model_id string } err = utils.GetDBOnce(c, &class_row, "model_classes where id=$1", id) if err == NotFoundError { return c.JsonBadRequest("Model Class not found!") } else if err != nil { return c.Error500(err) } type baserow struct { Id string File_Path string Model_Mode int Status int } rows, err := utils.GetDbMultitple[baserow](c, "model_data_point where class_id=$1 limit 11 offset $2", id, page*10) if err != nil { return c.Error500(err) } type ReturnType struct { ImageList []*baserow `json:"image_list"` Page int `json:"page"` ShowNext bool `json:"showNext"` } max_len := min(11, len(rows)) return c.SendJSON(ReturnType{ ImageList: rows[0:max_len], Page: page, ShowNext: len(rows) == 11, }) } func HandleList(handle *Handle) { handle.Get("/models/data/list", func(w http.ResponseWriter, r *http.Request, c *Context) *Error { if !CheckAuthLevel(1, w, r, c) { return nil } if c.Mode == JSON { return models_data_list_json(w, r, c) } id, err := GetIdFromUrl(r, "id") if err != nil { return ErrorCode(err, 400, c.AddMap(nil)) } page := 0 if r.URL.Query().Has("page") { page_url := r.URL.Query().Get("page") page_url_number, err := strconv.Atoi(page_url) if err != nil { return ErrorCode(err, http.StatusBadRequest, c.AddMap(nil)) } page = page_url_number } class_rows, err := handle.Db.Query("select name, model_id from model_classes where id=$1;", id) if err != nil { return Error500(err) } defer class_rows.Close() if !class_rows.Next() { return ErrorCode(nil, 404, c.AddMap(nil)) } name := "" model_id := "" if err = class_rows.Scan(&name, &model_id); err != nil { return Error500(nil) } model, err := GetBaseModel(c.Db, model_id) if err != nil { return Error500(err) } rows, err := handle.Db.Query("select id, file_path, model_mode, status from model_data_point where class_id=$1 limit 11 offset $2;", id, page*10) if err != nil { return Error500(err) } defer rows.Close() type baserow struct { Id string FilePath string Mode int Status int } got := []baserow{} for rows.Next() { nrow := baserow{} err = rows.Scan(&nrow.Id, &nrow.FilePath, &nrow.Mode, &nrow.Status) if err != nil { return Error500(err) } got = append(got, nrow) } max_len := min(11, len(got)) LoadDefineTemplate(w, "/models/edit.html", "data-model-create-class-table-table", c.AddMap(AnyMap{ "List": got[0:max_len], "Page": page, "Id": id, "Name": name, "Model": model, "ShowNext": len(got) == 11, })) return nil }) }