hmn/src/website/showcase.go

46 lines
1.3 KiB
Go
Raw Normal View History

2021-06-22 17:08:05 +00:00
package website
import (
"net/http"
"git.handmade.network/hmn/hmn/src/hmndata"
2021-06-22 17:08:05 +00:00
"git.handmade.network/hmn/hmn/src/hmnurl"
"git.handmade.network/hmn/hmn/src/oops"
"git.handmade.network/hmn/hmn/src/templates"
)
type ShowcaseData struct {
templates.BaseData
ShowcaseItems string // NOTE(asaf): JSON string
ShowcaseAtomFeedUrl string
}
func Showcase(c *RequestContext) ResponseData {
snippets, err := hmndata.FetchSnippets(c, c.Conn, c.CurrentUser, hmndata.SnippetQuery{})
2021-06-22 17:08:05 +00:00
if err != nil {
2021-08-28 12:21:03 +00:00
return c.ErrorResponse(http.StatusInternalServerError, oops.New(err, "failed to fetch snippets"))
2021-06-22 17:08:05 +00:00
}
2021-11-11 19:00:46 +00:00
showcaseItems := make([]templates.TimelineItem, 0, len(snippets))
for _, s := range snippets {
2022-08-05 04:03:45 +00:00
timelineItem := SnippetToTimelineItem(&s.Snippet, s.Asset, s.DiscordMessage, s.Projects, s.Owner, c.Theme, false)
if timelineItem.CanShowcase {
2021-06-22 17:08:05 +00:00
showcaseItems = append(showcaseItems, timelineItem)
}
}
c.Perf.EndBlock()
c.Perf.StartBlock("SHOWCASE", "Convert to json")
jsonItems := templates.TimelineItemsToJSON(showcaseItems)
c.Perf.EndBlock()
2021-09-01 18:25:09 +00:00
baseData := getBaseDataAutocrumb(c, "Community Showcase")
2021-06-22 17:08:05 +00:00
var res ResponseData
res.MustWriteTemplate("showcase.html", ShowcaseData{
2021-06-22 17:08:05 +00:00
BaseData: baseData,
ShowcaseItems: jsonItems,
ShowcaseAtomFeedUrl: hmnurl.BuildAtomFeedForShowcase(),
}, c.Perf)
return res
}