package flags // WIP import ( "context" "database/sql" "embed" "encoding/json" "strconv" "git.tijl.dev/tijl/tijl.dev-core/internal/queries" "git.tijl.dev/tijl/tijl.dev-core/modules/db" "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") }) 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 }) }, 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 }