package dynamic
import (
"context"
"errors"
"log"
"net/http"
"strings"
"git.sr.ht/~evanj/cms/internal/c"
"git.sr.ht/~evanj/cms/internal/m/content"
"git.sr.ht/~evanj/cms/internal/v"
)
var (
fieldToSearchBy = "slug"
tmpl = v.MustParse("html/dynamic.html")
)
type Dynamic struct {
*c.Controller
log *log.Logger
api SkipperAPI
ct int
}
type SkipperAPI interface {
QueryContentByField(ctx context.Context, contentTypeID int, field, query string) (content.Content, error)
}
func New(c *c.Controller, log *log.Logger, api SkipperAPI, contenttype int) Dynamic {
return Dynamic{c, log, api, contenttype}
}
func (d Dynamic) ServeHTTP(w http.ResponseWriter, r *http.Request) {
q := strings.Trim(r.URL.Path, "/")
c, err := d.api.QueryContentByField(r.Context(), d.ct, fieldToSearchBy, q)
if err != nil {
d.log.Println(err)
d.Error(w, r, http.StatusNotFound, errors.New("failed to find requested content"))
return
}
d.HTML(w, r, tmpl, map[string]interface{}{
"Content": c,
})
}