Files
qv/cmd/web/handlers.go

49 lines
1.5 KiB
Go

package main
import (
api "code.dlmw.ch/dlmw/qv/internal"
"code.dlmw.ch/dlmw/qv/internal/validator"
"net/http"
"time"
)
type createElectionRequestWithValidator struct {
api.CreateElectionRequest
validator.Validator
}
func (app *application) createElection(w http.ResponseWriter, r *http.Request) {
var request createElectionRequestWithValidator
err := app.unmarshalRequest(r, &request)
if err != nil {
app.clientError(w, http.StatusBadRequest, err.Error())
return
}
request.CheckField(validator.NotBlank(request.Name), "name", "must not be blank")
request.CheckField(validator.GreaterThan(request.Tokens, 0), "tokens", "must be greater than 0")
request.CheckField(validator.After(request.ExpiresAt, time.Now()), "expiresAt", "must expire in a future date")
request.CheckField(validator.GreaterThan(len(request.Choices), 1), "choices", "there must be more than 1 choice")
request.CheckField(
!(request.AreVotersKnown && (request.MaxVoters == nil || *request.MaxVoters < 1)),
"maxVoters",
"must be greater than 0 when voters are known",
)
if !request.Valid() {
app.unprocessableEntityError(w, request.Validator)
return
}
_, err = app.elections.Insert(request.Name, request.Tokens, request.AreVotersKnown, request.MaxVoters, request.Choices, request.ExpiresAt)
if err != nil {
app.serverError(w, r, err)
return
}
//TODO: if voters are known, generate voters and write them in the response (change openapi as well)
w.Write([]byte("TODO"))
}