package api import ( "net/http" "reflect" "strconv" jwt "github.com/appleboy/gin-jwt/v2" "github.com/gin-gonic/gin" "joylink.club/bj-rtsts-server/config" "joylink.club/bj-rtsts-server/dto" "joylink.club/bj-rtsts-server/middleware" "joylink.club/bj-rtsts-server/service" "joylink.club/bj-rtsts-server/sys_error" ) func InitProjectRunConfigRouter(api *gin.RouterGroup, authMiddleware *jwt.GinJWTMiddleware) { authed := api.Group("/v1/runconfig").Use(authMiddleware.MiddlewareFunc(), middleware.PermissMiddleware) authed.GET("/paging", pageQueryProjectRunConfig) authed.GET("/list", listQueryProjectRunConfig) authed.POST("", createProjectRunConfig) authed.GET("/:id", queryProjectRunConfig) authed.PUT("/:id", updateProjectRunConfig) authed.DELETE("/:id", deleteProjectRunConfig) authed.GET("/description", getRunCofigDescription) } // 分页查询项目运行环境配置信息 // // @Summary 分页查询项目运行环境配置信息 // // @Security JwtAuth // // @Description 可以通过项目名称过滤,分页查询项目运行环境配置信息 // @Tags 项目运行环境配置Api // @Accept json // @Produce json // @Param PageProjectRunConfigReqDto query dto.PageProjectRunConfigReqDto true "运行环境配置查询条件带分页信息" // @Success 200 {object} dto.PageDto // @Failure 401 {object} dto.ErrorDto // @Failure 404 {object} dto.ErrorDto // @Failure 500 {object} dto.ErrorDto // @Router /api/v1/runconfig/paging [get] func pageQueryProjectRunConfig(c *gin.Context) { req := dto.PageProjectRunConfigReqDto{} if err := c.ShouldBind(&req); err != nil { panic(sys_error.New("查询失败,参数格式错误", err)) } c.JSON(http.StatusOK, service.PageProjectRunConfigQuery(&req)) } // 查询项目运行环境配置信息列表 // // @Summary 查询项目运行环境配置信息列表 // // @Security JwtAuth // // @Description 无参数,查询项目运行环境配置列表 // @Tags 项目运行环境配置Api // @Accept json // @Produce json // @Success 200 {object} dto.ProjectRunConfigDto // @Failure 401 {object} dto.ErrorDto // @Failure 404 {object} dto.ErrorDto // @Failure 500 {object} dto.ErrorDto // @Router /api/v1/runconfig/list [get] func listQueryProjectRunConfig(c *gin.Context) { c.JSON(http.StatusOK, service.ListProjectRunConfigQuery()) } // 创建项目运行环境配置信息 // // @Summary 创建项目运行环境配置信息 // // @Security JwtAuth // // @Description 创建项目运行环境配置数据 // @Tags 项目运行环境配置Api // @Accept json // @Produce json // @Param ProjectRunConfigReqDto query dto.ProjectRunConfigReqDto true "创建的项目运行环境配置信息" // @Success 200 {object} nil // @Failure 401 {object} dto.ErrorDto // @Failure 404 {object} dto.ErrorDto // @Failure 500 {object} dto.ErrorDto // @Router /api/v1/runconfig [post] func createProjectRunConfig(c *gin.Context) { req := dto.ProjectRunConfigReqDto{} if err := c.ShouldBind(&req); err != nil { panic(sys_error.New("创建失败,参数格式错误", err)) } c.JSON(http.StatusOK, service.CreateProjectRunConfig(&req)) } // 查询项目运行环境信息 // // @Summary 查询项目运行环境信息 // // @Security JwtAuth // // @Description 查询项目运行环境信息 // @Tags 项目运行环境配置Api // @Accept json // @Produce json // @Param id path int true "项目运行环境ID" // @Success 200 {object} dto.ProjectRunConfigDto // @Failure 401 {object} dto.ErrorDto // @Failure 404 {object} dto.ErrorDto // @Failure 500 {object} dto.ErrorDto // @Router /api/v1/runconfig/{id} [get] func queryProjectRunConfig(c *gin.Context) { id, exist := c.Params.Get("id") if !exist { panic(sys_error.New("查询失败,缺少主键")) } intId, _ := strconv.Atoi(id) c.JSON(http.StatusOK, service.QueryProjectRunConfig(int32(intId))) } // 修改项目运行环境信息 // // @Summary 修改项目运行环境信息 // // @Security JwtAuth // // @Description 修改项目运行环境信息 // @Tags 项目运行环境配置Api // @Accept json // @Produce json // @Param id path int true "项目运行环境信息ID" // @Param ProjectDto query dto.ProjectDto true "修改的项目信息" // @Success 200 {object} nil // @Failure 401 {object} dto.ErrorDto // @Failure 404 {object} dto.ErrorDto // @Failure 500 {object} dto.ErrorDto // @Router /api/v1/runconfig/{id} [put] func updateProjectRunConfig(c *gin.Context) { id, exist := c.Params.Get("id") if !exist { panic(sys_error.New("更新失败,缺少主键")) } req := dto.ProjectRunConfigReqDto{} if err := c.ShouldBind(&req); err != nil { panic(sys_error.New("更新失败,参数格式错误", err)) } intId, _ := strconv.Atoi(id) c.JSON(http.StatusOK, service.UpdateProjectRunConfig(int32(intId), &req)) } // 删除项目运行环境信息 // // @Summary 删除项目运行环境信息 // // @Security JwtAuth // // @Description 删除项目运行环境信息 // @Tags 项目运行环境配置Api // @Accept json // @Produce json // @Param id path int true "项目运行环境信息ID" // @Success 200 {object} nil // @Failure 401 {object} dto.ErrorDto // @Failure 404 {object} dto.ErrorDto // @Failure 500 {object} dto.ErrorDto // @Router /api/v1/runconfig/{id} [delete] func deleteProjectRunConfig(c *gin.Context) { idStr := c.Param("id") id, err := strconv.Atoi(idStr) if err != nil { panic(sys_error.New("删除失败,缺少主键")) } service.DeleteProjectRunConfigById(int32(id)) c.JSON(http.StatusOK, true) } // 获取项目运行环境信息结构说明 // // @Summary 获取项目运行环境信息结构说明 // // @Security JwtAuth // // @Description 获取项目运行环境信息结构说明 // @Tags 项目运行环境配置Api // @Accept json // @Produce json // @Success 200 {object} nil // @Failure 401 {object} dto.ErrorDto // @Failure 404 {object} dto.ErrorDto // @Failure 500 {object} dto.ErrorDto // @Router /api/v1/runconfig/description [get] func getRunCofigDescription(c *gin.Context) { c.JSON(http.StatusOK, parseRunCofigStruct(&config.ThridPartyConfig{})) } // 解析环境配置结构 func parseRunCofigStruct(m interface{}) []*dto.RunConfigDescription { var cs []*dto.RunConfigDescription t := reflect.TypeOf(m).Elem() for i := 0; i < t.NumField(); i++ { field := t.Field(i) if field.Tag.Get("description") == "" { continue } c := &dto.RunConfigDescription{ FieldName: field.Tag.Get("json"), Description: field.Tag.Get("description"), } k := field.Type.Kind() switch k { case reflect.Struct: c.ItemTypeFields = parseRunCofigStruct(reflect.New(field.Type).Interface()) c.Type = "map" case reflect.Slice: e := field.Type.Elem() c.ItemTypeFields = parseRunCofigStruct(reflect.New(e).Interface()) c.Type = "array" default: c.Type = k.String() } cs = append(cs, c) } return cs }