Initial Commit
This commit is contained in:
commit
1d71a02738
237 changed files with 64293 additions and 0 deletions
331
utils/group-api.js
Normal file
331
utils/group-api.js
Normal file
|
|
@ -0,0 +1,331 @@
|
|||
// 群组功能API客户端
|
||||
const apiClient = require('./api-client.js');
|
||||
|
||||
class GroupAPI {
|
||||
constructor() {
|
||||
this.apiClient = apiClient;
|
||||
}
|
||||
|
||||
// 🔥 ===== 群组管理 =====
|
||||
|
||||
// 创建群组
|
||||
async createGroup(groupData) {
|
||||
try {
|
||||
const response = await this.apiClient.post('/api/v1/group/create', {
|
||||
name: groupData.name,
|
||||
avatar: groupData.avatar || '',
|
||||
description: groupData.description || '',
|
||||
notice: groupData.notice || '',
|
||||
type: groupData.type || 0,
|
||||
joinType: groupData.joinType || 0,
|
||||
memberIds: groupData.memberIds || []
|
||||
});
|
||||
return response;
|
||||
} catch (error) {
|
||||
console.error('创建群组失败:', error);
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
// 获取用户群组列表
|
||||
async getGroupList() {
|
||||
try {
|
||||
const response = await this.apiClient.get('/api/v1/group/list');
|
||||
return response;
|
||||
} catch (error) {
|
||||
console.error('获取群组列表失败:', error);
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
// 获取群组详情
|
||||
async getGroupDetail(groupId) {
|
||||
try {
|
||||
const response = await this.apiClient.get(`/api/v1/group/${groupId}/detail`);
|
||||
return response;
|
||||
} catch (error) {
|
||||
console.error('获取群组详情失败:', error);
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
// 获取群组信息
|
||||
async getGroupInfo(groupId) {
|
||||
try {
|
||||
const response = await this.apiClient.get(`/api/v1/group/${groupId}/info`);
|
||||
return response;
|
||||
} catch (error) {
|
||||
console.error('获取群组信息失败:', error);
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
// 更新群组信息
|
||||
async updateGroup(groupId, updates) {
|
||||
try {
|
||||
const response = await this.apiClient.put(`/api/v1/group/${groupId}`, updates);
|
||||
return response;
|
||||
} catch (error) {
|
||||
console.error('更新群组信息失败:', error);
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
// 删除群组
|
||||
async deleteGroup(groupId) {
|
||||
try {
|
||||
const response = await this.apiClient.delete(`/api/v1/group/${groupId}`);
|
||||
return response;
|
||||
} catch (error) {
|
||||
console.error('删除群组失败:', error);
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
// 申请加入群组
|
||||
async joinGroup(groupId, message = '') {
|
||||
try {
|
||||
const response = await this.apiClient.post('/api/v1/group/join', {
|
||||
groupId: groupId,
|
||||
message: message
|
||||
});
|
||||
return response;
|
||||
} catch (error) {
|
||||
console.error('申请加入群组失败:', error);
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
// 通过邀请码加入群组
|
||||
async joinGroupByCode(groupCode, message = '') {
|
||||
try {
|
||||
const response = await this.apiClient.post('/api/v1/group/join-by-code', {
|
||||
groupCode: groupCode,
|
||||
message: message
|
||||
});
|
||||
return response;
|
||||
} catch (error) {
|
||||
console.error('通过邀请码加入群组失败:', error);
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
// 退出群组
|
||||
async leaveGroup(groupId) {
|
||||
try {
|
||||
const response = await this.apiClient.post(`/api/v1/group/${groupId}/leave`);
|
||||
return response;
|
||||
} catch (error) {
|
||||
console.error('退出群组失败:', error);
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
// 🔥 ===== 群成员管理 =====
|
||||
|
||||
// 获取群成员列表
|
||||
async getGroupMembers(groupId) {
|
||||
try {
|
||||
const response = await this.apiClient.get(`/api/v1/group/${groupId}/members`);
|
||||
return response;
|
||||
} catch (error) {
|
||||
console.error('获取群成员列表失败:', error);
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
// 添加群成员
|
||||
async addGroupMembers(groupId, memberIds) {
|
||||
try {
|
||||
const response = await this.apiClient.post(`/api/v1/group/${groupId}/members`, {
|
||||
memberIds: memberIds
|
||||
});
|
||||
return response;
|
||||
} catch (error) {
|
||||
console.error('添加群成员失败:', error);
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
// 移除群成员
|
||||
async removeGroupMember(groupId, memberId) {
|
||||
try {
|
||||
const response = await this.apiClient.delete(`/api/v1/group/${groupId}/members/${memberId}`);
|
||||
return response;
|
||||
} catch (error) {
|
||||
console.error('移除群成员失败:', error);
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
// 更新群成员信息
|
||||
async updateGroupMember(memberData) {
|
||||
try {
|
||||
const response = await this.apiClient.put('/api/v1/group/members', memberData);
|
||||
return response;
|
||||
} catch (error) {
|
||||
console.error('更新群成员信息失败:', error);
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
// 🔥 ===== 群组加入请求管理 =====
|
||||
|
||||
// 获取群组加入请求
|
||||
async getGroupJoinRequests(groupId) {
|
||||
try {
|
||||
const response = await this.apiClient.get(`/api/v1/group/${groupId}/join-requests`);
|
||||
return response;
|
||||
} catch (error) {
|
||||
console.error('获取群组加入请求失败:', error);
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
// 处理群组加入请求
|
||||
async handleGroupJoinRequest(requestData) {
|
||||
try {
|
||||
const response = await this.apiClient.post('/api/v1/group/join-requests', requestData);
|
||||
return response;
|
||||
} catch (error) {
|
||||
console.error('处理群组加入请求失败:', error);
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
// 🔥 ===== 工具方法 =====
|
||||
|
||||
// 格式化群组类型
|
||||
getGroupTypeText(type) {
|
||||
const typeMap = {
|
||||
0: '普通群',
|
||||
1: '频道'
|
||||
};
|
||||
return typeMap[type] || '未知类型';
|
||||
}
|
||||
|
||||
// 格式化加入方式
|
||||
getJoinTypeText(joinType) {
|
||||
const joinTypeMap = {
|
||||
0: '自由加入',
|
||||
1: '需要验证',
|
||||
2: '禁止加入'
|
||||
};
|
||||
return joinTypeMap[joinType] || '未知方式';
|
||||
}
|
||||
|
||||
// 格式化群组状态
|
||||
getGroupStatusText(status) {
|
||||
const statusMap = {
|
||||
0: '已解散',
|
||||
1: '正常',
|
||||
2: '已封禁'
|
||||
};
|
||||
return statusMap[status] || '未知状态';
|
||||
}
|
||||
|
||||
// 格式化成员角色
|
||||
getMemberRoleText(role) {
|
||||
const roleMap = {
|
||||
0: '普通成员',
|
||||
1: '管理员',
|
||||
2: '群主'
|
||||
};
|
||||
return roleMap[role] || '未知角色';
|
||||
}
|
||||
|
||||
// 验证群组名称
|
||||
validateGroupName(name) {
|
||||
if (!name || typeof name !== 'string') {
|
||||
return { valid: false, message: '群组名称不能为空' };
|
||||
}
|
||||
|
||||
if (name.length < 2) {
|
||||
return { valid: false, message: '群组名称至少2个字符' };
|
||||
}
|
||||
|
||||
if (name.length > 50) {
|
||||
return { valid: false, message: '群组名称不能超过50个字符' };
|
||||
}
|
||||
|
||||
return { valid: true, message: '' };
|
||||
}
|
||||
|
||||
// 验证群组描述
|
||||
validateGroupDescription(description) {
|
||||
if (!description) {
|
||||
return { valid: true, message: '' };
|
||||
}
|
||||
|
||||
if (description.length > 200) {
|
||||
return { valid: false, message: '群组描述不能超过200个字符' };
|
||||
}
|
||||
|
||||
return { valid: true, message: '' };
|
||||
}
|
||||
|
||||
// 验证群组公告
|
||||
validateGroupNotice(notice) {
|
||||
if (!notice) {
|
||||
return { valid: true, message: '' };
|
||||
}
|
||||
|
||||
if (notice.length > 200) {
|
||||
return { valid: false, message: '群组公告不能超过200个字符' };
|
||||
}
|
||||
|
||||
return { valid: true, message: '' };
|
||||
}
|
||||
|
||||
// 验证邀请码格式
|
||||
validateGroupCode(groupCode) {
|
||||
if (!groupCode || typeof groupCode !== 'string') {
|
||||
return false;
|
||||
}
|
||||
|
||||
// 邀请码应该是8-20位字符
|
||||
const codeRegex = /^[A-Z0-9]{8,20}$/;
|
||||
return codeRegex.test(groupCode);
|
||||
}
|
||||
|
||||
// 生成群组默认头像
|
||||
generateGroupAvatar(groupName) {
|
||||
// 可以根据群组名称生成默认头像URL
|
||||
const firstChar = groupName ? groupName.charAt(0) : 'G';
|
||||
return `https://ui-avatars.com/api/?name=${encodeURIComponent(firstChar)}&background=random&color=fff&size=200`;
|
||||
}
|
||||
|
||||
// 计算群组成员上限
|
||||
getGroupMemberLimit(type, ownerMemberLevel = 0) {
|
||||
if (type === 1) {
|
||||
// 频道类型
|
||||
return ownerMemberLevel >= 2 ? 10000 : 5000;
|
||||
} else {
|
||||
// 普通群
|
||||
const limits = {
|
||||
0: 100, // 普通用户
|
||||
1: 200, // 会员
|
||||
2: 500, // 高级会员
|
||||
3: 1000 // VIP会员
|
||||
};
|
||||
return limits[ownerMemberLevel] || 100;
|
||||
}
|
||||
}
|
||||
|
||||
// 检查用户权限
|
||||
checkUserPermission(userRole, action) {
|
||||
const permissions = {
|
||||
0: ['view', 'send_message'], // 普通成员
|
||||
1: ['view', 'send_message', 'manage_members', 'edit_info'], // 管理员
|
||||
2: ['view', 'send_message', 'manage_members', 'edit_info', 'delete_group', 'manage_admins'] // 群主
|
||||
};
|
||||
|
||||
const userPermissions = permissions[userRole] || [];
|
||||
return userPermissions.includes(action);
|
||||
}
|
||||
}
|
||||
|
||||
// 创建全局单例
|
||||
const groupAPI = new GroupAPI();
|
||||
|
||||
module.exports = groupAPI;
|
||||
Loading…
Add table
Add a link
Reference in a new issue