package routers import ( "log/slog" "slices" "git.kocoder.xyz/kocoded/vt/utils" "github.com/gofiber/fiber/v2" "github.com/google/uuid" ) type Mandant struct { ID string `json:"id"` Name string `json:"name"` Logo string `json:"logo"` Plan string `json:"plan"` Color string `json:"color"` } type mandantRouter struct { logger *slog.Logger mandanten []*Mandant currentMandant *Mandant } func RegisterMandantRouter(group fiber.Router, appCtx *utils.Application) { mandanten := []*Mandant{ { ID: uuid.NewString(), Name: "Acme Inc", Logo: "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIGNsYXNzPSJsdWNpZGUgbHVjaWRlLWNvbW1hbmQtaWNvbiBsdWNpZGUtY29tbWFuZCI+PHBhdGggZD0iTTE1IDZ2MTJhMyAzIDAgMSAwIDMtM0g2YTMgMyAwIDEgMCAzIDNWNmEzIDMgMCAxIDAtMyAzaDEyYTMgMyAwIDEgMC0zLTMiLz48L3N2Zz4=", Plan: "Enterprise", Color: "#ff2056", }, { ID: uuid.NewString(), Name: "Acme Corp.", Logo: "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9IiMwMDAwMDAiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBjbGFzcz0ibHVjaWRlIGx1Y2lkZS1leWUtY2xvc2VkLWljb24gbHVjaWRlLWV5ZS1jbG9zZWQiPjxwYXRoIGQ9Im0xNSAxOC0uNzIyLTMuMjUiLz48cGF0aCBkPSJNMiA4YTEwLjY0NSAxMC42NDUgMCAwIDAgMjAgMCIvPjxwYXRoIGQ9Im0yMCAxNS0xLjcyNi0yLjA1Ii8+PHBhdGggZD0ibTQgMTUgMS43MjYtMi4wNSIvPjxwYXRoIGQ9Im05IDE4IC43MjItMy4yNSIvPjwvc3ZnPg==", Plan: "Startup", Color: "#e12afb", }, { ID: uuid.NewString(), Name: "Evil Corp.", Logo: "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIGNsYXNzPSJsdWNpZGUgbHVjaWRlLWNvbW1hbmQtaWNvbiBsdWNpZGUtY29tbWFuZCI+PHBhdGggZD0iTTE1IDZ2MTJhMyAzIDAgMSAwIDMtM0g2YTMgMyAwIDEgMCAzIDNWNmEzIDMgMCAxIDAtMyAzaDEyYTMgMyAwIDEgMC0zLTMiLz48L3N2Zz4=", Plan: "Free", Color: "#4f39f6", }, } router := &mandantRouter{logger: appCtx.Logger, mandanten: mandanten, currentMandant: mandanten[0]} group.Get("/current", router.getCurrentMandant) group.Put("/current", router.setCurrentMandant) group.Get("/all", router.getAllMandant) } func (r *mandantRouter) getCurrentMandant(c *fiber.Ctx) error { return c.JSON(r.currentMandant) } func (r *mandantRouter) getAllMandant(c *fiber.Ctx) error { return c.JSON(r.mandanten) } func (r *mandantRouter) setCurrentMandant(c *fiber.Ctx) error { mandant := &Mandant{} if err := c.BodyParser(mandant); err != nil { return err } mandantId := slices.IndexFunc(r.mandanten, func(m *Mandant) bool { return m.ID == mandant.ID }) r.currentMandant = r.mandanten[mandantId] return c.JSON(r.currentMandant) }