feat: enhance limits
This commit is contained in:
@@ -0,0 +1,51 @@
|
||||
package model
|
||||
|
||||
// Plan-default save limits (-1 = unlimited). Per-user override columns on the
|
||||
// users row take precedence when non-nil; admins set them from the panel.
|
||||
const (
|
||||
planPremium = "premium"
|
||||
|
||||
defaultFreeBookmarkLimit = 1
|
||||
defaultPremiumBookmarkLimit = 5
|
||||
defaultFreeCollectionLimit = 5 // per visibility; premium = unlimited
|
||||
)
|
||||
|
||||
// UserLimits are the effective per-resource caps in force for a user (-1 means
|
||||
// unlimited). Surfaced on the self user payload so the app can render
|
||||
// "X / Y used" and gate create actions without hardcoding the numbers.
|
||||
type UserLimits struct {
|
||||
Bookmarks int `json:"bookmarks"`
|
||||
PublicCollections int `json:"public_collections"`
|
||||
PrivateCollections int `json:"private_collections"`
|
||||
}
|
||||
|
||||
// ResolveLimits computes the effective caps from a plan plus optional per-user
|
||||
// overrides (nil = use the plan default). Shared by the self payload and the
|
||||
// admin user listing so both agree on what's in force.
|
||||
func ResolveLimits(plan string, bookmark, publicCollection, privateCollection *int) UserLimits {
|
||||
premium := plan == planPremium
|
||||
|
||||
bm := defaultFreeBookmarkLimit
|
||||
if premium {
|
||||
bm = defaultPremiumBookmarkLimit
|
||||
}
|
||||
pub, priv := defaultFreeCollectionLimit, defaultFreeCollectionLimit
|
||||
if premium {
|
||||
pub, priv = -1, -1
|
||||
}
|
||||
if bookmark != nil {
|
||||
bm = *bookmark
|
||||
}
|
||||
if publicCollection != nil {
|
||||
pub = *publicCollection
|
||||
}
|
||||
if privateCollection != nil {
|
||||
priv = *privateCollection
|
||||
}
|
||||
return UserLimits{Bookmarks: bm, PublicCollections: pub, PrivateCollections: priv}
|
||||
}
|
||||
|
||||
// EffectiveLimits resolves this user's caps (plan default + any overrides).
|
||||
func (u *User) EffectiveLimits() UserLimits {
|
||||
return ResolveLimits(u.Plan, u.BookmarkLimit, u.PublicCollectionLimit, u.PrivateCollectionLimit)
|
||||
}
|
||||
Reference in New Issue
Block a user