78 lines
2.3 KiB
Go
78 lines
2.3 KiB
Go
package feedbackser
|
|
|
|
import (
|
|
"context"
|
|
"strings"
|
|
"time"
|
|
"unicode/utf8"
|
|
"videoweb/app/api/proto"
|
|
"videoweb/pub/common/srvdef"
|
|
"videoweb/pub/models/feedbackmod"
|
|
)
|
|
|
|
const (
|
|
feedbackMaxContentLen = 500
|
|
feedbackMaxContactLen = 100
|
|
feedbackMaxScreenshotNum = 9
|
|
feedbackSubmitMessage = "反馈提交成功"
|
|
)
|
|
|
|
const ( //问题类型,1-功能建议、2-播放问题、3-账号问题、4-其他
|
|
FeedbackTypeFeature int32 = 1
|
|
FeedbackTypePlay int32 = 2
|
|
FeedbackTypeAccount int32 = 3
|
|
FeedbackTypeOther int32 = 4
|
|
)
|
|
|
|
// AddFeedback 提交用户意见反馈
|
|
func AddFeedback(ctx context.Context, userId int64, req *proto.FeedbackReq) (*proto.FeedbackResp, *srvdef.SrvErr) {
|
|
if req == nil || userId <= 0 {
|
|
return nil, srvdef.New(srvdef.ErrParamError, "", "")
|
|
}
|
|
if !isValidFeedbackType(req.Type) {
|
|
return nil, srvdef.New(srvdef.ErrParamError, "问题类型无效")
|
|
}
|
|
content := strings.TrimSpace(req.Content)
|
|
if content == "" || utf8.RuneCountInString(content) > feedbackMaxContentLen {
|
|
return nil, srvdef.New(srvdef.ErrParamError, "描述内容不能为空且不能超过500字")
|
|
}
|
|
contact := strings.TrimSpace(req.Contact)
|
|
if utf8.RuneCountInString(contact) > feedbackMaxContactLen {
|
|
return nil, srvdef.New(srvdef.ErrParamError, "联系方式不能超过100字")
|
|
}
|
|
screenshots := normalizeScreenshots(req.Screenshots)
|
|
if len(screenshots) > feedbackMaxScreenshotNum {
|
|
return nil, srvdef.New(srvdef.ErrParamError, "问题截图不能超过9张")
|
|
}
|
|
now := time.Now()
|
|
doc := &feedbackmod.Feedback{
|
|
UserId: userId,
|
|
FeedbackType: req.Type,
|
|
Content: content,
|
|
Screenshots: screenshots,
|
|
Contact: contact,
|
|
Status: 0,
|
|
CreatedAt: now,
|
|
UpdatedAt: now,
|
|
}
|
|
if err := feedbackmod.InsertOneFeedback(ctx, doc); err != nil {
|
|
return nil, err
|
|
}
|
|
return &proto.FeedbackResp{Message: feedbackSubmitMessage}, nil
|
|
}
|
|
|
|
func isValidFeedbackType(feedbackType int32) bool {
|
|
return feedbackType >= FeedbackTypeFeature && feedbackType <= FeedbackTypeOther
|
|
}
|
|
|
|
func normalizeScreenshots(rawScreenshots []string) []string {
|
|
screenshots := make([]string, 0, len(rawScreenshots))
|
|
for _, screenshot := range rawScreenshots {
|
|
screenshot = strings.TrimSpace(screenshot)
|
|
if screenshot != "" {
|
|
screenshots = append(screenshots, screenshot)
|
|
}
|
|
}
|
|
return screenshots
|
|
}
|