Monorepo for Tangled tangled.org

appview: add repo_did columns, migrations, and model struct fields #1138

open opened by oyster.cafe targeting master from oyster.cafe/tangled-core: master
Labels

None yet.

assignee

None yet.

Participants 2
AT URI
at://did:plc:3fwecdnvtcscjnrx2p4n7alz/sh.tangled.repo.pull/3mgprvt2ejx22
+382 -12
Diff #6
+318
appview/db/db.go
··· 1287 1287 return err 1288 1288 }) 1289 1289 1290 + orm.RunMigration(conn, logger, "add-repo-did-column", func(tx *sql.Tx) error { 1291 + _, err := tx.Exec(` 1292 + alter table repos add column repo_did text; 1293 + create unique index if not exists idx_repos_repo_did on repos(repo_did); 1294 + 1295 + alter table issues add column repo_did text; 1296 + alter table pulls add column repo_did text; 1297 + alter table artifacts add column repo_did text; 1298 + alter table webhooks add column repo_did text; 1299 + alter table collaborators add column repo_did text; 1300 + alter table pull_comments add column repo_did text; 1301 + alter table profile_pinned_repositories add column repo_did text; 1302 + alter table repo_issue_seqs add column repo_did text; 1303 + alter table repo_pull_seqs add column repo_did text; 1304 + alter table repo_languages add column repo_did text; 1305 + alter table repo_labels add column repo_did text; 1306 + alter table stars add column subject_did text; 1307 + `) 1308 + return err 1309 + }) 1310 + 1311 + conn.ExecContext(ctx, "pragma foreign_keys = off;") 1312 + orm.RunMigration(conn, logger, "add-repo-did-fk-constraints", func(tx *sql.Tx) error { 1313 + _, err := tx.Exec(` 1314 + create table repo_issue_seqs_new ( 1315 + repo_at text primary key, 1316 + next_issue_id integer not null default 1, 1317 + repo_did text, 1318 + foreign key (repo_did) references repos(repo_did) on delete cascade 1319 + ); 1320 + insert into repo_issue_seqs_new select repo_at, next_issue_id, repo_did from repo_issue_seqs; 1321 + drop table repo_issue_seqs; 1322 + alter table repo_issue_seqs_new rename to repo_issue_seqs; 1323 + 1324 + create table repo_pull_seqs_new ( 1325 + repo_at text primary key, 1326 + next_pull_id integer not null default 1, 1327 + repo_did text, 1328 + foreign key (repo_did) references repos(repo_did) on delete cascade 1329 + ); 1330 + insert into repo_pull_seqs_new select repo_at, next_pull_id, repo_did from repo_pull_seqs; 1331 + drop table repo_pull_seqs; 1332 + alter table repo_pull_seqs_new rename to repo_pull_seqs; 1333 + 1334 + create table repo_languages_new ( 1335 + id integer primary key autoincrement, 1336 + repo_at text not null, 1337 + ref text not null, 1338 + is_default_ref integer not null default 0, 1339 + language text not null, 1340 + bytes integer not null check (bytes >= 0), 1341 + repo_did text, 1342 + unique(repo_at, ref, language), 1343 + foreign key (repo_did) references repos(repo_did) on delete cascade 1344 + ); 1345 + insert into repo_languages_new select id, repo_at, ref, is_default_ref, language, bytes, repo_did from repo_languages; 1346 + drop table repo_languages; 1347 + alter table repo_languages_new rename to repo_languages; 1348 + 1349 + create table repo_labels_new ( 1350 + id integer primary key autoincrement, 1351 + repo_at text not null, 1352 + label_at text not null, 1353 + repo_did text, 1354 + unique (repo_at, label_at), 1355 + foreign key (repo_did) references repos(repo_did) on delete cascade 1356 + ); 1357 + insert into repo_labels_new select id, repo_at, label_at, repo_did from repo_labels; 1358 + drop table repo_labels; 1359 + alter table repo_labels_new rename to repo_labels; 1360 + `) 1361 + return err 1362 + }) 1363 + conn.ExecContext(ctx, "pragma foreign_keys = on;") 1364 + 1365 + orm.RunMigration(conn, logger, "add-repo-did-indexes", func(tx *sql.Tx) error { 1366 + _, err := tx.Exec(` 1367 + create index if not exists idx_issues_repo_did on issues(repo_did); 1368 + create index if not exists idx_pulls_repo_did on pulls(repo_did); 1369 + create index if not exists idx_artifacts_repo_did on artifacts(repo_did); 1370 + create index if not exists idx_collaborators_repo_did on collaborators(repo_did); 1371 + create index if not exists idx_pull_comments_repo_did on pull_comments(repo_did); 1372 + create index if not exists idx_stars_subject_did on stars(subject_did); 1373 + `) 1374 + return err 1375 + }) 1376 + 1377 + orm.RunMigration(conn, logger, "add-repo-did-indexes-2", func(tx *sql.Tx) error { 1378 + _, err := tx.Exec(` 1379 + create index if not exists idx_repo_issue_seqs_repo_did on repo_issue_seqs(repo_did); 1380 + create index if not exists idx_repo_pull_seqs_repo_did on repo_pull_seqs(repo_did); 1381 + create index if not exists idx_repo_languages_repo_did on repo_languages(repo_did); 1382 + create index if not exists idx_repo_labels_repo_did on repo_labels(repo_did); 1383 + create index if not exists idx_webhooks_repo_did on webhooks(repo_did); 1384 + `) 1385 + return err 1386 + }) 1387 + 1388 + orm.RunMigration(conn, logger, "add-pds-rewrite-status", func(tx *sql.Tx) error { 1389 + _, err := tx.Exec(` 1390 + create table if not exists pds_rewrite_status ( 1391 + id integer primary key autoincrement, 1392 + user_did text not null, 1393 + repo_did text not null, 1394 + record_nsid text not null, 1395 + record_rkey text not null, 1396 + old_repo_at text not null, 1397 + status text not null default 'pending', 1398 + updated_at text not null default (strftime('%Y-%m-%dT%H:%M:%SZ', 'now')), 1399 + unique(user_did, record_nsid, record_rkey) 1400 + ); 1401 + create index if not exists idx_pds_rewrite_user on pds_rewrite_status(user_did, status); 1402 + `) 1403 + return err 1404 + }) 1405 + 1406 + orm.RunMigration(conn, logger, "add-pipelines-repo-did", func(tx *sql.Tx) error { 1407 + _, err := tx.Exec(` 1408 + alter table pipelines add column repo_did text; 1409 + create index if not exists idx_pipelines_repo_did on pipelines(repo_did); 1410 + `) 1411 + return err 1412 + }) 1413 + 1414 + conn.ExecContext(ctx, "pragma foreign_keys = off;") 1415 + orm.RunMigration(conn, logger, "add-repo-did-fk-content-tables", func(tx *sql.Tx) error { 1416 + _, err := tx.Exec(` 1417 + -- issues: add FK on repo_did 1418 + create table issues_fk ( 1419 + id integer primary key autoincrement, 1420 + did text not null, 1421 + rkey text not null, 1422 + at_uri text generated always as ('at://' || did || '/' || 'sh.tangled.repo.issue' || '/' || rkey) stored, 1423 + repo_at text not null, 1424 + issue_id integer not null, 1425 + title text not null, 1426 + body text not null, 1427 + open integer not null default 1, 1428 + created text not null default (strftime('%Y-%m-%dT%H:%M:%SZ', 'now')), 1429 + edited text, 1430 + deleted text, 1431 + repo_did text, 1432 + unique(did, rkey), 1433 + unique(repo_at, issue_id), 1434 + unique(at_uri), 1435 + foreign key (repo_at) references repos(at_uri) on delete cascade, 1436 + foreign key (repo_did) references repos(repo_did) on delete set null 1437 + ); 1438 + insert into issues_fk (id, did, rkey, repo_at, issue_id, title, body, open, created, edited, deleted, repo_did) 1439 + select id, did, rkey, repo_at, issue_id, title, body, open, created, edited, deleted, repo_did from issues; 1440 + drop table issues; 1441 + alter table issues_fk rename to issues; 1442 + create index if not exists idx_issues_repo_did on issues(repo_did); 1443 + 1444 + -- pulls: add FK on repo_did 1445 + create table pulls_fk ( 1446 + id integer primary key autoincrement, 1447 + pull_id integer not null, 1448 + at_uri text generated always as ('at://' || owner_did || '/' || 'sh.tangled.repo.pull' || '/' || rkey) stored, 1449 + repo_at text not null, 1450 + owner_did text not null, 1451 + rkey text not null, 1452 + title text not null, 1453 + body text not null, 1454 + target_branch text not null, 1455 + state integer not null default 0 check (state in (0, 1, 2, 3)), 1456 + source_branch text, 1457 + source_repo_at text, 1458 + stack_id text, 1459 + change_id text, 1460 + parent_change_id text, 1461 + created text not null default (strftime('%Y-%m-%dT%H:%M:%SZ', 'now')), 1462 + repo_did text, 1463 + unique(repo_at, pull_id), 1464 + unique(at_uri), 1465 + foreign key (repo_at) references repos(at_uri) on delete cascade, 1466 + foreign key (repo_did) references repos(repo_did) on delete set null 1467 + ); 1468 + insert into pulls_fk (id, pull_id, repo_at, owner_did, rkey, title, body, target_branch, state, source_branch, source_repo_at, stack_id, change_id, parent_change_id, created, repo_did) 1469 + select id, pull_id, repo_at, owner_did, rkey, title, body, target_branch, state, source_branch, source_repo_at, stack_id, change_id, parent_change_id, created, repo_did from pulls; 1470 + drop table pulls; 1471 + alter table pulls_fk rename to pulls; 1472 + create index if not exists idx_pulls_repo_did on pulls(repo_did); 1473 + 1474 + -- artifacts: add FK on repo_did 1475 + create table artifacts_fk ( 1476 + id integer primary key autoincrement, 1477 + did text not null, 1478 + rkey text not null, 1479 + repo_at text not null, 1480 + tag binary(20) not null, 1481 + created text not null default (strftime('%Y-%m-%dT%H:%M:%SZ', 'now')), 1482 + blob_cid text not null, 1483 + name text not null, 1484 + size integer not null default 0, 1485 + mimetype string not null default '*/*', 1486 + repo_did text, 1487 + unique(did, rkey), 1488 + unique(repo_at, tag, name), 1489 + foreign key (repo_at) references repos(at_uri) on delete cascade, 1490 + foreign key (repo_did) references repos(repo_did) on delete set null 1491 + ); 1492 + insert into artifacts_fk (id, did, rkey, repo_at, tag, created, blob_cid, name, size, mimetype, repo_did) 1493 + select id, did, rkey, repo_at, tag, created, blob_cid, name, size, mimetype, repo_did from artifacts; 1494 + drop table artifacts; 1495 + alter table artifacts_fk rename to artifacts; 1496 + create index if not exists idx_artifacts_repo_did on artifacts(repo_did); 1497 + 1498 + -- webhooks: add FK on repo_did 1499 + create table webhooks_fk ( 1500 + id integer primary key autoincrement, 1501 + repo_at text not null, 1502 + url text not null, 1503 + secret text, 1504 + active integer not null default 1, 1505 + events text not null, 1506 + created_at text not null default (strftime('%Y-%m-%dT%H:%M:%SZ', 'now')), 1507 + updated_at text not null default (strftime('%Y-%m-%dT%H:%M:%SZ', 'now')), 1508 + repo_did text, 1509 + foreign key (repo_at) references repos(at_uri) on delete cascade, 1510 + foreign key (repo_did) references repos(repo_did) on delete set null 1511 + ); 1512 + insert into webhooks_fk (id, repo_at, url, secret, active, events, created_at, updated_at, repo_did) 1513 + select id, repo_at, url, secret, active, events, created_at, updated_at, repo_did from webhooks; 1514 + drop table webhooks; 1515 + alter table webhooks_fk rename to webhooks; 1516 + create index if not exists idx_webhooks_repo_did on webhooks(repo_did); 1517 + 1518 + -- collaborators: add FK on repo_did 1519 + create table collaborators_fk ( 1520 + id integer primary key autoincrement, 1521 + did text not null, 1522 + rkey text, 1523 + subject_did text not null, 1524 + repo_at text not null, 1525 + created text not null default (strftime('%Y-%m-%dT%H:%M:%SZ', 'now')), 1526 + repo_did text, 1527 + foreign key (repo_at) references repos(at_uri) on delete cascade, 1528 + foreign key (repo_did) references repos(repo_did) on delete set null 1529 + ); 1530 + insert into collaborators_fk (id, did, rkey, subject_did, repo_at, created, repo_did) 1531 + select id, did, rkey, subject_did, repo_at, created, repo_did from collaborators; 1532 + drop table collaborators; 1533 + alter table collaborators_fk rename to collaborators; 1534 + create index if not exists idx_collaborators_repo_did on collaborators(repo_did); 1535 + 1536 + -- pull_comments: add FK on repo_did 1537 + create table pull_comments_fk ( 1538 + id integer primary key autoincrement, 1539 + pull_id integer not null, 1540 + submission_id integer not null, 1541 + repo_at text not null, 1542 + owner_did text not null, 1543 + comment_at text not null, 1544 + body text not null, 1545 + created text not null default (strftime('%Y-%m-%dT%H:%M:%SZ', 'now')), 1546 + repo_did text, 1547 + foreign key (repo_at, pull_id) references pulls(repo_at, pull_id) on delete cascade, 1548 + foreign key (submission_id) references pull_submissions(id) on delete cascade, 1549 + foreign key (repo_did) references repos(repo_did) on delete set null 1550 + ); 1551 + insert into pull_comments_fk (id, pull_id, submission_id, repo_at, owner_did, comment_at, body, created, repo_did) 1552 + select id, pull_id, submission_id, repo_at, owner_did, comment_at, body, created, repo_did from pull_comments; 1553 + drop table pull_comments; 1554 + alter table pull_comments_fk rename to pull_comments; 1555 + create index if not exists idx_pull_comments_repo_did on pull_comments(repo_did); 1556 + 1557 + -- pipelines: add FK on repo_did 1558 + create table pipelines_fk ( 1559 + id integer primary key autoincrement, 1560 + knot text not null, 1561 + rkey text not null, 1562 + repo_owner text not null, 1563 + repo_name text not null, 1564 + sha text not null check (length(sha) = 40), 1565 + created text not null default (strftime('%Y-%m-%dT%H:%M:%SZ', 'now')), 1566 + trigger_id integer not null, 1567 + repo_did text, 1568 + unique(knot, rkey), 1569 + foreign key (trigger_id) references triggers(id) on delete cascade, 1570 + foreign key (repo_did) references repos(repo_did) on delete set null 1571 + ); 1572 + insert into pipelines_fk (id, knot, rkey, repo_owner, repo_name, sha, created, trigger_id, repo_did) 1573 + select id, knot, rkey, repo_owner, repo_name, sha, created, trigger_id, repo_did from pipelines; 1574 + drop table pipelines; 1575 + alter table pipelines_fk rename to pipelines; 1576 + create index if not exists idx_pipelines_repo_did on pipelines(repo_did); 1577 + 1578 + -- profile_pinned_repositories: add FK on repo_did 1579 + create table profile_pinned_repositories_fk ( 1580 + id integer primary key autoincrement, 1581 + did text not null, 1582 + at_uri text not null, 1583 + repo_did text, 1584 + unique(did, at_uri), 1585 + foreign key (did) references profile(did) on delete cascade, 1586 + foreign key (at_uri) references repos(at_uri) on delete cascade, 1587 + foreign key (repo_did) references repos(repo_did) on delete set null 1588 + ); 1589 + insert into profile_pinned_repositories_fk (id, did, at_uri, repo_did) 1590 + select id, did, at_uri, repo_did from profile_pinned_repositories; 1591 + drop table profile_pinned_repositories; 1592 + alter table profile_pinned_repositories_fk rename to profile_pinned_repositories; 1593 + `) 1594 + return err 1595 + }) 1596 + conn.ExecContext(ctx, "pragma foreign_keys = on;") 1597 + 1598 + orm.RunMigration(conn, logger, "add-source-repo-did-to-pulls", func(tx *sql.Tx) error { 1599 + _, err := tx.Exec(`alter table pulls add column source_repo_did text;`) 1600 + return err 1601 + }) 1602 + 1603 + orm.RunMigration(conn, logger, "migrate-knots-to-repo-dids", func(tx *sql.Tx) error { 1604 + _, err := tx.Exec(`update registrations set needs_upgrade = 1`) 1605 + return err 1606 + }) 1607 + 1290 1608 return &DB{ 1291 1609 db, 1292 1610 logger,
+1
appview/models/artifact.go
··· 16 16 Rkey string 17 17 18 18 RepoAt syntax.ATURI 19 + RepoDid string 19 20 Tag plumbing.Hash 20 21 CreatedAt time.Time 21 22
+1
appview/models/collaborator.go
··· 15 15 // content 16 16 SubjectDid syntax.DID 17 17 RepoAt syntax.ATURI 18 + RepoDid string 18 19 19 20 // meta 20 21 Created time.Time
+23 -2
appview/models/issue.go
··· 14 14 Did string 15 15 Rkey string 16 16 RepoAt syntax.ATURI 17 + RepoDid string 17 18 IssueId int 18 19 Created time.Time 19 20 Edited *time.Time ··· 44 45 for i, uri := range i.References { 45 46 references[i] = string(uri) 46 47 } 48 + var repo *string 49 + var repoDid *string 50 + if i.RepoDid != "" { 51 + repoDid = &i.RepoDid 52 + } else { 53 + s := i.RepoAt.String() 54 + repo = &s 55 + } 47 56 return tangled.RepoIssue{ 48 - Repo: i.RepoAt.String(), 57 + Repo: repo, 58 + RepoDid: repoDid, 49 59 Title: i.Title, 50 60 Body: &i.Body, 51 61 Mentions: mentions, ··· 161 171 body = *record.Body 162 172 } 163 173 174 + var repoAt syntax.ATURI 175 + if record.Repo != nil { 176 + repoAt = syntax.ATURI(*record.Repo) 177 + } 178 + 179 + repoDid := "" 180 + if record.RepoDid != nil { 181 + repoDid = *record.RepoDid 182 + } 183 + 164 184 return Issue{ 165 - RepoAt: syntax.ATURI(record.Repo), 185 + RepoAt: repoAt, 186 + RepoDid: repoDid, 166 187 Did: did, 167 188 Rkey: rkey, 168 189 Created: created,
+1
appview/models/language.go
··· 7 7 type RepoLanguage struct { 8 8 Id int64 9 9 RepoAt syntax.ATURI 10 + RepoDid string 10 11 Ref string 11 12 IsDefaultRef bool 12 13 Language string
+1
appview/models/pipeline.go
··· 19 19 Knot string 20 20 RepoOwner syntax.DID 21 21 RepoName string 22 + RepoDid string 22 23 TriggerId int 23 24 Sha string 24 25 Created time.Time
+19 -5
appview/models/pull.go
··· 59 59 RepoAt syntax.ATURI 60 60 OwnerDid string 61 61 Rkey string 62 + RepoDid string 62 63 63 64 // content 64 65 Title string ··· 90 91 source = &tangled.RepoPull_Source{} 91 92 source.Branch = p.PullSource.Branch 92 93 source.Sha = p.LatestSha() 93 - if p.PullSource.RepoAt != nil { 94 + if p.PullSource.RepoDid != "" { 95 + source.RepoDid = &p.PullSource.RepoDid 96 + } else if p.PullSource.RepoAt != nil { 94 97 s := p.PullSource.RepoAt.String() 95 98 source.Repo = &s 96 99 } ··· 104 107 references[i] = string(uri) 105 108 } 106 109 110 + var targetRepo *string 111 + var targetRepoDid *string 112 + if p.RepoDid != "" { 113 + targetRepoDid = &p.RepoDid 114 + } else { 115 + s := p.RepoAt.String() 116 + targetRepo = &s 117 + } 107 118 record := tangled.RepoPull{ 108 119 Title: p.Title, 109 120 Body: &p.Body, ··· 111 122 References: references, 112 123 CreatedAt: p.Created.Format(time.RFC3339), 113 124 Target: &tangled.RepoPull_Target{ 114 - Repo: p.RepoAt.String(), 115 - Branch: p.TargetBranch, 125 + Repo: targetRepo, 126 + RepoDid: targetRepoDid, 127 + Branch: p.TargetBranch, 116 128 }, 117 129 Source: source, 118 130 } ··· 120 132 } 121 133 122 134 type PullSource struct { 123 - Branch string 124 - RepoAt *syntax.ATURI 135 + Branch string 136 + RepoAt *syntax.ATURI 137 + RepoDid string 125 138 126 139 // optionally populate this for reverse mappings 127 140 Repo *Repo ··· 155 168 RepoAt string 156 169 OwnerDid string 157 170 CommentAt string 171 + RepoDid string 158 172 159 173 // content 160 174 Body string
+12 -1
appview/models/repo.go
··· 22 22 Topics []string 23 23 Spindle string 24 24 Labels []string 25 + RepoDid string 25 26 26 27 // optionally, populate this when querying for reverse mappings 27 28 RepoStats *RepoStats ··· 49 50 website = &r.Website 50 51 } 51 52 53 + var repoDid *string 54 + if r.RepoDid != "" { 55 + repoDid = &r.RepoDid 56 + } 57 + 52 58 return tangled.Repo{ 53 59 Knot: r.Knot, 54 60 Name: r.Name, ··· 59 65 Source: source, 60 66 Spindle: spindle, 61 67 Labels: r.Labels, 68 + RepoDid: repoDid, 62 69 } 63 70 } 64 71 ··· 66 73 return syntax.ATURI(fmt.Sprintf("at://%s/%s/%s", r.Did, tangled.RepoNSID, r.Rkey)) 67 74 } 68 75 69 - func (r Repo) DidSlashRepo() string { 76 + func (r Repo) RepoIdentifier() string { 77 + if r.RepoDid != "" { 78 + return r.RepoDid 79 + } 70 80 p, _ := securejoin.SecureJoin(r.Did, r.Name) 71 81 return p 72 82 } ··· 98 108 Id int64 99 109 RepoAt syntax.ATURI 100 110 LabelAt syntax.ATURI 111 + RepoDid string 101 112 } 102 113 103 114 type RepoGroup struct {
+5 -4
appview/models/star.go
··· 7 7 ) 8 8 9 9 type Star struct { 10 - Did string 11 - RepoAt syntax.ATURI 12 - Created time.Time 13 - Rkey string 10 + Did string 11 + RepoAt syntax.ATURI 12 + SubjectDid string 13 + Created time.Time 14 + Rkey string 14 15 } 15 16 16 17 // RepoStar is used for reverse mapping to repos
+1
appview/models/webhook.go
··· 16 16 type Webhook struct { 17 17 Id int64 18 18 RepoAt syntax.ATURI 19 + RepoDid string 19 20 Url string 20 21 Secret string 21 22 Active bool

History

12 rounds 1 comment
sign up or login to add to the discussion
1 commit
expand
appview: add repo_did to repos/stars/pipelines tables, update queries
merge conflicts detected
expand
  • go.mod:34
  • go.sum:339
expand 0 comments
1 commit
expand
appview: add repo_did to repos/stars/pipelines tables, update queries
expand 0 comments
1 commit
expand
appview: add repo_did to repos/stars/pipelines tables, update queries
expand 1 comment
1 commit
expand
appview: add repo_did columns, migrations, and model struct fields
expand 0 comments
1 commit
expand
appview: add repo_did columns, migrations, and model struct fields
expand 0 comments
1 commit
expand
appview: add repo_did columns, migrations, and model struct fields
expand 0 comments
1 commit
expand
appview: add repo_did columns, migrations, and model struct fields
expand 0 comments
1 commit
expand
appview: add repo_did columns, migrations, and model struct fields
expand 0 comments
1 commit
expand
appview: add repo_did columns, migrations, and model struct fields
expand 0 comments
1 commit
expand
appview: add repo_did columns, migrations, and model struct fields
expand 0 comments
1 commit
expand
appview: add repo_did columns, migrations, and model struct fields
expand 0 comments
1 commit
expand
appview: add repo_did columns, migrations, and model struct fields
expand 0 comments