diff --git a/models/characters/add-nick.go b/models/characters/add-nick.go new file mode 100644 index 0000000..c08c8f5 --- /dev/null +++ b/models/characters/add-nick.go @@ -0,0 +1,27 @@ +package characters + +import ( + "errors" + "strings" + + "git.aiterp.net/rpdata/api/models" + "github.com/globalsign/mgo/bson" +) + +// AddNick adds a nick to a characters +func AddNick(character models.Character, nick string) (models.Character, error) { + for i := range character.Nicks { + if strings.EqualFold(character.Nicks[i], nick) { + return models.Character{}, errors.New("Nick already exists") + } + } + + err := collection.UpdateId(character.ID, bson.M{"$push": bson.M{"nicks": nick}}) + if err != nil { + return models.Character{}, err + } + + character.Nicks = append(character.Nicks, nick) + + return character, nil +} diff --git a/models/characters/remove-nick.go b/models/characters/remove-nick.go new file mode 100644 index 0000000..d4ca771 --- /dev/null +++ b/models/characters/remove-nick.go @@ -0,0 +1,32 @@ +package characters + +import ( + "errors" + "strings" + + "git.aiterp.net/rpdata/api/models" + "github.com/globalsign/mgo/bson" +) + +// RemoveNick removes a nick to a characters +func RemoveNick(character models.Character, nick string) (models.Character, error) { + index := -1 + for i := range character.Nicks { + if strings.EqualFold(character.Nicks[i], nick) { + index = i + break + } + } + if index == -1 { + return models.Character{}, errors.New("Nick does not exist") + } + + err := collection.UpdateId(character.ID, bson.M{"$pull": bson.M{"nicks": nick}}) + if err != nil { + return models.Character{}, err + } + + character.Nicks = append(character.Nicks[:index], character.Nicks[index+1:]...) + + return character, nil +}