this repo has no description
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 "tangled.org/core/orm" 17) 18 19func RepoIssues(is isvc.Service, rs rsvc.Service, p *pages.Pages, d *db.DB) http.HandlerFunc { 20 return func(w http.ResponseWriter, r *http.Request) { 21 ctx := r.Context() 22 l := log.FromContext(ctx).With("handler", "RepoIssues") 23 repo, ok := request.RepoFromContext(ctx) 24 if !ok { 25 l.Error("malformed request") 26 p.Error503(w) 27 return 28 } 29 repoOwnerId, ok := request.OwnerFromContext(ctx) 30 if !ok { 31 l.Error("malformed request") 32 p.Error503(w) 33 return 34 } 35 36 query := r.URL.Query() 37 searchOpts := models.IssueSearchOptions{ 38 RepoAt: repo.RepoAt().String(), 39 Keyword: query.Get("q"), 40 IsOpen: query.Get("state") != "closed", 41 Page: pagination.FromContext(ctx), 42 } 43 44 issues, err := is.GetIssues(ctx, repo, searchOpts) 45 if err != nil { 46 l.Error("failed to get issues") 47 p.Error503(w) 48 return 49 } 50 51 // render page 52 err = func() error { 53 user := session.UserFromContext(ctx) 54 repoinfo, err := rs.GetRepoInfo(ctx, repoOwnerId, repo, "", "", user) 55 if err != nil { 56 return err 57 } 58 labelDefs, err := db.GetLabelDefinitions( 59 d, 60 orm.FilterIn("at_uri", repo.Labels), 61 orm.FilterContains("scope", tangled.RepoIssueNSID), 62 ) 63 if err != nil { 64 return err 65 } 66 defs := make(map[string]*models.LabelDefinition) 67 for _, l := range labelDefs { 68 defs[l.AtUri().String()] = &l 69 } 70 return p.RepoIssues(w, pages.RepoIssuesParams{ 71 LoggedInUser: user, 72 RepoInfo: *repoinfo, 73 74 Issues: issues, 75 LabelDefs: defs, 76 FilteringByOpen: searchOpts.IsOpen, 77 FilterQuery: searchOpts.Keyword, 78 Page: searchOpts.Page, 79 }) 80 }() 81 if err != nil { 82 l.Error("failed to render", "err", err) 83 p.Error503(w) 84 return 85 } 86 } 87}