diff --git a/handlers/pages/blog.go b/handlers/pages/blog.templ similarity index 68% rename from handlers/pages/blog.go rename to handlers/pages/blog.templ index 93ea983..693b851 100644 --- a/handlers/pages/blog.go +++ b/handlers/pages/blog.templ @@ -4,13 +4,13 @@ import ( "encoding/json" "errors" "fmt" - "io" "net/http" "net/url" "path" - "forge.capytal.company/capytalcode/project-comicverse/lib/router" - "forge.capytal.company/capytalcode/project-comicverse/lib/router/rerrors" + "forge.capytal.company/capytal/www/templates/layouts" + + "forge.capytal.company/loreddev/x/groute/router/rerrors" ) type Blog struct { @@ -27,10 +27,17 @@ func NewBlog(owner, repo, endpoint string) *Blog { return &Blog{repo: repo, owner: owner, endpoint: u.String()} } -func (p *Blog) Routes() router.Router { - r := router.NewRouter() +func (p *Blog) Routes() http.Handler { + r := http.NewServeMux() - r.HandleFunc("/", p.listPosts) + r.HandleFunc("/{entry...}", func(w http.ResponseWriter, r *http.Request) { + pv := r.PathValue("entry") + if pv == "" { + p.listPosts(w, r) + } else { + p.blogEntry(w, r) + } + }) return r } @@ -50,13 +57,32 @@ func (p *Blog) listPosts(w http.ResponseWriter, r *http.Request) { return } - w.WriteHeader(http.StatusOK) - _, err = w.Write([]byte(fmt.Sprintf("%v", list))) + err = p.blogEntryList(list).Render(r.Context(), w) if err != nil { rerrors.InternalError(err).ServeHTTP(w, r) } } +templ (p *Blog) blogEntryList(entries []forgejoFile) { + @layouts.Page() { + + } +} + +func (p *Blog) blogEntry(w http.ResponseWriter, r *http.Request) { + _, body, rerr := p.get(fmt.Sprintf("/repos/%s/%s/raw/%s", p.owner, p.repo, r.PathValue("entry"))) + if rerr != nil { + rerr.ServeHTTP(w, r) + return + } + + w.Write(body) +} + func (p *Blog) get(endpoint string) (http.Header, []byte, *rerrors.RouteError) { u, _ := url.Parse(p.endpoint) u.Path = path.Join(u.Path, endpoint) diff --git a/handlers/pages/routes.go b/handlers/pages/routes.go index 6f688d1..5cd6f5e 100644 --- a/handlers/pages/routes.go +++ b/handlers/pages/routes.go @@ -2,6 +2,7 @@ package pages import ( "log/slog" + "net/http" "forge.capytal.company/loreddev/x/groute/router" "forge.capytal.company/loreddev/x/groute/router/rerrors" @@ -16,7 +17,7 @@ func Routes(log *slog.Logger) router.Router { r.Handle("/about", &AboutPage{}) b := NewBlog("dot013", "blog", "https://forge.capytal.company/api/v1") - r.Handle("/blog/", b.Routes()) + r.Handle("/blog", http.StripPrefix("/blog/", b.Routes())) return r }