2024-08-25 17:43:55 +02:00
|
|
|
package flags
|
|
|
|
|
|
|
|
// WIP
|
|
|
|
|
|
|
|
import (
|
2024-08-26 00:18:45 +02:00
|
|
|
"context"
|
|
|
|
"database/sql"
|
2024-08-25 17:43:55 +02:00
|
|
|
"embed"
|
|
|
|
"encoding/json"
|
2024-08-26 00:18:45 +02:00
|
|
|
"strconv"
|
2024-08-25 17:43:55 +02:00
|
|
|
|
2024-08-26 00:18:45 +02:00
|
|
|
"git.tijl.dev/tijl/tijl.dev-core/internal/queries"
|
|
|
|
"git.tijl.dev/tijl/tijl.dev-core/modules/db"
|
2024-08-25 17:43:55 +02:00
|
|
|
"git.tijl.dev/tijl/tijl.dev-core/modules/i18n"
|
|
|
|
log "git.tijl.dev/tijl/tijl.dev-core/modules/logger"
|
|
|
|
"git.tijl.dev/tijl/tijl.dev-core/modules/web"
|
|
|
|
"github.com/gofiber/fiber/v2"
|
|
|
|
)
|
|
|
|
|
|
|
|
var supportedTags []string
|
|
|
|
var countryCodes []CountryCode
|
|
|
|
|
|
|
|
type CountryCode struct {
|
|
|
|
Code string `json:"code"`
|
|
|
|
Tags []string `json:"tags"`
|
|
|
|
}
|
|
|
|
|
|
|
|
//go:embed locales/* data/*
|
|
|
|
var Embed embed.FS
|
|
|
|
|
|
|
|
func Setup() {
|
|
|
|
i18n.RegisterTranslations(Embed, "locales")
|
|
|
|
|
|
|
|
err := loadData()
|
|
|
|
if err != nil {
|
|
|
|
log.Error().Err(err).Msg("error loading country codes data file")
|
|
|
|
}
|
|
|
|
|
|
|
|
web.RegisterAppSetupFunc(func(a *fiber.App) {
|
|
|
|
a.Get("/app/flags", func(c *fiber.Ctx) error {
|
|
|
|
data := *web.Common(c)
|
|
|
|
data["Title"] = "tmp"
|
|
|
|
data["SupportedTags"] = supportedTags
|
|
|
|
return c.Render("apps/flags/start", data, "layouts/base")
|
|
|
|
})
|
2024-08-26 00:18:45 +02:00
|
|
|
|
|
|
|
a.Post("/app/flags", func(c *fiber.Ctx) error {
|
|
|
|
|
|
|
|
recType := c.FormValue("type")
|
|
|
|
|
|
|
|
if recType == "start" {
|
|
|
|
|
|
|
|
values := c.Request().PostArgs().PeekMulti("tags")
|
|
|
|
var selectedTags []string
|
|
|
|
for _, v := range values {
|
|
|
|
selectedTags = append(selectedTags, string(v))
|
|
|
|
}
|
|
|
|
|
|
|
|
maxQuestions, err := strconv.Atoi(c.FormValue("max_questions"))
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
|
|
|
|
_, err = db.Queries.CreateFlagsGame(context.TODO(), queries.CreateFlagsGameParams{
|
|
|
|
Uid: sql.NullString{},
|
|
|
|
Tags: selectedTags,
|
|
|
|
QuestionAmount: int32(maxQuestions),
|
|
|
|
})
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
|
|
|
|
c.Cookie(&fiber.Cookie{
|
|
|
|
Name: "app_flags_game_session",
|
|
|
|
Value: "",
|
|
|
|
})
|
|
|
|
|
|
|
|
data := *web.Common(c)
|
|
|
|
data["Title"] = "tmp"
|
|
|
|
return c.Render("apps/flags/question", data, "layouts/base")
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
return nil
|
|
|
|
})
|
2024-08-25 17:43:55 +02:00
|
|
|
}, 1000)
|
|
|
|
}
|
|
|
|
|
|
|
|
func loadData() error {
|
|
|
|
countryCodesData, err := Embed.ReadFile("data/country_codes.json")
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
|
|
|
|
countryCodes = []CountryCode{}
|
|
|
|
err = json.Unmarshal(countryCodesData, &countryCodes)
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
|
|
|
|
tagsData, err := Embed.ReadFile("data/tags.json")
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
|
|
|
|
supportedTags = []string{}
|
|
|
|
err = json.Unmarshal(tagsData, &supportedTags)
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
|
|
|
|
return nil
|
|
|
|
}
|