| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- package service
- import infraerrors "github.com/Wei-Shaw/sub2api/internal/pkg/errors"
- // ValidateGrokMediaEligibilityExtra validates the optional per-account media
- // routing override. A nil value removes the override and restores automatic
- // provider-observation routing.
- func ValidateGrokMediaEligibilityExtra(platform string, extra map[string]any) error {
- if platform != PlatformGrok || extra == nil {
- return nil
- }
- raw, exists := extra[GrokMediaEligibleExtraKey]
- if !exists || raw == nil {
- return nil
- }
- if _, ok := raw.(bool); !ok {
- return infraerrors.BadRequest("GROK_MEDIA_ELIGIBILITY_INVALID", "grok_media_eligible must be a boolean or null")
- }
- return nil
- }
- func normalizeGrokMediaEligibilityExtra(platform string, extra map[string]any) (map[string]any, error) {
- if platform != PlatformGrok {
- return extra, nil
- }
- if err := ValidateGrokMediaEligibilityExtra(platform, extra); err != nil {
- return nil, err
- }
- if extra == nil {
- return nil, nil
- }
- normalized := shallowCopyMap(extra)
- if normalized[GrokMediaEligibleExtraKey] == nil {
- delete(normalized, GrokMediaEligibleExtraKey)
- }
- return normalized, nil
- }
- func normalizeGrokMediaEligibilityUpdateExtra(account *Account, input *UpdateAccountInput, normalized map[string]any) (map[string]any, error) {
- if account == nil || account.Platform != PlatformGrok {
- return normalized, nil
- }
- if input == nil {
- return nil, infraerrors.BadRequest("INVALID_ACCOUNT_INPUT", "account update input is required")
- }
- if err := ValidateGrokMediaEligibilityExtra(account.Platform, input.Extra); err != nil {
- return nil, err
- }
- if normalized == nil {
- normalized = make(map[string]any)
- } else {
- normalized = shallowCopyMap(normalized)
- }
- raw, provided := input.Extra[GrokMediaEligibleExtraKey]
- if provided {
- if raw == nil {
- delete(normalized, GrokMediaEligibleExtraKey)
- }
- return normalized, nil
- }
- if current, ok := account.Extra[GrokMediaEligibleExtraKey].(bool); ok {
- normalized[GrokMediaEligibleExtraKey] = current
- }
- return normalized, nil
- }
|