teachers.go 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. package api
  2. import (
  3. "fmt"
  4. "net/http"
  5. "github.com/gorilla/mux"
  6. "gogs.carducci-dante.gov.it/karmen/core/orm"
  7. "gogs.carducci-dante.gov.it/karmen/core/renderer"
  8. )
  9. func generalHandler(base, path string) http.Handler {
  10. fn := func(w http.ResponseWriter, r *http.Request) {
  11. var (
  12. ok bool
  13. getFn orm.GetFn
  14. postFn orm.PostFn
  15. )
  16. if r.Method == "GET" {
  17. getFn, ok = orm.Get[path]
  18. } else {
  19. postFn, ok = orm.Post[path]
  20. }
  21. if !ok {
  22. renderer.Render[r.URL.Query()["format"][0]](w, r, fmt.Errorf("Can't find ORM function for path %s!", path))
  23. } else {
  24. if r.Method == "GET" {
  25. data, err := getFn(mux.Vars(r))
  26. if err != nil {
  27. renderer.Render[r.URL.Query()["format"][0]](w, r, err)
  28. } else {
  29. renderer.Render[r.URL.Query()["format"][0]](w, r, data, r.URL.Query())
  30. }
  31. } else {
  32. data, err := postFn(mux.Vars(r), r)
  33. if err != nil {
  34. renderer.Render["html"](w, r, err)
  35. } else {
  36. if mux.Vars(r)["id"] != "" {
  37. http.Redirect(w, r,
  38. fmt.Sprintf(
  39. "/%s/%s?format=html&tpl_layout=base&tpl_content=%s_show",
  40. base,
  41. mux.Vars(r)["id"],
  42. base,
  43. ),
  44. http.StatusSeeOther,
  45. )
  46. } else {
  47. http.Redirect(w, r,
  48. fmt.Sprintf(
  49. "/%s/%d?format=html&tpl_layout=base&tpl_content=%s_show",
  50. base,
  51. data.GetID(),
  52. base,
  53. ),
  54. http.StatusSeeOther,
  55. )
  56. }
  57. }
  58. }
  59. }
  60. }
  61. return http.HandlerFunc(fn)
  62. }