Add admin panel: visit counter, product editor, screenshots upload

This commit is contained in:
shop
2026-06-25 16:59:21 +03:00
parent 6322aee714
commit 08727a1995
21 changed files with 1209 additions and 67 deletions
+18 -3
View File
@@ -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)