Skip to content
page_votes.go 1.57 KiB
Newer Older
Lo^2's avatar
wip
Lo^2 committed
package page_votes

import (
Lo^2's avatar
Lo^2 committed
	"code.electrolab.fr/it/vote.electrolab.fr/app/server"
Lo^2's avatar
Lo^2 committed
	"code.electrolab.fr/it/vote.electrolab.fr/app/server/pages/common"
Lo^2's avatar
Lo^2 committed
	"code.electrolab.fr/it/vote.electrolab.fr/model"
Lo^2's avatar
wip
Lo^2 committed
	"context"
Lo^2's avatar
Lo^2 committed
	"fmt"
Lo^2's avatar
wip
Lo^2 committed
	"log"
	"net/http"
)

var (
Lo^2's avatar
Lo^2 committed
	template = common.MustParseTemplate(TEMPLATE_STR)
Lo^2's avatar
wip
Lo^2 committed
)

Lo^2's avatar
Lo^2 committed
func RegisterRoutes(mux *http.ServeMux, app *server.App) {
Lo^2's avatar
Lo^2 committed
	mux.Handle("/events/Electrolab-AG-2021/votes", server.NewAppHandler(app, handleGetVotes))
Lo^2's avatar
wip
Lo^2 committed
}

Lo^2's avatar
Lo^2 committed
func handleGetVotes(app *server.App, ctx context.Context, w http.ResponseWriter, r *http.Request) {
Lo^2's avatar
wip
Lo^2 committed
	var (
		err               error
		templateIndexVars = new(TemplateIndexVars)
	)

Lo^2's avatar
Lo^2 committed
	templateIndexVars.PageTitle = "Vote Électrolab"

Lo^2's avatar
Lo^2 committed
	templateIndexVars.User, err = model.FetchUser(app.Context, app.Service.DB, r.FormValue("private_token"))
Lo^2's avatar
Lo^2 committed
	if err != nil {
Lo^2's avatar
Lo^2 committed
		// Query has an error
		log.Printf("Query error: %s", err.Error())
		w.WriteHeader(http.StatusInternalServerError)
		return
	}
	if templateIndexVars.User == nil {
Lo^2's avatar
Lo^2 committed
		// Token is not valid
		w.WriteHeader(http.StatusForbidden)
Lo^2's avatar
Lo^2 committed
		fmt.Fprintf(w, "Invalid token")
Lo^2's avatar
Lo^2 committed
		return
Lo^2's avatar
wip
Lo^2 committed
	}

	// Token is valid, download the questions

Lo^2's avatar
Lo^2 committed
	templateIndexVars.Questions, err = model.FetchQuestions(app.Context, app.Service.DB, templateIndexVars.User.Uuid)
Lo^2's avatar
wip
Lo^2 committed
	if err != nil {
		// Query has an error
		log.Printf("Query error 2: %s", err.Error())
		w.WriteHeader(http.StatusInternalServerError)
		return
	}

Lo^2's avatar
Lo^2 committed
	err = template.Execute(w, templateIndexVars)
Lo^2's avatar
wip
Lo^2 committed
	if err != nil {
		// Template has an error
		log.Printf("Template execution error: %s", err.Error())
		w.WriteHeader(http.StatusInternalServerError)
		return
	}

}