Skip to content
Snippets Groups Projects
handler.go 1.9 KiB
Newer Older
package schemaStatsService

import (
	"encoding/json"
	"fmt"
	"net/http"
	"os"

	"git.science.uu.nl/graphpolaris/go-common/structs"
	"github.com/rs/zerolog/log"
)

/*
Handles incoming schema stat requests

	authService: auth.UseCase, the usecase for the authentication service
	produceService: produce.UseCase, the usecase for the producer service
	Return: http.Handler, returns an http handler
*/
func (s *SchemaService) Handler(w http.ResponseWriter, r *http.Request) {
	log.
		Trace().
		Str("schemaRequestHandler", "loading headers").
		Msg("processing schema request")

	// Publish a message into the query queue

	// Grab the databaseName and cached bool from the request
	var temp map[string]interface{}
	err := json.NewDecoder(r.Body).Decode(&temp)
	if err != nil {
		w.WriteHeader(http.StatusInternalServerError)
		return
	}
	log.Trace().Str("schemaStatsRequestHandler", "processing body").Any("body", temp).Msg("processing schema stats request")

	databaseName, ok := temp["databaseName"].(string)
	if !ok {
		w.WriteHeader(http.StatusBadRequest)
		return
	}

	log.
		Trace().
		Str("schemaStatsRequestHandler - Databasename", databaseName).
		Msg("processing schema stats request")

	cached, ok := temp["cached"].(bool)
	if !ok {
		w.WriteHeader(http.StatusBadRequest)
		return
	}

	// Pass request to schema usecase
	sessionData := structs.SessionData{
		UserID:       "UserID",
		SessionID:    "SessionID",
		DatabaseName: databaseName,
	}
	if os.Getenv("DEV") != "true" {
		sessionData.UserID = r.Header["Userid"][0]
		sessionData.SessionID = r.Header["Sessionid"][0]
	}

	body, err := json.Marshal(&temp) // json -> bytes
	if err != nil {
		w.WriteHeader(http.StatusBadRequest)
		return
	}

	s.caching.RetrieveAsync(&body, fmt.Sprintf("%s-%s", sessionData.DatabaseName, sessionData.UserID), cached, sessionData, cached)
	if err != nil {
		w.WriteHeader(http.StatusInternalServerError)
		return
	}

	w.WriteHeader(http.StatusOK)
}