coai/auth/subscription.go
2023-09-29 17:25:27 +08:00

53 lines
1.2 KiB
Go

package auth
import (
"chat/utils"
"database/sql"
"fmt"
"github.com/go-redis/redis/v8"
"time"
)
func CountSubscriptionPrize(month int) float32 {
if month >= 12 {
return 8 * float32(month) * 0.9
}
return 8 * float32(month)
}
func BuySubscription(db *sql.DB, user *User, month int) bool {
if month < 1 || month > 999 {
return false
}
money := CountSubscriptionPrize(month)
if Pay(user.Username, money) {
user.AddSubscription(db, month)
return true
}
return false
}
func IncreaseSubscriptionUsage(cache *redis.Client, user *User) bool {
today := time.Now().Format("2006-01-02")
return utils.IncrWithLimit(cache, fmt.Sprintf(":subscription-usage:%s:%d", today, user.ID), 1, 50, 60*60*24) // 1 day
}
func DecreaseSubscriptionUsage(cache *redis.Client, user *User) bool {
today := time.Now().Format("2006-01-02")
return utils.DecrInt(cache, fmt.Sprintf(":subscription-usage:%s:%d", today, user.ID), 1)
}
func CanEnableSubscription(db *sql.DB, cache *redis.Client, user *User) bool {
if user == nil {
return false
}
return user.IsSubscribe(db) && IncreaseSubscriptionUsage(cache, user)
}
func GetDalleUsageLimit(db *sql.DB, user *User) int {
if user.IsSubscribe(db) {
return 50
}
return 5
}