feat: turn stage increment after player's command

This commit is contained in:
Ilia Denisov
2026-02-08 16:35:58 +02:00
parent bf34843568
commit ba5d4e1ba8
14 changed files with 102 additions and 81 deletions
+17 -6
View File
@@ -1,6 +1,7 @@
package controller
import (
"errors"
"fmt"
"github.com/iliadenisov/galaxy/internal/model/game"
@@ -70,15 +71,18 @@ func NewRepoController(r Repo) *Controller {
}
}
func (c *Controller) ExecuteState(consumer func(Repo)) error {
func (c *Controller) ExecuteState(consumer func(Repo) error) (err error) {
if err := c.Repo.Lock(); err != nil {
return fmt.Errorf("execute: lock failed: %s", err)
}
consumer(c.Repo)
return c.Repo.Release()
defer func() {
err = errors.Join(err, c.Repo.Release())
}()
err = consumer(c.Repo)
return
}
func (c *Controller) ExecuteGame(consumer func(Repo, *game.Game)) error {
func (c *Controller) ExecuteCommand(consumer func(Repo, *game.Game) error) (err error) {
if err := c.Repo.Lock(); err != nil {
return fmt.Errorf("execute: lock failed: %s", err)
}
@@ -86,7 +90,14 @@ func (c *Controller) ExecuteGame(consumer func(Repo, *game.Game)) error {
if err != nil {
return err
}
defer func() {
err = errors.Join(err, c.Repo.Release())
}()
c.Cache = NewCache(g)
consumer(c.Repo, g)
return c.Repo.Release()
err = consumer(c.Repo, g)
if err == nil {
g.Stage += 1
c.Repo.SaveLastState(g)
}
return
}