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}