package flags import ( "embed" "encoding/json" "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 { if c.Cookies("app_flags_game_session") != "" { return questionHandler(c, NullableUUID{}, NullableString{}) } else { return gameStartHandler(c) } }) a.Post("/app/flags", func(c *fiber.Ctx) error { recType := c.FormValue("type") switch recType { case "start": return startNewGameHandler(c) case "answer": return answerHandler(c) case "exit": return stopGameHandler(c) case "shared": return sharedGameHandler(c) } 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 }