package add import ( "net/http" "github.com/labstack/echo/v4" "github.com/ssoda/captcha" "sh.org.ru/pkg/model" "sh.org.ru/pkg/tpl" ) func (h *Handler) AddQuote(c echo.Context) error { cid := captcha.New() form := &tpl.AddQuoteForm{ CaptchaID: cid, } return tpl. AddQuotePage(form, ""). Render(c.Request().Context(), c.Response()) } func (h *Handler) AddQuotePost(c echo.Context) error { form := &tpl.AddQuoteForm{} if err := c.Bind(form); err != nil { return err } if form.CaptchaValue == "" { return formError(form, c, "Неверный код") } if !captcha.VerifyString(form.CaptchaID, form.CaptchaValue) { return formError(form, c, "Неверный код") } if len(form.Quote) < 10 { return formError(form, c, "Цитата слишком короткая") } q := &model.Quote{ Quote: form.Quote, Approved: false, Archive: false, } if _, err := h.db.NewInsert().Model(q).Exec(c.Request().Context()); err != nil { return err } return c.Redirect(http.StatusFound, "/add/success") } func (h *Handler) AddQuoteSuccess(c echo.Context) error { return tpl.AddQuoteSuccessPage().Render(c.Request().Context(), c.Response()) } func formError(form *tpl.AddQuoteForm, c echo.Context, err string) error { form.CaptchaID = captcha.New() form.CaptchaValue = "" return tpl. AddQuotePage(form, err). Render(c.Request().Context(), c.Response()) }