mirror of https://gitee.com/godoos/godoos.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
139 lines
5.1 KiB
139 lines
5.1 KiB
import Dexie from 'dexie';
|
|
|
|
export type ChatTable = 'chatuser' | 'chatmsg' | 'chatmessage' | 'groupmessage' | 'chatRecord' | 'workbenchusers' | 'conversationList' | 'group' | 'groupMembers' | 'groupChatList' | 'groupChatRecord';
|
|
|
|
export const dbInit: any = new Dexie('GodoOSDatabase');
|
|
dbInit.version(1).stores({
|
|
// 用户列表
|
|
workbenchusers: '++id,ip,userName,avatar,mobile,phone,nickName,isOnline,updatedAt,createdAt',
|
|
// 聊天记录
|
|
chatRecord: '++id,toUserId,messages,messageType,time,createdAt,userInfo',
|
|
// 会话列表
|
|
conversationList: '++id,avatar,chatId,username,nickname,userId,toUserId,previewMessage,messages,time,createdAt',
|
|
chatuser: '++id,ip,hostname,userName,avatar,mobile,nickName,isOnline,updatedAt,createdAt',
|
|
chatmsg: '++id,toUserId,targetIp,senderInfo,reciperInfo,previewMessage,content,type,status,isRead,isMe,readAt,createdAt',
|
|
chatmessage: '++id,userId,toUserId,senderInfo,isMe,isRead,content,type,readAt,createdAt',
|
|
groupChatRecord: '++id,userId,groupId,messageType,userInfo,message,time,type,createdAt',
|
|
// 群组表
|
|
group: '++id,avatar,name,groupId,creator,createdAt',
|
|
// 群成员表
|
|
groupMembers: '++id,userId,groupTableId,groupId,createdAt',
|
|
// 群会话列表
|
|
groupChatList: '++id,groupId,name,message,previewMessage,avatar,createdAt',
|
|
|
|
}).upgrade((tx: {
|
|
conversationList: any;
|
|
group: any;
|
|
chatRecord: { addIndex: (arg0: string, arg1: (obj: { toUserId: any; }) => any) => void; };
|
|
}) => {
|
|
// 手动添加索引
|
|
tx.conversationList.addIndex('userId', (obj: { userId: any; }) => obj.userId);
|
|
tx.chatRecord.addIndex('toUserId', (obj: { toUserId: any; }) => obj.toUserId);
|
|
tx.group.addIndex('groupId', (obj: { groupId: any }) => obj.groupId); // 添加索引: 群主 ID
|
|
});
|
|
export const db = {
|
|
|
|
async getMaxId(tableName: ChatTable) {
|
|
const data = await dbInit[tableName].orderBy('id').reverse().first()
|
|
if (!data) {
|
|
return 0
|
|
} else {
|
|
return data.id
|
|
}
|
|
},
|
|
async getInsertId(tableName: ChatTable) {
|
|
const id: any = await this.getMaxId(tableName)
|
|
return id + 1
|
|
},
|
|
async getPage(tableName: ChatTable, page?: number, size?: number) {
|
|
page = (!page || page < 1) ? 1 : page
|
|
size = size ? size : 10
|
|
const offset = (page - 1) * size
|
|
return dbInit[tableName]
|
|
.orderBy("id")
|
|
.reverse()
|
|
.offset(offset)
|
|
.limit(size)
|
|
.toArray();
|
|
},
|
|
async getAll(tableName: ChatTable) {
|
|
return dbInit[tableName].toArray()
|
|
},
|
|
async count(tableName: ChatTable) {
|
|
return dbInit[tableName].count()
|
|
},
|
|
async countSearch(tableName: ChatTable, whereObj?: any) {
|
|
return dbInit[tableName].where(whereObj).count()
|
|
},
|
|
async pageSearch(tableName: ChatTable, page?: number, size?: number, whereObj?: any) {
|
|
page = (!page || page < 1) ? 1 : page
|
|
size = size ? size : 10
|
|
const offset = (page - 1) * size
|
|
//console.log(whereObj)
|
|
return dbInit[tableName]
|
|
.where(whereObj)
|
|
.reverse()
|
|
.offset(offset)
|
|
.limit(size)
|
|
.toArray();
|
|
},
|
|
async filter(tableName: ChatTable, filterFunc: any) {
|
|
return dbInit[tableName].filter(filterFunc).toArray()
|
|
},
|
|
table(tableName: ChatTable) {
|
|
return dbInit[tableName]
|
|
},
|
|
async getOne(tableName: ChatTable, Id: number) {
|
|
return dbInit[tableName].get(Id)
|
|
},
|
|
async getRow(tableName: ChatTable, fieldName: string, val: any) {
|
|
return dbInit[tableName].where(fieldName).equals(val).first()
|
|
},
|
|
async get(tableName: ChatTable, whereObj: any) {
|
|
//console.log(whereObj)
|
|
const data = await dbInit[tableName].where(whereObj).first()
|
|
//console.log(data)
|
|
return data ? data : false
|
|
},
|
|
async rows(tableName: ChatTable, whereObj: any) {
|
|
return dbInit[tableName].where(whereObj).toArray()
|
|
},
|
|
|
|
async field(tableName: ChatTable, whereObj: any, field: string) {
|
|
const data = await this.get(tableName, whereObj)
|
|
return data ? data[field] : false
|
|
},
|
|
async getValue(tableName: ChatTable, fieldName: string, val: any, fName: string) {
|
|
const row = await this.getRow(tableName, fieldName, val);
|
|
return row[fName]
|
|
},
|
|
|
|
async getByField(tableName: ChatTable, fieldName: string, val: any) {
|
|
return dbInit[tableName].where(fieldName).equals(val).toArray()
|
|
},
|
|
async addOne(tableName: ChatTable, data: any) {
|
|
return dbInit[tableName].add(data)
|
|
},
|
|
async addAll(tableName: ChatTable, data: any) {
|
|
return dbInit[tableName].bulkAdd(data)
|
|
},
|
|
async update(tableName: ChatTable, Id?: number, updates?: any) {
|
|
return dbInit[tableName].update(Id, updates)
|
|
},
|
|
async modify(tableName: ChatTable, fieldName: string, val: any, updates: any) {
|
|
return dbInit[tableName].where(fieldName).equals(val).modify(updates)
|
|
},
|
|
async delete(tableName: ChatTable, Id?: number) {
|
|
return dbInit[tableName].delete(Id)
|
|
},
|
|
async deleteByField(tableName: ChatTable, fieldName: string, val: any) {
|
|
return dbInit[tableName].where(fieldName).equals(val).delete()
|
|
},
|
|
// 获取创建时间最近的记录
|
|
async getLatest(tableName: ChatTable, fieldName: string, val: any) {
|
|
return dbInit[tableName].where(fieldName).equals(val).reverse().first()
|
|
},
|
|
async clear(tableName: ChatTable) {
|
|
return dbInit[tableName].clear()
|
|
},
|
|
}
|
|
|