spark-server/internal/module/friend/logic/report.go
2026-09-18 14:50:41 +08:00

42 lines
1.3 KiB
Go

package logic
import (
"context"
"strings"
"time"
"spark-server/internal/module/friend/entity"
"spark-server/internal/pkg/errs"
"spark-server/internal/pkg/i18n"
"spark-server/internal/pkg/reqctx"
"spark-server/internal/pkg/validate"
)
type ReportInput struct {
Reason entity.ReportReason `json:"reason" validate:"required,oneof=1 2 3 4" label:"field.report_reason" errmsg:"required:validate.friend.report_reason_required;oneof:validate.friend.report_reason_invalid"`
Detail string `json:"detail" validate:"omitempty,max=512" label:"field.report_detail" errmsg:"max:validate.friend.report_detail_invalid"`
}
func (s *Service) Report(ctx context.Context, userID, targetID int64, in ReportInput) error {
if !s.ready() || userID <= 0 {
return errs.ErrUnauthorized
}
if err := validate.StructLang(reqctx.Lang(ctx), in); err != nil {
return err
}
if targetID <= 0 || entity.SameUser(userID, targetID) {
return errs.ErrInvalidArgument.WithMsg(i18n.T(reqctx.Lang(ctx), i18n.KeyFriendSelf, nil))
}
if _, err := s.activeUser(ctx, targetID); err != nil {
return err
}
id, err := s.ids.NextID()
if err != nil {
return err
}
return s.repo.CreateReport(ctx, &entity.Report{
ID: id, UserID: userID, TargetID: targetID,
Reason: in.Reason, Detail: strings.TrimSpace(in.Detail), CreatedAt: time.Now(),
})
}