42 lines
1.3 KiB
Go
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(),
|
|
})
|
|
}
|