Files
bl/modules/config/service/cdk.go

62 lines
1.3 KiB
Go
Raw Normal View History

package service
import (
"blazing/cool"
"blazing/modules/config/model"
"context"
"github.com/gogf/gf/v2/frame/g"
"github.com/gogf/gf/v2/util/grand"
"github.com/google/uuid"
) // 1. 扩展字符集:数字+大小写字母+安全符号避开URL/输入易冲突的符号,如/、?、&
const charsetWithSymbol = "0123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghjkmnpqrstuvwxyz"
func Generate16CharSecure() string {
result := make([]byte, 16)
for i := 0; i < 16; i++ {
result[i] = charsetWithSymbol[grand.N(0, len(charsetWithSymbol)-1)]
}
return string(result)
}
type CdkService struct {
*cool.Service
}
func NewCdkService() *CdkService {
return &CdkService{
&cool.Service{
Model: model.NewCDKConfig(),
InsertParam: func(ctx context.Context) g.MapStrAny {
uuid.NewV7()
return g.MapStrAny{
"cdk_code": Generate16CharSecure(),
}
},
},
}
}
func (s *CdkService) Get(id string) *model.CDKConfig {
var item *model.CDKConfig
dbm(s.Model).Where("cdk_code", id).WhereNot("exchange_remain_count", 0).Scan(&item)
return item
}
func (s *CdkService) Set(id string) bool {
res, err := cool.DBM(s.Model).Where("cdk_code", id).WhereNot("exchange_remain_count", 0).Decrement("exchange_remain_count", 1)
if err != nil {
return false
}
rows, _ := res.RowsAffected()
if rows == 0 {
return false
}
return true
}