fyp/logic/models/classes/main.go

74 lines
1.9 KiB
Go
Raw Normal View History

package model_classes
import (
"errors"
2024-03-09 09:41:16 +00:00
2024-04-17 17:46:43 +01:00
"git.andr3h3nriqu3s.com/andr3/fyp/logic/db"
2024-04-14 14:51:16 +01:00
. "git.andr3h3nriqu3s.com/andr3/fyp/logic/db_types"
)
type ModelClass struct {
Id string `json:"id"`
2024-03-09 09:41:16 +00:00
ModelId string `json:"model_id" db:"model_id"`
Name string `json:"name"`
2024-03-09 09:41:16 +00:00
Status int `json:"status"`
}
func ListClasses(c BasePack, model_id string) (cls []*ModelClass, err error) {
return GetDbMultitple[ModelClass](c.GetDb(), "model_classes where model_id=$1", model_id)
}
2024-04-17 17:46:43 +01:00
func ModelHasDataPoints(db db.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
}
var ClassAlreadyExists = errors.New("Class aready exists")
2024-04-17 17:46:43 +01:00
func CreateClass(db db.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()
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()
if !rows.Next() {
return id, errors.New("Insert did not return anything")
}
err = rows.Scan(&id)
return
}
2023-10-10 12:28:49 +01:00
2024-04-17 17:46:43 +01:00
func GetNumberOfWrongDataPoints(db db.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
2023-10-10 12:28:49 +01:00
}