Changed: DB Params
This commit is contained in:
81
templ/examples/counter/handlers/default.go
Normal file
81
templ/examples/counter/handlers/default.go
Normal file
@@ -0,0 +1,81 @@
|
||||
package handlers
|
||||
|
||||
import (
|
||||
"context"
|
||||
"net/http"
|
||||
|
||||
"github.com/a-h/templ/examples/counter/components"
|
||||
"github.com/a-h/templ/examples/counter/services"
|
||||
"github.com/a-h/templ/examples/counter/session"
|
||||
"golang.org/x/exp/slog"
|
||||
)
|
||||
|
||||
type CountService interface {
|
||||
Increment(ctx context.Context, it services.IncrementType, sessionID string) (counts services.Counts, err error)
|
||||
Get(ctx context.Context, sessionID string) (counts services.Counts, err error)
|
||||
}
|
||||
|
||||
func New(log *slog.Logger, cs CountService) *DefaultHandler {
|
||||
return &DefaultHandler{
|
||||
Log: log,
|
||||
CountService: cs,
|
||||
}
|
||||
}
|
||||
|
||||
type DefaultHandler struct {
|
||||
Log *slog.Logger
|
||||
CountService CountService
|
||||
}
|
||||
|
||||
func (h *DefaultHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||
if r.Method == http.MethodPost {
|
||||
h.Post(w, r)
|
||||
return
|
||||
}
|
||||
h.Get(w, r)
|
||||
}
|
||||
|
||||
func (h *DefaultHandler) Get(w http.ResponseWriter, r *http.Request) {
|
||||
var props ViewProps
|
||||
var err error
|
||||
props.Counts, err = h.CountService.Get(r.Context(), session.ID(r))
|
||||
if err != nil {
|
||||
h.Log.Error("failed to get counts", slog.Any("error", err))
|
||||
http.Error(w, "failed to get counts", http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
h.View(w, r, props)
|
||||
}
|
||||
|
||||
func (h *DefaultHandler) Post(w http.ResponseWriter, r *http.Request) {
|
||||
r.ParseForm()
|
||||
|
||||
// Decide the action to take based on the button that was pressed.
|
||||
var it services.IncrementType
|
||||
if r.Form.Has("global") {
|
||||
it = services.IncrementTypeGlobal
|
||||
}
|
||||
if r.Form.Has("session") {
|
||||
it = services.IncrementTypeSession
|
||||
}
|
||||
|
||||
counts, err := h.CountService.Increment(r.Context(), it, session.ID(r))
|
||||
if err != nil {
|
||||
h.Log.Error("failed to increment", slog.Any("error", err))
|
||||
http.Error(w, "failed to increment", http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
|
||||
// Display the view.
|
||||
h.View(w, r, ViewProps{
|
||||
Counts: counts,
|
||||
})
|
||||
}
|
||||
|
||||
type ViewProps struct {
|
||||
Counts services.Counts
|
||||
}
|
||||
|
||||
func (h *DefaultHandler) View(w http.ResponseWriter, r *http.Request, props ViewProps) {
|
||||
components.Page(props.Counts.Global, props.Counts.Session).Render(r.Context(), w)
|
||||
}
|
Reference in New Issue
Block a user