//go:build plus package services import ( "context" "errors" teaconst "github.com/TeaOSLab/EdgeAPI/internal/const" "github.com/TeaOSLab/EdgeAPI/internal/db/models" "github.com/TeaOSLab/EdgeAPI/internal/senders/mediasenders" "github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb" timeutil "github.com/iwind/TeaGo/utils/time" ) // MessageMediaService 消息媒介服务 type MessageMediaService struct { BaseService } // FindAllMessageMedias 获取所有支持的媒介 func (this *MessageMediaService) FindAllMessageMedias(ctx context.Context, req *pb.FindAllMessageMediasRequest) (*pb.FindAllMessageMediasResponse, error) { _, err := this.ValidateAdmin(ctx) if err != nil { return nil, err } var tx = this.NullTx() medias, err := models.SharedMessageMediaDAO.FindAllEnabledMessageMedias(tx) if err != nil { return nil, err } pbMedias := []*pb.MessageMedia{} for _, media := range medias { pbMedias = append(pbMedias, &pb.MessageMedia{ Id: int64(media.Id), Type: media.Type, Name: media.Name, Description: media.Description, UserDescription: media.UserDescription, IsOn: media.IsOn, }) } return &pb.FindAllMessageMediasResponse{MessageMedias: pbMedias}, nil } // SendMediaMessage 发送媒介信息 func (this *MessageMediaService) SendMediaMessage(ctx context.Context, req *pb.SendMediaMessageRequest) (*pb.RPCSuccess, error) { _, err := this.ValidateAdmin(ctx) if err != nil { return nil, err } if len(req.MediaType) == 0 { return nil, errors.New("'mediaType' should not be empty") } if len(req.OptionsJSON) == 0 { return nil, errors.New("invalid 'optionsJSON'") } media, err := mediasenders.NewMediaInstance(req.MediaType, req.OptionsJSON) if err != nil { return nil, err } if media == nil { return nil, errors.New("can not find media with mediaType '" + req.MediaType + "'") } // 产品名称 var tx = this.NullTx() productName, err := models.SharedSysSettingDAO.ReadProductName(tx) if err != nil { return nil, err } if len(productName) == 0 { productName = teaconst.GlobalProductName } _, err = media.Send(req.User, req.Subject, req.Body, productName, timeutil.Format("Y-m-d H:i:s")) if err != nil { return nil, err } return this.Success() }