优化注册功能
This commit is contained in:
173
core/base.py
173
core/base.py
@@ -135,6 +135,50 @@ class DataManager:
|
||||
)
|
||||
''')
|
||||
|
||||
# 餐食记录表
|
||||
cursor.execute('''
|
||||
CREATE TABLE IF NOT EXISTS meal_records (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
user_id TEXT,
|
||||
date TEXT,
|
||||
meal_type TEXT,
|
||||
foods TEXT,
|
||||
quantities TEXT,
|
||||
calories REAL,
|
||||
satisfaction_score INTEGER,
|
||||
food_items TEXT,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
FOREIGN KEY (user_id) REFERENCES users (user_id)
|
||||
)
|
||||
''')
|
||||
|
||||
# 反馈记录表
|
||||
cursor.execute('''
|
||||
CREATE TABLE IF NOT EXISTS feedback_records (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
user_id TEXT,
|
||||
date TEXT,
|
||||
recommended_foods TEXT,
|
||||
user_choice TEXT,
|
||||
feedback_type TEXT,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
FOREIGN KEY (user_id) REFERENCES users (user_id)
|
||||
)
|
||||
''')
|
||||
|
||||
# 问卷记录表
|
||||
cursor.execute('''
|
||||
CREATE TABLE IF NOT EXISTS questionnaire_records (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
user_id TEXT,
|
||||
questionnaire_type TEXT,
|
||||
answers TEXT,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
FOREIGN KEY (user_id) REFERENCES users (user_id),
|
||||
UNIQUE(user_id, questionnaire_type)
|
||||
)
|
||||
''')
|
||||
|
||||
# 分析结果表
|
||||
cursor.execute('''
|
||||
CREATE TABLE IF NOT EXISTS analysis_results (
|
||||
@@ -195,66 +239,95 @@ class DataManager:
|
||||
return None
|
||||
|
||||
# 解析用户基本信息
|
||||
data_dict = json.loads(result[0])
|
||||
try:
|
||||
data_dict = json.loads(result[0])
|
||||
except json.JSONDecodeError as e:
|
||||
logger.error(f"解析用户数据JSON失败: user_id={user_id}, error={e}")
|
||||
conn.close()
|
||||
return None
|
||||
|
||||
# 获取餐食记录
|
||||
cursor.execute('''
|
||||
SELECT date, meal_type, foods, quantities, calories, satisfaction_score, food_items
|
||||
FROM meal_records
|
||||
WHERE user_id = ?
|
||||
ORDER BY date DESC
|
||||
''', (user_id,))
|
||||
|
||||
meal_rows = cursor.fetchall()
|
||||
# 获取餐食记录(如果表存在)
|
||||
meals = []
|
||||
for row in meal_rows:
|
||||
meal = {
|
||||
'date': row[0],
|
||||
'meal_type': row[1],
|
||||
'foods': json.loads(row[2]) if row[2] else [],
|
||||
'quantities': json.loads(row[3]) if row[3] else [],
|
||||
'calories': row[4],
|
||||
'satisfaction_score': row[5],
|
||||
'food_items': json.loads(row[6]) if row[6] else []
|
||||
}
|
||||
meals.append(meal)
|
||||
try:
|
||||
cursor.execute('''
|
||||
SELECT date, meal_type, foods, quantities, calories, satisfaction_score, food_items
|
||||
FROM meal_records
|
||||
WHERE user_id = ?
|
||||
ORDER BY date DESC
|
||||
''', (user_id,))
|
||||
|
||||
meal_rows = cursor.fetchall()
|
||||
for row in meal_rows:
|
||||
try:
|
||||
meal = {
|
||||
'date': row[0],
|
||||
'meal_type': row[1],
|
||||
'foods': json.loads(row[2]) if row[2] else [],
|
||||
'quantities': json.loads(row[3]) if row[3] else [],
|
||||
'calories': row[4],
|
||||
'satisfaction_score': row[5],
|
||||
'food_items': json.loads(row[6]) if row[6] else []
|
||||
}
|
||||
meals.append(meal)
|
||||
except (json.JSONDecodeError, IndexError) as e:
|
||||
logger.warning(f"解析餐食记录失败: {e}")
|
||||
continue
|
||||
except sqlite3.OperationalError as e:
|
||||
# 表不存在,跳过
|
||||
logger.warning(f"meal_records表不存在,跳过: {e}")
|
||||
|
||||
# 获取反馈记录
|
||||
cursor.execute('''
|
||||
SELECT date, recommended_foods, user_choice, feedback_type
|
||||
FROM feedback_records
|
||||
WHERE user_id = ?
|
||||
ORDER BY date DESC
|
||||
''', (user_id,))
|
||||
|
||||
feedback_rows = cursor.fetchall()
|
||||
# 获取反馈记录(如果表存在)
|
||||
feedback = []
|
||||
for row in feedback_rows:
|
||||
fb = {
|
||||
'date': row[0],
|
||||
'recommended_foods': json.loads(row[1]) if row[1] else [],
|
||||
'user_choice': row[2],
|
||||
'feedback_type': row[3]
|
||||
}
|
||||
feedback.append(fb)
|
||||
try:
|
||||
cursor.execute('''
|
||||
SELECT date, recommended_foods, user_choice, feedback_type
|
||||
FROM feedback_records
|
||||
WHERE user_id = ?
|
||||
ORDER BY date DESC
|
||||
''', (user_id,))
|
||||
|
||||
feedback_rows = cursor.fetchall()
|
||||
for row in feedback_rows:
|
||||
try:
|
||||
fb = {
|
||||
'date': row[0],
|
||||
'recommended_foods': json.loads(row[1]) if row[1] else [],
|
||||
'user_choice': row[2],
|
||||
'feedback_type': row[3]
|
||||
}
|
||||
feedback.append(fb)
|
||||
except (json.JSONDecodeError, IndexError) as e:
|
||||
logger.warning(f"解析反馈记录失败: {e}")
|
||||
continue
|
||||
except sqlite3.OperationalError as e:
|
||||
# 表不存在,跳过
|
||||
logger.warning(f"feedback_records表不存在,跳过: {e}")
|
||||
|
||||
# 获取问卷数据
|
||||
cursor.execute('''
|
||||
SELECT questionnaire_type, answers
|
||||
FROM questionnaire_records
|
||||
WHERE user_id = ?
|
||||
''', (user_id,))
|
||||
|
||||
questionnaire_rows = cursor.fetchall()
|
||||
# 获取问卷数据(如果表存在)
|
||||
preferences = {}
|
||||
for row in questionnaire_rows:
|
||||
preferences[row[0]] = json.loads(row[1]) if row[1] else {}
|
||||
try:
|
||||
cursor.execute('''
|
||||
SELECT questionnaire_type, answers
|
||||
FROM questionnaire_records
|
||||
WHERE user_id = ?
|
||||
''', (user_id,))
|
||||
|
||||
questionnaire_rows = cursor.fetchall()
|
||||
for row in questionnaire_rows:
|
||||
try:
|
||||
preferences[row[0]] = json.loads(row[1]) if row[1] else {}
|
||||
except (json.JSONDecodeError, IndexError) as e:
|
||||
logger.warning(f"解析问卷记录失败: {e}")
|
||||
continue
|
||||
except sqlite3.OperationalError as e:
|
||||
# 表不存在,跳过
|
||||
logger.warning(f"questionnaire_records表不存在,跳过: {e}")
|
||||
|
||||
conn.close()
|
||||
|
||||
# 构建完整的用户数据
|
||||
user_data = UserData(
|
||||
user_id=data_dict['user_id'],
|
||||
user_id=data_dict.get('user_id', user_id),
|
||||
profile=data_dict.get('profile', {}),
|
||||
meals=meals,
|
||||
feedback=feedback,
|
||||
@@ -266,7 +339,7 @@ class DataManager:
|
||||
return user_data
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"获取用户数据失败: {e}")
|
||||
logger.error(f"获取用户数据失败: user_id={user_id}, error={e}", exc_info=True)
|
||||
return None
|
||||
|
||||
def save_analysis_result(self, result: AnalysisResult) -> bool:
|
||||
|
||||
Reference in New Issue
Block a user