home.go
go
package controllers
import (
	"net/http"
	"theskyscape.com/repo/skykit"
	"strudemusic/models"
)
func Home() (string, skykit.Handler) {
	return "home", &HomeController{}
}
type HomeController struct {
	skykit.Controller
}
func (c *HomeController) Setup(app *skykit.Application) {
	c.Controller.Setup(app)
	http.Handle("/", c.Serve("homepage.html", nil))
	http.Handle("POST /count", c.Protect(c.increment, nil))
}
func (c HomeController) Handle(r *http.Request) skykit.Handler {
	c.Request = r
	return &c
}
func (c *HomeController) CurrentCount() int {
	counter, err := models.Counters.Get("main")
	if err != nil {
		counter, err = models.Counters.Insert(&models.Counter{
			Model: skykit.Model{ID: "main"},
			Count: 0,
		})
	}
	if err != nil {
		return 0
	}
	return counter.Count
}
func (c *HomeController) increment(w http.ResponseWriter, r *http.Request) {
	counter, err := models.Counters.Get("main")
	if err != nil {
		if counter, err = models.Counters.Insert(&models.Counter{
			Model: skykit.Model{ID: "main"},
			Count: 0,
		}); err != nil {
			w.Write([]byte("Failed to get or insert counter"))
			return
		}
	}
	counter.Count++
	go models.Counters.Update(counter)
	c.Render(w, r, "counter", nil)
}
No comments yet.