feat: 更新心情打卡功能,优化用户信息处理

- 将用户身份信息从字符串类型改为AccessTokenPayload对象,增强代码可读性和安全性。
- 移除心情打卡DTO中的metadata字段,简化数据结构,提升性能。
- 更新心情打卡服务,去除不必要的metadata处理逻辑,优化数据存储。
This commit is contained in:
richarjiang
2025-08-22 08:55:30 +08:00
parent 270b59c599
commit ffc0cd1d13
4 changed files with 20 additions and 37 deletions

View File

@@ -46,14 +46,6 @@ export class CreateMoodCheckinDto {
@IsDateString() @IsDateString()
checkinDate?: string; checkinDate?: string;
@ApiProperty({
description: '扩展数据',
required: false,
example: { tags: ['工作', '运动'], trigger: '完成重要项目' }
})
@IsOptional()
@IsObject()
metadata?: Record<string, any>;
} }
export class UpdateMoodCheckinDto extends PartialType(CreateMoodCheckinDto) { export class UpdateMoodCheckinDto extends PartialType(CreateMoodCheckinDto) {

View File

@@ -70,12 +70,6 @@ export class MoodCheckin extends Model {
}) })
declare checkinDate: string; declare checkinDate: string;
@Column({
type: DataType.JSON,
allowNull: true,
comment: '扩展数据(标签、触发事件等)',
})
declare metadata: Record<string, any> | null;
@Column({ @Column({
type: DataType.DATE, type: DataType.DATE,

View File

@@ -12,6 +12,7 @@ import {
} from './dto/mood-checkin.dto'; } from './dto/mood-checkin.dto';
import { JwtAuthGuard } from '../common/guards/jwt-auth.guard'; import { JwtAuthGuard } from '../common/guards/jwt-auth.guard';
import { CurrentUser } from '../common/decorators/current-user.decorator'; import { CurrentUser } from '../common/decorators/current-user.decorator';
import { AccessTokenPayload } from 'src/users/services/apple-auth.service';
@ApiTags('心情打卡') @ApiTags('心情打卡')
@ApiBearerAuth() @ApiBearerAuth()
@@ -29,10 +30,10 @@ export class MoodCheckinsController {
@ApiResponse({ status: 401, description: '未授权' }) @ApiResponse({ status: 401, description: '未授权' })
async create( async create(
@Body() createMoodCheckinDto: CreateMoodCheckinDto, @Body() createMoodCheckinDto: CreateMoodCheckinDto,
@CurrentUser('id') userId: string, @CurrentUser() user: AccessTokenPayload,
): Promise<MoodCheckinResponseDto> { ): Promise<MoodCheckinResponseDto> {
this.logger.log(`用户 ${userId} 创建心情打卡: ${JSON.stringify(createMoodCheckinDto)}`); this.logger.log(`用户 ${user.sub} 创建心情打卡: ${JSON.stringify(createMoodCheckinDto)}`);
return this.moodCheckinsService.create(createMoodCheckinDto, userId); return this.moodCheckinsService.create(createMoodCheckinDto, user.sub);
} }
@Put() @Put()
@@ -44,10 +45,10 @@ export class MoodCheckinsController {
@ApiResponse({ status: 404, description: '记录不存在' }) @ApiResponse({ status: 404, description: '记录不存在' })
async update( async update(
@Body() updateMoodCheckinDto: UpdateMoodCheckinDto, @Body() updateMoodCheckinDto: UpdateMoodCheckinDto,
@CurrentUser('id') userId: string, @CurrentUser() user: AccessTokenPayload,
): Promise<MoodCheckinResponseDto> { ): Promise<MoodCheckinResponseDto> {
this.logger.log(`用户 ${userId} 更新心情打卡: ${JSON.stringify(updateMoodCheckinDto)}`); this.logger.log(`用户 ${user.sub} 更新心情打卡: ${JSON.stringify(updateMoodCheckinDto)}`);
return this.moodCheckinsService.update(updateMoodCheckinDto, userId); return this.moodCheckinsService.update(updateMoodCheckinDto, user.sub);
} }
@Delete() @Delete()
@@ -58,10 +59,10 @@ export class MoodCheckinsController {
@ApiResponse({ status: 404, description: '记录不存在' }) @ApiResponse({ status: 404, description: '记录不存在' })
async remove( async remove(
@Body() removeMoodCheckinDto: RemoveMoodCheckinDto, @Body() removeMoodCheckinDto: RemoveMoodCheckinDto,
@CurrentUser('id') userId: string, @CurrentUser() user: AccessTokenPayload,
): Promise<MoodCheckinResponseDto> { ): Promise<MoodCheckinResponseDto> {
this.logger.log(`用户 ${userId} 删除心情打卡: ${removeMoodCheckinDto.id}`); this.logger.log(`用户 ${user.sub} 删除心情打卡: ${removeMoodCheckinDto.id}`);
return this.moodCheckinsService.remove(removeMoodCheckinDto, userId); return this.moodCheckinsService.remove(removeMoodCheckinDto, user.sub);
} }
@Get('daily') @Get('daily')
@@ -71,10 +72,10 @@ export class MoodCheckinsController {
@ApiResponse({ status: 401, description: '未授权' }) @ApiResponse({ status: 401, description: '未授权' })
async getDaily( async getDaily(
@Query() query: GetMoodCheckinsQueryDto, @Query() query: GetMoodCheckinsQueryDto,
@CurrentUser('id') userId: string, @CurrentUser() user: AccessTokenPayload,
): Promise<MoodCheckinResponseDto> { ): Promise<MoodCheckinResponseDto> {
this.logger.log(`用户 ${userId} 获取每日心情打卡: ${query.date || '今天'}`); this.logger.log(`用户 ${user.sub} 获取每日心情打卡: ${query.date || '今天'}`);
return this.moodCheckinsService.getDaily(userId, query.date); return this.moodCheckinsService.getDaily(user.sub, query.date);
} }
@Get('history') @Get('history')
@@ -84,10 +85,10 @@ export class MoodCheckinsController {
@ApiResponse({ status: 401, description: '未授权' }) @ApiResponse({ status: 401, description: '未授权' })
async getHistory( async getHistory(
@Query() query: GetMoodHistoryQueryDto, @Query() query: GetMoodHistoryQueryDto,
@CurrentUser('id') userId: string, @CurrentUser() user: AccessTokenPayload,
): Promise<MoodCheckinResponseDto> { ): Promise<MoodCheckinResponseDto> {
this.logger.log(`用户 ${userId} 获取心情打卡历史: ${query.startDate} - ${query.endDate}`); this.logger.log(`用户 ${user.sub} 获取心情打卡历史: ${query.startDate} - ${query.endDate}`);
return this.moodCheckinsService.getHistory(userId, query); return this.moodCheckinsService.getHistory(user.sub, query);
} }
@Get('statistics') @Get('statistics')
@@ -98,9 +99,9 @@ export class MoodCheckinsController {
async getStatistics( async getStatistics(
@Query('startDate') startDate: string, @Query('startDate') startDate: string,
@Query('endDate') endDate: string, @Query('endDate') endDate: string,
@CurrentUser('id') userId: string, @CurrentUser() user: AccessTokenPayload,
): Promise<MoodCheckinResponseDto<MoodStatistics>> { ): Promise<MoodCheckinResponseDto<MoodStatistics>> {
this.logger.log(`用户 ${userId} 获取心情统计: ${startDate} - ${endDate}`); this.logger.log(`用户 ${user.sub} 获取心情统计: ${startDate} - ${endDate}`);
return this.moodCheckinsService.getStatistics(userId, startDate, endDate); return this.moodCheckinsService.getStatistics(user.sub, startDate, endDate);
} }
} }

View File

@@ -53,7 +53,6 @@ export class MoodCheckinsService {
intensity: dto.intensity, intensity: dto.intensity,
description: dto.description || null, description: dto.description || null,
checkinDate, checkinDate,
metadata: dto.metadata || null,
}); });
await this.activityLogsService.record({ await this.activityLogsService.record({
@@ -104,10 +103,7 @@ export class MoodCheckinsService {
record.checkinDate = dto.checkinDate; record.checkinDate = dto.checkinDate;
changes.checkinDate = dto.checkinDate; changes.checkinDate = dto.checkinDate;
} }
if (dto.metadata !== undefined) {
record.metadata = dto.metadata as any;
changes.metadata = dto.metadata;
}
await record.save(); await record.save();