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), "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")) }