64 lines
2 KiB
Go
64 lines
2 KiB
Go
package api
|
|
|
|
import (
|
|
"fmt"
|
|
"net/http"
|
|
"strconv"
|
|
|
|
"github.com/gorilla/mux"
|
|
|
|
config "openreplay/backend/internal/config/analytics"
|
|
"openreplay/backend/pkg/analytics/service"
|
|
"openreplay/backend/pkg/logger"
|
|
"openreplay/backend/pkg/server/api"
|
|
)
|
|
|
|
type handlersImpl struct {
|
|
log logger.Logger
|
|
responser *api.Responser
|
|
jsonSizeLimit int64
|
|
service service.Service
|
|
}
|
|
|
|
func (e *handlersImpl) GetAll() []*api.Description {
|
|
return []*api.Description{
|
|
{"/v1/analytics/{projectId}/dashboards", e.createDashboard, "POST"},
|
|
{"/v1/analytics/{projectId}/dashboards", e.getDashboards, "GET"},
|
|
{"/v1/analytics/{projectId}/dashboards/{id}", e.getDashboard, "GET"},
|
|
{"/v1/analytics/{projectId}/dashboards/{id}", e.updateDashboard, "PUT"},
|
|
{"/v1/analytics/{projectId}/dashboards/{id}", e.deleteDashboard, "DELETE"},
|
|
{"/v1/analytics/{projectId}/dashboards/{id}/cards", e.addCardToDashboard, "POST"},
|
|
{"/v1/analytics/{projectId}/dashboards/{id}/cards/{cardId}", e.removeCardFromDashboard, "DELETE"},
|
|
{"/v1/analytics/{projectId}/cards", e.createCard, "POST"},
|
|
{"/v1/analytics/{projectId}/cards", e.getCardsPaginated, "GET"},
|
|
{"/v1/analytics/{projectId}/cards/{id}", e.getCard, "GET"},
|
|
{"/v1/analytics/{projectId}/cards/{id}", e.updateCard, "PUT"},
|
|
{"/v1/analytics/{projectId}/cards/{id}", e.deleteCard, "DELETE"},
|
|
{"/v1/analytics/{projectId}/cards/{id}/chart", e.getCardChartData, "POST"},
|
|
{"/v1/analytics/{projectId}/cards/{id}/try", e.getCardChartData, "POST"},
|
|
}
|
|
}
|
|
|
|
func NewHandlers(log logger.Logger, cfg *config.Config, responser *api.Responser, service service.Service) (api.Handlers, error) {
|
|
return &handlersImpl{
|
|
log: log,
|
|
responser: responser,
|
|
jsonSizeLimit: cfg.JsonSizeLimit,
|
|
service: service,
|
|
}, nil
|
|
}
|
|
|
|
func getIDFromRequest(r *http.Request, key string) (int, error) {
|
|
vars := mux.Vars(r)
|
|
idStr := vars[key]
|
|
if idStr == "" {
|
|
return 0, fmt.Errorf("missing %s in request", key)
|
|
}
|
|
|
|
id, err := strconv.Atoi(idStr)
|
|
if err != nil {
|
|
return 0, fmt.Errorf("invalid %s format", key)
|
|
}
|
|
|
|
return id, nil
|
|
}
|