import { requestClient } from '@/api/request' /** * 性别枚举 * * 对应 OpenAPI: Sex (x-enums) * 1 = 男,2 = 女 */ export const Sex = { /** 男 */ MALE: 1, /** 女 */ FEMALE: 2 } as const /** 性别类型 */ export type SexType = (typeof Sex)[keyof typeof Sex] /** * 用户信息响应 * * 对应 OpenAPI: UserInfoResponse * 所有字段均为可选,部分字段可能为 null */ /** 在线状态枚举 */ export const UserStatus = { ONLINE: 'ONLINE', AWAY: 'AWAY', DND: 'DND', INVISIBLE: 'INVISIBLE' } as const /** 在线状态类型 */ export type UserStatusType = (typeof UserStatus)[keyof typeof UserStatus] export interface UserInfoResponse { /** 用户唯一标识(UUID) */ userId?: string /** 用户昵称,最长 16 位 */ nickName?: string /** 头像图片 URL 地址,可能为 null */ avatar?: string | null /** 个性签名,最长 64 位,可能为 null */ signature?: string | null /** 年龄,可能为 null */ age?: number | null /** 性别:1=男,2=女,可能为 null */ sex?: SexType | null /** 生日(ISO 8601 日期格式),可能为 null */ birthday?: string | null /** 在线状态:ONLINE / AWAY / DND / INVISIBLE */ status?: UserStatusType } /** 更新在线状态请求 */ export interface UpdateStatusRequest { /** 状态值:ONLINE、AWAY、DND、INVISIBLE */ status: UserStatusType } /** * 获取当前登录用户信息 * * 根据请求头中的 saToken 获取当前登录用户的详细信息。 * 需登录认证。 * * @returns 当前登录用户的详细信息 */ export function getUserInfo() { return requestClient.get('/user/info') } /** 更新用户信息请求(所有字段可选,传什么更新什么) */ export interface UpdateUserInfoRequest { /** 用户昵称,最长 16 位 */ nickName?: string /** 头像图片 URL 地址 */ avatar?: string /** 个性签名,最长 64 位 */ signature?: string /** 年龄 */ age?: number /** 性别:1=男,2=女 */ sex?: number /** 生日(ISO 8601 日期格式,如 "1998-06-15") */ birthday?: string } /** * 更新当前登录用户信息 * * 所有字段可选,传什么更新什么。 * * @param data - 更新请求 * @returns 更新后的用户信息 */ export function updateUserInfo(data: UpdateUserInfoRequest) { return requestClient.put('/user/info', data) } /** * 上传用户头像 * * 接收裁剪后的图片文件,保存后返回更新后的用户信息。 * * @param file - 头像文件(JPEG/PNG/WebP/GIF,≤2MB) * @returns 更新后的用户信息 */ export function uploadAvatar(file: File) { const formData = new FormData() formData.append('file', file) return requestClient.post('/user/avatar', formData, { headers: { 'Content-Type': 'multipart/form-data' } } as any) } /** * 删除用户头像 * * 删除磁盘文件并将 DB 中 avatar 置空。 * * @returns 更新后的用户信息(avatar 为 null) */ export function deleteAvatar() { return requestClient.delete('/user/avatar') } /** * 更新当前登录用户在线状态 * * @param data - 状态更新请求 */ export function updateStatus(data: UpdateStatusRequest) { return requestClient.patch('/user/status', data) }