forked from tangled.org/core
Monorepo for Tangled — https://tangled.org
1package handler 2 3import ( 4 "net/http" 5 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" 16) 17 18func RepoIssues(is isvc.Service, rs rsvc.Service, p *pages.Pages, d *db.DB) http.HandlerFunc { 19 return func(w http.ResponseWriter, r *http.Request) { 20 ctx := r.Context() 21 l := log.FromContext(ctx).With("handler", "RepoIssues") 22 repo, ok := request.RepoFromContext(ctx) 23 if !ok { 24 l.Error("malformed request") 25 p.Error503(w) 26 return 27 } 28 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), 35 } 36 37 issues, err := is.GetIssues(ctx, repo, searchOpts) 38 if err != nil { 39 l.Error("failed to get issues") 40 p.Error503(w) 41 return 42 } 43 44 // render page 45 err = func() error { 46 user := session.UserFromContext(ctx) 47 repoinfo, err := rs.GetRepoInfo(ctx, repo, user) 48 if err != nil { 49 return err 50 } 51 labelDefs, err := db.GetLabelDefinitions( 52 d, 53 db.FilterIn("at_uri", repo.Labels), 54 db.FilterContains("scope", tangled.RepoIssueNSID), 55 ) 56 if err != nil { 57 return err 58 } 59 defs := make(map[string]*models.LabelDefinition) 60 for _, l := range labelDefs { 61 defs[l.AtUri().String()] = &l 62 } 63 return p.RepoIssues(w, pages.RepoIssuesParams{ 64 LoggedInUser: user, 65 RepoInfo: *repoinfo, 66 67 Issues: issues, 68 LabelDefs: defs, 69 FilteringByOpen: searchOpts.IsOpen, 70 FilterQuery: searchOpts.Keyword, 71 Page: searchOpts.Page, 72 }) 73 }() 74 if err != nil { 75 l.Error("failed to render", "err", err) 76 p.Error503(w) 77 return 78 } 79 } 80}