From 593b6ff2706cc6515cc231b5cb50367d33e9ca0b Mon Sep 17 00:00:00 2001 From: Seongmin Lee Date: Thu, 23 Jul 2026 01:26:07 +0900 Subject: [PATCH] wip: appview: use text input as spindle selector Signed-off-by: Seongmin Lee --- appview/db/spindle.go | 122 +++------------------------------------ appview/repo/repo.go | 2 +- appview/repo/settings.go | 10 +++- appview/state/state.go | 2 +- 4 files changed, 16 insertions(+), 120 deletions(-) diff --git a/appview/db/spindle.go b/appview/db/spindle.go index bae28b73d..434f81135 100644 --- a/appview/db/spindle.go +++ b/appview/db/spindle.go @@ -7,10 +7,17 @@ import ( "strings" "time" + "github.com/bluesky-social/indigo/atproto/syntax" "tangled.org/core/appview/models" "tangled.org/core/orm" ) +// RecentSpindles lists spindles user recently used. +func RecentSpindles(ctx context.Context, e Execer, user syntax.DID) ([]string, error) { + // NOTE: should I use redis instead..? + panic("unimplemented") +} + func GetSpindles(ctx context.Context, e Execer, filters ...orm.Filter) ([]models.Spindle, error) { var spindles []models.Spindle @@ -83,16 +90,6 @@ func GetSpindles(ctx context.Context, e Execer, filters ...orm.Filter) ([]models return spindles, nil } -func AddSpindle(e Execer, spindle models.Spindle) error { - _, err := e.Exec( - `insert into spindles (owner, instance) values (?, ?) - on conflict (owner, instance) do nothing`, - spindle.Owner, - spindle.Instance, - ) - return err -} - func VerifySpindle(e Execer, filters ...orm.Filter) (int64, error) { var conditions []string var args []any @@ -115,108 +112,3 @@ func VerifySpindle(e Execer, filters ...orm.Filter) (int64, error) { return res.RowsAffected() } - -func DeleteSpindle(e Execer, filters ...orm.Filter) error { - var conditions []string - var args []any - for _, filter := range filters { - conditions = append(conditions, filter.Condition()) - args = append(args, filter.Arg()...) - } - - whereClause := "" - if conditions != nil { - whereClause = " where " + strings.Join(conditions, " and ") - } - - query := fmt.Sprintf(`delete from spindles %s`, whereClause) - - _, err := e.Exec(query, args...) - return err -} - -func AddSpindleMember(e Execer, member models.SpindleMember) error { - _, err := e.Exec( - `insert or ignore into spindle_members (did, rkey, instance, subject) values (?, ?, ?, ?)`, - member.Did, - member.Rkey, - member.Instance, - member.Subject, - ) - return err -} - -func RemoveSpindleMember(e Execer, filters ...orm.Filter) error { - if len(filters) == 0 { - return fmt.Errorf("RemoveSpindleMember requires at least one filter") - } - - var conditions []string - var args []any - for _, filter := range filters { - conditions = append(conditions, filter.Condition()) - args = append(args, filter.Arg()...) - } - - query := fmt.Sprintf(`delete from spindle_members where %s`, strings.Join(conditions, " and ")) - - _, err := e.Exec(query, args...) - return err -} - -func GetSpindleMembers(e Execer, filters ...orm.Filter) ([]models.SpindleMember, error) { - var members []models.SpindleMember - - var conditions []string - var args []any - for _, filter := range filters { - conditions = append(conditions, filter.Condition()) - args = append(args, filter.Arg()...) - } - - whereClause := "" - if conditions != nil { - whereClause = " where " + strings.Join(conditions, " and ") - } - - query := fmt.Sprintf( - `select id, did, rkey, instance, subject, created - from spindle_members - %s - order by created - `, - whereClause, - ) - - rows, err := e.Query(query, args...) - - if err != nil { - return nil, err - } - defer rows.Close() - - for rows.Next() { - var member models.SpindleMember - var createdAt string - - if err := rows.Scan( - &member.Id, - &member.Did, - &member.Rkey, - &member.Instance, - &member.Subject, - &createdAt, - ); err != nil { - return nil, err - } - - member.Created, err = time.Parse(time.RFC3339, createdAt) - if err != nil { - member.Created = time.Now() - } - - members = append(members, member) - } - - return members, nil -} diff --git a/appview/repo/repo.go b/appview/repo/repo.go index 414835ec9..a184d3cd5 100644 --- a/appview/repo/repo.go +++ b/appview/repo/repo.go @@ -1418,7 +1418,7 @@ func (rp *Repo) ForkRepo(w http.ResponseWriter, r *http.Request) { user := rp.oauth.GetMultiAccountUser(r) knots := rp.acl.KnotsForUser(r.Context(), user.Did) - spindles, err := rp.enforcer.GetSpindlesForUser(user.Did) + spindles, err := db.RecentSpindles(r.Context(), rp.db, syntax.DID(user.Did)) if err != nil { l.Error("failed to fetch spindles", "err", err) } diff --git a/appview/repo/settings.go b/appview/repo/settings.go index d93f9aaf9..534770c82 100644 --- a/appview/repo/settings.go +++ b/appview/repo/settings.go @@ -473,13 +473,17 @@ func (rp *Repo) pipelineSettings(w http.ResponseWriter, r *http.Request) { l := rp.logger.With("handler", "pipelineSettings") f, err := rp.repoResolver.Resolve(r) + if err != nil { + l.Error("failed to get repo and knot", "err", err) + w.WriteHeader(http.StatusBadRequest) + return + } + user := rp.oauth.GetMultiAccountUser(r) - // all spindles that the repo owner is a member of - spindles, err := rp.enforcer.GetSpindlesForUser(f.Did) + spindles, err := db.RecentSpindles(r.Context(), rp.db, syntax.DID(user.Did)) if err != nil { l.Error("failed to fetch spindles", "err", err) - return } var secrets []*tangled.RepoListSecrets_Secret diff --git a/appview/state/state.go b/appview/state/state.go index e89395442..844efa48a 100644 --- a/appview/state/state.go +++ b/appview/state/state.go @@ -450,7 +450,7 @@ func (s *State) NewRepo(w http.ResponseWriter, r *http.Request) { user := s.oauth.GetMultiAccountUser(r) knots := s.aclService.KnotsForUser(r.Context(), user.Did) - spindles, err := s.enforcer.GetSpindlesForUser(user.Did) + spindles, err := db.RecentSpindles(r.Context(), s.db, syntax.DID(user.Did)) if err != nil { s.logger.Error("failed to fetch spindles", "err", err) } -- 2.51.2