aboutsummaryrefslogblamecommitdiff
path: root/pkg/handler/add/add.go
blob: dbcce47afb8582364876d80e53c0a5ac9e756dad (plain) (tree)
1
           








































                                                                                         
                                                                                        
















                                                                                    
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())
}