refactor: storage namings

This commit is contained in:
Ilia Denisov
2026-03-14 21:40:26 +02:00
parent ac3ed31a23
commit 70a43237ca
5 changed files with 37 additions and 33 deletions
BIN
View File
Binary file not shown.
+2
View File
@@ -28,6 +28,8 @@ func (i GameID) String() string {
type State struct {
// TODO: store user's login key
ClientCurrentVersion string `json:"clientCurrentVersion"`
ClientNextVersion *string `json:"clientNextVersion,omitempty"`
GameState []GameState `json:"gameState"`
ActiveGameID GameID `json:"activeGameId"`
}
+7 -7
View File
@@ -100,7 +100,7 @@ func NewFS(storageRoot string) (*fsStorage, error) {
}, nil
}
func (s *fsStorage) StateExists(callback func(bool, error)) {
func (s *fsStorage) StateExistsAsync(callback func(bool, error)) {
go func() {
exists, err := s.FileExists(stateFileName)
if callback != nil {
@@ -109,7 +109,7 @@ func (s *fsStorage) StateExists(callback func(bool, error)) {
}()
}
func (s *fsStorage) LoadState(callback func(client.State, error)) {
func (s *fsStorage) LoadStateAsync(callback func(client.State, error)) {
go func() {
state, err := s.loadStateSync()
if callback != nil {
@@ -118,7 +118,7 @@ func (s *fsStorage) LoadState(callback func(client.State, error)) {
}()
}
func (s *fsStorage) SaveState(state client.State, callback func(error)) {
func (s *fsStorage) SaveStateAsync(state client.State, callback func(error)) {
go func() {
err := s.saveStateSync(state)
if callback != nil {
@@ -127,7 +127,7 @@ func (s *fsStorage) SaveState(state client.State, callback func(error)) {
}()
}
func (s *fsStorage) LoadReport(id client.GameID, turn uint, callback func(report.Report, error)) {
func (s *fsStorage) LoadReportAsync(id client.GameID, turn uint, callback func(report.Report, error)) {
go func() {
rep, err := s.loadReportSync(id, turn)
if callback != nil {
@@ -136,7 +136,7 @@ func (s *fsStorage) LoadReport(id client.GameID, turn uint, callback func(report
}()
}
func (s *fsStorage) SaveReport(id client.GameID, turn uint, rep report.Report, callback func(error)) {
func (s *fsStorage) SaveReportAsync(id client.GameID, turn uint, rep report.Report, callback func(error)) {
go func() {
err := s.saveReportSync(id, turn, rep)
if callback != nil {
@@ -145,7 +145,7 @@ func (s *fsStorage) SaveReport(id client.GameID, turn uint, rep report.Report, c
}()
}
func (s *fsStorage) LoadOrder(id client.GameID, turn uint, callback func(order.Order, error)) {
func (s *fsStorage) LoadOrderAsync(id client.GameID, turn uint, callback func(order.Order, error)) {
go func() {
o, err := s.loadOrderSync(id, turn)
if callback != nil {
@@ -154,7 +154,7 @@ func (s *fsStorage) LoadOrder(id client.GameID, turn uint, callback func(order.O
}()
}
func (s *fsStorage) SaveOrder(id client.GameID, turn uint, o order.Order, callback func(error)) {
func (s *fsStorage) SaveOrderAsync(id client.GameID, turn uint, o order.Order, callback func(error)) {
go func() {
err := s.saveOrderSync(id, turn, o)
if callback != nil {
+10 -10
View File
@@ -27,7 +27,7 @@ func TestStateRoundTripAsync(t *testing.T) {
want := sampleState()
saveDone := make(chan error, 1)
s.SaveState(want, func(err error) {
s.SaveStateAsync(want, func(err error) {
saveDone <- err
})
if err := waitError(t, saveDone); err != nil {
@@ -35,7 +35,7 @@ func TestStateRoundTripAsync(t *testing.T) {
}
existsDone := make(chan callbackResult[bool], 1)
s.StateExists(func(ok bool, err error) {
s.StateExistsAsync(func(ok bool, err error) {
existsDone <- callbackResult[bool]{value: ok, err: err}
})
exists := waitResult(t, existsDone)
@@ -47,7 +47,7 @@ func TestStateRoundTripAsync(t *testing.T) {
}
loadDone := make(chan callbackResult[client.State], 1)
s.LoadState(func(state client.State, err error) {
s.LoadStateAsync(func(state client.State, err error) {
loadDone <- callbackResult[client.State]{value: state, err: err}
})
got := waitResult(t, loadDone)
@@ -68,7 +68,7 @@ func TestReportAndOrderRoundTripAsync(t *testing.T) {
wantOrder := sampleOrder()
saveReportDone := make(chan error, 1)
s.SaveReport(id, turn, initialReport, func(err error) {
s.SaveReportAsync(id, turn, initialReport, func(err error) {
saveReportDone <- err
})
if err := waitError(t, saveReportDone); err != nil {
@@ -76,7 +76,7 @@ func TestReportAndOrderRoundTripAsync(t *testing.T) {
}
saveOrderDone := make(chan error, 1)
s.SaveOrder(id, turn, wantOrder, func(err error) {
s.SaveOrderAsync(id, turn, wantOrder, func(err error) {
saveOrderDone <- err
})
if err := waitError(t, saveOrderDone); err != nil {
@@ -84,7 +84,7 @@ func TestReportAndOrderRoundTripAsync(t *testing.T) {
}
saveUpdatedReportDone := make(chan error, 1)
s.SaveReport(id, turn, updatedReport, func(err error) {
s.SaveReportAsync(id, turn, updatedReport, func(err error) {
saveUpdatedReportDone <- err
})
if err := waitError(t, saveUpdatedReportDone); err != nil {
@@ -92,7 +92,7 @@ func TestReportAndOrderRoundTripAsync(t *testing.T) {
}
loadReportDone := make(chan callbackResult[report.Report], 1)
s.LoadReport(id, turn, func(rep report.Report, err error) {
s.LoadReportAsync(id, turn, func(rep report.Report, err error) {
loadReportDone <- callbackResult[report.Report]{value: rep, err: err}
})
gotReport := waitResult(t, loadReportDone)
@@ -104,7 +104,7 @@ func TestReportAndOrderRoundTripAsync(t *testing.T) {
}
loadOrderDone := make(chan callbackResult[order.Order], 1)
s.LoadOrder(id, turn, func(got order.Order, err error) {
s.LoadOrderAsync(id, turn, func(got order.Order, err error) {
loadOrderDone <- callbackResult[order.Order]{value: got, err: err}
})
gotOrder := waitResult(t, loadOrderDone)
@@ -120,7 +120,7 @@ func TestSaveOrderBeforeReportReturnsNotExist(t *testing.T) {
s := newTestStorage(t)
done := make(chan error, 1)
s.SaveOrder("game-2", 3, sampleOrder(), func(err error) {
s.SaveOrderAsync("game-2", 3, sampleOrder(), func(err error) {
done <- err
})
err := waitError(t, done)
@@ -390,7 +390,7 @@ func TestSaveStateIsNonBlockingAndCallbackBased(t *testing.T) {
}
callbacks := make(chan error, 2)
s.SaveState(sampleState(), func(err error) {
s.SaveStateAsync(sampleState(), func(err error) {
callbacks <- err
})
+16 -14
View File
@@ -13,40 +13,42 @@ type Storage interface {
WriteFile(string, []byte) error
DeleteFile(string) error
ListFiles() ([]string, error)
// StateExistss() (bool, error)
}
// UIStorage manages Client's data local storing and retrieval.
// It performs all I/O operations asynchronously to avoid UI main thread blocking.
type UIStorage interface {
// StateExists check asynchronously for previously saved [model.State] exists on the filesystem.
// StateExistsAsync check asynchronously for previously saved [model.State] exists on the filesystem.
// Passed callback func will will accept false and non-nil error in case of I/O or decoding errors occuried,
// otherwise bool parameter will indicate existence of previously stores state
StateExists(func(bool, error))
StateExistsAsync(func(bool, error))
// LoadState loads Client's [model.State] from filesystem data asynchronously.
// LoadStateAsync loads Client's [model.State] from filesystem data asynchronously.
// Passed callback func will accept non-nil error in case of I/O or decoding errors occuried,
// otherwise callback func accepts loaded [model.State].
LoadState(func(client.State, error))
LoadStateAsync(func(client.State, error))
// SaveState stores Client's state at the filesystem asynchronously.
// SaveStateAsync stores Client's state at the filesystem asynchronously.
// I/O or encoding error may occur, it that case callback func will be called with non-nil error.
SaveState(client.State, func(error))
SaveStateAsync(client.State, func(error))
// LoadReport loads a [report.Report] for a given [model.GameID] and turn number from filesystem asynchronously.
// LoadReportAsync loads a [report.Report] for a given [model.GameID] and turn number from filesystem asynchronously.
// Passed callback func will will accept non-nil error in case of I/O or decoding errors occuried,
// otherwise callback func accepts loaded [report.Report].
LoadReport(client.GameID, uint, func(report.Report, error))
LoadReportAsync(client.GameID, uint, func(report.Report, error))
// SaveReport stores given [report.Report] for a given [model.GameID] and turn number at the filesystem asynchronously.
// SaveReportAsync stores given [report.Report] for a given [model.GameID] and turn number at the filesystem asynchronously.
// I/O or encoding error may occur, it that case callback func will be called with non-nil error.
SaveReport(client.GameID, uint, report.Report, func(error))
SaveReportAsync(client.GameID, uint, report.Report, func(error))
// LoadOrder loads a [order.Order] for a given [model.GameID] and turn number from filesystem asynchronously.
// LoadOrderAsync loads a [order.Order] for a given [model.GameID] and turn number from filesystem asynchronously.
// Passed callback func will will accept non-nil error in case of I/O or decoding errors occuried,
// otherwise callback func accepts loaded [order.Order].
LoadOrder(client.GameID, uint, func(order.Order, error))
LoadOrderAsync(client.GameID, uint, func(order.Order, error))
// SaveOrder stores given [order.Order] for a given [model.GameID] and turn number at the filesystem asynchronously.
// SaveOrderAsync stores given [order.Order] for a given [model.GameID] and turn number at the filesystem asynchronously.
// I/O or encoding error may occur, it that case callback func will be called with non-nil error.
SaveOrder(client.GameID, uint, order.Order, func(error))
SaveOrderAsync(client.GameID, uint, order.Order, func(error))
}