feat: 新增饮食记录模块,含增删改查及营养汇总功能

This commit is contained in:
richarjiang
2025-08-29 08:48:22 +08:00
parent 17ee96638e
commit a1c21d8a23
10 changed files with 479 additions and 355 deletions

View File

@@ -1,7 +1,7 @@
import { Injectable, Logger } from '@nestjs/common';
import { ConfigService } from '@nestjs/config';
import { OpenAI } from 'openai';
import { UsersService } from '../../users/users.service';
import { DietRecordsService } from '../../diet-records/diet-records.service';
import { CreateDietRecordDto } from '../../users/dto/diet-record.dto';
import { MealType, DietRecordSource } from '../../users/models/user-diet-history.model';
@@ -65,7 +65,7 @@ export class DietAnalysisService {
constructor(
private readonly configService: ConfigService,
private readonly usersService: UsersService,
private readonly dietRecordsService: DietRecordsService,
) {
const dashScopeApiKey = this.configService.get<string>('DASHSCOPE_API_KEY') || 'sk-e3ff4494c2f1463a8910d5b3d05d3143';
const baseURL = this.configService.get<string>('DASHSCOPE_BASE_URL') || 'https://dashscope.aliyuncs.com/compatible-mode/v1';
@@ -240,7 +240,7 @@ export class DietAnalysisService {
}
};
await this.usersService.addDietRecord(userId, createDto);
await this.dietRecordsService.addDietRecord(userId, createDto);
return createDto;
} catch (error) {
this.logger.error(`用户确认添加饮食记录失败: ${error instanceof Error ? error.message : String(error)}`);
@@ -278,7 +278,7 @@ export class DietAnalysisService {
aiAnalysisResult: analysisResult,
};
await this.usersService.addDietRecord(userId, createDto);
await this.dietRecordsService.addDietRecord(userId, createDto);
return createDto;
} catch (error) {
this.logger.error(`自动添加饮食记录失败: ${error instanceof Error ? error.message : String(error)}`);
@@ -294,7 +294,7 @@ export class DietAnalysisService {
async buildUserNutritionContext(userId: string): Promise<string> {
try {
// 获取最近10顿饮食记录
const recentDietHistory = await this.usersService.getDietHistory(userId, { limit: 10 });
const recentDietHistory = await this.dietRecordsService.getDietHistory(userId, { limit: 10 });
if (recentDietHistory.total === 0) {
return '\n\n=== 用户营养信息 ===\n这是用户的第一次饮食记录请给予鼓励并介绍饮食记录的价值。\n';
@@ -303,7 +303,7 @@ export class DietAnalysisService {
let context = '\n\n=== 用户最近饮食记录分析 ===\n';
// 获取营养汇总
const nutritionSummary = await this.usersService.getRecentNutritionSummary(userId, 10);
const nutritionSummary = await this.dietRecordsService.getRecentNutritionSummary(userId, 10);
context += this.buildNutritionSummaryText(nutritionSummary);
context += this.buildMealDistributionText(recentDietHistory.records);