From 2dc54719e516f88602d2f2940ae04a816c136dfd Mon Sep 17 00:00:00 2001 From: moonrailgun Date: Fri, 8 Sep 2023 15:04:05 +0800 Subject: [PATCH] refactor: extract group types info types package --- client/shared/model/group.ts | 83 ++++-------------------- packages/types/package.json | 2 +- packages/types/src/index.ts | 1 + packages/types/src/model/group.ts | 103 ++++++++++++++++++++++++++++++ 4 files changed, 117 insertions(+), 72 deletions(-) create mode 100644 packages/types/src/model/group.ts diff --git a/client/shared/model/group.ts b/client/shared/model/group.ts index e06f0168..e9ef7da0 100644 --- a/client/shared/model/group.ts +++ b/client/shared/model/group.ts @@ -1,10 +1,15 @@ import { request } from '../api/request'; - -export enum GroupPanelType { - TEXT = 0, - GROUP = 1, - PLUGIN = 2, -} +import { + GroupPanelType, + GroupPanel, + GroupRole, + GroupInfo as IGroupInfo, + GroupBasicInfo, + GroupInvite, +} from 'tailchat-types'; + +export { GroupPanelType }; +export type { GroupPanel, GroupRole, GroupBasicInfo, GroupInvite }; export const groupConfigNames = [ // 隐藏群组成员标识位 @@ -35,75 +40,11 @@ export type GroupPanelFeature = | 'subscribe' // 订阅事件变更状态,用于加入socket.io群组 | 'ack'; // 是否包含已读未读检查,如果包含的话需要同时开启 subscribe 特性 -export interface GroupPanel { - /** - * 在群组中唯一, 是个objectId - */ - id: string; - /** - * 用于显示的面板名,形如: `com.msgbyte.xxx/panel` - */ - name: string; - parentId?: string; - type: GroupPanelType; - provider?: string; // 面板提供者 - pluginPanelName?: string; // 插件面板名 - meta?: Record; -} - -export interface GroupRole { - _id: string; - /** - * 权限组名 - */ - name: string; - /** - * 拥有的权限, 是一段字符串 - */ - permissions: string[]; -} - -export interface GroupInfo { - _id: string; - name: string; - avatar?: string; - owner: string; - description?: string; - members: GroupMember[]; - panels: GroupPanel[]; - roles: GroupRole[]; +export interface GroupInfo extends Omit { config?: Partial>; - /** - * 所有人的权限列表 - * 为群组中的最低权限 - */ - fallbackPermissions: string[]; - /** - * 被钉选的面板Id - */ pinnedPanelId?: string; } -/** - * 访客级别获取群组信息 - */ -export interface GroupBasicInfo { - name: string; - avatar?: string; - owner: string; - memberCount: number; - backgroundImage?: string; -} - -export interface GroupInvite { - code: string; - groupId: string; - creator: string; - expiredAt?: string; - usage: number; - usageLimit?: number; -} - /** * 获取群组设置信息 */ diff --git a/packages/types/package.json b/packages/types/package.json index bdca66b1..e247df3f 100644 --- a/packages/types/package.json +++ b/packages/types/package.json @@ -1,6 +1,6 @@ { "name": "tailchat-types", - "version": "1.0.3", + "version": "1.0.4", "description": "Tailchat model types", "main": "dist/cjs/index.js", "module": "dist/esm/index.js", diff --git a/packages/types/src/index.ts b/packages/types/src/index.ts index 4c44ec99..dc00b5f8 100644 --- a/packages/types/src/index.ts +++ b/packages/types/src/index.ts @@ -1,3 +1,4 @@ export * from './model/inbox'; export * from './model/user'; export * from './model/message'; +export * from './model/group'; diff --git a/packages/types/src/model/group.ts b/packages/types/src/model/group.ts new file mode 100644 index 00000000..578f9c8b --- /dev/null +++ b/packages/types/src/model/group.ts @@ -0,0 +1,103 @@ +export interface GroupInfo { + _id: string; + name: string; + avatar?: string; + owner: string; + description: string; + members: GroupMember[]; + panels: GroupPanel[]; + roles?: GroupRole[]; + /** + * 所有人的权限列表 + * 为群组中的最低权限 + */ + fallbackPermissions: string[]; + /** + * 群组的配置信息 + */ + config: object; +} + +export interface GroupRole { + _id: string; + /** + * 权限组名 + */ + name: string; + /** + * 拥有的权限, 是一段字符串 + */ + permissions: string[]; +} + +export interface GroupMember { + roles?: string[]; // 角色权限组id + userId: string; + /** + * 禁言到xxx 为止 + */ + muteUntil?: string; +} + +export enum GroupPanelType { + TEXT = 0, + GROUP = 1, + PLUGIN = 2, +} + +export interface GroupPanel { + id: string; // 在群组中唯一, 可以用任意方式进行生成。这里使用ObjectId, 但不是ObjectId类型 + name: string; // 用于显示的名称 + parentId?: string; // 父节点id + + /** + * 面板类型: + * 0 文本频道 + * 1 面板分组 + * 2 插件 + * + * Reference: https://discord.com/developers/docs/resources/channel#channel-object-channel-types + */ + type: GroupPanelType; + provider?: string; // 面板提供者,为插件的标识,仅面板类型为插件时有效 + pluginPanelName?: string; // 插件面板名, 如 com.msgbyte.webview/grouppanel + /** + * 面板的其他数据 + */ + meta?: object; + + /** + * 身份组或者用户的权限 + * 如果没有设定则应用群组权限 + * + * key 为身份组id或者用户id + * value 为权限字符串列表 + */ + permissionMap?: Record; + + /** + * 所有人的权限列表 + * 如果没有设定则应用群组权限 + */ + fallbackPermissions?: string[]; +} + +/** + * 访客级别获取群组信息 + */ +export interface GroupBasicInfo { + name: string; + avatar?: string; + owner: string; + memberCount: number; + backgroundImage?: string; +} + +export interface GroupInvite { + code: string; + groupId: string; + creator: string; + expiredAt?: string; + usage: number; + usageLimit?: number; +}