diff --git a/appview/db/repos.go b/appview/db/repos.go index c249277..127e5d5 100644 --- a/appview/db/repos.go +++ b/appview/db/repos.go @@ -243,6 +243,69 @@ func CollaboratingIn(e Execer, collaborator string) ([]Repo, error) { return repos, nil } +func GetStarredRepos(e Execer, did string) ([]Repo, error) { + var repos []Repo + + rows, err := e.Query( + `select + r.did, + r.name, + r.knot, + r.rkey, + r.description, + r.created, + count(s.id) as star_count + from + repos r + join + stars s on r.at_uri = s.repo_at + left join + stars su on r.at_uri = su.repo_at + where + su.starred_by_did = ? + group by + r.at_uri`, did) + if err != nil { + return nil, err + } + defer rows.Close() + + for rows.Next() { + var repo Repo + var repoStats RepoStats + var createdAt string + var nullableDescription sql.NullString + + err := rows.Scan(&repo.Did, &repo.Name, &repo.Knot, &repo.Rkey, &nullableDescription, &createdAt, &repoStats.StarCount) + if err != nil { + return nil, err + } + + if nullableDescription.Valid { + repo.Description = nullableDescription.String + } else { + repo.Description = "" + } + + createdAtTime, err := time.Parse(time.RFC3339, createdAt) + if err != nil { + repo.Created = time.Now() + } else { + repo.Created = createdAtTime + } + + repo.RepoStats = &repoStats + + repos = append(repos, repo) + } + + if err := rows.Err(); err != nil { + return nil, err + } + + return repos, nil +} + type RepoStats struct { StarCount int IssueCount IssueCount diff --git a/appview/pages/pages.go b/appview/pages/pages.go index 670fe7e..8a5955a 100644 --- a/appview/pages/pages.go +++ b/appview/pages/pages.go @@ -111,6 +111,7 @@ func (p *Pages) Login(w io.Writer, params LoginParams) error { type TimelineParams struct { LoggedInUser *auth.User Timeline []db.TimelineEvent + StarredRepos []db.Repo DidHandleMap map[string]string } diff --git a/appview/pages/templates/timeline.html b/appview/pages/templates/timeline.html index 88b6bfd..49338b6 100644 --- a/appview/pages/templates/timeline.html +++ b/appview/pages/templates/timeline.html @@ -9,6 +9,7 @@ {{ define "content" }} {{ with .LoggedInUser }} + {{ block "starredRepos" $ }} {{ end }} {{ block "timeline" $ }} {{ end }} {{ else }} {{ block "hero" $ }} {{ end }} @@ -29,6 +30,45 @@ {{ end }} +{{ define "starredRepos" }} +
Starred Repos
+You have not starred any repos yet.
+ {{ end }} +