events.go 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. package controllers
  2. import (
  3. "net/http"
  4. "strconv"
  5. "github.com/gorilla/mux"
  6. "github.com/gravitl/netmaker/db"
  7. "github.com/gravitl/netmaker/logic"
  8. "github.com/gravitl/netmaker/models"
  9. "github.com/gravitl/netmaker/schema"
  10. )
  11. func EventHandlers(r *mux.Router) {
  12. r.HandleFunc("/api/v1/network/activity", logic.SecurityCheck(true, http.HandlerFunc(listNetworkActivity))).Methods(http.MethodGet)
  13. r.HandleFunc("/api/v1/user/activity", logic.SecurityCheck(true, http.HandlerFunc(listUserActivity))).Methods(http.MethodGet)
  14. r.HandleFunc("/api/v1/activity", logic.SecurityCheck(true, http.HandlerFunc(listActivity))).Methods(http.MethodGet)
  15. }
  16. // @Summary list activity.
  17. // @Router /api/v1/activity [get]
  18. // @Tags Activity
  19. // @Param network_id query string true "network_id required to get the network events"
  20. // @Success 200 {object} models.ReturnSuccessResponseWithJson
  21. // @Failure 500 {object} models.ErrorResponse
  22. func listNetworkActivity(w http.ResponseWriter, r *http.Request) {
  23. netID := r.URL.Query().Get("network_id")
  24. // Parse query parameters with defaults
  25. if netID == "" {
  26. logic.ReturnErrorResponse(w, r, models.ErrorResponse{
  27. Code: http.StatusBadRequest,
  28. Message: "network_id param is missing",
  29. })
  30. return
  31. }
  32. page, _ := strconv.Atoi(r.URL.Query().Get("page"))
  33. pageSize, _ := strconv.Atoi(r.URL.Query().Get("per_page"))
  34. ctx := db.WithContext(r.Context())
  35. netActivity, err := (&schema.Event{NetworkID: models.NetworkID(netID)}).ListByNetwork(db.SetPagination(ctx, page, pageSize))
  36. if err != nil {
  37. logic.ReturnErrorResponse(w, r, models.ErrorResponse{
  38. Code: http.StatusInternalServerError,
  39. Message: err.Error(),
  40. })
  41. return
  42. }
  43. logic.ReturnSuccessResponseWithJson(w, r, netActivity, "successfully fetched network activity")
  44. }
  45. // @Summary list activity.
  46. // @Router /api/v1/activity [get]
  47. // @Tags Activity
  48. // @Param network_id query string true "network_id required to get the network events"
  49. // @Success 200 {object} models.ReturnSuccessResponseWithJson
  50. // @Failure 500 {object} models.ErrorResponse
  51. func listUserActivity(w http.ResponseWriter, r *http.Request) {
  52. username := r.URL.Query().Get("username")
  53. // Parse query parameters with defaults
  54. if username == "" {
  55. logic.ReturnErrorResponse(w, r, models.ErrorResponse{
  56. Code: http.StatusBadRequest,
  57. Message: "username param is missing",
  58. })
  59. return
  60. }
  61. page, _ := strconv.Atoi(r.URL.Query().Get("page"))
  62. pageSize, _ := strconv.Atoi(r.URL.Query().Get("per_page"))
  63. ctx := db.WithContext(r.Context())
  64. userActivity, err := (&schema.Event{TriggeredBy: username}).ListByUser(db.SetPagination(ctx, page, pageSize))
  65. if err != nil {
  66. logic.ReturnErrorResponse(w, r, models.ErrorResponse{
  67. Code: http.StatusInternalServerError,
  68. Message: err.Error(),
  69. })
  70. return
  71. }
  72. logic.ReturnSuccessResponseWithJson(w, r, userActivity, "successfully fetched user activity "+username)
  73. }
  74. // @Summary list activity.
  75. // @Router /api/v1/activity [get]
  76. // @Tags Activity
  77. // @Success 200 {object} models.ReturnSuccessResponseWithJson
  78. // @Failure 500 {object} models.ErrorResponse
  79. func listActivity(w http.ResponseWriter, r *http.Request) {
  80. username := r.URL.Query().Get("username")
  81. network := r.URL.Query().Get("network_id")
  82. page, _ := strconv.Atoi(r.URL.Query().Get("page"))
  83. pageSize, _ := strconv.Atoi(r.URL.Query().Get("per_page"))
  84. ctx := db.WithContext(r.Context())
  85. var err error
  86. var events []schema.Event
  87. e := &schema.Event{TriggeredBy: username, NetworkID: models.NetworkID(network)}
  88. if username != "" && network != "" {
  89. events, err = e.ListByUserAndNetwork(db.SetPagination(ctx, page, pageSize))
  90. } else if username != "" && network == "" {
  91. events, err = e.ListByUser(db.SetPagination(ctx, page, pageSize))
  92. } else if username == "" && network != "" {
  93. events, err = e.ListByNetwork(db.SetPagination(ctx, page, pageSize))
  94. } else {
  95. events, err = e.List(db.SetPagination(ctx, page, pageSize))
  96. }
  97. if err != nil {
  98. logic.ReturnErrorResponse(w, r, models.ErrorResponse{
  99. Code: http.StatusInternalServerError,
  100. Message: err.Error(),
  101. })
  102. return
  103. }
  104. logic.ReturnSuccessResponseWithJson(w, r, events, "successfully fetched all events ")
  105. }