41 lines
1.1 KiB
Go
41 lines
1.1 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.IsAnonymous || (request.IsAnonymous && *request.MaxVoters > 0),
|
|
"maxVoters",
|
|
"must be greater than 0 for anonymous elections",
|
|
)
|
|
|
|
if !request.Valid() {
|
|
app.unprocessableEntityError(w, request.Validator)
|
|
return
|
|
}
|
|
|
|
w.Write([]byte("TODO"))
|
|
}
|