Monorepo for Tangled tangled.org

appview: use Repo::AsRecord() in all put-record operations

this helps with consistency as we introduce more fields to the repo
lexicon.

Signed-off-by: oppiliappan <me@oppi.li>

oppi.li 87bd77a4 71953ed5

verified
Changed files
+55 -48
appview
db
repo
state
+22 -1
appview/db/repos.go
··· 31 31 } 32 32 33 33 func (r *Repo) AsRecord() tangled.Repo { 34 - return tangled.Repo{} 34 + var source, spindle, description *string 35 + 36 + if r.Source != "" { 37 + source = &r.Source 38 + } 39 + 40 + if r.Spindle != "" { 41 + spindle = &r.Spindle 42 + } 43 + 44 + if r.Description != "" { 45 + description = &r.Description 46 + } 47 + 48 + return tangled.Repo{ 49 + Knot: r.Knot, 50 + Name: r.Name, 51 + Description: description, 52 + CreatedAt: r.Created.Format(time.RFC3339), 53 + Source: source, 54 + Spindle: spindle, 55 + } 35 56 } 36 57 37 58 func (r Repo) RepoAt() syntax.ATURI {
+29 -41
appview/repo/repo.go
··· 295 295 return 296 296 } 297 297 298 + newRepo := f.Repo 299 + newRepo.Description = newDescription 300 + record := newRepo.AsRecord() 301 + 298 302 // this is a bit of a pain because the golang atproto impl does not allow nil SwapRecord field 299 303 // 300 304 // SwapRecord is optional and should happen automagically, but given that it does not, we have to perform two requests 301 - ex, err := client.RepoGetRecord(r.Context(), "", tangled.RepoNSID, user.Did, rkey) 305 + ex, err := client.RepoGetRecord(r.Context(), "", tangled.RepoNSID, newRepo.Did, newRepo.Rkey) 302 306 if err != nil { 303 307 // failed to get record 304 308 rp.pages.Notice(w, "repo-notice", "Failed to update description, no record found on PDS.") ··· 306 310 } 307 311 _, err = client.RepoPutRecord(r.Context(), &comatproto.RepoPutRecord_Input{ 308 312 Collection: tangled.RepoNSID, 309 - Repo: user.Did, 310 - Rkey: rkey, 313 + Repo: newRepo.Did, 314 + Rkey: newRepo.Rkey, 311 315 SwapRecord: ex.Cid, 312 316 Record: &lexutil.LexiconTypeDecoder{ 313 - Val: &tangled.Repo{ 314 - Knot: f.Knot, 315 - Name: f.Name, 316 - CreatedAt: f.Created.Format(time.RFC3339), 317 - Description: &newDescription, 318 - Spindle: &f.Spindle, 319 - }, 317 + Val: &record, 320 318 }, 321 319 }) 322 320 ··· 894 892 return 895 893 } 896 894 897 - repoAt := f.RepoAt() 898 - rkey := repoAt.RecordKey().String() 899 - if rkey == "" { 900 - fail("Failed to resolve repo. Try again later", err) 901 - return 902 - } 903 - 904 895 newSpindle := r.FormValue("spindle") 905 896 removingSpindle := newSpindle == "[[none]]" // see pages/templates/repo/settings/pipelines.html for more info on why we use this value 906 897 client, err := rp.oauth.AuthorizedClient(r) ··· 923 914 } 924 915 } 925 916 917 + newRepo := f.Repo 918 + newRepo.Spindle = newSpindle 919 + record := newRepo.AsRecord() 920 + 926 921 spindlePtr := &newSpindle 927 922 if removingSpindle { 928 923 spindlePtr = nil 924 + newRepo.Spindle = "" 929 925 } 930 926 931 927 // optimistic update 932 - err = db.UpdateSpindle(rp.db, string(repoAt), spindlePtr) 928 + err = db.UpdateSpindle(rp.db, newRepo.RepoAt().String(), spindlePtr) 933 929 if err != nil { 934 930 fail("Failed to update spindle. Try again later.", err) 935 931 return 936 932 } 937 933 938 - ex, err := client.RepoGetRecord(r.Context(), "", tangled.RepoNSID, user.Did, rkey) 934 + ex, err := client.RepoGetRecord(r.Context(), "", tangled.RepoNSID, newRepo.Did, newRepo.Rkey) 939 935 if err != nil { 940 936 fail("Failed to update spindle, no record found on PDS.", err) 941 937 return 942 938 } 943 939 _, err = client.RepoPutRecord(r.Context(), &comatproto.RepoPutRecord_Input{ 944 940 Collection: tangled.RepoNSID, 945 - Repo: user.Did, 946 - Rkey: rkey, 941 + Repo: newRepo.Did, 942 + Rkey: newRepo.Rkey, 947 943 SwapRecord: ex.Cid, 948 944 Record: &lexutil.LexiconTypeDecoder{ 949 - Val: &tangled.Repo{ 950 - Knot: f.Knot, 951 - Name: f.Name, 952 - CreatedAt: f.Created.Format(time.RFC3339), 953 - Description: &f.Description, 954 - Spindle: spindlePtr, 955 - }, 945 + Val: &record, 956 946 }, 957 947 }) 958 948 ··· 1073 1063 return 1074 1064 } 1075 1065 1076 - err = db.AddCollaborator(rp.db, db.Collaborator{ 1066 + err = db.AddCollaborator(tx, db.Collaborator{ 1077 1067 Did: syntax.DID(currentUser.Did), 1078 1068 Rkey: rkey, 1079 1069 SubjectDid: collaboratorIdent.DID, ··· 1610 1600 // create an atproto record for this fork 1611 1601 rkey := tid.TID() 1612 1602 repo := &db.Repo{ 1613 - Did: user.Did, 1614 - Name: forkName, 1615 - Knot: targetKnot, 1616 - Rkey: rkey, 1617 - Source: sourceAt, 1603 + Did: user.Did, 1604 + Name: forkName, 1605 + Knot: targetKnot, 1606 + Rkey: rkey, 1607 + Source: sourceAt, 1608 + Description: existingRepo.Description, 1609 + Created: time.Now(), 1618 1610 } 1611 + record := repo.AsRecord() 1619 1612 1620 1613 xrpcClient, err := rp.oauth.AuthorizedClient(r) 1621 1614 if err != nil { ··· 1624 1617 return 1625 1618 } 1626 1619 1627 - createdAt := time.Now().Format(time.RFC3339) 1628 1620 atresp, err := xrpcClient.RepoPutRecord(r.Context(), &comatproto.RepoPutRecord_Input{ 1629 1621 Collection: tangled.RepoNSID, 1630 1622 Repo: user.Did, 1631 1623 Rkey: rkey, 1632 1624 Record: &lexutil.LexiconTypeDecoder{ 1633 - Val: &tangled.Repo{ 1634 - Knot: repo.Knot, 1635 - Name: repo.Name, 1636 - CreatedAt: createdAt, 1637 - Source: &sourceAt, 1638 - }}, 1625 + Val: &record, 1626 + }, 1639 1627 }) 1640 1628 if err != nil { 1641 1629 l.Error("failed to write to PDS", "err", err)
+4 -6
appview/state/state.go
··· 434 434 Knot: domain, 435 435 Rkey: rkey, 436 436 Description: description, 437 + Created: time.Now(), 437 438 } 439 + record := repo.AsRecord() 438 440 439 441 xrpcClient, err := s.oauth.AuthorizedClient(r) 440 442 if err != nil { ··· 443 445 return 444 446 } 445 447 446 - createdAt := time.Now().Format(time.RFC3339) 447 448 atresp, err := xrpcClient.RepoPutRecord(r.Context(), &comatproto.RepoPutRecord_Input{ 448 449 Collection: tangled.RepoNSID, 449 450 Repo: user.Did, 450 451 Rkey: rkey, 451 452 Record: &lexutil.LexiconTypeDecoder{ 452 - Val: &tangled.Repo{ 453 - Knot: repo.Knot, 454 - Name: repoName, 455 - CreatedAt: createdAt, 456 - }}, 453 + Val: &record, 454 + }, 457 455 }) 458 456 if err != nil { 459 457 l.Info("PDS write failed", "err", err)