Monorepo for Tangled
tangled.org
1package pulls
2
3import (
4 "net/http"
5
6 "github.com/go-chi/chi/v5"
7 "tangled.org/core/appview/middleware"
8)
9
10func (s *Pulls) Router(mw *middleware.Middleware) http.Handler {
11 r := chi.NewRouter()
12 r.With(middleware.Paginate).Get("/", s.RepoPulls)
13 r.With(middleware.AuthMiddleware(s.oauth)).Route("/new", func(r chi.Router) {
14 r.Get("/", s.NewPull)
15 r.Get("/refresh", s.RefreshCompose)
16 r.Post("/refresh", s.RefreshCompose)
17 r.Post("/", s.NewPull)
18 })
19
20 r.Route("/{pull}", func(r chi.Router) {
21 r.Use(mw.ResolvePull())
22 r.Get("/", s.RepoSinglePull)
23 r.Get("/opengraph", s.PullOpenGraphSummary)
24
25 r.Route("/round/{round}", func(r chi.Router) {
26 r.Get("/", s.RepoPullPatch)
27 r.Get("/interdiff", s.RepoPullInterdiff)
28 r.Get("/actions", s.PullActions)
29 r.Get("/comment", s.PullComment)
30 })
31
32 r.Route("/round/{round}.patch", func(r chi.Router) {
33 r.Get("/", s.RepoPullPatchRaw)
34 })
35
36 r.Group(func(r chi.Router) {
37 r.Use(middleware.AuthMiddleware(s.oauth))
38 r.Route("/resubmit", func(r chi.Router) {
39 r.Get("/", s.ResubmitPull)
40 r.Post("/", s.ResubmitPull)
41 })
42 // permissions here require us to know pull author
43 // it is handled within the route
44 r.Post("/close", s.ClosePull)
45 r.Post("/reopen", s.ReopenPull)
46 // collaborators only
47 r.Group(func(r chi.Router) {
48 r.Use(mw.RepoPermissionMiddleware("repo:push"))
49 r.Post("/merge", s.MergePull)
50 // maybe lock, etc.
51 })
52 })
53 })
54 return r
55
56}