prime8dev

prime8dev
git clone https://git.prime8.dev/prime8dev.git
Log | Files | Refs | README | LICENSE

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 }