miniprogramme/utils/group-api.js

332 lines
8.3 KiB
JavaScript
Raw Normal View History

2025-09-12 16:08:17 +08:00
// 群组功能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;