iswhoa/main.go

81 lines
1.6 KiB
Go
Raw Normal View History

2025-06-19 12:14:46 +00:00
package main
import (
2025-06-22 12:06:49 +00:00
"bytes"
2025-06-19 12:14:46 +00:00
"fmt"
2025-06-22 12:06:49 +00:00
"html/template"
2025-06-19 12:14:46 +00:00
"log"
"net/http"
"os"
2025-06-22 12:06:49 +00:00
"strings"
2025-06-19 12:14:46 +00:00
"github.com/gofiber/fiber/v2"
"github.com/gofiber/template/html/v2"
2025-06-22 12:06:49 +00:00
"github.com/yuin/goldmark"
2025-06-19 12:14:46 +00:00
"lmika.dev/web/isknow/models"
)
func main() {
2025-06-22 12:06:49 +00:00
questions := models.Game
2025-06-19 12:14:46 +00:00
prefix, _ := os.LookupEnv("PATH_PREFIX")
engine := html.New("./views", ".html")
engine.AddFunc("prefix", func() string { return prefix })
2025-06-22 12:06:49 +00:00
engine.AddFunc("markdown", func(s string) template.HTML {
if s == "" {
return ""
}
var buf bytes.Buffer
if err := goldmark.Convert([]byte(strings.TrimSpace(s)), &buf); err != nil {
return ""
}
return template.HTML(buf.String())
})
2025-06-19 12:14:46 +00:00
app := fiber.New(fiber.Config{
Views: engine,
ViewsLayout: "layout",
})
app.Get("/", func(c *fiber.Ctx) error {
return c.Render("index", fiber.Map{})
})
2025-06-22 00:21:04 +00:00
app.Get("/results", func(c *fiber.Ctx) error {
return c.Render("results", fiber.Map{})
2025-06-19 12:14:46 +00:00
})
app.Get("/:qid", func(c *fiber.Ctx) error {
qID, err := c.ParamsInt("qid")
if err != nil {
return c.SendStatus(http.StatusBadRequest)
}
idx := qID - 1
if idx < 0 || idx >= len(questions.Questions) {
return c.SendStatus(http.StatusBadRequest)
}
rq, err := questions.Questions[idx].Render()
if err != nil {
return err
}
2025-06-22 00:21:04 +00:00
nextURL := prefix + "/results"
2025-06-19 12:14:46 +00:00
reachedEnd := true
if idx+1 < len(questions.Questions) {
nextURL = fmt.Sprintf("%v/%d", prefix, idx+2)
reachedEnd = true
}
return c.Render("question", fiber.Map{
"q": rq,
"nextURL": nextURL,
"reachedEnd": reachedEnd,
})
})
app.Static("/assets", "./public")
log.Fatal(app.Listen(":3000"))
}