118 lines
2.0 KiB
Go
118 lines
2.0 KiB
Go
package wechatdb
|
|
|
|
import (
|
|
"time"
|
|
|
|
"github.com/sjzar/chatlog/pkg/model"
|
|
|
|
_ "github.com/mattn/go-sqlite3"
|
|
)
|
|
|
|
type DB struct {
|
|
BasePath string
|
|
Version int
|
|
|
|
contact *Contact
|
|
message *Message
|
|
}
|
|
|
|
func New(path string, version int) (*DB, error) {
|
|
w := &DB{
|
|
BasePath: path,
|
|
Version: version,
|
|
}
|
|
|
|
// 初始化,加载数据库文件信息
|
|
if err := w.Initialize(); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return w, nil
|
|
}
|
|
|
|
func (w *DB) Close() error {
|
|
return nil
|
|
}
|
|
|
|
func (w *DB) Initialize() error {
|
|
|
|
var err error
|
|
w.message, err = NewMessage(w.BasePath, w.Version)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
w.contact, err = NewContact(w.BasePath, w.Version)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func (w *DB) GetMessages(start, end time.Time, talker string, limit, offset int) ([]*model.Message, error) {
|
|
|
|
if talker != "" {
|
|
if contact := w.contact.GetContact(talker); contact != nil {
|
|
talker = contact.UserName
|
|
}
|
|
}
|
|
|
|
messages, err := w.message.GetMessages(start, end, talker, limit, offset)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
for i := range messages {
|
|
w.contact.MessageFillInfo(messages[i])
|
|
}
|
|
|
|
return messages, nil
|
|
}
|
|
|
|
type ListContactResp struct {
|
|
Items []*model.Contact `json:"items"`
|
|
}
|
|
|
|
func (w *DB) ListContact() (*ListContactResp, error) {
|
|
list, err := w.contact.ListContact()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return &ListContactResp{
|
|
Items: list,
|
|
}, nil
|
|
}
|
|
|
|
func (w *DB) GetContact(userName string) *model.Contact {
|
|
return w.contact.GetContact(userName)
|
|
}
|
|
|
|
type ListChatRoomResp struct {
|
|
Items []*model.ChatRoom `json:"items"`
|
|
}
|
|
|
|
func (w *DB) ListChatRoom() (*ListChatRoomResp, error) {
|
|
list, err := w.contact.ListChatRoom()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return &ListChatRoomResp{
|
|
Items: list,
|
|
}, nil
|
|
}
|
|
|
|
func (w *DB) GetChatRoom(userName string) *model.ChatRoom {
|
|
return w.contact.GetChatRoom(userName)
|
|
}
|
|
|
|
type GetSessionResp struct {
|
|
Items []*model.Session `json:"items"`
|
|
}
|
|
|
|
func (w *DB) GetSession(limit int) (*GetSessionResp, error) {
|
|
sessions := w.contact.GetSession(limit)
|
|
return &GetSessionResp{
|
|
Items: sessions,
|
|
}, nil
|
|
}
|