refactor: duplicate identifier error

This commit is contained in:
Ilia Denisov
2026-02-11 09:46:24 +02:00
parent 6e84cc3c51
commit 5697d0ad57
9 changed files with 19 additions and 11 deletions
+1 -1
View File
@@ -189,7 +189,7 @@ func (c *Cache) createFleet(ri int, name string) (int, error) {
return 0, e.NewEntityTypeNameValidationError("%q", n) return 0, e.NewEntityTypeNameValidationError("%q", n)
} }
if _, ok := c.fleetIndex(ri, n); ok { if _, ok := c.fleetIndex(ri, n); ok {
return 0, e.NewEntityTypeNameDuplicateError("fleet %q", n) return 0, e.NewEntityDuplicateIdentifierError("fleet %q", n)
} }
fleets := slices.Clone(c.g.Fleets) fleets := slices.Clone(c.g.Fleets)
fleets = append(fleets, game.Fleet{ fleets = append(fleets, game.Fleet{
+1 -1
View File
@@ -17,7 +17,7 @@ func (c *Cache) ScienceCreate(ri int, name string, drive, weapons, shileds, carg
return e.NewEntityTypeNameValidationError("%q", n) return e.NewEntityTypeNameValidationError("%q", n)
} }
if sc := slices.IndexFunc(c.g.Race[ri].Sciences, func(s game.Science) bool { return s.Name == n }); sc >= 0 { if sc := slices.IndexFunc(c.g.Race[ri].Sciences, func(s game.Science) bool { return s.Name == n }); sc >= 0 {
return e.NewEntityTypeNameDuplicateError("science %q", c.g.Race[ri].Sciences[sc].Name) return e.NewEntityDuplicateIdentifierError("science %q", c.g.Race[ri].Sciences[sc].Name)
} }
if drive < 0 { if drive < 0 {
+1 -1
View File
@@ -37,7 +37,7 @@ func TestScienceCreate(t *testing.T) {
e.GenericErrorText(e.ErrInputEntityTypeNameInvalid)) e.GenericErrorText(e.ErrInputEntityTypeNameInvalid))
assert.ErrorContains(t, assert.ErrorContains(t,
g.ScienceCreate(Race_0.Name, first, 0.4, 0, 0.6, 0), g.ScienceCreate(Race_0.Name, first, 0.4, 0, 0.6, 0),
e.GenericErrorText(e.ErrInputEntityTypeNameDuplicate)) e.GenericErrorText(e.ErrInputNewEntityDuplicateIdentifier))
assert.ErrorContains(t, assert.ErrorContains(t,
g.ScienceCreate(Race_0.Name, second, -0.1, 0, 1.1, 0), g.ScienceCreate(Race_0.Name, second, -0.1, 0, 1.1, 0),
e.GenericErrorText(e.ErrInputDriveValue)) e.GenericErrorText(e.ErrInputDriveValue))
+1 -1
View File
@@ -21,7 +21,7 @@ func (c *Cache) ShipClassCreate(ri int, typeName string, drive float64, ammo int
return e.NewEntityTypeNameValidationError("%q", n) return e.NewEntityTypeNameValidationError("%q", n)
} }
if st := slices.IndexFunc(c.g.Race[ri].ShipTypes, func(st game.ShipType) bool { return st.Name == typeName }); st >= 0 { if st := slices.IndexFunc(c.g.Race[ri].ShipTypes, func(st game.ShipType) bool { return st.Name == typeName }); st >= 0 {
return e.NewEntityTypeNameDuplicateError("ship type %q", c.g.Race[ri].ShipTypes[st].Name) return e.NewEntityDuplicateIdentifierError("ship class %q", c.g.Race[ri].ShipTypes[st].Name)
} }
c.g.Race[ri].ShipTypes = append(c.g.Race[ri].ShipTypes, game.ShipType{ c.g.Race[ri].ShipTypes = append(c.g.Race[ri].ShipTypes, game.ShipType{
ID: uuid.New(), ID: uuid.New(),
+2 -2
View File
@@ -24,7 +24,7 @@ func TestShipClassCreate(t *testing.T) {
assert.ErrorContains(t, assert.ErrorContains(t,
g.ShipClassCreate(Race_0.Name, Race_0_Gunship, 1, 0, 0, 0, 0), g.ShipClassCreate(Race_0.Name, Race_0_Gunship, 1, 0, 0, 0, 0),
e.GenericErrorText(e.ErrInputEntityTypeNameDuplicate)) e.GenericErrorText(e.ErrInputNewEntityDuplicateIdentifier))
assert.ErrorContains(t, assert.ErrorContains(t,
g.ShipClassCreate(UnknownRace, "Drone", 1, 0, 0, 0, 0), g.ShipClassCreate(UnknownRace, "Drone", 1, 0, 0, 0, 0),
e.GenericErrorText(e.ErrInputUnknownRace)) e.GenericErrorText(e.ErrInputUnknownRace))
@@ -80,7 +80,7 @@ func TestCreateShipTypeValidation(t *testing.T) {
err := g.ShipClassCreate(race, tc.name+strconv.Itoa(i), tc.d, tc.a, tc.w, tc.s, tc.c) err := g.ShipClassCreate(race, tc.name+strconv.Itoa(i), tc.d, tc.a, tc.w, tc.s, tc.c)
assert.NoError(t, err) assert.NoError(t, err)
err = g.ShipClassCreate(race, tc.name+strconv.Itoa(i), tc.d, tc.a, tc.w, tc.s, tc.c) err = g.ShipClassCreate(race, tc.name+strconv.Itoa(i), tc.d, tc.a, tc.w, tc.s, tc.c)
assert.ErrorContains(t, err, e.GenericErrorText(e.ErrInputEntityTypeNameDuplicate)) assert.ErrorContains(t, err, e.GenericErrorText(e.ErrInputNewEntityDuplicateIdentifier))
} else { } else {
err := g.ShipClassCreate(race, tc.name, tc.d, tc.a, tc.w, tc.s, tc.c) err := g.ShipClassCreate(race, tc.name, tc.d, tc.a, tc.w, tc.s, tc.c)
assert.ErrorContains(t, err, tc.err) assert.ErrorContains(t, err, tc.err)
+5
View File
@@ -383,6 +383,11 @@ func (c *Cache) ShipGroupBreak(ri int, groupID, newID uuid.UUID, quantity uint)
if !ok { if !ok {
return e.NewEntityNotExistsError("group %s", groupID) return e.NewEntityNotExistsError("group %s", groupID)
} }
for sgi := range c.g.ShipGroups {
if c.g.ShipGroups[sgi].ID == newID {
return e.NewEntityDuplicateIdentifierError("group %s", newID)
}
}
if state := c.ShipGroup(sgi).State(); state != game.StateInOrbit { if state := c.ShipGroup(sgi).State(); state != game.StateInOrbit {
return e.NewShipsBusyError() return e.NewShipsBusyError()
+3
View File
@@ -116,6 +116,9 @@ func TestShipGroupBreak(t *testing.T) {
assert.ErrorContains(t, assert.ErrorContains(t,
g.ShipGroupBreak(Race_0.Name, uuid.New(), uuid.New(), 1), g.ShipGroupBreak(Race_0.Name, uuid.New(), uuid.New(), 1),
e.GenericErrorText(e.ErrInputEntityNotExists)) e.GenericErrorText(e.ErrInputEntityNotExists))
assert.ErrorContains(t,
g.ShipGroupBreak(Race_0.Name, c.ShipGroup(0).ID, c.ShipGroup(0).ID, 1),
e.GenericErrorText(e.ErrInputNewEntityDuplicateIdentifier))
assert.ErrorContains(t, assert.ErrorContains(t,
g.ShipGroupBreak(Race_0.Name, c.ShipGroup(0).ID, uuid.New(), 17), g.ShipGroupBreak(Race_0.Name, c.ShipGroup(0).ID, uuid.New(), 17),
e.GenericErrorText(e.ErrBeakGroupNumberNotEnough)) e.GenericErrorText(e.ErrBeakGroupNumberNotEnough))
+3 -3
View File
@@ -35,7 +35,7 @@ const (
ErrInputUnknownRelation ErrInputUnknownRelation
ErrInputSameRace ErrInputSameRace
ErrInputEntityTypeNameInvalid ErrInputEntityTypeNameInvalid
ErrInputEntityTypeNameDuplicate ErrInputNewEntityDuplicateIdentifier
ErrInputEntityTypeNameEquality ErrInputEntityTypeNameEquality
ErrInputEntityNotExists ErrInputEntityNotExists
ErrInputEntityNotOwned ErrInputEntityNotOwned
@@ -83,8 +83,8 @@ func GenericErrorText(code int) string {
return "Race name must be different from your own" return "Race name must be different from your own"
case ErrInputEntityTypeNameInvalid: case ErrInputEntityTypeNameInvalid:
return "Name has invalid length or symbols" return "Name has invalid length or symbols"
case ErrInputEntityTypeNameDuplicate: case ErrInputNewEntityDuplicateIdentifier:
return "Name already exists" return "Entity already exists"
case ErrInputEntityTypeNameEquality: case ErrInputEntityTypeNameEquality:
return "Names should differ" return "Names should differ"
case ErrInputEntityNotExists: case ErrInputEntityNotExists:
+2 -2
View File
@@ -16,8 +16,8 @@ func NewEntityTypeNameValidationError(arg ...any) error {
return newGenericError(ErrInputEntityTypeNameInvalid, arg...) return newGenericError(ErrInputEntityTypeNameInvalid, arg...)
} }
func NewEntityTypeNameDuplicateError(arg ...any) error { func NewEntityDuplicateIdentifierError(arg ...any) error {
return newGenericError(ErrInputEntityTypeNameDuplicate, arg...) return newGenericError(ErrInputNewEntityDuplicateIdentifier, arg...)
} }
func NewEntityTypeNameEqualityError(arg ...any) error { func NewEntityTypeNameEqualityError(arg ...any) error {