forked from tangled.org/core
Monorepo for Tangled

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 38059c11 90eb065b

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 ··· 870 868 return 871 869 } 872 870 873 - repoAt := f.RepoAt() 874 - rkey := repoAt.RecordKey().String() 875 - if rkey == "" { 876 - fail("Failed to resolve repo. Try again later", err) 877 - return 878 - } 879 - 880 871 newSpindle := r.FormValue("spindle") 881 872 removingSpindle := newSpindle == "[[none]]" // see pages/templates/repo/settings/pipelines.html for more info on why we use this value 882 873 client, err := rp.oauth.AuthorizedClient(r) ··· 899 890 } 900 891 } 901 892 893 + newRepo := f.Repo 894 + newRepo.Spindle = newSpindle 895 + record := newRepo.AsRecord() 896 + 902 897 spindlePtr := &newSpindle 903 898 if removingSpindle { 904 899 spindlePtr = nil 900 + newRepo.Spindle = "" 905 901 } 906 902 907 903 // optimistic update 908 - err = db.UpdateSpindle(rp.db, string(repoAt), spindlePtr) 904 + err = db.UpdateSpindle(rp.db, newRepo.RepoAt().String(), spindlePtr) 909 905 if err != nil { 910 906 fail("Failed to update spindle. Try again later.", err) 911 907 return 912 908 } 913 909 914 - ex, err := client.RepoGetRecord(r.Context(), "", tangled.RepoNSID, user.Did, rkey) 910 + ex, err := client.RepoGetRecord(r.Context(), "", tangled.RepoNSID, newRepo.Did, newRepo.Rkey) 915 911 if err != nil { 916 912 fail("Failed to update spindle, no record found on PDS.", err) 917 913 return 918 914 } 919 915 _, err = client.RepoPutRecord(r.Context(), &comatproto.RepoPutRecord_Input{ 920 916 Collection: tangled.RepoNSID, 921 - Repo: user.Did, 922 - Rkey: rkey, 917 + Repo: newRepo.Did, 918 + Rkey: newRepo.Rkey, 923 919 SwapRecord: ex.Cid, 924 920 Record: &lexutil.LexiconTypeDecoder{ 925 - Val: &tangled.Repo{ 926 - Knot: f.Knot, 927 - Name: f.Name, 928 - CreatedAt: f.Created.Format(time.RFC3339), 929 - Description: &f.Description, 930 - Spindle: spindlePtr, 931 - }, 921 + Val: &record, 932 922 }, 933 923 }) 934 924 ··· 1049 1039 return 1050 1040 } 1051 1041 1052 - err = db.AddCollaborator(rp.db, db.Collaborator{ 1042 + err = db.AddCollaborator(tx, db.Collaborator{ 1053 1043 Did: syntax.DID(currentUser.Did), 1054 1044 Rkey: rkey, 1055 1045 SubjectDid: collaboratorIdent.DID, ··· 1586 1576 // create an atproto record for this fork 1587 1577 rkey := tid.TID() 1588 1578 repo := &db.Repo{ 1589 - Did: user.Did, 1590 - Name: forkName, 1591 - Knot: targetKnot, 1592 - Rkey: rkey, 1593 - Source: sourceAt, 1579 + Did: user.Did, 1580 + Name: forkName, 1581 + Knot: targetKnot, 1582 + Rkey: rkey, 1583 + Source: sourceAt, 1584 + Description: existingRepo.Description, 1585 + Created: time.Now(), 1594 1586 } 1587 + record := repo.AsRecord() 1595 1588 1596 1589 xrpcClient, err := rp.oauth.AuthorizedClient(r) 1597 1590 if err != nil { ··· 1600 1593 return 1601 1594 } 1602 1595 1603 - createdAt := time.Now().Format(time.RFC3339) 1604 1596 atresp, err := xrpcClient.RepoPutRecord(r.Context(), &comatproto.RepoPutRecord_Input{ 1605 1597 Collection: tangled.RepoNSID, 1606 1598 Repo: user.Did, 1607 1599 Rkey: rkey, 1608 1600 Record: &lexutil.LexiconTypeDecoder{ 1609 - Val: &tangled.Repo{ 1610 - Knot: repo.Knot, 1611 - Name: repo.Name, 1612 - CreatedAt: createdAt, 1613 - Source: &sourceAt, 1614 - }}, 1601 + Val: &record, 1602 + }, 1615 1603 }) 1616 1604 if err != nil { 1617 1605 l.Error("failed to write to PDS", "err", err)
+4 -6
appview/state/state.go
··· 430 430 Knot: domain, 431 431 Rkey: rkey, 432 432 Description: description, 433 + Created: time.Now(), 433 434 } 435 + record := repo.AsRecord() 434 436 435 437 xrpcClient, err := s.oauth.AuthorizedClient(r) 436 438 if err != nil { ··· 439 441 return 440 442 } 441 443 442 - createdAt := time.Now().Format(time.RFC3339) 443 444 atresp, err := xrpcClient.RepoPutRecord(r.Context(), &comatproto.RepoPutRecord_Input{ 444 445 Collection: tangled.RepoNSID, 445 446 Repo: user.Did, 446 447 Rkey: rkey, 447 448 Record: &lexutil.LexiconTypeDecoder{ 448 - Val: &tangled.Repo{ 449 - Knot: repo.Knot, 450 - Name: repoName, 451 - CreatedAt: createdAt, 452 - }}, 449 + Val: &record, 450 + }, 453 451 }) 454 452 if err != nil { 455 453 l.Info("PDS write failed", "err", err)