| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- 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
- }
|