完成 深渊数据 的备份与恢复

This commit is contained in:
BTMuli
2023-06-19 08:49:52 +08:00
parent 2991a15e48
commit 44f715f4e1
5 changed files with 91 additions and 5 deletions

View File

@@ -14,6 +14,7 @@ import { importUIAFData } from "./sql/updateData";
import { getUiafStatus } from "../../utils/UIAF";
import {
insertAbyssData,
importAbyssData,
insertAppData,
insertGameAccountData,
insertRecordData,
@@ -338,14 +339,34 @@ class Sqlite {
* @param {string} uid 游戏 UID
* @returns {Promise<TGApp.Game.Abyss.FullData>}
*/
public async getAbyss (uid: string): Promise<TGApp.Sqlite.Abyss.SingleTable[]> {
public async getAbyss (uid?: string): Promise<TGApp.Sqlite.Abyss.SingleTable[]> {
const db = await Database.load(this.dbPath);
const sql = `SELECT * FROM SpiralAbyss WHERE uid = '${uid}' order by id desc`;
let sql;
if (uid) {
sql = `SELECT * FROM SpiralAbyss WHERE uid = '${uid}' order by id desc`;
} else {
sql = "SELECT * FROM SpiralAbyss order by uid, id desc";
}
const res: TGApp.Sqlite.Abyss.SingleTable[] = await db.select(sql);
await db.close();
return res;
}
/**
* @description 恢复深渊数据
* @since Alpha v0.2.0
* @param {TGApp.Sqlite.Abyss.SingleTable[]} data 深渊数据
* @returns {Promise<void>}
*/
public async restoreAbyss (data: TGApp.Sqlite.Abyss.SingleTable[]): Promise<void> {
const db = await Database.load(this.dbPath);
for (const item of data) {
const sql = importAbyssData(item);
await db.execute(sql);
}
await db.close();
}
/**
* @description 保存战绩数据
* @since Alpha v0.2.0

View File

@@ -176,6 +176,41 @@ export function insertAbyssData (uid: string, data: TGApp.Game.Abyss.FullData):
`;
}
/**
* @description 恢复深渊数据
* @since Alpha v0.2.0
* @param {TGApp.Sqlite.Abyss.SingleTable} data 深渊数据
* @returns {string} sql
*/
export function importAbyssData (data: TGApp.Sqlite.Abyss.SingleTable): string {
return `
INSERT INTO SpiralAbyss (uid, id, startTime, endTime, totalBattleTimes, totalWinTimes,
maxFloor, totalStar, isUnlock, revealRank, defeatRank, damageRank,
takeDamageRank, normalSkillRank, energySkillRank, floors, updated)
VALUES ('${data.uid}', ${data.id}, '${data.startTime}', '${data.endTime}', ${data.totalBattleTimes},
${data.totalWinTimes}, '${data.maxFloor}', ${data.totalStar},
${data.isUnlock}, '${data.revealRank}', '${data.defeatRank}', '${data.damageRank}',
'${data.takeDamageRank}', '${data.normalSkillRank}', '${data.energySkillRank}', '${data.floors}',
datetime('now', 'localtime'))
ON CONFLICT(uid, id) DO UPDATE
SET startTime = '${data.startTime}',
endTime = '${data.endTime}',
totalBattleTimes = ${data.totalBattleTimes},
totalWinTimes = ${data.totalWinTimes},
maxFloor = '${data.maxFloor}',
totalStar = ${data.totalStar},
isUnlock = ${data.isUnlock},
revealRank = '${data.revealRank}',
defeatRank = '${data.defeatRank}',
damageRank = '${data.damageRank}',
takeDamageRank = '${data.takeDamageRank}',
normalSkillRank = '${data.normalSkillRank}',
energySkillRank = '${data.energySkillRank}',
floors = '${data.floors}',
updated = datetime('now', 'localtime');
`;
}
/**
* @description 插入原神战绩数据
* @since Alpha v0.2.0