|
@@ -1,206 +1,67 @@
|
|
|
package orm
|
|
|
|
|
|
-var (
|
|
|
- Get map[string]GetFn = map[string]GetFn{
|
|
|
- // Teacher
|
|
|
- "/teachers": GetTeachersFast,
|
|
|
- "/teachers/{id}": GetTeacherAll,
|
|
|
- "/teachers/{id}/update": GetTeacher,
|
|
|
- "/teachers/add/": GetNothing,
|
|
|
-
|
|
|
- "/api/teachers": GetTeachersAll,
|
|
|
- "/api/teachers/{id}": GetTeacherAll,
|
|
|
- "/api/teachers/{id}/update": GetTeacher,
|
|
|
- "/api/teachers/add/": GetNothing,
|
|
|
-
|
|
|
- // Student
|
|
|
- "/students": GetStudentsFast,
|
|
|
- "/students/{id}": GetStudentAll,
|
|
|
- "/students/{id}/update": GetStudentForUpdate,
|
|
|
- "/students/add/": GetStudentForAdd,
|
|
|
-
|
|
|
- "/api/students": GetStudentsAll,
|
|
|
- "/api/students/{id}": GetStudentAll,
|
|
|
- "/api/students/{id}/update": GetStudentForUpdate,
|
|
|
- "/api/students/add/": GetStudentForAdd,
|
|
|
-
|
|
|
- // Classes
|
|
|
- "/classes": GetClassesAll,
|
|
|
- "/classes/{id}": GetClassAll,
|
|
|
- "/classes/{id}/update": GetClassForUpdate,
|
|
|
- "/classes/add/": GetClassForAdd,
|
|
|
-
|
|
|
- "/api/classes": GetClassesAll,
|
|
|
- "/api/classes/{id}": GetClassAll,
|
|
|
- "/api/classes/{id}/update": GetClassForUpdate,
|
|
|
- "/api/classes/add/": GetClassForAdd,
|
|
|
-
|
|
|
- // Subjects
|
|
|
- "/subjects": GetSubjectsAll,
|
|
|
- "/subjects/{id}": GetSubjectAll,
|
|
|
- "/subjects/{id}/update": GetSubjectForUpdate,
|
|
|
- "/subjects/add/": GetSubjectForAdd,
|
|
|
-
|
|
|
- "/api/subjects": GetSubjectsAll,
|
|
|
- "/api/subjects/{id}": GetSubjectAll,
|
|
|
- "/api/subjects/{id}/update": GetSubjectForUpdate,
|
|
|
- "/api/subjects/add/": GetSubjectForAdd,
|
|
|
-
|
|
|
- // Departments
|
|
|
- "/departments": GetDepartmentsAll,
|
|
|
- "/departments/{id}": GetDepartmentAll,
|
|
|
- "/departments/{id}/update": GetDepartmentForUpdate,
|
|
|
- "/departments/add/": GetDepartmentForAdd,
|
|
|
-
|
|
|
- "/api/departments": GetDepartmentsAll,
|
|
|
- "/api/departments/{id}": GetDepartmentAll,
|
|
|
- "/api/departments/{id}/update": GetDepartment,
|
|
|
- "/api/departments/add/": GetNothing,
|
|
|
-
|
|
|
- // Activity
|
|
|
- "/activities": GetActivitiesAll,
|
|
|
- "/activities/{id}": GetActivityAll,
|
|
|
- "/activities/{id}/update": GetActivityForUpdate,
|
|
|
- "/activities/add/": GetActivityForAdd,
|
|
|
-
|
|
|
- "/api/activities": GetActivitiesAll,
|
|
|
- "/api/activities/{id}": GetActivityAll,
|
|
|
- "/api/activities/{id}/update": GetActivityForUpdate,
|
|
|
- "/api/activities/add/": GetActivityForAdd,
|
|
|
-
|
|
|
- // Offices
|
|
|
- "/offices": GetOfficesAll,
|
|
|
- "/offices/{id}": GetOfficeAll,
|
|
|
- "/offices/{id}/update": GetOfficeForUpdate,
|
|
|
- "/offices/add/": GetOfficeForAdd,
|
|
|
-
|
|
|
- "/api/offices": GetOfficesAll,
|
|
|
- "/api/offices/{id}": GetOfficeAll,
|
|
|
- "/api/offices/{id}/update": GetOffice,
|
|
|
- "/api/offices/add/": GetNothing,
|
|
|
-
|
|
|
- // Administratives
|
|
|
- "/administratives": GetAdministrativesAll,
|
|
|
- "/administratives/{id}": GetAdministrativeAll,
|
|
|
- "/administratives/{id}/update": GetAdministrativeForUpdate,
|
|
|
- "/administratives/add/": GetAdministrativeForAdd,
|
|
|
-
|
|
|
- "/api/administratives": GetAdministrativesAll,
|
|
|
- "/api/administratives/{id}": GetAdministrativeAll,
|
|
|
- "/api/administratives/{id}/update": GetAdministrative,
|
|
|
- "/api/administratives/add/": GetNothing,
|
|
|
-
|
|
|
- // Documents
|
|
|
- "/documents": GetDocumentsAll,
|
|
|
- "/documents/{id}": GetDocumentAll,
|
|
|
- "/documents/{id}/update": GetDocumentForUpdate,
|
|
|
- "/documents/{id}/execute": GetDocumentExecute,
|
|
|
- "/documents/add/": GetDocumentForAdd,
|
|
|
-
|
|
|
- "/api/documents": GetDocumentsAll,
|
|
|
- "/api/documents/{id}": GetDocumentAll,
|
|
|
- "/api/documents/{id}/update": GetDocument,
|
|
|
- "/api/documents/add/": GetNothing,
|
|
|
-
|
|
|
- // Jobs
|
|
|
+import (
|
|
|
+ "fmt"
|
|
|
+ "net/http"
|
|
|
+ "path"
|
|
|
+ "reflect"
|
|
|
+ "strings"
|
|
|
+
|
|
|
+ "github.com/jinzhu/inflection"
|
|
|
+)
|
|
|
|
|
|
- "/jobs": GetJobs,
|
|
|
- "/jobs/{id}": GetJob,
|
|
|
- "/jobs/{id}/files/{filename}": GetFile,
|
|
|
+var (
|
|
|
+ getFns map[string]func(args map[string]string) (interface{}, error)
|
|
|
+)
|
|
|
|
|
|
- "/api/jobs/{id}": GetJob,
|
|
|
- "/api/jobs/add/": GetNothing,
|
|
|
+func init() {
|
|
|
+ getFns = make(map[string]func(args map[string]string) (interface{}, error), 0)
|
|
|
+}
|
|
|
+
|
|
|
+func MapModels(models []interface{}, handlers map[string]string) {
|
|
|
+ for _, model := range models {
|
|
|
+ name := inflection.Plural(strings.ToLower(modelName(model)))
|
|
|
+ for p, action := range map[string]string{
|
|
|
+ "": "GetAll",
|
|
|
+ "create": "Create",
|
|
|
+ "{id}": "Get",
|
|
|
+ "{id}/udpate": "Update",
|
|
|
+ } {
|
|
|
+ getFns[path.Join("/", name, p)] = reflect.ValueOf(model).MethodByName(action).Interface().(func(map[string]string) (interface{}, error))
|
|
|
+ }
|
|
|
}
|
|
|
+}
|
|
|
|
|
|
- Post map[string]PostFn = map[string]PostFn{
|
|
|
- // Teacher
|
|
|
- "/teachers/{id}/update": UpdateTeacher,
|
|
|
- "/teachers/{id}/delete": DeleteTeacher,
|
|
|
- "/teachers/add/": AddTeacher,
|
|
|
-
|
|
|
- "/api/teachers/add": AddTeacher,
|
|
|
- "/api/teachers/{id}/update": UpdateTeacher,
|
|
|
- "/api/teachers/{id}/delete": DeleteTeacher,
|
|
|
- "/api/teachers/add/": AddTeacher,
|
|
|
-
|
|
|
- // Student
|
|
|
- "/students/{id}/update": UpdateStudent,
|
|
|
- "/students/{id}/delete": DeleteStudent,
|
|
|
- "/students/add/": AddStudent,
|
|
|
-
|
|
|
- "/api/students/add": AddStudent,
|
|
|
- "/api/students/{id}/update": UpdateStudent,
|
|
|
- "/api/students/{id}/delete": DeleteStudent,
|
|
|
- "/api/students/add/": AddStudent,
|
|
|
-
|
|
|
- // 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,
|
|
|
-
|
|
|
- // Departments
|
|
|
- "/departments/{id}/update": UpdateDepartment,
|
|
|
- "/departments/{id}/delete": DeleteDepartment,
|
|
|
- "/departments/add/": AddDepartment,
|
|
|
-
|
|
|
- "/api/departments/{id}/update": UpdateDepartment,
|
|
|
- "/api/departments/{id}/delete": DeleteDepartment,
|
|
|
- "/api/departments/add/": AddDepartment,
|
|
|
-
|
|
|
- // 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,
|
|
|
-
|
|
|
- // Offices
|
|
|
- "/offices/{id}/update": UpdateOffice,
|
|
|
- "/offices/{id}/delete": DeleteOffice,
|
|
|
- "/offices/add/": AddOffice,
|
|
|
-
|
|
|
- "/api/offices/{id}/update": UpdateOffice,
|
|
|
- "/api/offices/{id}/delete": DeleteOffice,
|
|
|
- "/api/offices/add/": AddOffice,
|
|
|
-
|
|
|
- // Administratives
|
|
|
- "/administratives/{id}/update": UpdateAdministrative,
|
|
|
- "/administratives/{id}/delete": DeleteAdministrative,
|
|
|
- "/administratives/add/": AddAdministrative,
|
|
|
+func GetFunc(path string) (GetFn, error) {
|
|
|
+ fn, ok := getFns[path]
|
|
|
+ if !ok {
|
|
|
+ return nil, fmt.Errorf("Can't map path %s to any model methods.", path)
|
|
|
+ }
|
|
|
|
|
|
- "/api/administratives/{id}/update": UpdateAdministrative,
|
|
|
- "/api/administratives/{id}/delete": DeleteAdministrative,
|
|
|
- "/api/administratives/add/": AddAdministrative,
|
|
|
+ return fn, nil
|
|
|
+}
|
|
|
|
|
|
- // Documents
|
|
|
- "/documents/{id}/update": UpdateDocument,
|
|
|
- "/documents/{id}/delete": DeleteDocument,
|
|
|
- "/documents/add/": AddDocument,
|
|
|
+// // func PostFunc(path string) (PostFn, error) {
|
|
|
+// // fn, ok := Post[path]
|
|
|
+// // if !ok {
|
|
|
+// // return nil, fmt.Errorf("Can't map %s!", path)
|
|
|
+// // }
|
|
|
|
|
|
- "/api/documents/{id}/update": UpdateDocument,
|
|
|
- "/api/documents/{id}/delete": DeleteDocument,
|
|
|
- "/api/documents/add/": AddDocument,
|
|
|
+// // return fn, nil
|
|
|
+// // }
|
|
|
|
|
|
- // Jobs
|
|
|
+func GetNothing(args map[string]string) (interface{}, error) {
|
|
|
+ return nil, nil
|
|
|
+}
|
|
|
|
|
|
- "/jobs/{id}/delete": DeleteJob,
|
|
|
+func PostNothing(args map[string]string, r *http.Request) (IDer, error) {
|
|
|
+ return nil, nil
|
|
|
+}
|
|
|
|
|
|
- "/api/jobs/{id}/update": UpdateJob,
|
|
|
- "/api/jobs/{id}/delete": DeleteJob,
|
|
|
+func modelName(s interface{}) string {
|
|
|
+ if t := reflect.TypeOf(s); t.Kind() == reflect.Ptr {
|
|
|
+ return t.Elem().Name()
|
|
|
+ } else {
|
|
|
+ return t.Name()
|
|
|
}
|
|
|
-)
|
|
|
+}
|