|
|
package characters
import ( "errors" "strconv" "strings"
"git.aiterp.net/rpdata/api/internal/counter" "git.aiterp.net/rpdata/api/models" )
// Add creates a Character and pushes it to the database. It does some validation
// on nick, name, shortName and author. It will generate a shortname from the first
// name if a blank one is provided.
func Add(nick, name, shortName, author, description string) (models.Character, error) { if len(nick) < 1 || len(name) < 1 || len(author) < 1 { return models.Character{}, errors.New("Nick, name, or author name too short or empty") } if shortName == "" { shortName = strings.SplitN(name, " ", 2)[0] }
char, err := FindNick(nick) if err == nil && char.ID != "" { return models.Character{}, errors.New("Nick is occupied") }
nextID, err := counter.Next("auto_increment", "models.Character") if err != nil { return models.Character{}, err }
character := models.Character{ ID: "C" + strconv.Itoa(nextID), Nicks: []string{nick}, Name: name, ShortName: shortName, Author: author, Description: description, }
err = collection.Insert(character) if err != nil { return models.Character{}, err }
return character, nil }
|