func()

in server/route.go [33:91]


func (srv *Server) initHandlers() {
	engine := srv.engine
	engine.Use(middleware.CollectMetrics, func(c *gin.Context) {
		c.Set(consts.ContextKeyStore, srv.store)
		c.Next()
	}, middleware.RedirectIfNotLeader)
	handler := api.NewHandler(srv.store)

	engine.Any("/debug/pprof/*profile", PProf)
	engine.GET("/metrics", gin.WrapH(promhttp.Handler()))
	engine.NoRoute(func(c *gin.Context) {
		helper.ResponseError(c, consts.ErrNotFound)
		c.Abort()
	})

	apiV1 := engine.Group("/api/v1/")
	{
		raftAPI := apiV1.Group("raft")
		{
			raftAPI.Use(middleware.RequiredRaftEngine)
			raftAPI.POST("/peers", handler.Raft.UpdatePeer)
			raftAPI.GET("/peers", handler.Raft.ListPeers)
		}

		namespaces := apiV1.Group("namespaces")
		{
			namespaces.GET("", handler.Namespace.List)
			namespaces.GET("/:namespace", handler.Namespace.Exists)
			namespaces.POST("", handler.Namespace.Create)
			namespaces.DELETE("/:namespace", handler.Namespace.Remove)
		}

		clusters := namespaces.Group("/:namespace/clusters")
		{
			clusters.GET("", middleware.RequiredNamespace, handler.Cluster.List)
			clusters.POST("", middleware.RequiredNamespace, handler.Cluster.Create)
			clusters.POST("/:cluster/import", middleware.RequiredNamespace, handler.Cluster.Import)
			clusters.GET("/:cluster", middleware.RequiredCluster, handler.Cluster.Get)
			clusters.DELETE("/:cluster", middleware.RequiredCluster, handler.Cluster.Remove)
			clusters.POST("/:cluster/migrate", middleware.RequiredCluster, handler.Cluster.MigrateSlot)
		}

		shards := clusters.Group("/:cluster/shards")
		{
			shards.GET("", middleware.RequiredCluster, handler.Shard.List)
			shards.POST("", middleware.RequiredCluster, handler.Shard.Create)
			shards.GET("/:shard", middleware.RequiredClusterShard, handler.Shard.Get)
			shards.DELETE("/:shard", middleware.RequiredCluster, handler.Shard.Remove)
			shards.POST("/:shard/failover", middleware.RequiredClusterShard, handler.Shard.Failover)
		}

		nodes := shards.Group("/:shard/nodes")
		{
			nodes.GET("", middleware.RequiredClusterShard, handler.Node.List)
			nodes.POST("", middleware.RequiredClusterShard, handler.Node.Create)
			nodes.DELETE("/:id", middleware.RequiredClusterShard, handler.Node.Remove)
		}
	}
}