Files
rootandClaude Opus 4.7 79ac89b458 Initial commit
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-11-07 10:47:18 +08:00

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
}