blog.go (1850B)
1 package handlers 2 3 import ( 4 "net/http" 5 6 "git.prime8.dev/moncheeta/prime8dev/internal/config" 7 "git.prime8.dev/moncheeta/prime8dev/internal/content" 8 "git.prime8.dev/moncheeta/prime8dev/internal/utils" 9 "git.prime8.dev/moncheeta/prime8dev/internal/web" 10 "github.com/go-chi/chi/v5" 11 ) 12 13 func (h *Handler) BlogListHandler(w http.ResponseWriter, r *http.Request) { 14 about := config.GetAbout() 15 blogs, err := content.LoadBlogs() 16 if err != nil { 17 http.Error(w, "Failed to load blogs", http.StatusInternalServerError) 18 return 19 } 20 21 data := web.BaseData("Blog", "blog", about) 22 data.Blogs = blogs 23 24 if utils.IsHTMXRequest(r) { 25 h.renderTemplate(w, r, "blog", data, fragmentCacheMaxAgeSeconds) 26 return 27 } 28 29 h.renderTemplate(w, r, "layout", data, fullPageCacheMaxAgeSeconds) 30 } 31 32 func (h *Handler) BlogPageHandler(w http.ResponseWriter, r *http.Request) { 33 id := chi.URLParam(r, "id") 34 35 about := config.GetAbout() 36 blogs, err := content.LoadBlogs() 37 if err != nil { 38 http.Error(w, "Failed to load blogs", http.StatusInternalServerError) 39 return 40 } 41 42 blog, err := content.GetBlogByID(id) 43 if err != nil { 44 http.Error(w, "Failed to load blog", http.StatusInternalServerError) 45 return 46 } 47 if blog == nil { 48 http.NotFound(w, r) 49 return 50 } 51 52 data := web.BaseData("Blog", "blog", about) 53 data.Blogs = blogs 54 data.SelectedBlogID = id 55 data.Blog = blog 56 57 h.renderTemplate(w, r, "layout", data, fullPageCacheMaxAgeSeconds) 58 } 59 60 func (h *Handler) BlogDetailHandler(w http.ResponseWriter, r *http.Request) { 61 id := chi.URLParam(r, "id") 62 blog, err := content.GetBlogByID(id) 63 if err != nil { 64 http.Error(w, "Failed to load blog", http.StatusInternalServerError) 65 return 66 } 67 if blog == nil { 68 http.Error(w, "Blog not found", http.StatusNotFound) 69 return 70 } 71 72 data := web.Data{Blog: blog} 73 h.renderTemplate(w, r, "blog_detail", data, fragmentCacheMaxAgeSeconds) 74 }