diff options
Diffstat (limited to 'internal/db/bundb/bundb.go')
-rw-r--r-- | internal/db/bundb/bundb.go | 63 |
1 files changed, 30 insertions, 33 deletions
diff --git a/internal/db/bundb/bundb.go b/internal/db/bundb/bundb.go index 0ab1d1b83..2f7a8a022 100644 --- a/internal/db/bundb/bundb.go +++ b/internal/db/bundb/bundb.go @@ -473,43 +473,40 @@ func sqlitePragmas(ctx context.Context, conn *DBConn) error { CONVERSION FUNCTIONS */ -func (dbService *DBService) TagStringsToTags(ctx context.Context, tags []string, originAccountID string) ([]*gtsmodel.Tag, error) { +func (dbService *DBService) TagStringToTag(ctx context.Context, t string, originAccountID string) (*gtsmodel.Tag, error) { protocol := config.GetProtocol() host := config.GetHost() + now := time.Now() - newTags := []*gtsmodel.Tag{} - for _, t := range tags { - tag := >smodel.Tag{} - // we can use selectorinsert here to create the new tag if it doesn't exist already - // inserted will be true if this is a new tag we just created - if err := dbService.conn.NewSelect().Model(tag).Where("LOWER(?) = LOWER(?)", bun.Ident("name"), t).Scan(ctx); err != nil { - if err == sql.ErrNoRows { - // tag doesn't exist yet so populate it - newID, err := id.NewRandomULID() - if err != nil { - return nil, err - } - tag.ID = newID - tag.URL = fmt.Sprintf("%s://%s/tags/%s", protocol, host, t) - tag.Name = t - tag.FirstSeenFromAccountID = originAccountID - tag.CreatedAt = time.Now() - tag.UpdatedAt = time.Now() - useable := true - tag.Useable = &useable - listable := true - tag.Listable = &listable - } else { - return nil, fmt.Errorf("error getting tag with name %s: %s", t, err) - } - } + tag := >smodel.Tag{} + // we can use selectorinsert here to create the new tag if it doesn't exist already + // inserted will be true if this is a new tag we just created + if err := dbService.conn.NewSelect().Model(tag).Where("LOWER(?) = LOWER(?)", bun.Ident("name"), t).Scan(ctx); err != nil && err != sql.ErrNoRows { + return nil, fmt.Errorf("error getting tag with name %s: %s", t, err) + } - // bail already if the tag isn't useable - if !*tag.Useable { - continue + if tag.ID == "" { + // tag doesn't exist yet so populate it + newID, err := id.NewRandomULID() + if err != nil { + return nil, err } - tag.LastStatusAt = time.Now() - newTags = append(newTags, tag) + tag.ID = newID + tag.URL = protocol + "://" + host + "/tags/" + t + tag.Name = t + tag.FirstSeenFromAccountID = originAccountID + tag.CreatedAt = now + tag.UpdatedAt = now + useable := true + tag.Useable = &useable + listable := true + tag.Listable = &listable + } + + // bail already if the tag isn't useable + if !*tag.Useable { + return nil, fmt.Errorf("tag %s is not useable", t) } - return newTags, nil + tag.LastStatusAt = now + return tag, nil } |