tijl.dev-core/internal/apps/flags/main.go
tijl 4a268ef8c7
All checks were successful
build / build (push) Successful in 32s
release-tag / release-image (push) Successful in 16m25s
basic app implementation
2024-08-26 00:18:45 +02:00

114 lines
2.3 KiB
Go

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
}