package gating import ( "context" "github.com/google/uuid" ) // AccessRule defines content access requirements. type AccessRule struct { MinTierLevel int OverrideTierID string TeaserMode string // "hard", "soft", "none" TeaserPercent int } // AccessResult is the result of evaluating access for a user. type AccessResult struct { HasAccess bool TeaserMode string TeaserPercent int RequiredLevel int } // EvaluateAccess checks whether a user's tier level grants access based on the rule. func EvaluateAccess(userTierLevel int, rule *AccessRule) AccessResult { if rule == nil { return AccessResult{HasAccess: true} } if userTierLevel >= rule.MinTierLevel { return AccessResult{HasAccess: true} } return AccessResult{ HasAccess: false, TeaserMode: rule.TeaserMode, TeaserPercent: rule.TeaserPercent, RequiredLevel: rule.MinTierLevel, } } // Gating provides gating access for plugins. type Gating interface { GetSubscriberTierLevel(ctx context.Context, userID uuid.UUID) (int, error) EvaluateAccess(userTierLevel int, rule *AccessRule) AccessResult }