package repo /* /state.json /000/state.json /000/race/{UUID}/order/001.json /000/race/{UUID}/report.json /000/battle/{planet_UUID} */ import ( "fmt" "github.com/iliadenisov/galaxy/pkg/model/game" ) const ( statePath = "state.json" ) func (r *repo) SaveTurn(t uint, g game.Game) error { return saveTurn(r.s, t, g) } func saveTurn(s Storage, t uint, g game.Game) error { path := fmt.Sprintf("%03d/state.json", t) exist, err := s.Exists(path) if err != nil { return NewStorageError(err) } if exist { return NewStateError(fmt.Sprintf("state for turn %d already saved", t)) } if err := s.Write(path, g); err != nil { return NewStorageError(err) } // TODO: save reports for i := range g.Race { saveRace(s, g, i) } // TODO: save battles return saveState(s, g) // FIXME: either save it here, or in tre repo controller } func saveRace(s Storage, g game.Game, i int) { } func (r *repo) SaveState(g game.Game) error { return saveState(r.s, g) } func saveState(s Storage, g game.Game) error { if err := s.Write(statePath, g); err != nil { return NewStorageError(err) } return nil } func (r *repo) LoadState() (game.Game, error) { return loadState(r.s) } func loadState(s Storage) (game.Game, error) { var g game.Game path := statePath exist, err := s.Exists(path) if err != nil { return g, NewStorageError(err) } if !exist { return g, NewStateError("latest state was never stored") } if err := s.Read(path, &g); err != nil { return g, NewStorageError(err) } return g, nil }