This repository has no description
0

Configure Feed

Select the types of activity you want to include in your feed.

core / appview / pulls / middleware.go
1.2 kB 45 lines
1package pulls 2 3import ( 4 "context" 5 "net/http" 6 "strconv" 7 8 "github.com/go-chi/chi/v5" 9 "tangled.org/core/appview/db" 10 "tangled.org/core/orm" 11) 12 13// middleware that is tacked on top of /{user}/{repo}/pulls/{pull} 14func (s *Pulls) ResolvePullMiddleware(next http.Handler) http.Handler { 15 return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { 16 l := s.logger.With("middleware", "ResolvePullMiddleware") 17 f, err := s.repoResolver.Resolve(r) 18 if err != nil { 19 l.Error("failed to fully resolve repo", "err", err) 20 w.WriteHeader(http.StatusNotFound) 21 s.pages.ErrorKnot404(w) 22 return 23 } 24 25 prId, err := strconv.Atoi(chi.URLParam(r, "pull")) 26 if err != nil { 27 l.Debug("failed to parse pr id", "err", err) 28 w.WriteHeader(http.StatusNotFound) 29 s.pages.Error404(w) 30 return 31 } 32 33 pr, err := db.GetPull(r.Context(), s.db, orm.FilterEq("repo_did", f.RepoDid), orm.FilterEq("pull_id", prId)) 34 if err != nil { 35 l.Debug("failed to query PR", "err", err) 36 w.WriteHeader(http.StatusNotFound) 37 s.pages.Error404(w) 38 return 39 } 40 41 ctx := context.WithValue(r.Context(), "pull", pr) 42 43 next.ServeHTTP(w, r.WithContext(ctx)) 44 }) 45}