easyai-ai-gateway/apps/api/internal/store/user_group_policy.go

42 lines
1.1 KiB
Go

package store
import (
"context"
"github.com/easyai/easyai-ai-gateway/apps/api/internal/auth"
"github.com/jackc/pgx/v5"
)
type UserGroupPolicy struct {
ID string
GroupKey string
RateLimitPolicy map[string]any
BillingDiscountPolicy map[string]any
}
func (s *Store) ResolveUserGroupPolicy(ctx context.Context, user *auth.User) (UserGroupPolicy, error) {
userGroupID := ""
if user != nil {
userGroupID = user.UserGroupID
}
var item UserGroupPolicy
var rateLimit []byte
var billing []byte
err := s.pool.QueryRow(ctx, `
SELECT id::text, group_key, rate_limit_policy, billing_discount_policy
FROM gateway_user_groups
WHERE status = 'active'
AND (($1 <> '' AND id = NULLIF($1, '')::uuid) OR ($1 = '' AND group_key = 'default'))
ORDER BY CASE WHEN id::text = $1 THEN 0 ELSE 1 END, priority ASC
LIMIT 1`, userGroupID).Scan(&item.ID, &item.GroupKey, &rateLimit, &billing)
if err != nil {
if err == pgx.ErrNoRows {
return UserGroupPolicy{}, nil
}
return UserGroupPolicy{}, err
}
item.RateLimitPolicy = decodeObject(rateLimit)
item.BillingDiscountPolicy = decodeObject(billing)
return item, nil
}