import request from '../utils/request'
/**
* @module GroupAPI
* @description 包含与群组和频道管理相关的 API 请求。
*/
/**
* @typedef {object} CreateGroupRequest
* @property {string} name - 群组名称。
* @property {string} description - 群组简介。
*/
/**
* @typedef {object} CreateChannelRequest
* @property {string} name - 频道名称。
* @property {string} groupId - 群组ID。
*/
/**
* @typedef {object} UploadGroupAvatarRequest
* @property {string} groupId - 群组ID。
* @property {FormData} avatar - 包含头像文件(字段名为 'avatar')的 FormData 对象。
*/
/**
* @typedef {object} SendGroupInvitationRequest
* @property {string} groupId - 群组ID。
* @property {string[]} inviteeIds - 被邀请的用户ID数组。
*/
/**
* @typedef {object} SearchGroupMembersRequest
* @property {string} groupId - 群组ID。
* @property {string} q - 搜索关键字(匹配用户名)。
* @property {number} [page=1] - 当前页码(默认为 1)。
* @property {number} [limit=5] - 每页返回数量(默认为 5)。
*/
/**
* @typedef {object} GroupInvitationResponseRequest
* @property {string} groupId - 群组ID。
* @property {'accept'|'decline'} action - 用户对群组邀请的响应,"accept"表示接受,"decline"表示拒绝。
*/
/**
* @typedef {object} KickGroupMemberRequest
* @property {string} groupId - 群组ID。
* @property {string} memberId - 要移除的用户 ID。
*/
/**
* @typedef {object} UpdateGroupInfoRequest
* @property {string} groupId - 群组ID。
* @property {string} name - 新的群组名称(最长 10 个字符)。
* @property {string} description - 群组简介(最长 15 个字符)。
*/
/**
* 创建群聊。
* @function createGroup
* @param {CreateGroupRequest} data - 请求体数据,包含群组名称和简介。
* @returns {Promise<object>} 包含群组创建结果的 Promise 对象。
*/
export const createGroup = (data) => {
return request.post('/api/groups/', data, { showGlobalLoading: true })
}
/**
* 获取用户所有群组。
* @function getUserGroups
* @returns {Promise<object>} 包含用户所属群组列表的 Promise 对象。
*/
export const getUserGroups = () => {
return request.get('/api/groups/mine')
}
/**
* 创建当前群组的频道。
* @function createChannel
* @param {CreateChannelRequest} data - 请求体数据,包含频道名称和群组ID。
* @returns {Promise<object>} 包含频道创建结果的 Promise 对象。
*/
export const createChannel = (data) => {
return request.post('/api/groups/channel', data, { showGlobalLoading: true })
}
/**
* 获取当前群组的所有频道。
* @function getChannelList
* @param {string} groupId - 群组的 ID。
* @returns {Promise<object>} 包含频道列表的 Promise 对象。
*/
export const getChannelList = (groupId) => {
return request.get(`api/groups/channel/${groupId}/channels`)
}
/**
* 删除当前所选频道。
* @function deleteChannel
* @param {string} channelId - 要删除的频道ID。
* @returns {Promise<object>} 包含频道删除结果的 Promise 对象。
*/
export const deleteChannel = (channelId) => {
return request.delete(`/api/groups/channel/${channelId}`, {
showGlobalLoading: true
})
}
/**
* 上传群组头像。
* @function uploadGroupAvatar
* @param {UploadGroupAvatarRequest} data - 上传群组头像数据,包含群组ID和头像文件。
* @returns {Promise<object>} 包含头像上传结果的 Promise 对象。
*/
export const uploadGroupAvatar = (data) => {
const { groupId, avatar } = data
return request.post(`api/groups/${groupId}/avatar`, avatar, {
showGlobalLoading: true
})
}
/**
* 获取用户所属群组的所有用户(群组详情)。
* @function getGroupMembers
* @param {string} groupId - 群组ID。
* @returns {Promise<object>} 包含群组详细信息和成员列表的 Promise 对象。
*/
export const getGroupMembers = (groupId) => {
return request.get(`/api/groups/${groupId}`)
}
/**
* 批量邀请用户加入群组。
* @function sendGroupInvitation
* @param {SendGroupInvitationRequest} data - 邀请数据,包含群组ID和被邀请的用户ID数组。
* @returns {Promise<object>} 包含邀请结果的 Promise 对象。
*/
export const sendGroupInvitation = (data) => {
const { groupId, inviteeIds } = data
return request.post(`/api/groups/${groupId}/invitations`, { inviteeIds })
}
/**
* 模糊搜索群组成员。
* @function searchGroupMembers
* @param {SearchGroupMembersRequest} data - 搜索参数,包含群组ID、搜索关键字、页码和每页数量。
* @returns {Promise<object>} 包含搜索结果列表的 Promise 对象。
*/
export const searchGroupMembers = (data) => {
const { groupId, q, page = 1, limit = 5 } = data
return request.get(`/api/groups/${groupId}/members`, {
params: {
q,
page,
limit
}
})
}
/**
* 获取当前用户的群组邀请。
* @function getGroupInvitations
* @returns {Promise<object>} 包含待处理群组邀请列表的 Promise 对象。
*/
export const getGroupInvitations = () => {
return request.get('/api/groups/invitations/pending')
}
/**
* 响应群组邀请(接受或拒绝)。
* @function groupInvitationResponse
* @param {GroupInvitationResponseRequest} data - 响应数据,包含群组ID和操作动作。
* @returns {Promise<object>} 包含响应结果的 Promise 对象。
*/
export const groupInvitationResponse = (data) => {
const { groupId, action } = data
return request.post(`/api/groups/${groupId}/invitations/response`, {
action
})
}
/**
* 踢除群组成员。
* @function kickGroupMember
* @param {KickGroupMemberRequest} data - 踢人数据,包含群组ID和要移除的用户 ID。
* @returns {Promise<object>} 包含踢人操作结果的 Promise 对象。
*/
export const kickGroupMember = (data) => {
const { groupId, memberId } = data
return request.delete(`/api/groups/${groupId}/members/${memberId}`, {
showGlobalLoading: true
})
}
/**
* 更新群组信息。
* @function updateGroupInfo
* @param {UpdateGroupInfoRequest} data - 更新数据,包含群组ID、新的群组名称和描述。
* @returns {Promise<object>} 包含更新结果的 Promise 对象。
*/
export const updateGroupInfo = (data) => {
const { groupId, name, description } = data
return request.patch(
`api/groups/${groupId}/info`,
{ name, description },
{ showGlobalLoading: true }
)
}
/**
* 解散群组。
* @function disbandGroup
* @param {string} groupId - 要解散的群组 ID。
* @returns {Promise<object>} 包含解散操作结果的 Promise 对象。
*/
export const disbandGroup = (groupId) => {
return request.delete(`api/groups/${groupId}`, { showGlobalLoading: true })
}