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.
173 lines
6.6 KiB
173 lines
6.6 KiB
import Dexie from 'dexie';
|
|
|
|
export type ChatTable = 'prompts' | 'modelslabel' | 'modelslist' | 'chatuser' | 'chatmsg' | 'systemChatRecord' | 'workbenchChatRecord' | 'workbenchChatUser' | 'workbenchSessionList' | 'groupSessionList' | 'workbenchGroupChatRecord' | 'workbenchGroupUserList' | 'workbenchGroupInviteMessage';
|
|
|
|
export const dbInit: any = new Dexie('GodoOSDatabase');
|
|
dbInit.version(1).stores({
|
|
// ai助手
|
|
prompts: '++id,lang,action,prompt,name,ext,isdef,createdAt,[action+lang]',
|
|
// 模型标签
|
|
modelslabel: '++id,name,zhdesc,endesc,family,chanel,models,action,engine',
|
|
// 模型列表
|
|
modelslist: '++id,model,label,action,status,params,type,isdef,info,created_at',
|
|
// 用户列表
|
|
workbenchChatUser: '++id,ip,userName,chatId,avatar,mobile,phone,nickName,isOnline,updatedAt,createdAt',
|
|
// 会话列表
|
|
workbenchSessionList: '++id,avatar,chatId,username,nickname,userId,toUserId,previewMessage,messages,time,createdAt',
|
|
// 聊天记录
|
|
workbenchChatRecord: '++id,[toUserId+userId], [userId+toUserId],toUserId,messages,messageType,time,createdAt,userInfo',
|
|
// 群组会话列表
|
|
groupSessionList: '++id,groupId,chatId,name,message,previewMessage,avatar,createdAt',
|
|
// 群组聊天记录
|
|
workbenchGroupChatRecord: '++id,chatId,userId,to_groupid,messageType,userInfo,message,time,type,createdAt',
|
|
// 群用户列表
|
|
workbenchGroupUserList: '++id, group_id, createdAt, userIdArray',
|
|
// 群组邀请信息消息
|
|
workbenchGroupInviteMessage: '++id, group_id,userId, message, createdAt',
|
|
//系统聊天记录表
|
|
systemChatRecord: '++id,chatId,message,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',
|
|
}).upgrade((tx: {
|
|
workbenchSessionList: any;
|
|
workbenchChatUser: any;
|
|
workbenchGroupChatRecord: any;
|
|
workbenchGroupUserList: any;
|
|
workbenchGroupInviteMessage: any;
|
|
groupSessionList: any;
|
|
workbenchChatRecord: any;
|
|
systemChatRecord: any;
|
|
}) => {
|
|
// 手动添加索引
|
|
tx.groupSessionList.addIndex('chatId', (obj: { chatId: any; }) => obj.chatId);
|
|
tx.workbenchSessionList.addIndex('chatId', (obj: { chatId: any; }) => obj.chatId);
|
|
tx.workbenchChatRecord.addIndex('toUserId', (obj: { toUserId: any; }) => obj.toUserId);
|
|
tx.systemChatRecord.addIndex('chatId', (obj: { chatId: any; }) => obj.chatId);
|
|
// 添加复合索引
|
|
tx.workbenchChatRecord.addIndex('[toUserId+userId]', (obj: { toUserId: any; userId: any; }) => [obj.toUserId, obj.userId]);
|
|
tx.workbenchGroupChatRecord.addIndex('chatId', (obj: { chatId: any; }) => obj.chatId);
|
|
tx.workbenchGroupUserList.addIndex('group_id', (obj: { group_id: any; }) => obj.group_id);
|
|
tx.workbenchGroupInviteMessage.addIndex('group_id', (obj: { group_id: any; }) => obj.group_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)
|
|
try {
|
|
const data = await dbInit[tableName].where(whereObj).first()
|
|
//console.log(data)
|
|
return data ? data : false
|
|
} catch (error) {
|
|
return 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]
|
|
},
|
|
|
|
// 写一个根据id数组的in方法
|
|
async getByIds(tableName: ChatTable, ids: string[]) {
|
|
return dbInit[tableName].where("id").anyOf(ids).toArray()
|
|
},
|
|
|
|
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()
|
|
},
|
|
|
|
// 根据whereObj条件删除
|
|
async deleteByWhere(tableName: ChatTable, whereObj: any) {
|
|
return dbInit[tableName].where(whereObj).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()
|
|
},
|
|
}
|
|
|