chore: more work on moving to svelte front end
This commit is contained in:
@@ -4,89 +4,145 @@ import (
|
||||
"net/http"
|
||||
"strconv"
|
||||
|
||||
. "git.andr3h3nriqu3s.com/andr3/fyp/logic/utils"
|
||||
. "git.andr3h3nriqu3s.com/andr3/fyp/logic/models/utils"
|
||||
"git.andr3h3nriqu3s.com/andr3/fyp/logic/utils"
|
||||
. "git.andr3h3nriqu3s.com/andr3/fyp/logic/utils"
|
||||
)
|
||||
|
||||
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 {
|
||||
panic("TODO JSON on /models/data/list")
|
||||
}
|
||||
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!")
|
||||
}
|
||||
|
||||
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
|
||||
}
|
||||
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
|
||||
}
|
||||
|
||||
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()
|
||||
var class_row struct {
|
||||
Name string
|
||||
Model_id string
|
||||
}
|
||||
|
||||
if !class_rows.Next() {
|
||||
return ErrorCode(nil, 404, c.AddMap(nil))
|
||||
}
|
||||
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)
|
||||
}
|
||||
|
||||
name := ""
|
||||
model_id := ""
|
||||
if err = class_rows.Scan(&name, &model_id); err != nil {
|
||||
return Error500(nil)
|
||||
}
|
||||
type baserow struct {
|
||||
Id string
|
||||
File_Path string
|
||||
Model_Mode int
|
||||
Status int
|
||||
}
|
||||
|
||||
model, err := GetBaseModel(c.Db, model_id)
|
||||
if err != nil {
|
||||
return Error500(err)
|
||||
}
|
||||
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)
|
||||
}
|
||||
|
||||
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 ReturnType struct {
|
||||
ImageList []*baserow `json:"image_list"`
|
||||
Page int `json:"page"`
|
||||
ShowNext bool `json:"showNext"`
|
||||
}
|
||||
|
||||
type baserow struct {
|
||||
Id string
|
||||
FilePath string
|
||||
Mode int
|
||||
Status int
|
||||
}
|
||||
max_len := min(11, len(rows))
|
||||
|
||||
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
|
||||
})
|
||||
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
|
||||
})
|
||||
}
|
||||
|
||||
@@ -7,78 +7,82 @@ import (
|
||||
)
|
||||
|
||||
type ModelClass struct {
|
||||
Id string
|
||||
ModelId string
|
||||
Name string
|
||||
Id string `json:"id"`
|
||||
ModelId string `json:"model_id"`
|
||||
Name string `json:"name"`
|
||||
}
|
||||
|
||||
func ListClasses(db *sql.DB, model_id string) (cls []ModelClass, err error) {
|
||||
|
||||
rows, err := db.Query("select id, model_id, name from model_classes where model_id=$1", model_id)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
defer rows.Close()
|
||||
|
||||
for rows.Next() {
|
||||
var model ModelClass
|
||||
err = rows.Scan(&model.Id, &model.ModelId, &model.Name)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
rows, err := db.Query("select id, model_id, name from model_classes where model_id=$1", model_id)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
defer rows.Close()
|
||||
|
||||
cls = append(cls, model)
|
||||
}
|
||||
for rows.Next() {
|
||||
var model ModelClass
|
||||
err = rows.Scan(&model.Id, &model.ModelId, &model.Name)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
return
|
||||
cls = append(cls, model)
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
func ModelHasDataPoints(db *sql.DB, model_id string) (result bool, err error) {
|
||||
result = false
|
||||
rows, err := db.Query("select mdp.id from model_data_point as mdp join model_classes as mc on mc.id = mdp.class_id where mc.model_id = $1 limit 1;", model_id)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
defer rows.Close()
|
||||
|
||||
return rows.Next(), nil
|
||||
result = false
|
||||
rows, err := db.Query("select mdp.id from model_data_point as mdp join model_classes as mc on mc.id = mdp.class_id where mc.model_id = $1 limit 1;", model_id)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
defer rows.Close()
|
||||
|
||||
return rows.Next(), nil
|
||||
}
|
||||
|
||||
var ClassAlreadyExists = errors.New("Class aready exists")
|
||||
|
||||
func CreateClass(db *sql.DB, model_id string, order int, name string) (id string, err error) {
|
||||
id = ""
|
||||
rows, err := db.Query("select id from model_classes where model_id=$1 and name=$2;", model_id, name)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
defer rows.Close()
|
||||
id = ""
|
||||
rows, err := db.Query("select id from model_classes where model_id=$1 and name=$2;", model_id, name)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
defer rows.Close()
|
||||
|
||||
if rows.Next() {
|
||||
return id, ClassAlreadyExists
|
||||
}
|
||||
if rows.Next() {
|
||||
return id, ClassAlreadyExists
|
||||
}
|
||||
|
||||
rows, err = db.Query("insert into model_classes (model_id, name, class_order) values ($1, $2, $3) returning id;", model_id, name, order)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
defer rows.Close()
|
||||
rows, err = db.Query("insert into model_classes (model_id, name, class_order) values ($1, $2, $3) returning id;", model_id, name, order)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
defer rows.Close()
|
||||
|
||||
if !rows.Next() {
|
||||
return id, errors.New("Insert did not return anything")
|
||||
}
|
||||
if !rows.Next() {
|
||||
return id, errors.New("Insert did not return anything")
|
||||
}
|
||||
|
||||
err = rows.Scan(&id)
|
||||
return
|
||||
err = rows.Scan(&id)
|
||||
return
|
||||
}
|
||||
|
||||
func GetNumberOfWrongDataPoints(db *sql.DB, model_id string) (number int, err error) {
|
||||
number = 0
|
||||
rows, err := db.Query("select count(mdp.id) from model_data_point as mdp join model_classes as mc on mc.id = mdp.class_id where mc.model_id=$1 and mdp.status=-1;", model_id)
|
||||
if err != nil { return }
|
||||
defer rows.Close()
|
||||
// TODO not an error because if there is no result means that there is no need to count
|
||||
if !rows.Next() { return }
|
||||
err = rows.Scan(&number)
|
||||
return
|
||||
number = 0
|
||||
rows, err := db.Query("select count(mdp.id) from model_data_point as mdp join model_classes as mc on mc.id = mdp.class_id where mc.model_id=$1 and mdp.status=-1;", model_id)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
defer rows.Close()
|
||||
// TODO not an error because if there is no result means that there is no need to count
|
||||
if !rows.Next() {
|
||||
return
|
||||
}
|
||||
err = rows.Scan(&number)
|
||||
return
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user