package logic import ( "context" "spark-server/internal/module/moment/entity" "spark-server/internal/pkg/errs" "spark-server/internal/pkg/i18n" "spark-server/internal/pkg/media" "spark-server/internal/pkg/reqctx" "go.uber.org/zap" ) // checkMediaMeta validates client-declared w/h/size on user publish. func (s *Service) checkMediaMeta(ctx context.Context, images []*entity.Image, video *entity.Video) error { if s == nil || !s.media.Enabled { return nil } var v *media.Violation if video != nil { v = s.media.CheckPublishVideo(&media.VideoMeta{ Width: video.Width, Height: video.Height, Size: video.Size, DurationMS: video.DurationMS, }) } else { metas := make([]media.ImageMeta, 0, len(images)) for _, img := range images { if img == nil { continue } metas = append(metas, media.ImageMeta{Width: img.Width, Height: img.Height, Size: img.Size}) } v = s.media.CheckPublishImages(metas) } if v == nil { return nil } log := s.log if log == nil { log = zap.NewNop() } log.Warn("moment media oversize", zap.String("kind", string(v.Kind)), zap.String("reason", v.Reason), zap.Int("w", v.Width), zap.Int("h", v.Height), zap.Int("max_edge", v.MaxEdge), zap.Int64("size", v.Size), zap.Int64("max_size", v.MaxSize), ) if !s.media.UserReject { return nil } return errs.ErrMediaOversized.WithMsg(i18n.T(reqctx.Lang(ctx), i18n.KeyMediaOversized, nil)) }