Monorepo for Tangled

appview: ingest new repos

Signed-off-by: Seongmin Lee <git@boltless.me>

boltless.me 40086fd0 3b14253c

verified
+53 -4
+2 -2
appview/db/repos.go
··· 409 409 return nil 410 410 } 411 411 412 - func RemoveRepo(e Execer, did, name string) error { 413 - _, err := e.Exec(`delete from repos where did = ? and name = ?`, did, name) 412 + func RemoveRepo(e Execer, did, rkey string) error { 413 + _, err := e.Exec(`delete from repos where did = ? and rkey = ?`, did, rkey) 414 414 return err 415 415 } 416 416
+49 -1
appview/ingester.go
··· 83 83 err = i.ingestLabelDefinition(e) 84 84 case tangled.LabelOpNSID: 85 85 err = i.ingestLabelOp(e) 86 + case tangled.RepoNSID: 87 + err = i.ingestRepo(ctx, e) 86 88 } 87 89 l = i.Logger.With("nsid", e.Commit.Collection) 88 90 } ··· 93 95 94 96 return nil 95 97 } 98 + } 99 + 100 + func (i *Ingester) ingestRepo(ctx context.Context, e *jmodels.Event) error { 101 + l := i.Logger.With("handler", "ingestStar") 102 + l = l.With("nsid", e.Commit.Collection) 103 + 104 + switch e.Commit.Operation { 105 + case jmodels.CommitOperationCreate, jmodels.CommitOperationUpdate: 106 + record := tangled.Repo{} 107 + if err := json.Unmarshal(e.Commit.Record, &record); err != nil { 108 + l.Error("invalid record", "err", err) 109 + return err 110 + } 111 + 112 + repo := &models.Repo{ 113 + Did: e.Did, 114 + Rkey: e.Commit.RKey, 115 + Name: record.Name, 116 + Knot: record.Knot, 117 + Description: "", 118 + } 119 + ddb, _ := i.Db.Execer.(*db.DB) 120 + 121 + tx, err := ddb.Begin() 122 + if err != nil { 123 + return fmt.Errorf("failed to start transaction") 124 + } 125 + defer tx.Rollback() 126 + // tx, err := i.Db.SaveLastTimeUs 127 + 128 + if err := db.AddRepo(tx, repo); err != nil { 129 + return fmt.Errorf("adding repo: %w", err) 130 + } 131 + 132 + if err := tx.Commit(); err != nil { 133 + return fmt.Errorf("commiting repo add transaction: %w", err) 134 + } 135 + case jmodels.CommitOperationDelete: 136 + if err := db.RemoveRepo(i.Db, e.Did, e.Commit.RKey); err != nil { 137 + return fmt.Errorf("deleting repo: %w", err) 138 + } 139 + } 140 + 141 + l.Info("processed repo", "operation", e.Commit.Operation, "rkey", e.Commit.RKey) 142 + 143 + return nil 96 144 } 97 145 98 146 func (i *Ingester) ingestStar(e *jmodels.Event) error { ··· 361 409 362 410 err = db.ValidateProfile(tx, &profile) 363 411 if err != nil { 364 - return fmt.Errorf("invalid profile record") 412 + return fmt.Errorf("invalid profile record: %w", err) 365 413 } 366 414 367 415 err = db.UpsertProfile(tx, &profile)
+1 -1
appview/repo/repo.go
··· 906 906 } 907 907 908 908 // remove repo from db 909 - err = db.RemoveRepo(tx, f.Did, f.Name) 909 + err = db.RemoveRepo(tx, f.Did, f.Rkey) 910 910 if err != nil { 911 911 rp.pages.Notice(w, noticeId, "Failed to update appview") 912 912 return
+1
appview/state/state.go
··· 117 117 tangled.RepoIssueCommentNSID, 118 118 tangled.LabelDefinitionNSID, 119 119 tangled.LabelOpNSID, 120 + tangled.RepoNSID, 120 121 }, 121 122 nil, 122 123 tlog.SubLogger(logger, "jetstream"),