|
@@ -1,164 +1,67 @@
|
|
|
package api
|
|
|
|
|
|
import (
|
|
|
- "encoding/json"
|
|
|
"fmt"
|
|
|
- "io/ioutil"
|
|
|
"net/http"
|
|
|
|
|
|
"github.com/gorilla/mux"
|
|
|
"gogs.carducci-dante.gov.it/karmen/core/orm"
|
|
|
"gogs.carducci-dante.gov.it/karmen/core/renderer"
|
|
|
- "gogs.carducci-dante.gov.it/karmen/datasource/edt"
|
|
|
)
|
|
|
|
|
|
-func teachersHandler() http.Handler {
|
|
|
+func generalHandler(base, path string) http.Handler {
|
|
|
fn := func(w http.ResponseWriter, r *http.Request) {
|
|
|
- teachers, err := orm.GetTeachersAll()
|
|
|
- if err != nil {
|
|
|
- renderer.Render[r.URL.Query()["format"][0]](w, r, err)
|
|
|
+ var (
|
|
|
+ ok bool
|
|
|
+ getFn orm.GetFn
|
|
|
+ postFn orm.PostFn
|
|
|
+ )
|
|
|
+ if r.Method == "GET" {
|
|
|
+ getFn, ok = orm.Get[path]
|
|
|
} else {
|
|
|
- renderer.Render[r.URL.Query()["format"][0]](w, r, teachers, r.URL.Query())
|
|
|
+ postFn, ok = orm.Post[path]
|
|
|
}
|
|
|
- }
|
|
|
- return http.HandlerFunc(fn)
|
|
|
-}
|
|
|
-
|
|
|
-func teacherShowHandler() http.Handler {
|
|
|
- fn := func(w http.ResponseWriter, r *http.Request) {
|
|
|
- teacher, err := orm.GetTeacherAll(mux.Vars(r)["id"])
|
|
|
- if err != nil {
|
|
|
- renderer.Render[r.URL.Query()["format"][0]](w, r, err)
|
|
|
+ if !ok {
|
|
|
+ renderer.Render[r.URL.Query()["format"][0]](w, r, fmt.Errorf("Can't find ORM function for path %s!", path))
|
|
|
} else {
|
|
|
- renderer.Render[r.URL.Query()["format"][0]](w, r, teacher, r.URL.Query())
|
|
|
- }
|
|
|
- }
|
|
|
- return http.HandlerFunc(fn)
|
|
|
-}
|
|
|
-
|
|
|
-func teachersAddHandler() http.Handler {
|
|
|
- fn := func(w http.ResponseWriter, r *http.Request) {
|
|
|
- if r.Method == "GET" {
|
|
|
- teacher, err := orm.GetTeacher(mux.Vars(r)["id"])
|
|
|
- if err != nil {
|
|
|
- renderer.Render[r.URL.Query()["format"][0]](w, r, err)
|
|
|
- } else {
|
|
|
- renderer.Render[r.URL.Query()["format"][0]](w, r, teacher, r.URL.Query())
|
|
|
- }
|
|
|
- } else if r.Method == "POST" {
|
|
|
- teacher := new(orm.Teacher)
|
|
|
- err := renderer.Decode(teacher, r)
|
|
|
- if err != nil {
|
|
|
- panic(err)
|
|
|
- }
|
|
|
- _, err = orm.CreateTeacher(teacher)
|
|
|
- if err != nil {
|
|
|
- panic(err)
|
|
|
- }
|
|
|
- http.Redirect(w, r, fmt.Sprintf("/teachers/%d?format=html&tpl_layout=base&tpl_content=teachers_show", teacher.ID), http.StatusSeeOther)
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
- return http.HandlerFunc(fn)
|
|
|
-}
|
|
|
-
|
|
|
-func teachersDeleteHandler() http.Handler {
|
|
|
- fn := func(w http.ResponseWriter, r *http.Request) {
|
|
|
- teacher, err := orm.GetTeacher(mux.Vars(r)["id"])
|
|
|
- if err != nil {
|
|
|
- panic(err)
|
|
|
- }
|
|
|
- if err := orm.DeleteTeacher(teacher); err != nil {
|
|
|
- panic(err)
|
|
|
- }
|
|
|
-
|
|
|
- var data struct {
|
|
|
- RedirectUrl string `json:"redirect_url"`
|
|
|
- }
|
|
|
-
|
|
|
- data.RedirectUrl = "/teachers?format=html&tpl_layout=base&tpl_content=teachers"
|
|
|
-
|
|
|
- w.Header().Set("Content-Type", "application/json")
|
|
|
- json.NewEncoder(w).Encode(data)
|
|
|
- }
|
|
|
- return http.HandlerFunc(fn)
|
|
|
-}
|
|
|
-
|
|
|
-func teacherUpdateHandler() http.Handler {
|
|
|
- fn := func(w http.ResponseWriter, r *http.Request) {
|
|
|
- if r.Method == "GET" {
|
|
|
- teacher, err := orm.GetTeacher(mux.Vars(r)["id"])
|
|
|
- if err != nil {
|
|
|
- renderer.Render[r.URL.Query()["format"][0]](w, r, err)
|
|
|
+ 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 {
|
|
|
- renderer.Render[r.URL.Query()["format"][0]](w, r, teacher, r.URL.Query())
|
|
|
- }
|
|
|
- } else if r.Method == "POST" {
|
|
|
- teacher, err := orm.GetTeacher(mux.Vars(r)["id"])
|
|
|
- if err != nil {
|
|
|
- panic(err)
|
|
|
- }
|
|
|
- err = renderer.Decode(teacher, r)
|
|
|
- if err != nil {
|
|
|
- panic(err)
|
|
|
+ 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,
|
|
|
+ )
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
}
|
|
|
- _, err = orm.SaveTeacher(teacher)
|
|
|
- if err != nil {
|
|
|
- panic(err)
|
|
|
- }
|
|
|
- http.Redirect(w, r, fmt.Sprintf("/teachers/%d?format=html&tpl_layout=base&tpl_content=teachers_show", teacher.ID), http.StatusSeeOther)
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
- return http.HandlerFunc(fn)
|
|
|
-}
|
|
|
-
|
|
|
-func teachersCheckUsernameHandler() http.Handler {
|
|
|
- fn := func(w http.ResponseWriter, r *http.Request) {
|
|
|
- var teacher orm.Teacher
|
|
|
- var data struct {
|
|
|
- Exists bool `json:"exists"`
|
|
|
- }
|
|
|
-
|
|
|
- if orm.DB().Where("username = ?", mux.Vars(r)["username"]).Find(&teacher).RecordNotFound() {
|
|
|
- data.Exists = false
|
|
|
- } else {
|
|
|
- data.Exists = true
|
|
|
}
|
|
|
-
|
|
|
- w.Header().Set("Content-Type", "application/json")
|
|
|
- json.NewEncoder(w).Encode(data)
|
|
|
-
|
|
|
}
|
|
|
- return http.HandlerFunc(fn)
|
|
|
-}
|
|
|
|
|
|
-func teachersImportHandler() http.Handler {
|
|
|
- fn := func(w http.ResponseWriter, r *http.Request) {
|
|
|
- r.ParseMultipartForm(32 << 20)
|
|
|
- file, _, err := r.FormFile("teachers_import")
|
|
|
- if err != nil {
|
|
|
- panic(err)
|
|
|
- }
|
|
|
- defer file.Close()
|
|
|
- data, err := ioutil.ReadAll(file)
|
|
|
- if err != nil {
|
|
|
- panic(err)
|
|
|
- }
|
|
|
- if importer, err := edt.NewImporter(
|
|
|
- string(data),
|
|
|
- map[string]string{
|
|
|
- "COGNOME": "surname",
|
|
|
- "NOME": "name",
|
|
|
- },
|
|
|
- ); err != nil {
|
|
|
- panic(err)
|
|
|
- } else {
|
|
|
- if err := orm.Import(&orm.Teacher{}, importer); err != nil {
|
|
|
- panic(err)
|
|
|
- }
|
|
|
- http.Redirect(w, r, "/teachers", http.StatusSeeOther)
|
|
|
- }
|
|
|
- }
|
|
|
return http.HandlerFunc(fn)
|
|
|
}
|