85 lines
2.2 KiB
Go
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()
|
|
}
|