submit.gno
0.83 Kb ยท 40 lines
1package forms
2
3import (
4 "chain/runtime"
5 "time"
6)
7
8// This function allows to submit a form
9func (db *FormDB) SubmitForm(formID string, answers string) {
10 // Check if form exists
11 form, err := db.GetForm(formID)
12 if err != nil {
13 panic(err)
14 }
15
16 // Check if form was already submitted by this user
17 previousAnswer, err := db.GetAnswer(formID, runtime.CurrentRealm().Address())
18 if previousAnswer != nil {
19 panic(errAlreadySubmitted)
20 }
21
22 // Check time restrictions
23 if !form.IsOpen() {
24 panic(errFormClosed)
25 }
26
27 // Check if answers are formatted correctly
28 if ValidateAnswers(answers, form.Fields) == false {
29 panic(errInvalidAnswers)
30 }
31
32 // Save answers
33 answer := Submission{
34 FormID: formID,
35 Answers: answers,
36 Author: runtime.CurrentRealm().Address(),
37 SubmittedAt: time.Now(),
38 }
39 db.Answers = append(db.Answers, &answer)
40}