/** * @file plugins/Sqlite/modules/userRecord.ts * @description Sqlite-用户战绩模块 * @since Beta v0.6.0 */ import { timestampToDate } from "../../../utils/toolFunc.js"; import TGSqlite from "../index.js"; import { transUserRecord } from "../utils/transUserRecord.js"; /** * @description 获取插入Sql * @since Beta v0.6.0 * @param {number} uid - 游戏UID * @param {TGApp.Sqlite.Record.SingleTable} data - 战绩数据 * @returns {string} */ function getInsertSql(uid: number, data: TGApp.Sqlite.Record.SingleTable): string { return ` INSERT INTO UserRecord(uid, role, avatars, stats, worldExplore, homes, updated) VALUES (${uid}, '${data.role}', '${data.avatars}', '${data.stats}', '${data.worldExplore}', '${data.homes}', '${data.updated}') ON CONFLICT(uid) DO UPDATE SET role = '${data.role}', avatars = '${data.avatars}', stats = '${data.stats}', worldExplore = '${data.worldExplore}', homes = '${data.homes}', updated = '${data.updated}'; `; } /** * @description 解析数据库数据 * @since Beta v0.6.0 * @param {TGApp.Sqlite.Record.SingleTable} data - 数据库数据 * @returns {TGApp.Sqlite.Record.RenderData} 渲染数据 */ function parseRecord(data: TGApp.Sqlite.Record.SingleTable): TGApp.Sqlite.Record.RenderData { return { uid: data.uid, role: JSON.parse(data.role), avatars: JSON.parse(data.avatars), stats: JSON.parse(data.stats), worldExplore: JSON.parse(data.worldExplore), homes: JSON.parse(data.homes), updated: data.updated, }; } /** * @description 转换数据库数据 * @since Beta v0.6.0 * @param {number} uid - 游戏UID * @param {TGApp.Game.Record.FullData} data - 战绩数据 * @returns {TGApp.Sqlite.Record.SingleTable} */ function transRecord( uid: number, data: TGApp.Game.Record.FullData, ): TGApp.Sqlite.Record.SingleTable { const transData = transUserRecord(uid, data); return { uid: uid, role: JSON.stringify(transData.role), avatars: JSON.stringify(transData.avatars), stats: JSON.stringify(transData.stats), worldExplore: JSON.stringify(transData.worldExplore), homes: JSON.stringify(transData.homes), updated: timestampToDate(new Date().getTime()), }; } /** * @description 获取UID列表 * @since Beta v0.6.0 * @returns {Promise} */ async function getAllUid(): Promise { const db = await TGSqlite.getDB(); type resType = Array<{ uid: number }>; const res = await db.select("SELECT DISTINCT uid FROM UserRecord;"); return res.map((e) => e.uid); } /** * @description 获取指定UID的战绩数据 * @since Beta v0.6.0 * @param {number} uid - 游戏UID * @returns {Promise} */ async function getRecord(uid: number): Promise { const db = await TGSqlite.getDB(); const res = await db.select( "SELECT * FROM UserRecord WHERE uid = ?;", [uid], ); if (res.length === 0) return false; return parseRecord(res[0]); } /** * @description 保存战绩数据 * @since Beta v0.6.0 * @param {number} uid - 游戏UID * @param {TGApp.Game.Record.FullData} data - 战绩数据 * @returns {Promise} */ async function saveRecord(uid: number, data: TGApp.Game.Record.FullData): Promise { const db = await TGSqlite.getDB(); const sql = getInsertSql(uid, transRecord(uid, data)); await db.execute(sql); } /** * @description 删除战绩数据 * @since Beta v0.6.0 * @param {number} uid * @returns {Promise} */ async function deleteUid(uid: number): Promise { const db = await TGSqlite.getDB(); await db.execute("DELETE FROM UserRecord WHERE uid=?;", [uid]); } const TSUserRecord = { getAllUid, getRecord, saveRecord, deleteUid, }; export default TSUserRecord;