Andrea Fazzi 6 жил өмнө
parent
commit
8dc7d2ab07

+ 15 - 30
handlers/teachers.go

@@ -3,12 +3,10 @@ package api
 import (
 import (
 	"encoding/json"
 	"encoding/json"
 	"fmt"
 	"fmt"
-	"html/template"
 	"io/ioutil"
 	"io/ioutil"
 	"net/http"
 	"net/http"
 
 
 	"github.com/gorilla/mux"
 	"github.com/gorilla/mux"
-	"github.com/gorilla/schema"
 	"gogs.carducci-dante.gov.it/karmen/core/orm"
 	"gogs.carducci-dante.gov.it/karmen/core/orm"
 	"gogs.carducci-dante.gov.it/karmen/core/renderer"
 	"gogs.carducci-dante.gov.it/karmen/core/renderer"
 	"gogs.carducci-dante.gov.it/karmen/datasource/edt"
 	"gogs.carducci-dante.gov.it/karmen/datasource/edt"
@@ -40,7 +38,7 @@ func teachersHandler() http.Handler {
 
 
 func teacherShowHandler() http.Handler {
 func teacherShowHandler() http.Handler {
 	fn := func(w http.ResponseWriter, r *http.Request) {
 	fn := func(w http.ResponseWriter, r *http.Request) {
-		teacher, err := orm.GetTeacher(mux.Vars(r)["id"])
+		teacher, err := orm.GetTeacherAll(mux.Vars(r)["id"])
 		if err != nil {
 		if err != nil {
 			renderer.Render[r.URL.Query()["format"][0]](w, r, err)
 			renderer.Render[r.URL.Query()["format"][0]](w, r, err)
 		} else {
 		} else {
@@ -53,37 +51,23 @@ func teacherShowHandler() http.Handler {
 func teachersAddHandler() http.Handler {
 func teachersAddHandler() http.Handler {
 	fn := func(w http.ResponseWriter, r *http.Request) {
 	fn := func(w http.ResponseWriter, r *http.Request) {
 		if r.Method == "GET" {
 		if r.Method == "GET" {
-			var data struct {
-				Update    bool
-				SubmitUrl template.URL
+			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())
 			}
 			}
-			data.SubmitUrl = template.URL(fmt.Sprintf("/teachers/add"))
-			// if err := renderer.Render(w, "base", "teachers_add_update", data); err != nil {
-			// 	panic(err)
-			// }
 		} else if r.Method == "POST" {
 		} else if r.Method == "POST" {
-			var teacher orm.Teacher
-			if err := r.ParseForm(); err != nil {
-				panic(err)
-			}
-
-			decoder := schema.NewDecoder()
-			if err := decoder.Decode(&teacher, r.PostForm); err != nil {
+			teacher := new(orm.Teacher)
+			err := renderer.Decode(teacher, r)
+			if err != nil {
 				panic(err)
 				panic(err)
 			}
 			}
-
-			// Generate username and initial password
-
-			teacher.Username = teacher.GenerateUsername()
-			teacher.Password = teacher.GenerateSaltedPassword(teacher.Username)
-
-			orm.DB().NewRecord(teacher)
-
-			if err := orm.DB().Create(&teacher).Error; err != nil {
+			_, err = orm.SaveTeacher(teacher)
+			if err != nil {
 				panic(err)
 				panic(err)
 			}
 			}
-
-			http.Redirect(w, r, fmt.Sprintf("/teachers/%d", teacher.ID), http.StatusSeeOther)
+			http.Redirect(w, r, fmt.Sprintf("/teachers/%d?format=html&tpl_layout=base&tpl_content=teachers_show", teacher.ID), http.StatusSeeOther)
 		}
 		}
 
 
 	}
 	}
@@ -127,14 +111,15 @@ func teacherUpdateHandler() http.Handler {
 			if err != nil {
 			if err != nil {
 				panic(err)
 				panic(err)
 			}
 			}
-			newTeacher, err := renderer.Decode(&orm.Teacher{}, r)
+			err = renderer.Decode(teacher, r)
 			if err != nil {
 			if err != nil {
 				panic(err)
 				panic(err)
 			}
 			}
-			_, err = SaveTeacher(mux.Vars(r)["id"], newTeacher.(*orm.Teacher))
+			_, err = orm.SaveTeacher(teacher)
 			if err != nil {
 			if err != nil {
 				panic(err)
 				panic(err)
 			}
 			}
+			http.Redirect(w, r, fmt.Sprintf("/teachers/%d?format=html&tpl_layout=base&tpl_content=teachers_show", teacher.ID), http.StatusSeeOther)
 		}
 		}
 
 
 	}
 	}

+ 16 - 1
orm/orm_test.go

@@ -142,7 +142,7 @@ func (t *testSuite) TestSaveTeacher() {
 	t.Nil(err)
 	t.Nil(err)
 
 
 	teacher.Name = "Roberto"
 	teacher.Name = "Roberto"
-	err = SaveTeacher("1", teacher)
+	_, err = SaveTeacher(teacher)
 	t.Nil(err)
 	t.Nil(err)
 
 
 	if !t.Failed() {
 	if !t.Failed() {
@@ -151,6 +151,21 @@ func (t *testSuite) TestSaveTeacher() {
 	}
 	}
 }
 }
 
 
+func (t *testSuite) TestCreateTeacher() {
+	teacher := new(Teacher)
+	teacher.Name = "Giovanni"
+	teacher.Surname = "Giacobbe"
+
+	_, err := CreateTeacher(teacher)
+	t.Nil(err)
+
+	if !t.Failed() {
+		teacher, _ = GetTeacher("10")
+		t.Equal("Giovanni", teacher.Name)
+
+	}
+}
+
 // func (t *testSuite) Before() {
 // func (t *testSuite) Before() {
 // 	var activities []Activity
 // 	var activities []Activity
 // 	if err := DB().Find(&activities).Error; err != nil {
 // 	if err := DB().Find(&activities).Error; err != nil {

+ 11 - 4
orm/teacher.go

@@ -87,11 +87,18 @@ func GetTeachersAll() ([]*Teacher, error) {
 	return teachers, nil
 	return teachers, nil
 }
 }
 
 
-func SaveTeacher(teacher *Teacher) error {
-	if err := DB().Save(teacher).Error; err != nil {
-		return nil
+func SaveTeacher(teacher *Teacher) (*Teacher, error) {
+	if err := DB().Save(&teacher).Error; err != nil {
+		return nil, err
 	}
 	}
-	return nil
+	return teacher, nil
+}
+
+func CreateTeacher(teacher *Teacher) (*Teacher, error) {
+	if err := DB().Create(teacher).Error; err != nil {
+		return nil, err
+	}
+	return teacher, nil
 }
 }
 
 
 func (t *Teacher) GetClasses() ([]*Class, error) {
 func (t *Teacher) GetClasses() ([]*Class, error) {

+ 4 - 4
renderer/renderer.go

@@ -150,19 +150,19 @@ func (rend *HTMLRenderer) Render(w http.ResponseWriter, r *http.Request, data in
 	}
 	}
 }
 }
 
 
-func Decode(dst interface{}, r *http.Request) (interface{}, error) {
+func Decode(dst interface{}, r *http.Request) error {
 	switch r.Header.Get("Content-type") {
 	switch r.Header.Get("Content-type") {
 
 
 	case "application/x-www-form-urlencoded":
 	case "application/x-www-form-urlencoded":
 		if err := r.ParseForm(); err != nil {
 		if err := r.ParseForm(); err != nil {
-			return nil, err
+			return err
 		}
 		}
 
 
 		decoder := schema.NewDecoder()
 		decoder := schema.NewDecoder()
 		if err := decoder.Decode(dst, r.PostForm); err != nil {
 		if err := decoder.Decode(dst, r.PostForm); err != nil {
-			return nil, err
+			return err
 		}
 		}
 	}
 	}
 
 
-	return dst, nil
+	return nil
 }
 }