package game import ( "github.com/google/uuid" "github.com/iliadenisov/galaxy/internal/controller" "github.com/iliadenisov/galaxy/internal/model/game" ) func GenerateGame(configure func(*controller.Param), races []string) (gameID uuid.UUID, err error) { err = control(configure, func(c *controller.Controller) error { return c.ExecuteState(func(r controller.Repo) error { gameID, err = controller.NewGame(r, races) return err }) }) return } // LoadState used for lock-safe loading game state and may be called concurrently. func LoadState(configure func(*controller.Param)) (g *game.Game, err error) { err = control(configure, func(c *controller.Controller) error { g, err = c.Repo.LoadStateSafe() return err }) return } // TODO: command for loading report by players (MUST be limited by router) func LoadReport(configure func(*controller.Param)) (g *game.Game, err error) { err = control(configure, func(c *controller.Controller) error { return c.ExecuteState(func(r controller.Repo) error { g, err = c.Repo.LoadState() return err }) }) return } func control(configure func(*controller.Param), consumer func(*controller.Controller) error) (err error) { c, err := controller.NewController(configure) if err != nil { return err } return consumer(c) }