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_ref}/*", 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.Patch("/{id}", repoHandler.Update) 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 }