Sub2API v1.0 - AI API 网关(二开初始版本,基于上游 Wei-Shaw/sub2api)
Release / update-version (push) Has been cancelled
Release / build-frontend (push) Has been cancelled
Release / release (push) Has been cancelled
Release / sync-version-file (push) Has been cancelled
CI / shell (push) Canceled after 0s
CI / test (push) Canceled after 0s
CI / frontend (push) Canceled after 0s
CI / golangci-lint (push) Canceled after 0s
Security Scan / backend-security (push) Canceled after 0s
Security Scan / frontend-security (push) Canceled after 0s
Release / update-version (push) Has been cancelled
Release / build-frontend (push) Has been cancelled
Release / release (push) Has been cancelled
Release / sync-version-file (push) Has been cancelled
CI / shell (push) Canceled after 0s
CI / test (push) Canceled after 0s
CI / frontend (push) Canceled after 0s
CI / golangci-lint (push) Canceled after 0s
Security Scan / backend-security (push) Canceled after 0s
Security Scan / frontend-security (push) Canceled after 0s
This commit is contained in:
@@ -0,0 +1,56 @@
|
||||
package service
|
||||
|
||||
import (
|
||||
"crypto/rand"
|
||||
"encoding/hex"
|
||||
"time"
|
||||
)
|
||||
|
||||
type RedeemCode struct {
|
||||
ID int64
|
||||
Code string
|
||||
Type string
|
||||
Value float64
|
||||
Status string
|
||||
UsedBy *int64
|
||||
UsedAt *time.Time
|
||||
Notes string
|
||||
CreatedAt time.Time
|
||||
ExpiresAt *time.Time
|
||||
|
||||
GroupID *int64
|
||||
ValidityDays int
|
||||
|
||||
User *User
|
||||
Group *Group
|
||||
}
|
||||
|
||||
func (r *RedeemCode) IsUsed() bool {
|
||||
return r.Status == StatusUsed
|
||||
}
|
||||
|
||||
func (r *RedeemCode) IsExpired() bool {
|
||||
return r.IsExpiredAt(time.Now())
|
||||
}
|
||||
|
||||
func (r *RedeemCode) IsExpiredAt(now time.Time) bool {
|
||||
if r == nil {
|
||||
return false
|
||||
}
|
||||
if r.Status == StatusExpired {
|
||||
return true
|
||||
}
|
||||
return r.Status == StatusUnused && r.ExpiresAt != nil && !r.ExpiresAt.After(now)
|
||||
}
|
||||
|
||||
func (r *RedeemCode) CanUse() bool {
|
||||
return r.Status == StatusUnused && !r.IsExpired()
|
||||
}
|
||||
|
||||
func GenerateRedeemCode() (string, error) {
|
||||
b := make([]byte, 16)
|
||||
if _, err := rand.Read(b); err != nil {
|
||||
return "", err
|
||||
}
|
||||
return hex.EncodeToString(b), nil
|
||||
}
|
||||
Reference in New Issue
Block a user