feat(users): 添加身体围度测量功能

新增用户身体围度的完整功能模块,包括数据库迁移、模型定义、API接口和历史记录追踪。
支持胸围、腰围、上臀围、臂围、大腿围、小腿围六项身体围度指标的管理。

- 添加数据库迁移脚本,扩展用户档案表字段
- 创建围度历史记录表用于数据追踪
- 实现围度数据的更新和历史查询API
- 添加数据验证和错误处理机制
This commit is contained in:
richarjiang
2025-09-22 09:49:42 +08:00
parent dc06dfbebd
commit e2fcb1c428
7 changed files with 398 additions and 0 deletions

View File

@@ -34,6 +34,7 @@ import { AppStoreServerNotificationDto, ProcessNotificationResponseDto } from '.
import { RestorePurchaseDto, RestorePurchaseResponseDto } from './dto/restore-purchase.dto';
import { GetUserActivityHistoryResponseDto } from './dto/user-activity.dto';
import { UpdateWeightRecordDto, WeightRecordResponseDto, DeleteWeightRecordResponseDto } from './dto/weight-record.dto';
import { UpdateBodyMeasurementDto, UpdateBodyMeasurementResponseDto, GetBodyMeasurementHistoryResponseDto } from './dto/body-measurement.dto';
import { Public } from '../common/decorators/public.decorator';
import { CurrentUser } from '../common/decorators/current-user.decorator';
@@ -341,4 +342,40 @@ export class UsersController {
return this.usersService.getUserActivityHistory(user.sub);
}
// ==================== 围度相关接口 ====================
/**
* 更新用户围度信息
*/
@UseGuards(JwtAuthGuard)
@Put('body-measurements')
@HttpCode(HttpStatus.OK)
@ApiOperation({ summary: '更新用户围度信息' })
@ApiBody({ type: UpdateBodyMeasurementDto })
@ApiResponse({ status: 200, description: '成功更新围度信息', type: UpdateBodyMeasurementResponseDto })
async updateBodyMeasurements(
@Body() updateBodyMeasurementDto: UpdateBodyMeasurementDto,
@CurrentUser() user: AccessTokenPayload,
): Promise<UpdateBodyMeasurementResponseDto> {
this.logger.log(`更新用户围度信息 - 用户ID: ${user.sub}, 数据: ${JSON.stringify(updateBodyMeasurementDto)}`);
return this.usersService.updateBodyMeasurements(user.sub, updateBodyMeasurementDto);
}
/**
* 获取用户围度历史记录
*/
@UseGuards(JwtAuthGuard)
@Get('body-measurements/history')
@HttpCode(HttpStatus.OK)
@ApiOperation({ summary: '获取用户围度历史记录' })
@ApiQuery({ name: 'measurementType', required: false, description: '围度类型筛选' })
@ApiResponse({ status: 200, description: '成功获取围度历史记录', type: GetBodyMeasurementHistoryResponseDto })
async getBodyMeasurementHistory(
@CurrentUser() user: AccessTokenPayload,
@Query('measurementType') measurementType?: string,
): Promise<GetBodyMeasurementHistoryResponseDto> {
this.logger.log(`获取用户围度历史记录 - 用户ID: ${user.sub}, 围度类型: ${measurementType || '全部'}`);
return this.usersService.getBodyMeasurementHistory(user.sub, measurementType as any);
}
}