forms.gno
2.47 Kb ยท 116 lines
1package forms
2
3import (
4 "gno.land/p/agherasie/forms"
5 "gno.land/p/nt/ufmt"
6 "gno.land/p/onbloc/json"
7 "gno.land/r/leon/hor"
8)
9
10var db *forms.FormDB
11
12func init() {
13 hor.Register(cross, "Ahgerasle's forms", "")
14 db = forms.NewDB()
15}
16
17func CreateForm(_ realm, title string, description string, openAt string, closeAt string, data string) string {
18 id, err := db.CreateForm(title, description, openAt, closeAt, data)
19 if err != nil {
20 panic(err)
21 }
22 return id
23}
24
25func GetForms() string {
26 builder := forms.FormNodeBuilder{json.Builder()}
27
28 builder.WriteArray("forms", func(builder *forms.FormArrayBuilder) {
29 for _, form := range db.Forms {
30 builder.WriteObject(func(builder *forms.FormNodeBuilder) {
31 builder.WriteForm("form", form)
32 })
33 }
34 })
35
36 encoded, err := json.Marshal(builder.Node())
37 if err != nil {
38 panic(err)
39 }
40
41 return string(encoded)
42}
43
44func GetFormByID(id string) string {
45 form, err := db.GetForm(id)
46 if err != nil {
47 panic(err)
48 }
49
50 builder := forms.FormNodeBuilder{json.Builder()}
51
52 builder.WriteForm("form", form).
53 WriteObject("submissions", func(builder *forms.FormNodeBuilder) {
54 formSubmissions := db.GetSubmissionsByFormID(form.ID)
55 for _, submission := range formSubmissions {
56 builder.WriteFormSubmission(submission.Author.String(), submission)
57 }
58 })
59
60 openAt, err := form.OpenAt()
61 if err == nil {
62 builder.WriteString("openAt", openAt.Format("2006-01-02 15:04:05"))
63 }
64 closeAt, err := form.CloseAt()
65 if err == nil {
66 builder.WriteString("closeAt", closeAt.Format("2006-01-02 15:04:05"))
67 }
68
69 encoded, err := json.Marshal(builder.Node())
70 if err != nil {
71 panic(err)
72 }
73
74 return string(encoded)
75}
76
77func GetAnswer(formID string, authorID string) string {
78 _, err := db.GetForm(formID)
79 if err != nil {
80 panic(err)
81 }
82
83 answer, err := db.GetAnswer(formID, address(authorID))
84 if answer != nil {
85 panic(err)
86 }
87
88 return answer.Answers
89}
90
91func SubmitForm(_ realm, formID string, answers string) {
92 _, err := db.GetForm(formID)
93 if err != nil {
94 panic(err)
95 }
96
97 db.SubmitForm(formID, answers)
98}
99
100func Render(_ string) string {
101 if len(db.Forms) == 0 {
102 response := "No forms yet !"
103 return response
104 }
105
106 response := "Forms:\n\n"
107 for _, form := range db.Forms {
108 response += ufmt.Sprintf("- %s\n\n", GetFormByID(form.ID))
109 }
110 response += "Answers:\n\n"
111 for _, answer := range db.Answers {
112 response += ufmt.Sprintf("- Form ID: %s\nAuthor: %s\nSubmitted At: %s\n>Answers: %s\n\n", answer.FormID, answer.Author, answer.SubmittedAt, answer.Answers)
113 }
114
115 return response
116}