diff options
Diffstat (limited to 'srv/src/http/drafts.go')
-rw-r--r-- | srv/src/http/drafts.go | 130 |
1 files changed, 0 insertions, 130 deletions
diff --git a/srv/src/http/drafts.go b/srv/src/http/drafts.go deleted file mode 100644 index cb776b0..0000000 --- a/srv/src/http/drafts.go +++ /dev/null @@ -1,130 +0,0 @@ -package http - -import ( - "errors" - "fmt" - "net/http" - "path/filepath" - "strings" - - "github.com/mediocregopher/blog.mediocregopher.com/srv/http/apiutil" - "github.com/mediocregopher/blog.mediocregopher.com/srv/post" -) - -func (a *api) renderDraftPostHandler() http.Handler { - - tpl := a.mustParseBasedTpl("post.html") - renderDraftPostsIndexHandler := a.renderDraftPostsIndexHandler() - renderDraftEditPostHandler := a.renderEditPostHandler(true) - - return http.HandlerFunc(func(rw http.ResponseWriter, r *http.Request) { - - id := strings.TrimSuffix(filepath.Base(r.URL.Path), ".html") - - if id == "/" { - renderDraftPostsIndexHandler.ServeHTTP(rw, r) - return - } - - if _, ok := r.URL.Query()["edit"]; ok { - renderDraftEditPostHandler.ServeHTTP(rw, r) - return - } - - p, err := a.params.PostDraftStore.GetByID(id) - - if errors.Is(err, post.ErrPostNotFound) { - http.Error(rw, "Post not found", 404) - return - } else if err != nil { - apiutil.InternalServerError( - rw, r, fmt.Errorf("fetching post with id %q: %w", id, err), - ) - return - } - - tplPayload, err := a.postToPostTplPayload(post.StoredPost{Post: p}) - - if err != nil { - apiutil.InternalServerError( - rw, r, fmt.Errorf( - "generating template payload for post with id %q: %w", - id, err, - ), - ) - return - } - - executeTemplate(rw, r, tpl, tplPayload) - }) -} - -func (a *api) renderDraftPostsIndexHandler() http.Handler { - - renderEditPostHandler := a.renderEditPostHandler(true) - tpl := a.mustParseBasedTpl("draft-posts.html") - const pageCount = 20 - - return http.HandlerFunc(func(rw http.ResponseWriter, r *http.Request) { - - if _, ok := r.URL.Query()["edit"]; ok { - renderEditPostHandler.ServeHTTP(rw, r) - return - } - - page, err := apiutil.StrToInt(r.FormValue("p"), 0) - if err != nil { - apiutil.BadRequest( - rw, r, fmt.Errorf("invalid page number: %w", err), - ) - return - } - - posts, hasMore, err := a.params.PostDraftStore.Get(page, pageCount) - if err != nil { - apiutil.InternalServerError( - rw, r, fmt.Errorf("fetching page %d of posts: %w", page, err), - ) - return - } - - tplPayload := struct { - Posts []post.Post - PrevPage, NextPage int - }{ - Posts: posts, - PrevPage: -1, - NextPage: -1, - } - - if page > 0 { - tplPayload.PrevPage = page - 1 - } - - if hasMore { - tplPayload.NextPage = page + 1 - } - - executeTemplate(rw, r, tpl, tplPayload) - }) -} - -func (a *api) postDraftPostHandler() http.Handler { - return http.HandlerFunc(func(rw http.ResponseWriter, r *http.Request) { - - p, err := postFromPostReq(r) - if err != nil { - apiutil.BadRequest(rw, r, err) - return - } - - if err := a.params.PostDraftStore.Set(p); err != nil { - apiutil.InternalServerError( - rw, r, fmt.Errorf("storing post with id %q: %w", p.ID, err), - ) - return - } - - a.executeRedirectTpl(rw, r, a.draftURL(p.ID, false)+"?edit") - }) -} |