Initial commit
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,93 @@
|
||||
package contactusser
|
||||
|
||||
import (
|
||||
"context"
|
||||
"net/mail"
|
||||
"strings"
|
||||
"time"
|
||||
"unicode/utf8"
|
||||
"videoweb/app/api/proto"
|
||||
"videoweb/pub/common/srvdef"
|
||||
"videoweb/pub/models/contactusmod"
|
||||
)
|
||||
|
||||
const (
|
||||
contactUsMaxEmailLen = 100
|
||||
contactUsMaxTitleLen = 100
|
||||
contactUsMaxContentLen = 1000
|
||||
contactUsMaxAttachmentNum = 9
|
||||
contactUsSubmitMessage = "提交成功,我们会在24小时内回复。"
|
||||
)
|
||||
|
||||
const (
|
||||
ContactUsTypeOrder int32 = 1 // 订单问题
|
||||
ContactUsTypeAccount int32 = 2 // 账号问题
|
||||
ContactUsTypeFeature int32 = 3 // 功能问题
|
||||
ContactUsTypeExp int32 = 4 // 体验问题
|
||||
ContactUsTypeOther int32 = 5 // 其他
|
||||
)
|
||||
|
||||
// AddContactUs 提交联系我们记录
|
||||
func AddContactUs(ctx context.Context, userId int64, req *proto.ContactUsAddReq) (*proto.ContactUsAddResp, *srvdef.SrvErr) {
|
||||
if req == nil || userId <= 0 {
|
||||
return nil, srvdef.New(srvdef.ErrParamError, "", "")
|
||||
}
|
||||
email := strings.TrimSpace(req.Email)
|
||||
if !isValidEmail(email) || utf8.RuneCountInString(email) > contactUsMaxEmailLen {
|
||||
return nil, srvdef.New(srvdef.ErrParamError, "邮箱格式错误")
|
||||
}
|
||||
if !isValidContactUsType(req.Type) {
|
||||
return nil, srvdef.New(srvdef.ErrParamError, "问题类型无效")
|
||||
}
|
||||
title := strings.TrimSpace(req.Title)
|
||||
if title == "" || utf8.RuneCountInString(title) > contactUsMaxTitleLen {
|
||||
return nil, srvdef.New(srvdef.ErrParamError, "标题不能为空且不能超过100字")
|
||||
}
|
||||
content := strings.TrimSpace(req.Content)
|
||||
if content == "" || utf8.RuneCountInString(content) > contactUsMaxContentLen {
|
||||
return nil, srvdef.New(srvdef.ErrParamError, "内容不能为空且不能超过1000字")
|
||||
}
|
||||
attachments := normalizeAttachments(req.Attachments)
|
||||
if len(attachments) > contactUsMaxAttachmentNum {
|
||||
return nil, srvdef.New(srvdef.ErrParamError, "附件不能超过9个")
|
||||
}
|
||||
now := time.Now()
|
||||
doc := &contactusmod.ContactUs{
|
||||
UserId: userId,
|
||||
Email: email,
|
||||
QuestionType: req.Type,
|
||||
Title: title,
|
||||
Content: content,
|
||||
Attachments: attachments,
|
||||
Status: 0,
|
||||
CreatedAt: now,
|
||||
UpdatedAt: now,
|
||||
}
|
||||
if err := contactusmod.InsertOneContactUs(ctx, doc); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &proto.ContactUsAddResp{Message: contactUsSubmitMessage}, nil
|
||||
}
|
||||
|
||||
func isValidEmail(email string) bool {
|
||||
if email == "" {
|
||||
return false
|
||||
}
|
||||
_, err := mail.ParseAddress(email)
|
||||
return err == nil
|
||||
}
|
||||
|
||||
func isValidContactUsType(questionType int32) bool {
|
||||
return questionType >= ContactUsTypeOrder && questionType <= ContactUsTypeOther
|
||||
}
|
||||
|
||||
func normalizeAttachments(rawAttachments []string) []string {
|
||||
attachments := make([]string, 0, len(rawAttachments))
|
||||
for _, attachment := range rawAttachments {
|
||||
attachment = strings.TrimSpace(attachment)
|
||||
if attachment != "" {
|
||||
attachments = append(attachments, attachment)
|
||||
}
|
||||
}
|
||||
return attachments
|
||||
}
|
||||
Reference in New Issue
Block a user