package api import ( "fmt" "net/http" "github.com/gorilla/mux" "gogs.carducci-dante.gov.it/karmen/core/orm" "gogs.carducci-dante.gov.it/karmen/core/renderer" ) func generalHandler(base, path string) http.Handler { fn := func(w http.ResponseWriter, r *http.Request) { var ( ok bool getFn orm.GetFn postFn orm.PostFn ) if r.Method == "GET" { getFn, ok = orm.Get[path] } else { postFn, ok = orm.Post[path] } if !ok { renderer.Render[r.URL.Query()["format"][0]](w, r, fmt.Errorf("Can't find ORM function for path %s!", path)) } else { if r.Method == "GET" { data, err := getFn(mux.Vars(r)) if err != nil { renderer.Render[r.URL.Query()["format"][0]](w, r, err) } else { renderer.Render[r.URL.Query()["format"][0]](w, r, data, r.URL.Query()) } } else { data, err := postFn(mux.Vars(r), r) if err != nil { renderer.Render["html"](w, r, err) } else { if mux.Vars(r)["id"] != "" { http.Redirect(w, r, fmt.Sprintf( "/%s/%s?format=html&tpl_layout=base&tpl_content=%s_show", base, mux.Vars(r)["id"], base, ), http.StatusSeeOther, ) } else { http.Redirect(w, r, fmt.Sprintf( "/%s/%d?format=html&tpl_layout=base&tpl_content=%s_show", base, data.GetID(), base, ), http.StatusSeeOther, ) } } } } } return http.HandlerFunc(fn) }