feat(cache): 添加复合键缓存操作支持 添加了基于 uint32+string 组合键的缓存操作方法,包括 GetByCompoundKey、SetByCompoundKey、DelByCompoundKey 和 ContainsByCompoundKey 方法,用于处理用户ID和会话ID的组合缓存场景 fix(vscode): 添加 cSpell 配置支持 struc 词汇 refactor(session): 移除过时的会话管理方法 移除了基于单一字符串键的会话管理方法,因为已迁移到使用 复合键的缓存操作方式 ```
62 lines
1.3 KiB
Go
62 lines
1.3 KiB
Go
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
|
||
|
||
}
|