42 lines
642 B
Go
42 lines
642 B
Go
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
|
|
|
|
GroupID *int64
|
|
ValidityDays int
|
|
|
|
User *User
|
|
Group *Group
|
|
}
|
|
|
|
func (r *RedeemCode) IsUsed() bool {
|
|
return r.Status == StatusUsed
|
|
}
|
|
|
|
func (r *RedeemCode) CanUse() bool {
|
|
return r.Status == StatusUnused
|
|
}
|
|
|
|
func GenerateRedeemCode() (string, error) {
|
|
b := make([]byte, 16)
|
|
if _, err := rand.Read(b); err != nil {
|
|
return "", err
|
|
}
|
|
return hex.EncodeToString(b), nil
|
|
}
|