更新小程序配置,切换 API 地址为本地开发环境。新增会员详情页面的头像逻辑,确保用户信息展示一致性。优化多个页面的交互提示,提升用户体验。调整图标组件,更新图标映射以支持新样式。

This commit is contained in:
Alex-larget
2026-03-20 10:58:25 +08:00
parent 181f092402
commit e79152c80b
21 changed files with 658 additions and 158 deletions

52
soul-api/internal/cache/memory.go vendored Normal file
View File

@@ -0,0 +1,52 @@
package cache
import (
"strings"
"sync"
"time"
)
// memoryFallback Redis 不可用时的内存备用缓存,保证服务可用
var (
memoryMu sync.RWMutex
memoryData = make(map[string]*memoryEntry)
)
type memoryEntry struct {
Data []byte
Expiry time.Time
}
func memoryGet(key string) ([]byte, bool) {
memoryMu.RLock()
defer memoryMu.RUnlock()
e, ok := memoryData[key]
if !ok || e == nil || time.Now().After(e.Expiry) {
return nil, false
}
return e.Data, true
}
func memorySet(key string, data []byte, ttl time.Duration) {
memoryMu.Lock()
defer memoryMu.Unlock()
memoryData[key] = &memoryEntry{Data: data, Expiry: time.Now().Add(ttl)}
}
func memoryDel(key string) {
memoryMu.Lock()
defer memoryMu.Unlock()
delete(memoryData, key)
}
// memoryDelPattern 按前缀删除pattern 如 soul:book:chapters-by-part:* 转为前缀 soul:book:chapters-by-part:
func memoryDelPattern(pattern string) {
prefix := strings.TrimSuffix(pattern, "*")
memoryMu.Lock()
defer memoryMu.Unlock()
for k := range memoryData {
if strings.HasPrefix(k, prefix) {
delete(memoryData, k)
}
}
}