openreplay/ee/backend/pkg/conditions/api/handlers.go

66 lines
1.7 KiB
Go

package api
import (
"net/http"
"strconv"
"time"
"github.com/gorilla/mux"
"openreplay/backend/pkg/conditions"
"openreplay/backend/pkg/logger"
"openreplay/backend/pkg/server/api"
"openreplay/backend/pkg/token"
)
type handlersImpl struct {
log logger.Logger
responser *api.Responser
tokenizer *token.Tokenizer
conditions conditions.Conditions
}
func NewHandlers(log logger.Logger, responser *api.Responser, tokenizer *token.Tokenizer, conditions conditions.Conditions) (api.Handlers, error) {
return &handlersImpl{
log: log,
responser: responser,
tokenizer: tokenizer,
conditions: conditions,
}, nil
}
func (e *handlersImpl) GetAll() []*api.Description {
return []*api.Description{
{"/v1/web/conditions/{project}", e.getConditions, "GET"},
{"/v1/mobile/conditions/{project}", e.getConditions, "GET"},
}
}
func (e *handlersImpl) getConditions(w http.ResponseWriter, r *http.Request) {
startTime := time.Now()
bodySize := 0
// Check authorization
_, err := e.tokenizer.ParseFromHTTPRequest(r)
if err != nil {
e.responser.ResponseWithError(e.log, r.Context(), w, http.StatusUnauthorized, err, startTime, r.URL.Path, bodySize)
return
}
// Get taskID
vars := mux.Vars(r)
projID := vars["project"]
projectID, err := strconv.Atoi(projID)
if err != nil {
e.responser.ResponseWithError(e.log, r.Context(), w, http.StatusBadRequest, err, startTime, r.URL.Path, bodySize)
return
}
// Get task info
info, err := e.conditions.Get(uint32(projectID))
if err != nil {
e.responser.ResponseWithError(e.log, r.Context(), w, http.StatusInternalServerError, err, startTime, r.URL.Path, bodySize)
return
}
e.responser.ResponseWithJSON(e.log, r.Context(), w, info, startTime, r.URL.Path, bodySize)
}