初始提交

This commit is contained in:
fanbook-wangdage
2025-12-28 17:01:42 +08:00
parent 3cace74c08
commit d67e42b067
20 changed files with 1284 additions and 0 deletions

View File

@@ -0,0 +1,98 @@
from app.extensions import client, logger
def get_gacha_log_entries(user_id):
"""获取用户的祈愿记录条目列表"""
gacha_logs = list(client.ht_server.GachaLog.find({"user_id": user_id}))
entries = []
for log in gacha_logs:
entry = {
"Uid": log['Uid'],
"Excluded": False,
"ItemCount": len(log['data'])
}
entries.append(entry)
return entries
def get_gacha_log_end_ids(user_id, uid):
"""获取指定 UID 用户的祈愿记录最新 ID"""
gacha_log = client.ht_server.GachaLog.find_one({"user_id": user_id, "Uid": uid})
if not gacha_log:
return {
"100": 0, # NoviceWish
"200": 0, # StandardWish
"301": 0, # AvatarEventWish
"302": 0, # WeaponEventWish
"500": 0 # ChronicledWish
}
# 计算各个祈愿类型的最新ID
end_ids = {
"100": 0,
"200": 0,
"301": 0,
"302": 0,
"500": 0
}
for item in gacha_log['data']:
gacha_type = str(item.get('GachaType', ''))
item_id = item.get('Id', 0)
if gacha_type in end_ids:
end_ids[gacha_type] = max(end_ids[gacha_type], item_id)
return end_ids
def upload_gacha_log(user_id, uid, items):
"""上传祈愿记录"""
# 查找是否已有该用户和UID的祈愿记录
existing_log = client.ht_server.GachaLog.find_one({"user_id": user_id, "Uid": uid})
if existing_log:
# 已有数据合并新旧数据按Id去重
old_items = existing_log.get('data', [])
# 用Id做索引先加旧的再加新的新数据覆盖旧数据
item_dict = {item.get('Id'): item for item in old_items}
for item in items:
item_dict[item.get('Id')] = item
merged_items = list(item_dict.values())
# 更新数据库
client.ht_server.GachaLog.update_one(
{"_id": existing_log['_id']},
{"$set": {"data": merged_items}}
)
return f"success, merged {len(items)} new items, total {len(merged_items)} items"
else:
# 没有数据,直接插入
gacha_log_entry = {
"user_id": user_id,
"Uid": uid,
"data": items
}
client.ht_server.GachaLog.insert_one(gacha_log_entry)
return f"success, uploaded {len(items)} items"
def retrieve_gacha_log(user_id, uid, end_ids):
"""从云端检索用户的祈愿记录数据"""
gacha_log = client.ht_server.GachaLog.find_one({"user_id": user_id, "Uid": uid})
if not gacha_log:
return []
# 筛选出比end_ids更旧的记录
filtered_items = []
for item in gacha_log['data']:
gacha_type = str(item.get('GachaType', ''))
item_id = item.get('Id', 0)
# end_ids有可能是0那么返回全部
if (gacha_type in end_ids and item_id < end_ids[gacha_type]) or end_ids.get(gacha_type, 0) == 0:
filtered_items.append(item)
return filtered_items
def delete_gacha_log(user_id, uid):
"""删除指定用户的祈愿记录"""
result = client.ht_server.GachaLog.delete_one({"user_id": user_id, "Uid": uid})
return result.deleted_count > 0