Add admin panel: visit counter, product editor, screenshots upload
This commit is contained in:
@@ -6,6 +6,7 @@ import (
|
||||
"io/fs"
|
||||
"log"
|
||||
"net/http"
|
||||
"regexp"
|
||||
|
||||
"shop/internal/repository"
|
||||
)
|
||||
@@ -18,6 +19,7 @@ var staticFS embed.FS
|
||||
|
||||
type HomeHandler struct {
|
||||
repo *repository.ProductRepository
|
||||
stats *repository.StatsRepository
|
||||
templates *template.Template
|
||||
}
|
||||
|
||||
@@ -27,12 +29,21 @@ type homePageData struct {
|
||||
Categories interface{}
|
||||
}
|
||||
|
||||
func NewHomeHandler(repo *repository.ProductRepository) (*HomeHandler, error) {
|
||||
tmpl, err := template.ParseFS(templateFS, "templates/*.html")
|
||||
func NewHomeHandler(repo *repository.ProductRepository, stats *repository.StatsRepository) (*HomeHandler, error) {
|
||||
funcMap := template.FuncMap{
|
||||
"plain": stripHTML,
|
||||
}
|
||||
tmpl, err := template.New("").Funcs(funcMap).ParseFS(templateFS, "templates/*.html")
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &HomeHandler{repo: repo, templates: tmpl}, nil
|
||||
return &HomeHandler{repo: repo, stats: stats, templates: tmpl}, nil
|
||||
}
|
||||
|
||||
var tagRe = regexp.MustCompile(`<[^>]*>`)
|
||||
|
||||
func stripHTML(s string) string {
|
||||
return tagRe.ReplaceAllString(s, "")
|
||||
}
|
||||
|
||||
func (h *HomeHandler) Templates() *template.Template {
|
||||
@@ -55,6 +66,10 @@ func (h *HomeHandler) Home(w http.ResponseWriter, r *http.Request) {
|
||||
|
||||
ctx := r.Context()
|
||||
|
||||
if err := h.stats.IncrementHomeVisit(ctx); err != nil {
|
||||
log.Printf("visit counter: %v", err)
|
||||
}
|
||||
|
||||
products, err := h.repo.Featured(ctx, 8)
|
||||
if err != nil {
|
||||
log.Printf("featured products: %v", err)
|
||||
|
||||
Reference in New Issue
Block a user