Files
chatlog/internal/wechatdb/repository/repository.go
2025-04-01 19:41:40 +08:00

86 lines
2.3 KiB
Go

package repository
import (
"context"
"github.com/sjzar/chatlog/internal/errors"
"github.com/sjzar/chatlog/internal/model"
"github.com/sjzar/chatlog/internal/wechatdb/datasource"
)
// Repository 实现了 repository.Repository 接口
type Repository struct {
ds datasource.DataSource
// Cache for contact
contactCache map[string]*model.Contact
aliasToContact map[string]*model.Contact
remarkToContact map[string]*model.Contact
nickNameToContact map[string]*model.Contact
chatRoomInContact map[string]*model.Contact
contactList []string
aliasList []string
remarkList []string
nickNameList []string
// Cache for chat room
chatRoomCache map[string]*model.ChatRoom
remarkToChatRoom map[string]*model.ChatRoom
nickNameToChatRoom map[string]*model.ChatRoom
chatRoomList []string
chatRoomRemark []string
chatRoomNickName []string
// 快速查找索引
chatRoomUserToInfo map[string]*model.Contact
}
// New 创建一个新的 Repository
func New(ds datasource.DataSource) (*Repository, error) {
r := &Repository{
ds: ds,
contactCache: make(map[string]*model.Contact),
aliasToContact: make(map[string]*model.Contact),
remarkToContact: make(map[string]*model.Contact),
nickNameToContact: make(map[string]*model.Contact),
chatRoomUserToInfo: make(map[string]*model.Contact),
contactList: make([]string, 0),
aliasList: make([]string, 0),
remarkList: make([]string, 0),
nickNameList: make([]string, 0),
chatRoomCache: make(map[string]*model.ChatRoom),
remarkToChatRoom: make(map[string]*model.ChatRoom),
nickNameToChatRoom: make(map[string]*model.ChatRoom),
chatRoomList: make([]string, 0),
chatRoomRemark: make([]string, 0),
chatRoomNickName: make([]string, 0),
}
// 初始化缓存
if err := r.initCache(context.Background()); err != nil {
return nil, errors.InitCacheFailed(err)
}
return r, nil
}
// initCache 初始化缓存
func (r *Repository) initCache(ctx context.Context) error {
// 初始化联系人缓存
if err := r.initContactCache(ctx); err != nil {
return err
}
// 初始化群聊缓存
if err := r.initChatRoomCache(ctx); err != nil {
return err
}
return nil
}
// Close 实现 Repository 接口的 Close 方法
func (r *Repository) Close() error {
return r.ds.Close()
}