ai_v/services/history_service.py

56 lines
2.0 KiB
Python
Raw Normal View History

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
}