234 lines
5.7 KiB
Go
234 lines
5.7 KiB
Go
// Copyright 2022 Liuxiangchao iwind.liu@gmail.com. All rights reserved.
|
|
//go:build plus
|
|
// +build plus
|
|
|
|
package services
|
|
|
|
import (
|
|
"context"
|
|
"encoding/json"
|
|
"github.com/TeaOSLab/EdgeAPI/internal/db/models"
|
|
"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
|
|
)
|
|
|
|
// ScriptService 脚本相关服务
|
|
type ScriptService struct {
|
|
BaseService
|
|
}
|
|
|
|
// CreateScript 添加脚本
|
|
func (this *ScriptService) CreateScript(ctx context.Context, req *pb.CreateScriptRequest) (*pb.CreateScriptResponse, error) {
|
|
_, userId, err := this.ValidateAdminAndUser(ctx, true)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
var tx = this.NullTx()
|
|
scriptId, err := models.SharedScriptDAO.CreateScript(tx, userId, req.Name, req.Filename, req.Code)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return &pb.CreateScriptResponse{ScriptId: scriptId}, nil
|
|
}
|
|
|
|
// DeleteScript 删除脚本
|
|
func (this *ScriptService) DeleteScript(ctx context.Context, req *pb.DeleteScriptRequest) (*pb.RPCSuccess, error) {
|
|
_, userId, err := this.ValidateAdminAndUser(ctx, true)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
var tx = this.NullTx()
|
|
if userId > 0 {
|
|
err = models.SharedScriptDAO.CheckUserScript(tx, userId, req.ScriptId)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
}
|
|
|
|
err = models.SharedScriptDAO.DisableScript(tx, req.ScriptId)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return this.Success()
|
|
}
|
|
|
|
// CountAllEnabledScripts 计算脚本数量
|
|
func (this *ScriptService) CountAllEnabledScripts(ctx context.Context, req *pb.CountAllEnabledScriptsRequest) (*pb.RPCCountResponse, error) {
|
|
_, userId, err := this.ValidateAdminAndUser(ctx, true)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
if userId > 0 {
|
|
req.UserId = userId
|
|
}
|
|
|
|
var tx = this.NullTx()
|
|
count, err := models.SharedScriptDAO.CountAllEnabledScripts(tx, userId)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return this.SuccessCount(count)
|
|
}
|
|
|
|
// ListEnabledScripts 列出单页脚本
|
|
func (this *ScriptService) ListEnabledScripts(ctx context.Context, req *pb.ListEnabledScriptsRequest) (*pb.ListEnabledScriptsResponse, error) {
|
|
_, userId, err := this.ValidateAdminAndUser(ctx, true)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
if userId > 0 {
|
|
req.UserId = userId
|
|
}
|
|
|
|
var tx = this.NullTx()
|
|
scripts, err := models.SharedScriptDAO.ListEnabledScripts(tx, req.UserId, req.Offset, req.Size)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
var pbScripts = []*pb.Script{}
|
|
for _, script := range scripts {
|
|
pbScripts = append(pbScripts, &pb.Script{
|
|
Id: int64(script.Id),
|
|
UserId: int64(script.UserId),
|
|
IsOn: script.IsOn,
|
|
Name: script.Name,
|
|
Filename: script.Filename,
|
|
Code: script.Code,
|
|
UpdatedAt: int64(script.UpdatedAt),
|
|
})
|
|
}
|
|
|
|
return &pb.ListEnabledScriptsResponse{Scripts: pbScripts}, nil
|
|
}
|
|
|
|
// PublishScripts 发布脚本
|
|
func (this *ScriptService) PublishScripts(ctx context.Context, req *pb.PublishScriptsRequest) (*pb.RPCSuccess, error) {
|
|
_, userId, err := this.ValidateAdminAndUser(ctx, true)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
if userId > 0 {
|
|
req.UserId = userId
|
|
}
|
|
|
|
var tx = this.NullTx()
|
|
err = models.SharedScriptHistoryDAO.PublishScripts(tx, userId)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return this.Success()
|
|
}
|
|
|
|
// CheckScriptUpdates 检查脚本是否需要有更新
|
|
func (this *ScriptService) CheckScriptUpdates(ctx context.Context, req *pb.CheckScriptUpdatesRequest) (*pb.CheckScriptUpdatesResponse, error) {
|
|
_, userId, err := this.ValidateAdminAndUser(ctx, true)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
if userId > 0 {
|
|
req.UserId = userId
|
|
}
|
|
|
|
var tx = this.NullTx()
|
|
hasUpdates, version, err := models.SharedScriptHistoryDAO.CheckScriptsUpdates(tx, userId)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return &pb.CheckScriptUpdatesResponse{
|
|
HasUpdates: hasUpdates,
|
|
Version: version,
|
|
}, nil
|
|
}
|
|
|
|
// FindEnabledScript 查找单个脚本
|
|
func (this *ScriptService) FindEnabledScript(ctx context.Context, req *pb.FindEnabledScriptRequest) (*pb.FindEnabledScriptResponse, error) {
|
|
_, userId, err := this.ValidateAdminAndUser(ctx, true)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
var tx = this.NullTx()
|
|
if userId > 0 {
|
|
err = models.SharedScriptDAO.CheckUserScript(tx, userId, req.ScriptId)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
}
|
|
|
|
script, err := models.SharedScriptDAO.FindEnabledScript(tx, req.ScriptId)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
if script == nil {
|
|
return &pb.FindEnabledScriptResponse{
|
|
Script: nil,
|
|
}, nil
|
|
}
|
|
|
|
return &pb.FindEnabledScriptResponse{
|
|
Script: &pb.Script{
|
|
Id: int64(script.Id),
|
|
UserId: int64(script.UserId),
|
|
IsOn: script.IsOn,
|
|
Name: script.Name,
|
|
Filename: script.Filename,
|
|
Code: script.Code,
|
|
},
|
|
}, nil
|
|
}
|
|
|
|
// UpdateScript 修改脚本
|
|
func (this *ScriptService) UpdateScript(ctx context.Context, req *pb.UpdateScriptRequest) (*pb.RPCSuccess, error) {
|
|
_, userId, err := this.ValidateAdminAndUser(ctx, true)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
var tx = this.NullTx()
|
|
if userId > 0 {
|
|
err = models.SharedScriptDAO.CheckUserScript(tx, userId, req.ScriptId)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
}
|
|
|
|
err = models.SharedScriptDAO.UpdateScript(tx, req.ScriptId, req.Name, req.Filename, req.Code, req.IsOn)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return this.Success()
|
|
}
|
|
|
|
// ComposeScriptConfigs 组合脚本配置
|
|
func (this *ScriptService) ComposeScriptConfigs(ctx context.Context, req *pb.ComposeScriptConfigsRequest) (*pb.ComposeScriptConfigsResponse, error) {
|
|
_, err := this.ValidateNode(ctx)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
var tx = this.NullTx()
|
|
configs, err := models.SharedScriptHistoryDAO.ComposeScriptConfigs(tx, 0, nil)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
configsJSON, err := json.Marshal(configs)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return &pb.ComposeScriptConfigsResponse{
|
|
ScriptConfigsJSON: configsJSON,
|
|
}, nil
|
|
}
|