46 lines
1.3 KiB
Go
46 lines
1.3 KiB
Go
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)
|
|
}
|