From cc46521bbb07e606164a5119d6bec23e78c56384 Mon Sep 17 00:00:00 2001 From: zhanghan Date: Fri, 12 Sep 2025 11:31:04 +0800 Subject: [PATCH] get script list by paged --- .../script_library/controller/script.go | 16 ++++++- .../module/script_library/dao/script.go | 48 +++++++++++++++++++ .../module/script_library/model/script.go | 30 ++++++------ .../internal/module/script_library/router.go | 4 +- .../module/script_library/service/script.go | 16 ++++++- automation/server/pkg/utils/base64.go | 18 +++++++ 6 files changed, 113 insertions(+), 19 deletions(-) create mode 100644 automation/server/pkg/utils/base64.go diff --git a/automation/server/internal/module/script_library/controller/script.go b/automation/server/internal/module/script_library/controller/script.go index cc363aac..4afe5177 100644 --- a/automation/server/internal/module/script_library/controller/script.go +++ b/automation/server/internal/module/script_library/controller/script.go @@ -7,7 +7,7 @@ import ( "openeuler.org/PilotGo/PilotGo-plugin-automation/internal/module/script_library/service" ) -func AddScript(c *gin.Context) { +func AddScriptHandler(c *gin.Context) { var script model.ScriptWithVersion if err := c.ShouldBindJSON(&script); err != nil { response.Fail(c, nil, err.Error()) @@ -20,3 +20,17 @@ func AddScript(c *gin.Context) { } response.Success(c, nil, "success") } + +func ScriptListHandler(c *gin.Context) { + query := &response.PaginationQ{} + if err := c.ShouldBindQuery(query); err != nil { + response.Fail(c, nil, err.Error()) + return + } + scripts, total, err := service.GetScripts(query) + if err != nil { + response.Fail(c, nil, err.Error()) + return + } + response.DataPagination(c, scripts, total, query) +} diff --git a/automation/server/internal/module/script_library/dao/script.go b/automation/server/internal/module/script_library/dao/script.go index c02d5b1d..0c0b690e 100644 --- a/automation/server/internal/module/script_library/dao/script.go +++ b/automation/server/internal/module/script_library/dao/script.go @@ -1,6 +1,9 @@ package dao import ( + "strings" + + "gitee.com/openeuler/PilotGo/sdk/response" "gorm.io/gorm" "openeuler.org/PilotGo/PilotGo-plugin-automation/internal/global" "openeuler.org/PilotGo/PilotGo-plugin-automation/internal/module/script_library/model" @@ -19,3 +22,48 @@ func AddScript(script *model.Script, scriptVersion *model.ScriptVersion) error { return nil }) } + +func GetScripts(query *response.PaginationQ) ([]*model.ScriptResponse, int, error) { + // 查询数据 + var scripts []*model.Script + q := global.App.MySQL.Model(&model.Script{}).Limit(query.PageSize).Offset((query.Page - 1) * query.PageSize) + if err := q.Order("created_at desc").Find(&scripts).Error; err != nil { + return nil, 0, err + } + + // 组装 ScriptResponse + var scriptResponses []*model.ScriptResponse + for _, s := range scripts { + sr := &model.ScriptResponse{ + ID: s.ID, + Name: s.Name, + ScriptType: s.ScriptType, + Description: s.Description, + IsPublic: s.IsPublic, + Creator: s.Creator, + CreatedAt: s.CreatedAt, + LastModifyUser: s.LastModifyUser, + LastModifyUpdatedAt: s.LastModifyUpdatedAt, + } + + tagNames := strings.Split(s.Tags, ",") + var tags []model.Tag + if len(tagNames) > 0 { + if err := global.App.MySQL.Model(&model.Tag{}).Where("name IN ?", tagNames).Find(&tags).Error; err != nil { + return nil, 0, err + } + } + sr.Tags = tags + + scriptResponses = append(scriptResponses, sr) + } + + // 统计数目 + var total int64 + qc := global.App.MySQL.Model(&model.Script{}) + if err := qc.Count(&total).Error; err != nil { + return nil, 0, err + } + + return scriptResponses, int(total), nil +} diff --git a/automation/server/internal/module/script_library/model/script.go b/automation/server/internal/module/script_library/model/script.go index d87e5132..9a212765 100644 --- a/automation/server/internal/module/script_library/model/script.go +++ b/automation/server/internal/module/script_library/model/script.go @@ -8,22 +8,9 @@ type Script struct { Tags string `json:"tags" gorm:"comment:'场景标签'"` IsPublic bool `json:"is_public" gorm:"type:boolean;not null;comment:'是否公开'"` Creator string `json:"creator" gorm:"type:varchar(100);not null;comment:'创建者'"` - CreatedAt string `json:"created_at" gorm:"type:datetime;not null;comment:'创建时间'"` + CreatedAt string `json:"created_at" gorm:"comment:'创建时间'"` LastModifyUser string `json:"last_modify_user" gorm:"type:varchar(100);not null;comment:'最后修改者'"` - LastModifyUpdatedAt string `json:"last_modify_updated_at" gorm:"type:datetime;not null;comment:'最后修改时间'"` -} - -type ScriptVersion struct { - ID int `json:"id" gorm:"primaryKey;type:int;not null;comment:'脚本版本ID'"` - ScriptID string `json:"script_id" gorm:"type:varchar(36);not null;comment:'脚本ID'"` - Content string `json:"content" gorm:"type:text;not null;comment:'脚本内容'"` - Version string `json:"version" gorm:"type:varchar(50);not null;comment:'脚本版本号'"` - VersionDesc string `json:"version_desc" gorm:"type:varchar(500);comment:'脚本版本描述'"` - Status bool `json:"status" gorm:"type:boolean;not null;default:false;comment:'脚本版本状态,true表示上线,false表示禁用'"` - Creator string `json:"creator" gorm:"type:varchar(100);not null;comment:'创建者'"` - CreatedAt string `json:"created_at" gorm:"type:datetime;not null;comment:'创建时间'"` - LastModifyUser string `json:"last_modify_user" gorm:"type:varchar(100);not null;comment:'最后修改者'"` - LastModifyUpdatedAt string `json:"last_modify_updated_at" gorm:"type:datetime;not null;comment:'最后修改时间'"` + LastModifyUpdatedAt string `json:"last_modify_updated_at" gorm:"comment:'最后修改时间'"` } type ScriptWithVersion struct { @@ -38,3 +25,16 @@ type ScriptWithVersion struct { LastModifyUser string `json:"last_modify_user"` Creator string `json:"creator"` } + +type ScriptResponse struct { + ID string `json:"id"` + Name string `json:"name"` + ScriptType string `json:"script_type"` + Description string `json:"description"` + Tags []Tag `json:"tags"` + IsPublic bool `json:"is_public"` + Creator string `json:"creator"` + CreatedAt string `json:"created_at"` + LastModifyUser string `json:"last_modify_user"` + LastModifyUpdatedAt string `json:"last_modify_updated_at"` +} diff --git a/automation/server/internal/module/script_library/router.go b/automation/server/internal/module/script_library/router.go index e6af0b06..5aabcda9 100644 --- a/automation/server/internal/module/script_library/router.go +++ b/automation/server/internal/module/script_library/router.go @@ -8,7 +8,9 @@ import ( func ScriptLibraryHandler(router *gin.RouterGroup) { api := router.Group("/scriptlibrary") { - api.POST("/add", controller.AddScript) + api.POST("/add", controller.AddScriptHandler) + api.GET("/list", controller.ScriptListHandler) + } tag := router.Group("/tag") diff --git a/automation/server/internal/module/script_library/service/script.go b/automation/server/internal/module/script_library/service/script.go index 7bf98e0d..cdc28187 100644 --- a/automation/server/internal/module/script_library/service/script.go +++ b/automation/server/internal/module/script_library/service/script.go @@ -3,9 +3,11 @@ package service import ( "time" + "gitee.com/openeuler/PilotGo/sdk/response" "github.com/google/uuid" "openeuler.org/PilotGo/PilotGo-plugin-automation/internal/module/script_library/dao" "openeuler.org/PilotGo/PilotGo-plugin-automation/internal/module/script_library/model" + "openeuler.org/PilotGo/PilotGo-plugin-automation/pkg/utils" ) func generateScriptId() string { @@ -15,6 +17,11 @@ func generateScriptId() string { func AddScript(s *model.ScriptWithVersion) error { scriptId := generateScriptId() + decodedContent, err := utils.DecodeScriptContent(s.Content) + if err != nil { + return err + } + script := &model.Script{ ID: scriptId, Name: s.Name, @@ -29,8 +36,9 @@ func AddScript(s *model.ScriptWithVersion) error { } scriptVersion := &model.ScriptVersion{ - ScriptID: scriptId, - Content: s.Content, + ScriptID: scriptId, + Content: decodedContent, + // Content: s.Content, Version: s.Version, VersionDesc: s.VersionDesc, Creator: s.Creator, @@ -41,3 +49,7 @@ func AddScript(s *model.ScriptWithVersion) error { return dao.AddScript(script, scriptVersion) } + +func GetScripts(query *response.PaginationQ) ([]*model.ScriptResponse, int, error) { + return dao.GetScripts(query) +} diff --git a/automation/server/pkg/utils/base64.go b/automation/server/pkg/utils/base64.go new file mode 100644 index 00000000..55a4fc98 --- /dev/null +++ b/automation/server/pkg/utils/base64.go @@ -0,0 +1,18 @@ +package utils + +import ( + "encoding/base64" + "errors" +) + +func EncodeScriptContent(content string) string { + return base64.StdEncoding.EncodeToString([]byte(content)) +} + +func DecodeScriptContent(encoded string) (string, error) { + data, err := base64.StdEncoding.DecodeString(encoded) + if err != nil { + return "", errors.New("脚本内容 Base64 解码失败: " + err.Error()) + } + return string(data), nil +} -- Gitee