diff --git a/logic/models/delete.go b/logic/models/delete.go
index c3d1ea9..4a639c9 100644
--- a/logic/models/delete.go
+++ b/logic/models/delete.go
@@ -1,7 +1,6 @@
package models
import (
- "fmt"
"net/http"
"os"
"path"
@@ -12,26 +11,26 @@ import (
)
func deleteModel(handle *Handle, id string, w http.ResponseWriter, c *Context, model BaseModel) {
- fmt.Printf("Removing model with id: %s\n", id)
+ c.Logger.Warnf("Removing model with id: %s", id)
_, err := handle.Db.Exec("delete from models where id=$1;", id)
if err != nil {
- fmt.Println(err)
+ c.Logger.Error(err)
panic("TODO handle better deleteModel failed delete database query")
}
model_path := path.Join("./savedData", id)
- fmt.Printf("Removing folder of model with id: %s at %s\n", id, model_path)
+ c.Logger.Warnf("Removing folder of model with id: %s at %s", id, model_path)
err = os.RemoveAll(model_path)
if err != nil {
- fmt.Println(err)
+ c.Logger.Error(err)
panic("TODO handle better deleteModel failed to delete folder")
}
- if c.Mode == HTML {
- // TODO move this to a constant so i don't forget
- w.WriteHeader(309)
- c.Mode = HTMLFULL
- }
+ if c.Mode == HTML {
+ // TODO move this to a constant so i don't forget
+ w.WriteHeader(309)
+ c.Mode = HTMLFULL
+ }
LoadBasedOnAnswer(c.Mode, w, "/models/delete.html", c.AddMap(AnyMap{
"Model": model,
@@ -44,13 +43,14 @@ func handleDelete(handle *Handle) {
panic("TODO handle json on models/delete")
}
+ // This is required to parse delete forms with bodies
f, err := MyParseForm(r)
if err != nil {
- return ErrorCode(err, 400, nil)
+ return c.ErrorCode(err, 400, nil)
}
if !CheckId(f, "id") {
- return ErrorCode(nil, http.StatusNotFound, AnyMap{
+ return c.ErrorCode(nil, http.StatusNotFound, AnyMap{
"NotFoundMessage": "Model not found",
"GoBackLink": "/models",
})
@@ -61,40 +61,41 @@ func handleDelete(handle *Handle) {
// TODO handle admin users
rows, err := handle.Db.Query("select name, status from models where id=$1 and user_id=$2;", id, c.User.Id)
if err != nil {
- return Error500(err)
+ return c.ErrorCode(err, http.StatusInternalServerError, nil)
}
- defer rows.Close()
+ defer rows.Close()
if !rows.Next() {
- return ErrorCode(nil, http.StatusNotFound, AnyMap{
+ c.Logger.Warn("Could not find model for", id, c.User.Id)
+ return c.ErrorCode(nil, http.StatusNotFound, AnyMap{
"NotFoundMessage": "Model not found",
"GoBackLink": "/models",
})
}
- model := BaseModel{}
+ model := BaseModel{}
model.Id = id
- err = rows.Scan(&model.Name, &model.Status)
- if err != nil {
- return Error500(err)
+ if err = rows.Scan(&model.Name, &model.Status); err != nil {
+ return c.Error500(err)
}
switch model.Status {
case FAILED_TRAINING:
- fallthrough
+ fallthrough
case FAILED_PREPARING_TRAINING:
- fallthrough
+ fallthrough
case FAILED_PREPARING:
deleteModel(handle, id, w, c, model)
return nil
- case READY:
- fallthrough
+ case READY:
+ fallthrough
case CONFIRM_PRE_TRAINING:
-
if CheckEmpty(f, "name") {
- // TODO improve result
- return ErrorCode(nil, http.StatusBadRequest, nil)
+ return c.Error400(nil, "Name is empty", w, "/models/edit.html", "delete-model-card", AnyMap{
+ "NameDoesNotMatch": true,
+ "Model": model,
+ })
}
name := f.Get("name")
diff --git a/logic/utils/handler.go b/logic/utils/handler.go
index 5e2e32a..6b48c3f 100644
--- a/logic/utils/handler.go
+++ b/logic/utils/handler.go
@@ -219,14 +219,17 @@ func decodeBody(r *http.Request) (string, *Error) {
}
func handleError(err *Error, w http.ResponseWriter, context *Context) {
-
if err != nil {
data := context.AddMap(err.data)
- w.WriteHeader(err.Code)
if err.Code == http.StatusNotFound {
+ if context.Mode == HTML {
+ w.WriteHeader(309)
+ context.Mode = HTMLFULL
+ }
LoadBasedOnAnswer(context.Mode, w, "404.html", data)
return
}
+ w.WriteHeader(err.Code)
if err.Code == http.StatusBadRequest {
LoadBasedOnAnswer(context.Mode, w, "400.html", data)
return
@@ -343,13 +346,48 @@ type Context struct {
Logger *log.Logger
}
+func (c Context) Error400(err error, message string, w http.ResponseWriter, path string, base string, data AnyMap) *Error {
+ c.SetReportCaller(true)
+ c.Logger.Error(message)
+ c.SetReportCaller(false)
+ if err != nil {
+ c.Logger.Errorf("Something went wrong returning with: %d\n.Err:\n", http.StatusBadRequest)
+ c.Logger.Error(err)
+ }
+
+ if c.Mode == JSON {
+ return &Error{http.StatusBadRequest, nil, c.AddMap(data)}
+ }
+
+ LoadDefineTemplate(w, path, base, c.AddMap(data))
+ return nil
+}
+
+func (c Context) SetReportCaller(report bool) {
+ if (report) {
+ c.Logger.SetCallerOffset(2)
+ c.Logger.SetReportCaller(true)
+ } else {
+ c.Logger.SetCallerOffset(1)
+ c.Logger.SetReportCaller(false)
+ }
+}
+
func (c Context) ErrorCode(err error, code int, data AnyMap) *Error {
- // TODO Improve Logging
+ if (code == 400) {
+ c.SetReportCaller(true)
+ c.Logger.Warn("When returning BadRequest(400) please use context.Error400\n")
+ c.SetReportCaller(false)
+ }
if err != nil {
c.Logger.Errorf("Something went wrong returning with: %d\n.Err:\n", code)
c.Logger.Error(err)
}
- return &Error{code, nil, data}
+ return &Error{code, nil, c.AddMap(data)}
+}
+
+func (c Context) Error500(err error) *Error {
+ return c.ErrorCode(err, http.StatusInternalServerError, nil)
}
func (c Context) AddMap(m AnyMap) AnyMap {
@@ -516,12 +554,12 @@ func NewHandler(db *sql.DB) *Handle {
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
// Decide answertype
ans := NORMAL
+ if r.Header.Get("HX-Request") == "true" || r.Header.Get("Request-Type") == "html" {
+ ans = HTML
+ }
if r.Header.Get("Request-Type") == "htmlfull" {
ans = HTMLFULL
}
- if r.Header.Get("Request-Type") == "html" {
- ans = HTML
- }
//TODO JSON
//Login state
diff --git a/views/models/add.html b/views/models/add.html
index b1a4fe7..33334a6 100644
--- a/views/models/add.html
+++ b/views/models/add.html
@@ -30,7 +30,7 @@
Upload image
-
+