Files
waf-platform/EdgeAPI/internal/rpc/services/service_message_media_plus.go
2026-02-04 20:27:13 +08:00

85 lines
2.2 KiB
Go

//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()
}