56 lines
2.0 KiB
Python
56 lines
2.0 KiB
Python
|
|
from models import GenerationRecord, to_bj_time
|
|||
|
|
from flask import request
|
|||
|
|
import json
|
|||
|
|
from datetime import datetime, timedelta
|
|||
|
|
|
|||
|
|
def get_user_history_data(user_id, page=1, per_page=10, filter_type='all'):
|
|||
|
|
"""获取用户历史记录业务逻辑"""
|
|||
|
|
|
|||
|
|
# 计算 90 天前的时间
|
|||
|
|
ninety_days_ago = datetime.now() - timedelta(days=90)
|
|||
|
|
|
|||
|
|
query = GenerationRecord.query.filter(
|
|||
|
|
GenerationRecord.user_id == user_id,
|
|||
|
|
GenerationRecord.created_at >= ninety_days_ago,
|
|||
|
|
GenerationRecord.prompt != "解读验光单"
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
if filter_type == 'video':
|
|||
|
|
# 只看视频
|
|||
|
|
query = query.filter(GenerationRecord.image_urls.like('%"type": "video"%'))
|
|||
|
|
elif filter_type == 'image':
|
|||
|
|
# 只看图片 (排除视频)
|
|||
|
|
query = query.filter(~GenerationRecord.image_urls.like('%"type": "video"%'))
|
|||
|
|
|
|||
|
|
pagination = query.order_by(GenerationRecord.created_at.desc())\
|
|||
|
|
.paginate(page=page, per_page=per_page, error_out=False)
|
|||
|
|
|
|||
|
|
# 格式化 URL,兼容新旧数据格式
|
|||
|
|
history_list = []
|
|||
|
|
for r in pagination.items:
|
|||
|
|
raw_urls = json.loads(r.image_urls)
|
|||
|
|
formatted_urls = []
|
|||
|
|
for u in raw_urls:
|
|||
|
|
if isinstance(u, str):
|
|||
|
|
# 旧数据:直接返回原图作为缩略图
|
|||
|
|
formatted_urls.append({"url": u, "thumb": u})
|
|||
|
|
else:
|
|||
|
|
# 如果是视频类型,提供默认预览图 (此处使用一个公共视频占位图或空)
|
|||
|
|
if u.get('type') == 'video' and not u.get('thumb'):
|
|||
|
|
u['thumb'] = "https://img.icons8.com/flat-round/64/000000/play--v1.png"
|
|||
|
|
formatted_urls.append(u)
|
|||
|
|
|
|||
|
|
history_list.append({
|
|||
|
|
"id": r.id,
|
|||
|
|
"prompt": r.prompt,
|
|||
|
|
"model": r.model,
|
|||
|
|
"urls": formatted_urls,
|
|||
|
|
"created_at": r.created_at_bj.strftime('%m-%d %H:%M')
|
|||
|
|
})
|
|||
|
|
|
|||
|
|
return {
|
|||
|
|
"history": history_list,
|
|||
|
|
"has_next": pagination.has_next,
|
|||
|
|
"total": pagination.total
|
|||
|
|
}
|