42 lines
1.1 KiB
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
|
|
}
|