feat: load player's report

This commit is contained in:
Ilia Denisov
2026-02-08 20:47:46 +02:00
parent f8412be248
commit e48a0c8b96
16 changed files with 91 additions and 35 deletions
+10 -1
View File
@@ -3,12 +3,21 @@ package controller
import (
"strings"
"github.com/google/uuid"
e "github.com/iliadenisov/galaxy/internal/error"
"github.com/iliadenisov/galaxy/internal/model/game"
)
func (c Controller) RaceID(actor string) (uuid.UUID, error) {
ri, err := c.Cache.validRace(actor)
if err != nil {
return uuid.Nil, err
}
return c.Cache.g.Race[ri].ID, nil
}
func (c Controller) QuitGame(actor string) error {
ri, err := c.Cache.validActor(actor)
ri, err := c.Cache.validRace(actor)
if err != nil {
return err
}
+6 -2
View File
@@ -4,6 +4,7 @@ import (
"errors"
"fmt"
"github.com/google/uuid"
"github.com/iliadenisov/galaxy/internal/model/game"
"github.com/iliadenisov/galaxy/internal/model/report"
"github.com/iliadenisov/galaxy/internal/repo"
@@ -36,6 +37,9 @@ type Repo interface {
// SaveReport stores latest report for a race
SaveReport(uint, *report.Report) error
// LoadReport loads report for specific turn and player id
LoadReport(uint, uuid.UUID) (*report.Report, error)
}
type Controller struct {
@@ -47,9 +51,9 @@ type Param struct {
StoragePath string
}
type Config func(*Param)
type Configurer func(*Param)
func NewController(config Config) (*Controller, error) {
func NewController(config Configurer) (*Controller, error) {
c := &Param{
StoragePath: ".",
}
@@ -31,9 +31,9 @@ func (c *Cache) AddRace(n string) (int, uuid.UUID) {
return len(c.g.Race) - 1, id
}
func (c *Cache) Race(i int) game.Race {
func (c *Cache) Race(i int) *game.Race {
c.validateRaceIndex(i)
return c.g.Race[i]
return &c.g.Race[i]
}
func (c *Cache) RaceShipGroups(ri int) iter.Seq[*game.ShipGroup] {
-11
View File
@@ -2,13 +2,10 @@ package controller_test
import (
"fmt"
"slices"
"testing"
"github.com/google/uuid"
"github.com/iliadenisov/galaxy/internal/controller"
"github.com/iliadenisov/galaxy/internal/model/game"
"github.com/stretchr/testify/assert"
)
var (
@@ -103,14 +100,6 @@ var (
InSpace = game.InSpace{Origin: 2, X: floatRef(1.23), Y: floatRef(1.23)}
)
// [ ] Delete this fake test
func TestSlicesDelete(t *testing.T) {
sl := []int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
assert.Len(t, sl, 10)
sl = slices.DeleteFunc(sl, func(v int) bool { return v%2 == 0 })
assert.Len(t, sl, 5)
}
func assertNoError(err error) {
if err != nil {
panic(fmt.Sprintf("init assertion failed: %v", err))
+16
View File
@@ -69,3 +69,19 @@ func TestQuitGame(t *testing.T) {
assert.NoError(t, g.QuitGame(Race_0.Name))
assert.Equal(t, 3, int(c.Race(Race_0_idx).TTL))
}
func TestRaceID(t *testing.T) {
c, g := newCache()
c.Race(Race_0_idx).TTL = 9
_, err := g.RaceID(UnknownRace)
assert.ErrorContains(t, err, e.GenericErrorText(e.ErrInputUnknownRace))
_, err = g.RaceID(Race_Extinct.Name)
assert.ErrorContains(t, err, e.GenericErrorText(e.ErrRaceExinct))
id, err := g.RaceID(Race_0.Name)
assert.NoError(t, err)
assert.Equal(t, Race_0_ID, id)
}