瀏覽代碼

First working version for new handlers

Andrea Fazzi 6 年之前
父節點
當前提交
15bc7ffd1a
共有 6 個文件被更改,包括 77 次插入53 次删除
  1. 17 10
      handlers/handlers.go
  2. 23 23
      handlers/handlers_test.go
  3. 1 1
      handlers/login.go
  4. 2 2
      main.go
  5. 32 16
      orm/orm.go
  6. 2 1
      orm/teacher.go

+ 17 - 10
handlers/handlers.go

@@ -1,4 +1,4 @@
-package api
+package handlers
 
 import (
 	"encoding/json"
@@ -87,7 +87,7 @@ func generateHandler(r *mux.Router, model string) {
 	}
 
 	for _, pattern := range jsonPatterns {
-		r.Handle(pattern.Path(model), recoverHandler(modelHandler(model, pattern))).Methods(pattern.Methods...)
+		r.Handle(pattern.Path(model), jwtHeader.Handler(recoverHandler(modelHandler(model, pattern)))).Methods(pattern.Methods...)
 	}
 
 }
@@ -162,16 +162,17 @@ func recoverHandler(next http.Handler) http.Handler {
 	return http.HandlerFunc(fn)
 }
 
-func respondWithResult(w http.ResponseWriter, r *http.Request, model string, pattern PathPattern) {
+func get(w http.ResponseWriter, r *http.Request, model string, pattern PathPattern) {
+	format := r.URL.Query().Get("format")
 	getFn, err := orm.GetResultFunc(pattern.Path(model))
 	if err != nil {
 		respondWithError(w, r, err)
 	} else {
 		data, err := getFn(mux.Vars(r))
 		if err != nil {
-			renderer.Render[r.URL.Query().Get("format")](w, r, err)
+			renderer.Render[format](w, r, err)
 		} else {
-			renderer.Render[r.URL.Query().Get("format")](w, r, data, r.URL.Query())
+			renderer.Render[format](w, r, data, r.URL.Query())
 		}
 	}
 
@@ -183,14 +184,21 @@ func respondWithError(w http.ResponseWriter, r *http.Request, err error) {
 }
 
 func post(w http.ResponseWriter, r *http.Request, model string, pattern PathPattern) {
+	var (
+		data orm.IDer
+		err  error
+	)
+
+	format := r.URL.Query().Get("format")
 	postFn, err := orm.PostFunc(pattern.Path(model))
+
 	if err != nil {
 		respondWithError(w, r, err)
 	} else {
-		data, err := postFn(mux.Vars(r), r)
+		data, err = postFn(mux.Vars(r), r)
 		if err != nil {
 			respondWithError(w, r, err)
-		} else if r.URL.Query().Get("format") == "html" {
+		} else if format == "html" {
 			if id := mux.Vars(r)["id"]; id != "" {
 				modelId, _ := strconv.Atoi(id)
 				http.Redirect(w, r, pattern.RedirectPath(model, uint(modelId)), http.StatusSeeOther)
@@ -201,8 +209,7 @@ func post(w http.ResponseWriter, r *http.Request, model string, pattern PathPatt
 
 	}
 
-	log.Println(pattern)
-	respondWithResult(w, r, model, pattern)
+	renderer.Render[format](w, r, data.GetID())
 }
 
 func modelHandler(model string, pattern PathPattern) http.Handler {
@@ -215,7 +222,7 @@ func modelHandler(model string, pattern PathPattern) http.Handler {
 		switch r.Method {
 
 		case "GET":
-			respondWithResult(w, r, model, pattern)
+			get(w, r, model, pattern)
 
 		case "POST":
 			post(w, r, model, pattern)

+ 23 - 23
handlers/handlers_test.go

@@ -1,4 +1,4 @@
-package api
+package handlers
 
 import (
 	"bytes"
@@ -140,13 +140,13 @@ func (t *testSuite) TestGetTeachersJSON() {
 		response renderer.JsonResponse
 	)
 
-	req, err := http.NewRequest("GET", "/teachers?format=json", nil)
+	req, err := http.NewRequest("GET", "/api/teachers?format=json", nil)
 	if err != nil {
 		panic(err)
 	}
 
 	pattern := PathPattern{
-		"/%s",
+		"/api/%s",
 		"/%s/%d?format=json",
 		[]string{"GET"},
 	}
@@ -173,7 +173,7 @@ func (t *testSuite) TestGetErrorJSON() {
 		response renderer.JsonResponse
 	)
 
-	req, err := http.NewRequest("GET", "/teacher/100?format=json", nil)
+	req, err := http.NewRequest("GET", "/api/teacher/100?format=json", nil)
 	if err != nil {
 		panic(err)
 	}
@@ -183,20 +183,18 @@ func (t *testSuite) TestGetErrorJSON() {
 	rr := httptest.NewRecorder()
 	modelHandler("teachers", pattern).ServeHTTP(rr, req)
 
-	t.Equal(http.StatusInternalServerError, rr.Code)
-
-	if !t.Failed() {
-		err := json.Unmarshal(rr.Body.Bytes(), &response)
-		t.Nil(err)
-		if !t.Failed() {
-			t.Equal("Can't map /api/teachers/{id}!", string(response.Error))
-
-		}
-	}
+	err = json.Unmarshal(rr.Body.Bytes(), &response)
+	t.Nil(err)
+	t.Equal("record not found", string(response.Error))
 
 }
 
 func (t *testSuite) TestPostTeacherJSON() {
+	var (
+		response renderer.JsonResponse
+		id       uint
+	)
+
 	teacher := new(orm.Teacher)
 	teacher.Name = "Mario"
 	teacher.Surname = "ROSSI"
@@ -204,7 +202,7 @@ func (t *testSuite) TestPostTeacherJSON() {
 	data, err := json.Marshal(teacher)
 	t.Nil(err)
 
-	req, err := http.NewRequest("POST", "/teachers/add?format=json", bytes.NewBuffer(data))
+	req, err := http.NewRequest("POST", "/api/teachers/add?format=json", bytes.NewBuffer(data))
 	req.Header.Set("Content-Type", "application/json; charset=utf-8")
 
 	if err != nil {
@@ -212,7 +210,7 @@ func (t *testSuite) TestPostTeacherJSON() {
 	}
 
 	pattern := PathPattern{
-		"/%s/add",
+		"/api/%s/add",
 		"/%s?format=json",
 		[]string{"POST"},
 	}
@@ -222,12 +220,14 @@ func (t *testSuite) TestPostTeacherJSON() {
 
 	t.Equal(http.StatusOK, rr.Code)
 
-	// if !t.Failed() {
-	// 	err := json.Unmarshal(rr.Body.Bytes(), &teachers)
-	// 	t.Nil(err)
-	// 	if !t.Failed() {
-	// 		t.Equal("AGOSTINO", teachers[0].Surname)
-	// 	}
-	// }
+	if !t.Failed() {
+		err := json.Unmarshal(rr.Body.Bytes(), &response)
+		t.Nil(err)
+		if !t.Failed() {
+			err := json.Unmarshal(response.Result, &id)
+			t.Nil(err)
+			t.Equal(uint(10), id)
+		}
+	}
 
 }

+ 1 - 1
handlers/login.go

@@ -1,4 +1,4 @@
-package api
+package handlers
 
 import (
 	"errors"

+ 2 - 2
main.go

@@ -11,7 +11,7 @@ import (
 	"github.com/jinzhu/gorm"
 
 	"gogs.carducci-dante.gov.it/karmen/core/config"
-	"gogs.carducci-dante.gov.it/karmen/core/handlers"
+	karmen_handlers "gogs.carducci-dante.gov.it/karmen/core/handlers"
 	"gogs.carducci-dante.gov.it/karmen/core/orm"
 )
 
@@ -58,7 +58,7 @@ func main() {
 	}
 
 	log.Println("karmen is listening to port 3000...")
-	if err := http.ListenAndServe(":3000", handlers.LoggingHandler(os.Stdout, api.Handlers())); err != nil {
+	if err := http.ListenAndServe(":3000", handlers.LoggingHandler(os.Stdout, karmen_handlers.Handlers())); err != nil {
 		panic(err)
 	}
 }

+ 32 - 16
orm/orm.go

@@ -86,7 +86,7 @@ type Department struct {
 	gorm.Model
 	Name     string
 	Subjects []Subject
-	Teachers []Teacher `gorm:"many2many:department_teachers;"`
+	Teachers []Teacher
 }
 
 type GetFn func(map[string]string) (interface{}, error)
@@ -102,20 +102,21 @@ var (
 		"/teachers/{id}/update": GetTeacher,
 		"/teachers/add/":        GetNothing,
 
-		"/api/teachers": GetTeachersAll,
+		"/api/teachers":             GetTeachersAll,
+		"/api/teachers/{id}":        GetTeacherAll,
+		"/api/teachers/{id}/update": GetTeacher,
+		"/api/teachers/add/":        GetNothing,
 
 		// Classes
-
-		/// HTML
-
 		"/classes":             GetClassesAll,
 		"/classes/{id}":        GetClassAll,
 		"/classes/{id}/update": GetClassForUpdate,
 		"/classes/add/":        GetClassForAdd,
 
-		/// JSON
-
-		"/api/classes": GetClassesAll,
+		"/api/classes":             GetClassesAll,
+		"/api/classes/{id}":        GetClassAll,
+		"/api/classes/{id}/update": GetClassForUpdate,
+		"/api/classes/add/":        GetClassForAdd,
 
 		// Subjects
 		"/subjects":             GetSubjectsAll,
@@ -123,7 +124,10 @@ var (
 		"/subjects/{id}/update": GetSubjectForUpdate,
 		"/subjects/add/":        GetSubjectForAdd,
 
-		"/api/subjects": GetSubjectsAll,
+		"/api/subjects":             GetSubjectsAll,
+		"/api/subjects/{id}":        GetSubjectAll,
+		"/api/subjects/{id}/update": GetSubjectForUpdate,
+		"/api/subjects/add/":        GetSubjectForAdd,
 
 		// Activity
 		"/activities":             GetActivitiesAll,
@@ -131,36 +135,48 @@ var (
 		"/activities/{id}/update": GetActivityForUpdate,
 		"/activities/add/":        GetActivityForAdd,
 
-		"/api/activities": GetActivitiesAll,
+		"/api/activities":             GetActivitiesAll,
+		"/api/activities/{id}":        GetActivityAll,
+		"/api/activities/{id}/update": GetActivityForUpdate,
+		"/api/activities/add/":        GetActivityForAdd,
 	}
 
 	Post map[string]PostFn = map[string]PostFn{
 		// Teacher
-
-		/// HTML
-
 		"/teachers/{id}/update": UpdateTeacher,
 		"/teachers/{id}/delete": DeleteTeacher,
 		"/teachers/add/":        AddTeacher,
 
-		/// JSON
-
-		"/teachers/add": AddTeacher,
+		"/api/teachers/add":          AddTeacher,
+		"/api//teachers/{id}/delete": DeleteTeacher,
+		"/api//teachers/add/":        AddTeacher,
 
 		// Classes
 		"/classes/{id}/update": UpdateClass,
 		"/classes/{id}/delete": DeleteClass,
 		"/classes/add/":        AddClass,
 
+		"/api//classes/{id}/update": UpdateClass,
+		"/api//classes/{id}/delete": DeleteClass,
+		"/api//classes/add/":        AddClass,
+
 		// Subjects
 		"/subjects/{id}/update": UpdateSubject,
 		"/subjects/{id}/delete": DeleteSubject,
 		"/subjects/add/":        AddSubject,
 
+		"/api//subjects/{id}/update": UpdateSubject,
+		"/api//subjects/{id}/delete": DeleteSubject,
+		"/api//subjects/add/":        AddSubject,
+
 		// Activity
 		"/activities/{id}/update": UpdateActivity,
 		"/activities/{id}/delete": DeleteActivity,
 		"/activities/add/":        AddActivity,
+
+		"/api//activities/{id}/update": UpdateActivity,
+		"/api//activities/{id}/delete": DeleteActivity,
+		"/api//activities/add/":        AddActivity,
 	}
 )
 

+ 2 - 1
orm/teacher.go

@@ -63,7 +63,7 @@ func GetTeacherAll(args map[string]string) (interface{}, error) {
 
 	id := args["id"]
 
-	if err := DB().First(&teacher, id).Error; err != nil {
+	if err := DB().Where("id = ?", id).Find(&teacher).Error; err != nil {
 		return nil, err
 	}
 
@@ -144,6 +144,7 @@ func AddTeacher(args map[string]string, r *http.Request) (IDer, error) {
 	if err != nil {
 		return nil, err
 	}
+
 	return teacher, nil
 }