| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181 | package controllersimport (	"net/http"	"strconv"	"time"	"github.com/gorilla/mux"	"github.com/gravitl/netmaker/db"	"github.com/gravitl/netmaker/logic"	"github.com/gravitl/netmaker/models"	"github.com/gravitl/netmaker/schema")func EventHandlers(r *mux.Router) {	r.HandleFunc("/api/v1/network/activity", logic.SecurityCheck(true, http.HandlerFunc(listNetworkActivity))).Methods(http.MethodGet)	r.HandleFunc("/api/v1/user/activity", logic.SecurityCheck(true, http.HandlerFunc(listUserActivity))).Methods(http.MethodGet)	r.HandleFunc("/api/v1/activity", logic.SecurityCheck(true, http.HandlerFunc(listActivity))).Methods(http.MethodGet)}// @Summary     list activity.// @Router      /api/v1/activity [get]// @Tags        Activity// @Param       network_id query string true "network_id required to get the network events"// @Success     200 {object}  models.ReturnSuccessResponseWithJson// @Failure     500 {object} models.ErrorResponsefunc listNetworkActivity(w http.ResponseWriter, r *http.Request) {	netID := r.URL.Query().Get("network_id")	// Parse query parameters with defaults	if netID == "" {		logic.ReturnErrorResponse(w, r, models.ErrorResponse{			Code:    http.StatusBadRequest,			Message: "network_id param is missing",		})		return	}	fromDateStr := r.URL.Query().Get("from_date")	toDateStr := r.URL.Query().Get("to_date")	var err error	var fromDate, toDate time.Time	if fromDateStr != "" && toDateStr != "" {		fromDate, err = time.Parse(time.RFC3339, fromDateStr)		if err != nil {			logic.ReturnErrorResponse(w, r, models.ErrorResponse{				Code:    http.StatusBadRequest,				Message: err.Error(),			})			return		}		toDate, err = time.Parse(time.RFC3339, toDateStr)		if err != nil {			logic.ReturnErrorResponse(w, r, models.ErrorResponse{				Code:    http.StatusBadRequest,				Message: err.Error(),			})			return		}	}	page, _ := strconv.Atoi(r.URL.Query().Get("page"))	pageSize, _ := strconv.Atoi(r.URL.Query().Get("per_page"))	ctx := db.WithContext(r.Context())	netActivity, err := (&schema.Event{NetworkID: models.NetworkID(netID)}).ListByNetwork(db.SetPagination(ctx, page, pageSize), fromDate, toDate)	if err != nil {		logic.ReturnErrorResponse(w, r, models.ErrorResponse{			Code:    http.StatusInternalServerError,			Message: err.Error(),		})		return	}	logic.ReturnSuccessResponseWithJson(w, r, netActivity, "successfully fetched network activity")}// @Summary     list activity.// @Router      /api/v1/activity [get]// @Tags        Activity// @Param       network_id query string true "network_id required to get the network events"// @Success     200 {object}  models.ReturnSuccessResponseWithJson// @Failure     500 {object} models.ErrorResponsefunc listUserActivity(w http.ResponseWriter, r *http.Request) {	username := r.URL.Query().Get("username")	// Parse query parameters with defaults	if username == "" {		logic.ReturnErrorResponse(w, r, models.ErrorResponse{			Code:    http.StatusBadRequest,			Message: "username param is missing",		})		return	}	fromDateStr := r.URL.Query().Get("from_date")	toDateStr := r.URL.Query().Get("to_date")	var err error	var fromDate, toDate time.Time	if fromDateStr != "" && toDateStr != "" {		fromDate, err = time.Parse(time.RFC3339, fromDateStr)		if err != nil {			logic.ReturnErrorResponse(w, r, models.ErrorResponse{				Code:    http.StatusBadRequest,				Message: err.Error(),			})			return		}		toDate, err = time.Parse(time.RFC3339, toDateStr)		if err != nil {			logic.ReturnErrorResponse(w, r, models.ErrorResponse{				Code:    http.StatusBadRequest,				Message: err.Error(),			})			return		}	}	page, _ := strconv.Atoi(r.URL.Query().Get("page"))	pageSize, _ := strconv.Atoi(r.URL.Query().Get("per_page"))	ctx := db.WithContext(r.Context())	userActivity, err := (&schema.Event{TriggeredBy: username}).ListByUser(db.SetPagination(ctx, page, pageSize), fromDate, toDate)	if err != nil {		logic.ReturnErrorResponse(w, r, models.ErrorResponse{			Code:    http.StatusInternalServerError,			Message: err.Error(),		})		return	}	logic.ReturnSuccessResponseWithJson(w, r, userActivity, "successfully fetched user activity "+username)}// @Summary     list activity.// @Router      /api/v1/activity [get]// @Tags        Activity// @Success     200 {object}  models.ReturnSuccessResponseWithJson// @Failure     500 {object} models.ErrorResponsefunc listActivity(w http.ResponseWriter, r *http.Request) {	username := r.URL.Query().Get("username")	network := r.URL.Query().Get("network_id")	page, _ := strconv.Atoi(r.URL.Query().Get("page"))	pageSize, _ := strconv.Atoi(r.URL.Query().Get("per_page"))	ctx := db.WithContext(r.Context())	var err error	fromDateStr := r.URL.Query().Get("from_date")	toDateStr := r.URL.Query().Get("to_date")	var fromDate, toDate time.Time	if fromDateStr != "" && toDateStr != "" {		fromDate, err = time.Parse(time.RFC3339, fromDateStr)		if err != nil {			logic.ReturnErrorResponse(w, r, models.ErrorResponse{				Code:    http.StatusBadRequest,				Message: err.Error(),			})			return		}		toDate, err = time.Parse(time.RFC3339, toDateStr)		if err != nil {			logic.ReturnErrorResponse(w, r, models.ErrorResponse{				Code:    http.StatusBadRequest,				Message: err.Error(),			})			return		}	}	var events []schema.Event	e := &schema.Event{TriggeredBy: username, NetworkID: models.NetworkID(network)}	if username != "" && network != "" {		events, err = e.ListByUserAndNetwork(db.SetPagination(ctx, page, pageSize), fromDate, toDate)	} else if username != "" && network == "" {		events, err = e.ListByUser(db.SetPagination(ctx, page, pageSize), fromDate, toDate)	} else if username == "" && network != "" {		events, err = e.ListByNetwork(db.SetPagination(ctx, page, pageSize), fromDate, toDate)	} else {		events, err = e.List(db.SetPagination(ctx, page, pageSize), fromDate, toDate)	}	if err != nil {		logic.ReturnErrorResponse(w, r, models.ErrorResponse{			Code:    http.StatusInternalServerError,			Message: err.Error(),		})		return	}	logic.ReturnSuccessResponseWithJson(w, r, events, "successfully fetched all events ")}
 |