Files
digital-pilates/services/users.ts
2025-12-02 19:10:55 +08:00

78 lines
2.2 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { api } from '@/services/api';
export type Gender = 'male' | 'female';
// 用户语言设置
export type UserLanguage = 'zh-CN' | 'en-US';
export type UpdateUserDto = {
name?: string;
avatar?: string; // base64 字符串
gender?: Gender;
birthDate?: number; // 时间戳(秒)
dailyStepsGoal?: number;
dailyCaloriesGoal?: number;
pilatesPurposes?: string[];
weight?: number;
height?: number;
activityLevel?: number; // 活动水平 1-4
initialWeight?: number; // 初始体重
targetWeight?: number; // 目标体重
chestCircumference?: number; // 胸围
waistCircumference?: number; // 腰围
upperHipCircumference?: number; // 上臀围
armCircumference?: number; // 臂围
thighCircumference?: number; // 大腿围
calfCircumference?: number; // 小腿围
language?: UserLanguage; // 用户语言偏好
};
export async function updateUser(dto: UpdateUserDto): Promise<Record<string, any>> {
// 固定使用后端文档接口PUT /api/users/update
return await api.put('/api/users/update', dto);
}
export async function uploadImage(formData: FormData): Promise<{ fileKey: string; fileUrl: string }> {
return await api.post('/api/users/cos/upload-image', formData, {
unsetContentType: true
});
}
export type BodyMeasurementsDto = {
chestCircumference?: number; // 胸围
waistCircumference?: number; // 腰围
upperHipCircumference?: number; // 上臀围
armCircumference?: number; // 臂围
thighCircumference?: number; // 大腿围
calfCircumference?: number; // 小腿围
};
export async function updateBodyMeasurements(dto: BodyMeasurementsDto): Promise<{
code: number;
message: string;
}> {
return await api.put('/users/body-measurements', dto);
}
export type DailyHealthDataDto = {
date?: string; // YYYY-MM-DD
waterIntake?: number; // ml
exerciseMinutes?: number; // minutes
caloriesBurned?: number; // kcal
standingMinutes?: number; // minutes
basalMetabolism?: number; // kcal
sleepMinutes?: number; // minutes
bloodOxygen?: number; // % (0-100)
stressLevel?: number; // ms (based on HRV)
};
export async function updateDailyHealthData(dto: DailyHealthDataDto): Promise<{
code: number;
message: string;
data: any;
}> {
return await api.put('/users/daily-health', dto);
}