parent
b4ca8853a9
commit
99f8c1188c
@ -0,0 +1,63 @@ |
|||||||
|
package http |
||||||
|
|
||||||
|
import ( |
||||||
|
"fmt" |
||||||
|
"net/http" |
||||||
|
"path/filepath" |
||||||
|
|
||||||
|
"github.com/gorilla/feeds" |
||||||
|
"github.com/mediocregopher/blog.mediocregopher.com/srv/http/apiutil" |
||||||
|
) |
||||||
|
|
||||||
|
func (a *api) renderFeedHandler() http.Handler { |
||||||
|
|
||||||
|
return http.HandlerFunc(func(rw http.ResponseWriter, r *http.Request) { |
||||||
|
|
||||||
|
author := &feeds.Author{ |
||||||
|
Name: "mediocregopher", |
||||||
|
} |
||||||
|
|
||||||
|
publicURL := a.params.PublicURL.String() |
||||||
|
|
||||||
|
feed := feeds.Feed{ |
||||||
|
Title: "Mediocre Blog", |
||||||
|
Link: &feeds.Link{Href: publicURL + "/"}, |
||||||
|
Description: "A mix of tech, art, travel, and who knows what else.", |
||||||
|
Author: author, |
||||||
|
} |
||||||
|
|
||||||
|
recentPosts, _, err := a.params.PostStore.WithOrderDesc().Get(0, 20) |
||||||
|
if err != nil { |
||||||
|
apiutil.InternalServerError(rw, r, fmt.Errorf("fetching recent posts: %w", err)) |
||||||
|
return |
||||||
|
} |
||||||
|
|
||||||
|
for _, post := range recentPosts { |
||||||
|
|
||||||
|
if post.PublishedAt.After(feed.Updated) { |
||||||
|
feed.Updated = post.PublishedAt |
||||||
|
} |
||||||
|
|
||||||
|
if post.LastUpdatedAt.After(feed.Updated) { |
||||||
|
feed.Updated = post.LastUpdatedAt |
||||||
|
} |
||||||
|
|
||||||
|
postURL := publicURL + filepath.Join("/posts", post.ID) |
||||||
|
|
||||||
|
feed.Items = append(feed.Items, &feeds.Item{ |
||||||
|
Title: post.Title, |
||||||
|
Link: &feeds.Link{Href: postURL}, |
||||||
|
Author: author, |
||||||
|
Description: post.Description, |
||||||
|
Id: postURL, |
||||||
|
Updated: post.LastUpdatedAt, |
||||||
|
Created: post.PublishedAt, |
||||||
|
}) |
||||||
|
} |
||||||
|
|
||||||
|
if err := feed.WriteAtom(rw); err != nil { |
||||||
|
apiutil.InternalServerError(rw, r, fmt.Errorf("writing atom feed: %w", err)) |
||||||
|
return |
||||||
|
} |
||||||
|
}) |
||||||
|
} |
Loading…
Reference in new issue