From dc802605c77d33070b7eed808026332c157bd1e1 Mon Sep 17 00:00:00 2001 From: oppiliappan Date: Mon, 22 Sep 2025 16:19:53 +0100 Subject: [PATCH] appview/models: move db.Repo* into models - move db.{Repo,RepoStats,IssueCount,PullCount} into models - moe auxilliary funcs like FromRecord into models Signed-off-by: oppiliappan --- appview/db/collaborators.go | 2 +- appview/db/issues.go | 15 ++-- appview/db/profile.go | 7 +- appview/db/pulls.go | 22 +++--- appview/db/repos.go | 106 ++++++----------------------- appview/db/star.go | 13 ++-- appview/db/timeline.go | 16 ++--- appview/knots/knots.go | 3 +- appview/models/repo.go | 87 +++++++++++++++++++++++ appview/notify/merged_notifier.go | 2 +- appview/notify/notifier.go | 4 +- appview/pages/pages.go | 24 +++---- appview/pages/repoinfo/repoinfo.go | 6 +- appview/posthog/notifier.go | 2 +- appview/pulls/pulls.go | 3 +- appview/repo/repo.go | 6 +- appview/reporesolver/resolver.go | 9 +-- appview/spindles/spindles.go | 3 +- appview/state/git_http.go | 8 +-- appview/state/profile.go | 4 +- appview/state/star.go | 5 +- appview/state/state.go | 4 +- 22 files changed, 184 insertions(+), 167 deletions(-) create mode 100644 appview/models/repo.go diff --git a/appview/db/collaborators.go b/appview/db/collaborators.go index 77156610..aaa8f81c 100644 --- a/appview/db/collaborators.go +++ b/appview/db/collaborators.go @@ -34,7 +34,7 @@ func DeleteCollaborator(e Execer, filters ...filter) error { return err } -func CollaboratingIn(e Execer, collaborator string) ([]Repo, error) { +func CollaboratingIn(e Execer, collaborator string) ([]models.Repo, error) { rows, err := e.Query(`select repo_at from collaborators where subject_did = ?`, collaborator) if err != nil { return nil, err diff --git a/appview/db/issues.go b/appview/db/issues.go index 9221863a..5178db35 100644 --- a/appview/db/issues.go +++ b/appview/db/issues.go @@ -32,7 +32,7 @@ type Issue struct { // like comment counts, parent repo etc. Comments []IssueComment Labels models.LabelState - Repo *Repo + Repo *models.Repo } func (i *Issue) AtUri() syntax.ATURI { @@ -376,7 +376,7 @@ func GetIssuesPaginated(e Execer, page pagination.Page, filters ...filter) ([]Is return nil, fmt.Errorf("failed to build repo mappings: %w", err) } - repoMap := make(map[string]*Repo) + repoMap := make(map[string]*models.Repo) for i := range repos { repoMap[string(repos[i].RepoAt())] = &repos[i] } @@ -658,12 +658,7 @@ func ReopenIssues(e Execer, filters ...filter) error { return err } -type IssueCount struct { - Open int - Closed int -} - -func GetIssueCount(e Execer, repoAt syntax.ATURI) (IssueCount, error) { +func GetIssueCount(e Execer, repoAt syntax.ATURI) (models.IssueCount, error) { row := e.QueryRow(` select count(case when open = 1 then 1 end) as open_count, @@ -673,9 +668,9 @@ func GetIssueCount(e Execer, repoAt syntax.ATURI) (IssueCount, error) { repoAt, ) - var count IssueCount + var count models.IssueCount if err := row.Scan(&count.Open, &count.Closed); err != nil { - return IssueCount{0, 0}, err + return models.IssueCount{0, 0}, err } return count, nil diff --git a/appview/db/profile.go b/appview/db/profile.go index da2945ca..5617bd5c 100644 --- a/appview/db/profile.go +++ b/appview/db/profile.go @@ -11,11 +11,12 @@ import ( "github.com/bluesky-social/indigo/atproto/syntax" "tangled.org/core/api/tangled" + "tangled.org/core/appview/models" ) type RepoEvent struct { - Repo *Repo - Source *Repo + Repo *models.Repo + Source *models.Repo } type ProfileTimeline struct { @@ -162,7 +163,7 @@ func MakeProfileTimeline(e Execer, forDid string) (*ProfileTimeline, error) { for _, repo := range repos { // TODO: get this in the original query; requires COALESCE because nullable - var sourceRepo *Repo + var sourceRepo *models.Repo if repo.Source != "" { sourceRepo, err = GetRepoByAtUri(e, repo.Source) if err != nil { diff --git a/appview/db/pulls.go b/appview/db/pulls.go index 31494b3a..24722ac2 100644 --- a/appview/db/pulls.go +++ b/appview/db/pulls.go @@ -11,6 +11,7 @@ import ( "github.com/bluesky-social/indigo/atproto/syntax" "tangled.org/core/api/tangled" + "tangled.org/core/appview/models" "tangled.org/core/patchutil" "tangled.org/core/types" ) @@ -79,7 +80,7 @@ type Pull struct { PullSource *PullSource // optionally, populate this when querying for reverse mappings - Repo *Repo + Repo *models.Repo } func (p Pull) AsRecord() tangled.RepoPull { @@ -109,7 +110,7 @@ type PullSource struct { RepoAt *syntax.ATURI // optionally populate this for reverse mappings - Repo *Repo + Repo *models.Repo } func (p PullSource) AsRecord() tangled.RepoPull_Source { @@ -723,7 +724,7 @@ func GetPull(e Execer, repoAt syntax.ATURI, pullId int) (*Pull, error) { return nil, err } - var pullSourceRepo *Repo + var pullSourceRepo *models.Repo if pull.PullSource != nil { if pull.PullSource.RepoAt != nil { pullSourceRepo, err = GetRepoByAtUri(e, pull.PullSource.RepoAt.String()) @@ -776,7 +777,7 @@ func GetPullsByOwnerDid(e Execer, did, timeframe string) ([]Pull, error) { for rows.Next() { var pull Pull - var repo Repo + var repo models.Repo var pullCreatedAt, repoCreatedAt string err := rows.Scan( &pull.OwnerDid, @@ -931,14 +932,7 @@ func UpdatePull(e Execer, newPatch, sourceRev string, filters ...filter) error { return err } -type PullCount struct { - Open int - Merged int - Closed int - Deleted int -} - -func GetPullCount(e Execer, repoAt syntax.ATURI) (PullCount, error) { +func GetPullCount(e Execer, repoAt syntax.ATURI) (models.PullCount, error) { row := e.QueryRow(` select count(case when state = ? then 1 end) as open_count, @@ -954,9 +948,9 @@ func GetPullCount(e Execer, repoAt syntax.ATURI) (PullCount, error) { repoAt, ) - var count PullCount + var count models.PullCount if err := row.Scan(&count.Open, &count.Merged, &count.Closed, &count.Deleted); err != nil { - return PullCount{0, 0, 0, 0}, err + return models.PullCount{Open: 0, Merged: 0, Closed: 0, Deleted: 0}, err } return count, nil diff --git a/appview/db/repos.go b/appview/db/repos.go index 483dba9a..3583bf65 100644 --- a/appview/db/repos.go +++ b/appview/db/repos.go @@ -10,64 +10,11 @@ import ( "time" "github.com/bluesky-social/indigo/atproto/syntax" - securejoin "github.com/cyphar/filepath-securejoin" - "tangled.org/core/api/tangled" + "tangled.org/core/appview/models" ) -type Repo struct { - Did string - Name string - Knot string - Rkey string - Created time.Time - Description string - Spindle string - Labels []string - - // optionally, populate this when querying for reverse mappings - RepoStats *RepoStats - - // optional - Source string -} - -func (r *Repo) AsRecord() tangled.Repo { - var source, spindle, description *string - - if r.Source != "" { - source = &r.Source - } - - if r.Spindle != "" { - spindle = &r.Spindle - } - - if r.Description != "" { - description = &r.Description - } - - return tangled.Repo{ - Knot: r.Knot, - Name: r.Name, - Description: description, - CreatedAt: r.Created.Format(time.RFC3339), - Source: source, - Spindle: spindle, - Labels: r.Labels, - } -} - -func (r Repo) RepoAt() syntax.ATURI { - return syntax.ATURI(fmt.Sprintf("at://%s/%s/%s", r.Did, tangled.RepoNSID, r.Rkey)) -} - -func (r Repo) DidSlashRepo() string { - p, _ := securejoin.SecureJoin(r.Did, r.Name) - return p -} - -func GetRepos(e Execer, limit int, filters ...filter) ([]Repo, error) { - repoMap := make(map[syntax.ATURI]*Repo) +func GetRepos(e Execer, limit int, filters ...filter) ([]models.Repo, error) { + repoMap := make(map[syntax.ATURI]*models.Repo) var conditions []string var args []any @@ -111,7 +58,7 @@ func GetRepos(e Execer, limit int, filters ...filter) ([]Repo, error) { } for rows.Next() { - var repo Repo + var repo models.Repo var createdAt string var description, source, spindle sql.NullString @@ -142,7 +89,7 @@ func GetRepos(e Execer, limit int, filters ...filter) ([]Repo, error) { repo.Spindle = spindle.String } - repo.RepoStats = &RepoStats{} + repo.RepoStats = &models.RepoStats{} repoMap[repo.RepoAt()] = &repo } @@ -320,12 +267,12 @@ func GetRepos(e Execer, limit int, filters ...filter) ([]Repo, error) { return nil, fmt.Errorf("failed to execute pulls-count query: %w ", err) } - var repos []Repo + var repos []models.Repo for _, r := range repoMap { repos = append(repos, *r) } - slices.SortFunc(repos, func(a, b Repo) int { + slices.SortFunc(repos, func(a, b models.Repo) int { if a.Created.After(b.Created) { return -1 } @@ -336,7 +283,7 @@ func GetRepos(e Execer, limit int, filters ...filter) ([]Repo, error) { } // helper to get exactly one repo -func GetRepo(e Execer, filters ...filter) (*Repo, error) { +func GetRepo(e Execer, filters ...filter) (*models.Repo, error) { repos, err := GetRepos(e, 0, filters...) if err != nil { return nil, err @@ -377,8 +324,8 @@ func CountRepos(e Execer, filters ...filter) (int64, error) { return count, nil } -func GetRepoByAtUri(e Execer, atUri string) (*Repo, error) { - var repo Repo +func GetRepoByAtUri(e Execer, atUri string) (*models.Repo, error) { + var repo models.Repo var nullableDescription sql.NullString row := e.QueryRow(`select did, name, knot, created, rkey, description from repos where at_uri = ?`, atUri) @@ -399,7 +346,7 @@ func GetRepoByAtUri(e Execer, atUri string) (*Repo, error) { return &repo, nil } -func AddRepo(e Execer, repo *Repo) error { +func AddRepo(e Execer, repo *models.Repo) error { _, err := e.Exec( `insert into repos (did, name, knot, rkey, at_uri, description, source) @@ -423,8 +370,8 @@ func GetRepoSource(e Execer, repoAt syntax.ATURI) (string, error) { return nullableSource.String, nil } -func GetForksByDid(e Execer, did string) ([]Repo, error) { - var repos []Repo +func GetForksByDid(e Execer, did string) ([]models.Repo, error) { + var repos []models.Repo rows, err := e.Query( `select distinct r.did, r.name, r.knot, r.rkey, r.description, r.created, r.source @@ -442,7 +389,7 @@ func GetForksByDid(e Execer, did string) ([]Repo, error) { defer rows.Close() for rows.Next() { - var repo Repo + var repo models.Repo var createdAt string var nullableDescription sql.NullString var nullableSource sql.NullString @@ -477,8 +424,8 @@ func GetForksByDid(e Execer, did string) ([]Repo, error) { return repos, nil } -func GetForkByDid(e Execer, did string, name string) (*Repo, error) { - var repo Repo +func GetForkByDid(e Execer, did string, name string) (*models.Repo, error) { + var repo models.Repo var createdAt string var nullableDescription sql.NullString var nullableSource sql.NullString @@ -525,20 +472,7 @@ func UpdateSpindle(e Execer, repoAt string, spindle *string) error { return err } -type RepoStats struct { - Language string - StarCount int - IssueCount IssueCount - PullCount PullCount -} - -type RepoLabel struct { - Id int64 - RepoAt syntax.ATURI - LabelAt syntax.ATURI -} - -func SubscribeLabel(e Execer, rl *RepoLabel) error { +func SubscribeLabel(e Execer, rl *models.RepoLabel) error { query := `insert or ignore into repo_labels (repo_at, label_at) values (?, ?)` _, err := e.Exec(query, rl.RepoAt.String(), rl.LabelAt.String()) @@ -563,7 +497,7 @@ func UnsubscribeLabel(e Execer, filters ...filter) error { return err } -func GetRepoLabels(e Execer, filters ...filter) ([]RepoLabel, error) { +func GetRepoLabels(e Execer, filters ...filter) ([]models.RepoLabel, error) { var conditions []string var args []any for _, filter := range filters { @@ -584,9 +518,9 @@ func GetRepoLabels(e Execer, filters ...filter) ([]RepoLabel, error) { } defer rows.Close() - var labels []RepoLabel + var labels []models.RepoLabel for rows.Next() { - var label RepoLabel + var label models.RepoLabel err := rows.Scan(&label.Id, &label.RepoAt, &label.LabelAt) if err != nil { diff --git a/appview/db/star.go b/appview/db/star.go index b7b44fc7..8355364f 100644 --- a/appview/db/star.go +++ b/appview/db/star.go @@ -9,6 +9,7 @@ import ( "time" "github.com/bluesky-social/indigo/atproto/syntax" + "tangled.org/core/appview/models" ) type Star struct { @@ -18,7 +19,7 @@ type Star struct { Rkey string // optionally, populate this when querying for reverse mappings - Repo *Repo + Repo *models.Repo } func (star *Star) ResolveRepo(e Execer) error { @@ -284,7 +285,7 @@ func GetAllStars(e Execer, limit int) ([]Star, error) { for rows.Next() { var star Star - var repo Repo + var repo models.Repo var starCreatedAt, repoCreatedAt string if err := rows.Scan( @@ -322,7 +323,7 @@ func GetAllStars(e Execer, limit int) ([]Star, error) { } // GetTopStarredReposLastWeek returns the top 8 most starred repositories from the last week -func GetTopStarredReposLastWeek(e Execer) ([]Repo, error) { +func GetTopStarredReposLastWeek(e Execer) ([]models.Repo, error) { // first, get the top repo URIs by star count from the last week query := ` with recent_starred_repos as ( @@ -366,7 +367,7 @@ func GetTopStarredReposLastWeek(e Execer) ([]Repo, error) { } if len(repoUris) == 0 { - return []Repo{}, nil + return []models.Repo{}, nil } // get full repo data @@ -376,12 +377,12 @@ func GetTopStarredReposLastWeek(e Execer) ([]Repo, error) { } // sort repos by the original trending order - repoMap := make(map[string]Repo) + repoMap := make(map[string]models.Repo) for _, repo := range repos { repoMap[repo.RepoAt().String()] = repo } - orderedRepos := make([]Repo, 0, len(repoUris)) + orderedRepos := make([]models.Repo, 0, len(repoUris)) for _, uri := range repoUris { if repo, exists := repoMap[uri]; exists { orderedRepos = append(orderedRepos, repo) diff --git a/appview/db/timeline.go b/appview/db/timeline.go index 4a56740e..47899c1c 100644 --- a/appview/db/timeline.go +++ b/appview/db/timeline.go @@ -9,14 +9,14 @@ import ( ) type TimelineEvent struct { - *Repo + *models.Repo *models.Follow *Star EventAt time.Time // optional: populate only if Repo is a fork - Source *Repo + Source *models.Repo // optional: populate only if event is Follow *Profile @@ -64,7 +64,7 @@ func MakeTimeline(e Execer, limit int, loggedInUserDid string) ([]TimelineEvent, return events, nil } -func fetchStarStatuses(e Execer, loggedInUserDid string, repos []Repo) (map[string]bool, error) { +func fetchStarStatuses(e Execer, loggedInUserDid string, repos []models.Repo) (map[string]bool, error) { if loggedInUserDid == "" { return nil, nil } @@ -77,7 +77,7 @@ func fetchStarStatuses(e Execer, loggedInUserDid string, repos []Repo) (map[stri return GetStarStatuses(e, loggedInUserDid, repoAts) } -func getRepoStarInfo(repo *Repo, starStatuses map[string]bool) (bool, int64) { +func getRepoStarInfo(repo *models.Repo, starStatuses map[string]bool) (bool, int64) { var isStarred bool if starStatuses != nil { isStarred = starStatuses[repo.RepoAt().String()] @@ -105,7 +105,7 @@ func getTimelineRepos(e Execer, limit int, loggedInUserDid string) ([]TimelineEv } } - var origRepos []Repo + var origRepos []models.Repo if args != nil { origRepos, err = GetRepos(e, 0, FilterIn("at_uri", args)) } @@ -113,7 +113,7 @@ func getTimelineRepos(e Execer, limit int, loggedInUserDid string) ([]TimelineEv return nil, err } - uriToRepo := make(map[string]Repo) + uriToRepo := make(map[string]models.Repo) for _, r := range origRepos { uriToRepo[r.RepoAt().String()] = r } @@ -125,7 +125,7 @@ func getTimelineRepos(e Execer, limit int, loggedInUserDid string) ([]TimelineEv var events []TimelineEvent for _, r := range repos { - var source *Repo + var source *models.Repo if r.Source != "" { if origRepo, ok := uriToRepo[r.Source]; ok { source = &origRepo @@ -162,7 +162,7 @@ func getTimelineStars(e Execer, limit int, loggedInUserDid string) ([]TimelineEv } stars = stars[:n] - var repos []Repo + var repos []models.Repo for _, s := range stars { repos = append(repos, *s.Repo) } diff --git a/appview/knots/knots.go b/appview/knots/knots.go index 678a8e47..97c4d2e9 100644 --- a/appview/knots/knots.go +++ b/appview/knots/knots.go @@ -13,6 +13,7 @@ import ( "tangled.org/core/appview/config" "tangled.org/core/appview/db" "tangled.org/core/appview/middleware" + "tangled.org/core/appview/models" "tangled.org/core/appview/oauth" "tangled.org/core/appview/pages" "tangled.org/core/appview/serververify" @@ -119,7 +120,7 @@ func (k *Knots) dashboard(w http.ResponseWriter, r *http.Request) { } // organize repos by did - repoMap := make(map[string][]db.Repo) + repoMap := make(map[string][]models.Repo) for _, r := range repos { repoMap[r.Did] = append(repoMap[r.Did], r) } diff --git a/appview/models/repo.go b/appview/models/repo.go new file mode 100644 index 00000000..8bc40544 --- /dev/null +++ b/appview/models/repo.go @@ -0,0 +1,87 @@ +package models + +import ( + "fmt" + "time" + + "github.com/bluesky-social/indigo/atproto/syntax" + securejoin "github.com/cyphar/filepath-securejoin" + "tangled.org/core/api/tangled" +) + +type Repo struct { + Did string + Name string + Knot string + Rkey string + Created time.Time + Description string + Spindle string + Labels []string + + // optionally, populate this when querying for reverse mappings + RepoStats *RepoStats + + // optional + Source string +} + +func (r *Repo) AsRecord() tangled.Repo { + var source, spindle, description *string + + if r.Source != "" { + source = &r.Source + } + + if r.Spindle != "" { + spindle = &r.Spindle + } + + if r.Description != "" { + description = &r.Description + } + + return tangled.Repo{ + Knot: r.Knot, + Name: r.Name, + Description: description, + CreatedAt: r.Created.Format(time.RFC3339), + Source: source, + Spindle: spindle, + Labels: r.Labels, + } +} + +func (r Repo) RepoAt() syntax.ATURI { + return syntax.ATURI(fmt.Sprintf("at://%s/%s/%s", r.Did, tangled.RepoNSID, r.Rkey)) +} + +func (r Repo) DidSlashRepo() string { + p, _ := securejoin.SecureJoin(r.Did, r.Name) + return p +} + +type RepoStats struct { + Language string + StarCount int + IssueCount IssueCount + PullCount PullCount +} + +type IssueCount struct { + Open int + Closed int +} + +type PullCount struct { + Open int + Merged int + Closed int + Deleted int +} + +type RepoLabel struct { + Id int64 + RepoAt syntax.ATURI + LabelAt syntax.ATURI +} diff --git a/appview/notify/merged_notifier.go b/appview/notify/merged_notifier.go index 10059897..aa854104 100644 --- a/appview/notify/merged_notifier.go +++ b/appview/notify/merged_notifier.go @@ -17,7 +17,7 @@ func NewMergedNotifier(notifiers ...Notifier) Notifier { var _ Notifier = &mergedNotifier{} -func (m *mergedNotifier) NewRepo(ctx context.Context, repo *db.Repo) { +func (m *mergedNotifier) NewRepo(ctx context.Context, repo *models.Repo) { for _, notifier := range m.notifiers { notifier.NewRepo(ctx, repo) } diff --git a/appview/notify/notifier.go b/appview/notify/notifier.go index 0cf00040..daf99cb1 100644 --- a/appview/notify/notifier.go +++ b/appview/notify/notifier.go @@ -8,7 +8,7 @@ import ( ) type Notifier interface { - NewRepo(ctx context.Context, repo *db.Repo) + NewRepo(ctx context.Context, repo *models.Repo) NewStar(ctx context.Context, star *db.Star) DeleteStar(ctx context.Context, star *db.Star) @@ -33,7 +33,7 @@ type BaseNotifier struct{} var _ Notifier = &BaseNotifier{} -func (m *BaseNotifier) NewRepo(ctx context.Context, repo *db.Repo) {} +func (m *BaseNotifier) NewRepo(ctx context.Context, repo *models.Repo) {} func (m *BaseNotifier) NewStar(ctx context.Context, star *db.Star) {} func (m *BaseNotifier) DeleteStar(ctx context.Context, star *db.Star) {} diff --git a/appview/pages/pages.go b/appview/pages/pages.go index 78113dd6..b0cad4e5 100644 --- a/appview/pages/pages.go +++ b/appview/pages/pages.go @@ -284,7 +284,7 @@ func (p *Pages) PrivacyPolicy(w io.Writer, params PrivacyPolicyParams) error { type TimelineParams struct { LoggedInUser *oauth.User Timeline []db.TimelineEvent - Repos []db.Repo + Repos []models.Repo } func (p *Pages) Timeline(w io.Writer, params TimelineParams) error { @@ -345,7 +345,7 @@ type KnotParams struct { LoggedInUser *oauth.User Registration *db.Registration Members []string - Repos map[string][]db.Repo + Repos map[string][]models.Repo IsOwner bool } @@ -382,7 +382,7 @@ type SpindleDashboardParams struct { LoggedInUser *oauth.User Spindle db.Spindle Members []string - Repos map[string][]db.Repo + Repos map[string][]models.Repo } func (p *Pages) SpindleDashboard(w io.Writer, params SpindleDashboardParams) error { @@ -439,8 +439,8 @@ func (p *ProfileCard) GetTabs() [][]any { type ProfileOverviewParams struct { LoggedInUser *oauth.User - Repos []db.Repo - CollaboratingRepos []db.Repo + Repos []models.Repo + CollaboratingRepos []models.Repo ProfileTimeline *db.ProfileTimeline Card *ProfileCard Active string @@ -453,7 +453,7 @@ func (p *Pages) ProfileOverview(w io.Writer, params ProfileOverviewParams) error type ProfileReposParams struct { LoggedInUser *oauth.User - Repos []db.Repo + Repos []models.Repo Card *ProfileCard Active string } @@ -465,7 +465,7 @@ func (p *Pages) ProfileRepos(w io.Writer, params ProfileReposParams) error { type ProfileStarredParams struct { LoggedInUser *oauth.User - Repos []db.Repo + Repos []models.Repo Card *ProfileCard Active string } @@ -545,7 +545,7 @@ type EditPinsParams struct { type PinnedRepo struct { IsPinned bool - db.Repo + models.Repo } func (p *Pages) EditPinsFragment(w io.Writer, params EditPinsParams) error { @@ -555,7 +555,7 @@ func (p *Pages) EditPinsFragment(w io.Writer, params EditPinsParams) error { type RepoStarFragmentParams struct { IsStarred bool RepoAt syntax.ATURI - Stats db.RepoStats + Stats models.RepoStats } func (p *Pages) RepoStarFragment(w io.Writer, params RepoStarFragmentParams) error { @@ -1122,7 +1122,7 @@ func (p *Pages) PullCompareBranchesFragment(w io.Writer, params PullCompareBranc type PullCompareForkParams struct { RepoInfo repoinfo.RepoInfo - Forks []db.Repo + Forks []models.Repo Selected string } @@ -1179,7 +1179,7 @@ func (p *Pages) PullNewCommentFragment(w io.Writer, params PullNewCommentParams) type RepoCompareParams struct { LoggedInUser *oauth.User RepoInfo repoinfo.RepoInfo - Forks []db.Repo + Forks []models.Repo Branches []types.Branch Tags []*types.TagReference Base string @@ -1198,7 +1198,7 @@ func (p *Pages) RepoCompare(w io.Writer, params RepoCompareParams) error { type RepoCompareNewParams struct { LoggedInUser *oauth.User RepoInfo repoinfo.RepoInfo - Forks []db.Repo + Forks []models.Repo Branches []types.Branch Tags []*types.TagReference Base string diff --git a/appview/pages/repoinfo/repoinfo.go b/appview/pages/repoinfo/repoinfo.go index 5ed433ad..eeb99b6b 100644 --- a/appview/pages/repoinfo/repoinfo.go +++ b/appview/pages/repoinfo/repoinfo.go @@ -7,7 +7,7 @@ import ( "strings" "github.com/bluesky-social/indigo/atproto/syntax" - "tangled.org/core/appview/db" + "tangled.org/core/appview/models" "tangled.org/core/appview/state/userutil" ) @@ -60,9 +60,9 @@ type RepoInfo struct { Spindle string RepoAt syntax.ATURI IsStarred bool - Stats db.RepoStats + Stats models.RepoStats Roles RolesInRepo - Source *db.Repo + Source *models.Repo SourceHandle string Ref string DisableFork bool diff --git a/appview/posthog/notifier.go b/appview/posthog/notifier.go index 75a3dd70..4a2e577c 100644 --- a/appview/posthog/notifier.go +++ b/appview/posthog/notifier.go @@ -24,7 +24,7 @@ func NewPosthogNotifier(client posthog.Client) notify.Notifier { var _ notify.Notifier = &posthogNotifier{} -func (n *posthogNotifier) NewRepo(ctx context.Context, repo *db.Repo) { +func (n *posthogNotifier) NewRepo(ctx context.Context, repo *models.Repo) { err := n.client.Enqueue(posthog.Capture{ DistinctId: repo.Did, Event: "new_repo", diff --git a/appview/pulls/pulls.go b/appview/pulls/pulls.go index 4b2b5661..eccff0f9 100644 --- a/appview/pulls/pulls.go +++ b/appview/pulls/pulls.go @@ -15,6 +15,7 @@ import ( "tangled.org/core/api/tangled" "tangled.org/core/appview/config" "tangled.org/core/appview/db" + "tangled.org/core/appview/models" "tangled.org/core/appview/notify" "tangled.org/core/appview/oauth" "tangled.org/core/appview/pages" @@ -500,7 +501,7 @@ func (s *Pulls) RepoPulls(w http.ResponseWriter, r *http.Request) { } for _, p := range pulls { - var pullSourceRepo *db.Repo + var pullSourceRepo *models.Repo if p.PullSource != nil { if p.PullSource.RepoAt != nil { pullSourceRepo, err = db.GetRepoByAtUri(s.db, p.PullSource.RepoAt.String()) diff --git a/appview/repo/repo.go b/appview/repo/repo.go index 3ea5dfe2..bd43dcaf 100644 --- a/appview/repo/repo.go +++ b/appview/repo/repo.go @@ -1110,7 +1110,7 @@ func (rp *Repo) AddLabelDef(w http.ResponseWriter, r *http.Request) { return } - err = db.SubscribeLabel(tx, &db.RepoLabel{ + err = db.SubscribeLabel(tx, &models.RepoLabel{ RepoAt: f.RepoAt(), LabelAt: label.AtUri(), }) @@ -1286,7 +1286,7 @@ func (rp *Repo) SubscribeLabel(w http.ResponseWriter, r *http.Request) { }, }) - err = db.SubscribeLabel(rp.db, &db.RepoLabel{ + err = db.SubscribeLabel(rp.db, &models.RepoLabel{ RepoAt: f.RepoAt(), LabelAt: syntax.ATURI(labelAt), }) @@ -2142,7 +2142,7 @@ func (rp *Repo) ForkRepo(w http.ResponseWriter, r *http.Request) { // create an atproto record for this fork rkey := tid.TID() - repo := &db.Repo{ + repo := &models.Repo{ Did: user.Did, Name: forkName, Knot: targetKnot, diff --git a/appview/reporesolver/resolver.go b/appview/reporesolver/resolver.go index 43b81dfe..24575486 100644 --- a/appview/reporesolver/resolver.go +++ b/appview/reporesolver/resolver.go @@ -16,6 +16,7 @@ import ( "github.com/go-chi/chi/v5" "tangled.org/core/appview/config" "tangled.org/core/appview/db" + "tangled.org/core/appview/models" "tangled.org/core/appview/oauth" "tangled.org/core/appview/pages" "tangled.org/core/appview/pages/repoinfo" @@ -24,7 +25,7 @@ import ( ) type ResolvedRepo struct { - db.Repo + models.Repo OwnerId identity.Identity CurrentDir string Ref string @@ -44,7 +45,7 @@ func New(config *config.Config, enforcer *rbac.Enforcer, resolver *idresolver.Re } func (rr *RepoResolver) Resolve(r *http.Request) (*ResolvedRepo, error) { - repo, ok := r.Context().Value("repo").(*db.Repo) + repo, ok := r.Context().Value("repo").(*models.Repo) if !ok { log.Println("malformed middleware: `repo` not exist in context") return nil, fmt.Errorf("malformed middleware") @@ -162,7 +163,7 @@ func (f *ResolvedRepo) RepoInfo(user *oauth.User) repoinfo.RepoInfo { log.Println("failed to get repo source for ", repoAt, err) } - var sourceRepo *db.Repo + var sourceRepo *models.Repo if source != "" { sourceRepo, err = db.GetRepoByAtUri(f.rr.execer, source) if err != nil { @@ -191,7 +192,7 @@ func (f *ResolvedRepo) RepoInfo(user *oauth.User) repoinfo.RepoInfo { Knot: knot, Spindle: f.Spindle, Roles: f.RolesInRepo(user), - Stats: db.RepoStats{ + Stats: models.RepoStats{ StarCount: starCount, IssueCount: issueCount, PullCount: pullCount, diff --git a/appview/spindles/spindles.go b/appview/spindles/spindles.go index d175c092..2a62fd55 100644 --- a/appview/spindles/spindles.go +++ b/appview/spindles/spindles.go @@ -13,6 +13,7 @@ import ( "tangled.org/core/appview/config" "tangled.org/core/appview/db" "tangled.org/core/appview/middleware" + "tangled.org/core/appview/models" "tangled.org/core/appview/oauth" "tangled.org/core/appview/pages" "tangled.org/core/appview/serververify" @@ -115,7 +116,7 @@ func (s *Spindles) dashboard(w http.ResponseWriter, r *http.Request) { } // organize repos by did - repoMap := make(map[string][]db.Repo) + repoMap := make(map[string][]models.Repo) for _, r := range repos { repoMap[r.Did] = append(repoMap[r.Did], r) } diff --git a/appview/state/git_http.go b/appview/state/git_http.go index e1959505..36ce3e8d 100644 --- a/appview/state/git_http.go +++ b/appview/state/git_http.go @@ -8,12 +8,12 @@ import ( "github.com/bluesky-social/indigo/atproto/identity" "github.com/go-chi/chi/v5" - "tangled.org/core/appview/db" + "tangled.org/core/appview/models" ) func (s *State) InfoRefs(w http.ResponseWriter, r *http.Request) { user := r.Context().Value("resolvedId").(identity.Identity) - repo := r.Context().Value("repo").(*db.Repo) + repo := r.Context().Value("repo").(*models.Repo) scheme := "https" if s.config.Core.Dev { @@ -31,7 +31,7 @@ func (s *State) UploadPack(w http.ResponseWriter, r *http.Request) { http.Error(w, "failed to resolve user", http.StatusInternalServerError) return } - repo := r.Context().Value("repo").(*db.Repo) + repo := r.Context().Value("repo").(*models.Repo) scheme := "https" if s.config.Core.Dev { @@ -48,7 +48,7 @@ func (s *State) ReceivePack(w http.ResponseWriter, r *http.Request) { http.Error(w, "failed to resolve user", http.StatusInternalServerError) return } - repo := r.Context().Value("repo").(*db.Repo) + repo := r.Context().Value("repo").(*models.Repo) scheme := "https" if s.config.Core.Dev { diff --git a/appview/state/profile.go b/appview/state/profile.go index 2c7e7d71..b9c45c7d 100644 --- a/appview/state/profile.go +++ b/appview/state/profile.go @@ -131,7 +131,7 @@ func (s *State) profileOverview(w http.ResponseWriter, r *http.Request) { } // filter out ones that are pinned - pinnedRepos := []db.Repo{} + pinnedRepos := []models.Repo{} for i, r := range repos { // if this is a pinned repo, add it if slices.Contains(profile.Profile.PinnedRepos[:], r.RepoAt()) { @@ -149,7 +149,7 @@ func (s *State) profileOverview(w http.ResponseWriter, r *http.Request) { l.Error("failed to fetch collaborating repos", "err", err) } - pinnedCollaboratingRepos := []db.Repo{} + pinnedCollaboratingRepos := []models.Repo{} for _, r := range collaboratingRepos { // if this is a pinned repo, add it if slices.Contains(profile.Profile.PinnedRepos[:], r.RepoAt()) { diff --git a/appview/state/star.go b/appview/state/star.go index 99872760..d9df1829 100644 --- a/appview/state/star.go +++ b/appview/state/star.go @@ -10,6 +10,7 @@ import ( lexutil "github.com/bluesky-social/indigo/lex/util" "tangled.org/core/api/tangled" "tangled.org/core/appview/db" + "tangled.org/core/appview/models" "tangled.org/core/appview/pages" "tangled.org/core/tid" ) @@ -77,7 +78,7 @@ func (s *State) Star(w http.ResponseWriter, r *http.Request) { s.pages.RepoStarFragment(w, pages.RepoStarFragmentParams{ IsStarred: true, RepoAt: subjectUri, - Stats: db.RepoStats{ + Stats: models.RepoStats{ StarCount: starCount, }, }) @@ -119,7 +120,7 @@ func (s *State) Star(w http.ResponseWriter, r *http.Request) { s.pages.RepoStarFragment(w, pages.RepoStarFragmentParams{ IsStarred: false, RepoAt: subjectUri, - Stats: db.RepoStats{ + Stats: models.RepoStats{ StarCount: starCount, }, }) diff --git a/appview/state/state.go b/appview/state/state.go index 9a4d540c..197c735e 100644 --- a/appview/state/state.go +++ b/appview/state/state.go @@ -23,6 +23,7 @@ import ( "tangled.org/core/appview/cache/session" "tangled.org/core/appview/config" "tangled.org/core/appview/db" + "tangled.org/core/appview/models" "tangled.org/core/appview/notify" "tangled.org/core/appview/oauth" "tangled.org/core/appview/pages" @@ -36,7 +37,6 @@ import ( tlog "tangled.org/core/log" "tangled.org/core/rbac" "tangled.org/core/tid" - // xrpcerr "tangled.org/core/xrpc/errors" ) type State struct { @@ -433,7 +433,7 @@ func (s *State) NewRepo(w http.ResponseWriter, r *http.Request) { // create atproto record for this repo rkey := tid.TID() - repo := &db.Repo{ + repo := &models.Repo{ Did: user.Did, Name: repoName, Knot: domain, -- 2.51.2