mattermost-community-enterp.../vendor/github.com/splitio/go-split-commons/v7/provisional/impmanager.go
Claude ec1f89217a Merge: Complete Mattermost Server with Community Enterprise
Full Mattermost server source with integrated Community Enterprise features.
Includes vendor directory for offline/air-gapped builds.

Structure:
- enterprise-impl/: Enterprise feature implementations
- enterprise-community/: Init files that register implementations
- enterprise/: Bridge imports (community_imports.go)
- vendor/: All dependencies for offline builds

Build (online):
  go build ./cmd/mattermost

Build (offline/air-gapped):
  go build -mod=vendor ./cmd/mattermost

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-17 23:59:07 +09:00

65 lines
2.1 KiB
Go

package provisional
import (
"github.com/splitio/go-split-commons/v7/dtos"
"github.com/splitio/go-split-commons/v7/provisional/strategy"
)
// ImpressionManager interface
type ImpressionManager interface {
ProcessImpressions(impressions []dtos.Impression) ([]dtos.Impression, []dtos.Impression)
ProcessSingle(impression *dtos.Impression) bool
Process(impressions []dtos.Impression, listenerEnabled bool) ([]dtos.Impression, []dtos.Impression)
}
// ImpressionManagerImpl implements
type ImpressionManagerImpl struct {
processStrategy strategy.ProcessStrategyInterface
keyTracker strategy.ProcessStrategyInterface
}
// DEPRECATED
// NewImpressionManager creates new ImpManager
func NewImpressionManager(processStrategy strategy.ProcessStrategyInterface) ImpressionManager {
return &ImpressionManagerImpl{
processStrategy: processStrategy,
}
}
func NewImpressionManagerImp(none *strategy.NoneImpl, processStrategy strategy.ProcessStrategyInterface) ImpressionManager {
return &ImpressionManagerImpl{
processStrategy: processStrategy,
keyTracker: none,
}
}
// ProcessImpressions bulk processes
func (i *ImpressionManagerImpl) ProcessImpressions(impressions []dtos.Impression) ([]dtos.Impression, []dtos.Impression) {
return i.processStrategy.Apply(impressions)
}
// ProcessSingle accepts a pointer to an impression, updates it's PT accordingly,
// and returns whether it should be sent to the BE and to the lister
func (i *ImpressionManagerImpl) ProcessSingle(impression *dtos.Impression) bool {
return i.processStrategy.ApplySingle(impression)
}
func (i *ImpressionManagerImpl) Process(impressions []dtos.Impression, listenerEnabled bool) ([]dtos.Impression, []dtos.Impression) {
forLog := make([]dtos.Impression, 0, len(impressions))
forListener := make([]dtos.Impression, 0, len(impressions))
for index := range impressions {
if impressions[index].Disabled {
i.keyTracker.ApplySingle(&impressions[index])
} else if i.processStrategy.ApplySingle(&impressions[index]) {
forLog = append(forLog, impressions[index])
}
}
if listenerEnabled {
forListener = impressions
}
return forLog, forListener
}