diff --git a/shared/db/AccuseRec.ts b/shared/db/AccuseRec.ts new file mode 100644 index 000000000..086232851 --- /dev/null +++ b/shared/db/AccuseRec.ts @@ -0,0 +1,32 @@ +import BaseModel from './BaseModel'; +import { index, getModelForClass, prop, DocumentType, modelOptions } from '@typegoose/typegoose'; + +/** + * 举报记录 +**/ +@modelOptions({ schemaOptions: { id: false } }) +@index({ roleId: 1 }) +@index({ targetRoleId: 1 }) +export default class AccuseRec extends BaseModel { + @prop({ required: true, default: '' }) + roleId: string; // 举报人的 roleId + @prop({ required: true, default: '' }) + roleName: string; // 举报人名字 + @prop({ required: true, default: '' }) + targetRoleId: string; // 被举报人的 roleId + @prop({ required: true, default: '' }) + targetRoleName: string; // 被举报人的名字 + + @prop({ required: true, default: '' }) + targetMsgCode: string; // 被举报的消息标识 + @prop({ required: true, default: 0 }) + reason: number; // 举报原因:1,涉政;2,广告;3,辱骂;4,欺诈;5,其它 + @prop({ required: true, default: 0 }) + result: number; // 处理结果:0,默认值,未处理;1,删除;2,忽略 + @prop({ required: true, default: '' }) + remarks: string; // 处理备注 +} + +export const AccuseRecModel = getModelForClass(AccuseRec); + +export interface AccuseRecType extends Pick, keyof AccuseRec>{} \ No newline at end of file diff --git a/shared/db/ChatInfo.ts b/shared/db/ChatInfo.ts new file mode 100644 index 000000000..368090971 --- /dev/null +++ b/shared/db/ChatInfo.ts @@ -0,0 +1,34 @@ +import BaseModel from './BaseModel'; +import { index, getModelForClass, prop, DocumentType, modelOptions } from '@typegoose/typegoose'; + +/** + * 记录聊天信息,包含配置、最近聊天等 +**/ +@modelOptions({ schemaOptions: { id: false } }) +@index({ roleId: 1 }) +export default class ChatInfo extends BaseModel { + @prop({ required: true, default: '' }) + roleId: string; // 消息发送者 roleId + @prop({ required: true, default: '' }) + roleName: string; // 消息发送者名称 + + @prop({ required: true, type: String, default: [] }) + sources: [string]; // 打开的消息来源,主要用于系统通知筛选 + @prop({ required: true, type: String, default: [] }) + BSChannels: [string]; // 弹幕打开的频道,BS:bullet screen + @prop({ required: true, type: String, default: [] }) + BSSources: [string]; // 弹幕打开的消息来源 + @prop({ required: true, default: '' }) + bubbleId: string; // 气泡编号 + @prop({ required: true, type: String, default: [] }) + recentPrivateChats: [{ // 最近聊天列表 + targetRoleId: string; // 聊天玩家 roleId + roomId: string; // 聊天 Id + lastReadTime: Date; // 最后查看时间 + }]; +} + + +export const ChatInfoModel = getModelForClass(ChatInfo); + +export interface ChatInfoType extends Pick, keyof ChatInfo> {}; diff --git a/shared/db/GroupMessage.ts b/shared/db/GroupMessage.ts new file mode 100644 index 000000000..0538e81d3 --- /dev/null +++ b/shared/db/GroupMessage.ts @@ -0,0 +1,47 @@ +import BaseModel from './BaseModel'; +import { index, getModelForClass, prop, DocumentType, modelOptions } from '@typegoose/typegoose'; + +/** + * 群聊信息 +**/ +@modelOptions({ schemaOptions: { id: false } }) +@index({ roomId: 1, seqId: 1 }) +@index({ msgId: 1 }) +export default class GroupMessage extends BaseModel { + + @prop({ required: true, default: '' }) + channel: string; // 频道类型:1,系统;2,世界;3,军团;4,组队 + @prop({ required: true, default: '' }) + channelId: string; // 具体频道标识 + @prop({ required: true, default: '' }) + roomId: string; // 频道唯一 Id,由 channel 和 channelId 拼接:world_serverId,guild_guildId + @prop({ required: true, default: 0 }) + type: number; // 消息类型:0,纯文本;1,富文本;2,表情 + + @prop({ required: true, default: '' }) + roleId: string; // 消息发送者 roleId + @prop({ required: true, default: '' }) + roleName: string; // 消息发送者名称 + @prop({ required: true, default: '' }) + targetRoleId: string; // 被回复者 roleId,不是回复则为空 + @prop({ required: true, default: '' }) + targetRoleName: string; // 被回复者名称 + + @prop({ required: true, default: '' }) + msgId: string; // 消息唯一 Id + @prop({ required: true, default: 0 }) + seqId: number; // 消息在本聊天室的递增 Id + @prop({ required: true, default: '' }) + targetMsgId: string; // 回复消息的唯一 Id + + @prop({ required: true, default: 0 }) + status: number; // 消息状态:0,正常;1,屏蔽 + + @prop({ required: true, default: '' }) + content: string; // 消息内容 +} + + +export const GroupMessageModel = getModelForClass(GroupMessage); + +export interface GroupMessageType extends Pick, keyof GroupMessage> {}; diff --git a/shared/db/PrivateMessage.ts b/shared/db/PrivateMessage.ts new file mode 100644 index 000000000..4685c942b --- /dev/null +++ b/shared/db/PrivateMessage.ts @@ -0,0 +1,42 @@ +import BaseModel from './BaseModel'; +import { index, getModelForClass, prop, DocumentType, modelOptions } from '@typegoose/typegoose'; + +/** + * 私聊信息 +**/ +@modelOptions({ schemaOptions: { id: false } }) +@index({ roomId: 1, seqId: 1 }) +@index({ msgId: 1 }) +export default class PrivateMessage extends BaseModel { + @prop({ required: true, default: '' }) + roomId: string; // 频道唯一 Id,由 roleId 和 targetRoleId 排序后拼接 + @prop({ required: true, default: 0 }) + type: number; // 消息类型:0,纯文本;1,富文本;2,表情 + + @prop({ required: true, default: '' }) + roleId: string; // 消息发送者 roleId + @prop({ required: true, default: '' }) + roleName: string; // 消息发送者名称 + @prop({ required: true, default: '' }) + targetRoleId: string; // 接收者 roleId + @prop({ required: true, default: '' }) + targetRoleName: string; // 接收者名称 + + @prop({ required: true, default: '' }) + msgId: string; // 消息唯一 Id + @prop({ required: true, default: 0 }) + seqId: number; // 消息在本聊天室的递增 Id + @prop({ required: true, default: '' }) + targetMsgId: string; // 回复消息的唯一 Id + + @prop({ required: true, default: 0 }) + status: number; // 消息状态:0,正常;1,屏蔽 + + @prop({ required: true, default: '' }) + content: string; // 消息内容 +} + + +export const PrivateMessageModel = getModelForClass(PrivateMessage); + +export interface PrivateMessageType extends Pick, keyof PrivateMessage> {};