···
6
+
"tangled.org/core/api/tangled"
7
+
"tangled.org/core/appview/db"
8
+
"tangled.org/core/appview/models"
9
+
"tangled.org/core/appview/pages"
10
+
"tangled.org/core/appview/pagination"
11
+
isvc "tangled.org/core/appview/service/issue"
12
+
rsvc "tangled.org/core/appview/service/repo"
13
+
"tangled.org/core/appview/session"
14
+
"tangled.org/core/appview/web/request"
15
+
"tangled.org/core/log"
18
+
func RepoIssues(is isvc.Service, rs rsvc.Service, p *pages.Pages, d *db.DB) http.HandlerFunc {
19
+
return func(w http.ResponseWriter, r *http.Request) {
21
+
l := log.FromContext(ctx).With("handler", "RepoIssues")
22
+
repo, ok := request.RepoFromContext(ctx)
24
+
l.Error("malformed request")
29
+
query := r.URL.Query()
30
+
searchOpts := models.IssueSearchOptions{
31
+
RepoAt: repo.RepoAt().String(),
32
+
Keyword: query.Get("q"),
33
+
IsOpen: query.Get("state") != "closed",
34
+
Page: pagination.FromContext(ctx),
37
+
issues, err := is.GetIssues(ctx, repo, searchOpts)
39
+
l.Error("failed to get issues")
45
+
err = func() error {
46
+
user := session.UserFromContext(ctx)
47
+
repoinfo, err := rs.GetRepoInfo(ctx, repo, user)
51
+
labelDefs, err := db.GetLabelDefinitions(
53
+
db.FilterIn("at_uri", repo.Labels),
54
+
db.FilterContains("scope", tangled.RepoIssueNSID),
59
+
defs := make(map[string]*models.LabelDefinition)
60
+
for _, l := range labelDefs {
61
+
defs[l.AtUri().String()] = &l
63
+
return p.RepoIssues(w, pages.RepoIssuesParams{
65
+
RepoInfo: *repoinfo,
69
+
FilteringByOpen: searchOpts.IsOpen,
70
+
FilterQuery: searchOpts.Keyword,
71
+
Page: searchOpts.Page,
75
+
l.Error("failed to render", "err", err)