Files
2026-10-21 13:29:03 +08:00

73 lines
2.0 KiB
Go

package analysisdevicelogic
import (
"context"
"lone-services/pkg/utils"
"lone-services/pkg/validate"
analysis "lone-services/rpc/analysis/pb"
"lone-services/services/analysis/internal/logic/common"
analysisoss "lone-services/services/analysis/internal/oss"
"lone-services/services/analysis/internal/svc"
"lone-services/services/analysis/validator"
"github.com/google/uuid"
"github.com/zeromicro/go-zero/core/logx"
)
type PolicyLogic struct {
ctx context.Context
svcCtx *svc.ServiceContext
logx.Logger
}
func NewPolicyLogic(ctx context.Context, svcCtx *svc.ServiceContext) *PolicyLogic {
return &PolicyLogic{
ctx: ctx,
svcCtx: svcCtx,
Logger: logx.WithContext(ctx),
}
}
func (l *PolicyLogic) Policy(in *analysis.DevicePolicyReq) (*analysis.Response, error) {
var req validator.DevicePolicyValidator
if msg := validate.ValidateFromProto(in, &req); msg != utils.StringEmpty {
return common.OutResponse(utils.ErrorParams, msg), nil
}
loginUser := utils.GetUserFromCtx(l.ctx)
if !loginUser.Valid || loginUser.ID < utils.NumberOne {
return common.FailResponse(utils.ErrorNoLogin), nil
}
cfg := analysisoss.NewConfig("device-" + req.SerialNo)
if err := cfg.Validate(); err != nil {
l.Errorf("device policy config: %v", err)
return common.FailResponse(utils.Fail), nil
}
taskId := uuid.New().String()
cred, err := analysisoss.AssumeRole(cfg)
if err != nil {
l.Errorf("device policy assume role: %v", err)
return common.FailResponse(utils.Fail), nil
}
policy, err := analysisoss.BuildUploadPolicy(cfg, taskId, cred)
if err != nil {
l.Errorf("device policy build: %v", err)
return common.FailResponse(utils.Fail), nil
}
if err = analysisoss.SaveUploadSession(l.ctx, taskId, analysisoss.UploadSession{
UserId: loginUser.ID,
BizId: loginUser.BizId,
DateDir: policy.DateDir,
}, int(cfg.ExpireSeconds)); err != nil {
l.Errorf("device policy cache session: %v", err)
return common.FailResponse(utils.Fail), nil
}
return common.OkResponse(policy), nil
}