Files
shop10/internal/handlers/page.go
T

54 lines
1.2 KiB
Go

package handlers
import (
"html/template"
"net/http"
"shop/internal/auth"
"shop/internal/models"
)
type Layout struct {
Title string
Nav string
User *models.User
Error string
Success string
}
type Pages struct {
tmpl *template.Template
auth *auth.Service
}
func NewPages(tmpl *template.Template, authSvc *auth.Service) *Pages {
return &Pages{tmpl: tmpl, auth: authSvc}
}
func (p *Pages) layout(r *http.Request, title, nav string) Layout {
user, _ := p.auth.UserFromRequest(r.Context(), r)
return Layout{Title: title, Nav: nav, User: user}
}
func (p *Pages) render(w http.ResponseWriter, name string, data any) {
w.Header().Set("Content-Type", "text/html; charset=utf-8")
if err := p.tmpl.ExecuteTemplate(w, name, data); err != nil {
http.Error(w, "ошибка шаблона", http.StatusInternalServerError)
}
}
func flashMsg(r *http.Request, key string) string {
switch r.URL.Query().Get(key) {
case "registered":
return "Регистрация успешна. Войдите в аккаунт."
case "login":
return "Вы успешно вошли."
case "logout":
return "Вы вышли из аккаунта."
case "profile":
return "Профиль обновлён."
default:
return ""
}
}