Files
arenax-server/internal/logic/feedback/feedback.go
2025-06-05 17:43:22 +08:00

173 lines
3.9 KiB
Go

package feedback
import (
"context"
"server/internal/consts"
"server/internal/dao"
"server/internal/model"
"server/internal/model/do"
"server/internal/service"
"server/utility/ecode"
)
type sFeedback struct {
}
func New() service.IFeedback {
return &sFeedback{}
}
func init() {
service.RegisterFeedback(New())
}
func (s *sFeedback) List(ctx context.Context, in *model.FeedbackIn) (out *model.FeedbackOut, err error) {
m := dao.Feedbacks.Ctx(ctx)
// 默认分页
if in.Page == 0 {
in.Page = 1
}
if in.Size == 0 {
in.Size = 10
}
// 判断角色
if in.Role == consts.MerchantRoleCode {
m = m.Where(do.Feedbacks{
MerchatId: in.OperatorId,
})
} else if in.Role == consts.StoreRoleCode {
m = m.Where(do.Feedbacks{
StoreId: in.OperatorId,
})
} else if in.Role == consts.UserRoleCode {
m = m.Where(do.Feedbacks{
UserId: in.OperatorId,
})
}
// 构建查询条件
if in.Keyword != "" {
m = m.WhereLike(dao.Feedbacks.Columns().Title, "%"+in.Keyword+"%")
}
if in.FeedbackType > 0 {
m = m.Where(do.Feedbacks{
FeedbackType: in.FeedbackType,
})
}
if in.Status > 0 {
m = m.Where(do.Feedbacks{
Status: in.Status,
})
}
// 分页查询
list := make([]model.Feedback, 0)
var total int
err = m.Page(in.Page, in.Size).OrderDesc(dao.Feedbacks.Columns().CreatedAt).OrderDesc(dao.Feedbacks.Columns().Id).ScanAndCount(&list, &total, false)
if err != nil {
return nil, err
}
return &model.FeedbackOut{
List: list,
Total: total,
}, nil
}
func (s *sFeedback) Create(ctx context.Context, in *model.FeedbackCreateIn) (out *model.FeedbackCreateOut, err error) {
// 暂定只能用户提交反馈信息
_, err = dao.Feedbacks.Ctx(ctx).Insert(do.Feedbacks{
Title: in.Title,
Content: in.Content,
FeedbackType: in.FeedbackType,
UserId: in.OperatorId,
})
if err != nil {
return nil, err
}
return &model.FeedbackCreateOut{
Success: true,
}, nil
}
func (s *sFeedback) Update(ctx context.Context, in *model.FeedbackUpdateIn) (out *model.FeedbackUpdateOut, err error) {
// 暂定用户修改反馈信息
// 是否存在该信息
var feedback *model.Feedback
err = dao.Feedbacks.Ctx(ctx).Where(do.Feedbacks{Id: in.Id}).Scan(&feedback)
if err != nil || feedback == nil {
return nil, ecode.Fail.Sub("未查询到该反馈信息")
}
// 该反馈信息是否未处理
if feedback.Status != consts.Unprocess {
return nil, ecode.Fail.Sub("该反馈信息已处理")
}
_, err = dao.Feedbacks.Ctx(ctx).Where(do.Feedbacks{Id: in.Id}).Update(do.Feedbacks{
Title: in.Title,
Content: in.Content,
FeedbackType: in.FeedbackType,
})
if err != nil {
return nil, ecode.Fail.Sub("更新反馈信息出现异常")
}
return &model.FeedbackUpdateOut{
Success: true,
}, nil
}
func (s *sFeedback) UpdateReply(ctx context.Context, in *model.FeedbackUpdateReplyIn) (out *model.FeedbackUpdateReplyOut, err error) {
var feedback *model.Feedback
err = dao.Feedbacks.Ctx(ctx).Where(do.Feedbacks{Id: in.Id}).Scan(&feedback)
if err != nil || feedback == nil {
return nil, ecode.Fail.Sub("该反馈信息不存在")
}
if feedback.Status == consts.Processed || feedback.Status == consts.Rejected {
return nil, ecode.Fail.Sub("该反馈信息已处理")
}
_, err = dao.Feedbacks.Ctx(ctx).Where(do.Feedbacks{Id: in.Id}).Update(do.Feedbacks{
Reply: in.Reply,
Status: in.Status,
})
if err != nil {
return nil, err
}
return &model.FeedbackUpdateReplyOut{
Success: true,
}, nil
}
func (s *sFeedback) InfoFeedback(ctx context.Context, in *model.FeedbackInfoIn) (out *model.FeedbackInfoOut, err error) {
exist, err := dao.Feedbacks.Ctx(ctx).Where(do.Feedbacks{Id: in.Id}).Exist()
if err != nil {
return nil, ecode.Fail.Sub("查询该反馈信息失败")
}
if !exist {
return nil, ecode.Params.Sub("该反馈信息不存在")
}
err = dao.Feedbacks.Ctx(ctx).Where(do.Feedbacks{Id: in.Id}).Scan(&out)
if err != nil {
return nil, ecode.Fail.Sub("查询该反馈信息失败")
}
return out, nil
}