50 lines
1.6 KiB
Go
50 lines
1.6 KiB
Go
package api
|
|
|
|
import (
|
|
"net/http"
|
|
|
|
"github.com/go-chi/chi/v5"
|
|
"github.com/go-chi/chi/v5/middleware"
|
|
)
|
|
|
|
func NewRouter(repoHandler *RepoHandler, cloneHandler *CloneHandler, syncHandler *SyncHandler, snapshotHandler *SnapshotHandler, proxyHandler *ProxyHandler) http.Handler {
|
|
r := chi.NewRouter()
|
|
r.Use(middleware.Logger)
|
|
r.Use(middleware.Recoverer)
|
|
r.Use(middleware.RequestID)
|
|
|
|
r.Get("/mirror/{repo_id}/*", proxyHandler.ServeFile)
|
|
|
|
r.Get("/health", func(w http.ResponseWriter, r *http.Request) {
|
|
JSON(w, http.StatusOK, map[string]string{"status": "ok"})
|
|
})
|
|
|
|
r.Route("/api/v1", func(r chi.Router) {
|
|
r.Route("/repos", func(r chi.Router) {
|
|
r.Post("/", repoHandler.Create)
|
|
r.Get("/", repoHandler.List)
|
|
r.Get("/{id}", repoHandler.Get)
|
|
r.Delete("/{id}", repoHandler.Delete)
|
|
|
|
r.Post("/{id}/clone", cloneHandler.StartClone)
|
|
r.Get("/{id}/clone/status", cloneHandler.GetStatus)
|
|
|
|
r.Post("/{id}/sync/trigger", syncHandler.Trigger)
|
|
r.Get("/{id}/sync/pending", syncHandler.ListPending)
|
|
r.Post("/{id}/sync/approve", syncHandler.Approve)
|
|
r.Post("/{id}/sync/reject", syncHandler.Reject)
|
|
r.Post("/{id}/sync/block", syncHandler.Block)
|
|
r.Post("/{id}/sync/unblock", syncHandler.Unblock)
|
|
r.Get("/{id}/sync/blocked", syncHandler.ListBlocked)
|
|
|
|
r.Post("/{id}/snapshots", snapshotHandler.Create)
|
|
r.Get("/{id}/snapshots", snapshotHandler.List)
|
|
r.Get("/{id}/snapshots/diff", snapshotHandler.Diff)
|
|
r.Get("/{id}/snapshots/{snap_id}", snapshotHandler.Get)
|
|
r.Delete("/{id}/snapshots/{snap_id}", snapshotHandler.Delete)
|
|
r.Post("/{id}/snapshots/{snap_id}/rollback", snapshotHandler.Rollback)
|
|
})
|
|
})
|
|
|
|
return r
|
|
}
|