XuqmGroup-Web/tenant-platform/src/api/im.ts

61 行
1.4 KiB
TypeScript

import axios from 'axios'
const imClient = axios.create({
baseURL: 'https://sentry.xuqinmin.com',
timeout: 15000,
})
imClient.interceptors.request.use((config) => {
const token = localStorage.getItem('token')
if (token) config.headers.Authorization = `Bearer ${token}`
return config
})
export interface ImUser {
id: string
appId: string
userId: string
nickname: string
avatar?: string
status: 'ACTIVE' | 'BANNED'
gender: 'UNKNOWN' | 'MALE' | 'FEMALE'
createdAt: string
}
export interface ImGroup {
id: string
appId: string
name: string
creatorId: string
memberIds: string[]
adminIds: string[]
createdAt: string
}
export interface ImStats {
totalMessages: number
totalUsers: number
totalGroups: number
todayMessages: number
}
export const imAdminApi = {
listUsers(appId: string, page = 0, size = 20) {
return imClient.get<{ data: { content: ImUser[]; totalElements: number; totalPages: number } }>(
'/api/im/admin/users', { params: { appId, page, size } },
)
},
updateUserStatus(appId: string, userId: string, status: 'ACTIVE' | 'BANNED') {
return imClient.put(`/api/im/admin/users/${userId}/status`, { status }, { params: { appId } })
},
listGroups(appId: string) {
return imClient.get<{ data: ImGroup[] }>('/api/im/admin/groups', { params: { appId } })
},
getStats(appId: string) {
return imClient.get<{ data: ImStats }>('/api/im/admin/stats', { params: { appId } })
},
}