mappings.go.old 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236
  1. package orm
  2. import (
  3. "path"
  4. "reflect"
  5. "strings"
  6. "github.com/jinzhu/inflection"
  7. )
  8. var (
  9. Get map[string]GetFn = map[string]GetFn{
  10. // Teacher
  11. "/teachers": GetTeachersFast,
  12. "/teachers/{id}": GetTeacherAll,
  13. "/teachers/{id}/update": GetTeacher,
  14. "/teachers/add/": GetNothing,
  15. "/api/teachers": GetTeachersAll,
  16. "/api/teachers/{id}": GetTeacherAll,
  17. "/api/teachers/{id}/update": GetTeacher,
  18. "/api/teachers/add/": GetNothing,
  19. // Student
  20. "/students": GetStudentsFast,
  21. "/students/{id}": GetStudentAll,
  22. "/students/{id}/update": GetStudentForUpdate,
  23. "/students/add/": GetStudentForAdd,
  24. "/api/students": GetStudentsAll,
  25. "/api/students/{id}": GetStudentAll,
  26. "/api/students/{id}/update": GetStudentForUpdate,
  27. "/api/students/add/": GetStudentForAdd,
  28. // Classes
  29. "/classes": GetClassesAll,
  30. "/classes/{id}": GetClassAll,
  31. "/classes/{id}/update": GetClassForUpdate,
  32. "/classes/add/": GetClassForAdd,
  33. "/api/classes": GetClassesAll,
  34. "/api/classes/{id}": GetClassAll,
  35. "/api/classes/{id}/update": GetClassForUpdate,
  36. "/api/classes/add/": GetClassForAdd,
  37. // Subjects
  38. "/subjects": GetSubjectsAll,
  39. "/subjects/{id}": GetSubjectAll,
  40. "/subjects/{id}/update": GetSubjectForUpdate,
  41. "/subjects/add/": GetSubjectForAdd,
  42. "/api/subjects": GetSubjectsAll,
  43. "/api/subjects/{id}": GetSubjectAll,
  44. "/api/subjects/{id}/update": GetSubjectForUpdate,
  45. "/api/subjects/add/": GetSubjectForAdd,
  46. // Departments
  47. "/departments": GetDepartmentsAll,
  48. "/departments/{id}": GetDepartmentAll,
  49. "/departments/{id}/update": GetDepartmentForUpdate,
  50. "/departments/add/": GetDepartmentForAdd,
  51. "/api/departments": GetDepartmentsAll,
  52. "/api/departments/{id}": GetDepartmentAll,
  53. "/api/departments/{id}/update": GetDepartment,
  54. "/api/departments/add/": GetNothing,
  55. // Activity
  56. "/activities": GetActivitiesAll,
  57. "/activities/{id}": GetActivityAll,
  58. "/activities/{id}/update": GetActivityForUpdate,
  59. "/activities/add/": GetActivityForAdd,
  60. "/api/activities": GetActivitiesAll,
  61. "/api/activities/{id}": GetActivityAll,
  62. "/api/activities/{id}/update": GetActivityForUpdate,
  63. "/api/activities/add/": GetActivityForAdd,
  64. // Offices
  65. "/offices": GetOfficesAll,
  66. "/offices/{id}": GetOfficeAll,
  67. "/offices/{id}/update": GetOfficeForUpdate,
  68. "/offices/add/": GetOfficeForAdd,
  69. "/api/offices": GetOfficesAll,
  70. "/api/offices/{id}": GetOfficeAll,
  71. "/api/offices/{id}/update": GetOffice,
  72. "/api/offices/add/": GetNothing,
  73. // Administratives
  74. "/administratives": GetAdministrativesAll,
  75. "/administratives/{id}": GetAdministrativeAll,
  76. "/administratives/{id}/update": GetAdministrativeForUpdate,
  77. "/administratives/add/": GetAdministrativeForAdd,
  78. "/api/administratives": GetAdministrativesAll,
  79. "/api/administratives/{id}": GetAdministrativeAll,
  80. "/api/administratives/{id}/update": GetAdministrative,
  81. "/api/administratives/add/": GetNothing,
  82. // Documents
  83. "/documents": GetDocumentsAll,
  84. "/documents/{id}": GetDocumentAll,
  85. "/documents/{id}/update": GetDocumentForUpdate,
  86. "/documents/{id}/execute": GetDocumentExecute,
  87. "/documents/add/": GetDocumentForAdd,
  88. "/api/documents": GetDocumentsAll,
  89. "/api/documents/{id}": GetDocumentAll,
  90. "/api/documents/{id}/update": GetDocument,
  91. "/api/documents/add/": GetNothing,
  92. // Jobs
  93. "/jobs": GetJobs,
  94. "/jobs/{id}": GetJob,
  95. "/jobs/{id}/files/{filename}": GetFile,
  96. "/api/jobs/{id}": GetJob,
  97. "/api/jobs/add/": GetNothing,
  98. }
  99. Post map[string]PostFn = map[string]PostFn{
  100. // Teacher
  101. "/teachers/{id}/update": UpdateTeacher,
  102. "/teachers/{id}/delete": DeleteTeacher,
  103. "/teachers/add/": AddTeacher,
  104. "/api/teachers/add": AddTeacher,
  105. "/api/teachers/{id}/update": UpdateTeacher,
  106. "/api/teachers/{id}/delete": DeleteTeacher,
  107. "/api/teachers/add/": AddTeacher,
  108. // Student
  109. "/students/{id}/update": UpdateStudent,
  110. "/students/{id}/delete": DeleteStudent,
  111. "/students/add/": AddStudent,
  112. "/api/students/add": AddStudent,
  113. "/api/students/{id}/update": UpdateStudent,
  114. "/api/students/{id}/delete": DeleteStudent,
  115. "/api/students/add/": AddStudent,
  116. // Classes
  117. "/classes/{id}/update": UpdateClass,
  118. "/classes/{id}/delete": DeleteClass,
  119. "/classes/add/": AddClass,
  120. "/api/classes/{id}/update": UpdateClass,
  121. "/api/classes/{id}/delete": DeleteClass,
  122. "/api/classes/add/": AddClass,
  123. // Subjects
  124. "/subjects/{id}/update": UpdateSubject,
  125. "/subjects/{id}/delete": DeleteSubject,
  126. "/subjects/add/": AddSubject,
  127. "/api/subjects/{id}/update": UpdateSubject,
  128. "/api/subjects/{id}/delete": DeleteSubject,
  129. "/api/subjects/add/": AddSubject,
  130. // Departments
  131. "/departments/{id}/update": UpdateDepartment,
  132. "/departments/{id}/delete": DeleteDepartment,
  133. "/departments/add/": AddDepartment,
  134. "/api/departments/{id}/update": UpdateDepartment,
  135. "/api/departments/{id}/delete": DeleteDepartment,
  136. "/api/departments/add/": AddDepartment,
  137. // Activity
  138. "/activities/{id}/update": UpdateActivity,
  139. "/activities/{id}/delete": DeleteActivity,
  140. "/activities/add/": AddActivity,
  141. "/api/activities/{id}/update": UpdateActivity,
  142. "/api/activities/{id}/delete": DeleteActivity,
  143. "/api/activities/add/": AddActivity,
  144. // Offices
  145. "/offices/{id}/update": UpdateOffice,
  146. "/offices/{id}/delete": DeleteOffice,
  147. "/offices/add/": AddOffice,
  148. "/api/offices/{id}/update": UpdateOffice,
  149. "/api/offices/{id}/delete": DeleteOffice,
  150. "/api/offices/add/": AddOffice,
  151. // Administratives
  152. "/administratives/{id}/update": UpdateAdministrative,
  153. "/administratives/{id}/delete": DeleteAdministrative,
  154. "/administratives/add/": AddAdministrative,
  155. "/api/administratives/{id}/update": UpdateAdministrative,
  156. "/api/administratives/{id}/delete": DeleteAdministrative,
  157. "/api/administratives/add/": AddAdministrative,
  158. // Documents
  159. "/documents/{id}/update": UpdateDocument,
  160. "/documents/{id}/delete": DeleteDocument,
  161. "/documents/add/": AddDocument,
  162. "/api/documents/{id}/update": UpdateDocument,
  163. "/api/documents/{id}/delete": DeleteDocument,
  164. "/api/documents/add/": AddDocument,
  165. // Jobs
  166. "/jobs/{id}/delete": DeleteJob,
  167. "/api/jobs/{id}/update": UpdateJob,
  168. "/api/jobs/{id}/delete": DeleteJob,
  169. }
  170. )
  171. func MapModels(models []interface{}, handlers map[string]string) {
  172. for _, model := range models {
  173. name := inflection.Plural(strings.ToLower(modelName(model)))
  174. for p, action := range map[string]string{
  175. "": "GetAll",
  176. "create": "Create",
  177. "{id}": "Get",
  178. "{id}/udpate": "Update",
  179. } {
  180. getFns[path.Join("/", name, p)] = reflect.ValueOf(model).MethodByName(action).Interface().(func(map[string]string) (interface{}, error))
  181. }
  182. }
  183. }
  184. func modelName(s interface{}) string {
  185. if t := reflect.TypeOf(s); t.Kind() == reflect.Ptr {
  186. return t.Elem().Name()
  187. } else {
  188. return t.Name()
  189. }
  190. }