|
|
package model
import ( "errors" "fmt"
"git.aiterp.net/AiteRP/aitestory/server" "git.aiterp.net/gisle/wrouter/generate" )
// TagTypes are the allowed values for Tag.Type
var TagTypes = []string{ "Location", "Character", "Event", "Organization", "Source", }
// Tag describes a tag
type Tag struct { ID string Type string Name string }
// Insert adds the tag to the database, giving it a new unique ID
func (tag *Tag) Insert() error { db := server.Main.DB
// Validate tag type
validType := false for _, tagType := range TagTypes { if tagType == tag.Type { validType = true break } } if !validType { return fmt.Errorf("\"%s\" is not a valid tag type", tag.Type) }
// Validate tag name
if len(tag.Name) == 0 { return errors.New("Tag name is empty") }
// Generate an ID if none exists
if tag.ID == "" { tag.ID = generate.ID() }
// Do the thing
_, err := db.Exec("INSERT INTO `tag` (id,type,name,disabled) VALUES (?,?,?,false)", tag.ID, tag.Type, tag.Name) if err != nil { return err }
return nil }
// ListTags finds all the tags, without filter. If it hits
// the tag cache, it will copy it making it safe to modify
func ListTags() ([]Tag, error) { db := server.Main.DB
// Read from the database
rows, err := db.Query("SELECT id,type,name FROM `tag` WHERE disabled=false") if err != nil { return nil, err } defer rows.Close() results := make([]Tag, 0, 64) for rows.Next() { tag := Tag{} rows.Scan(&tag.ID, &tag.Type, &tag.Name) results = append(results, tag) }
return results, nil }
|