From 8fbac6112d40a9680db5380c277a5f2c8af2ef0f Mon Sep 17 00:00:00 2001 From: BTMuli Date: Wed, 31 May 2023 21:26:14 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=8E=A8=20=E6=A0=B9=E6=8D=AE=E5=AE=9E?= =?UTF-8?q?=E9=99=85=E6=83=85=E5=86=B5=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/plugins/Sqlite/index.ts | 30 ++++++++- src/plugins/Sqlite/utils/transAbyssData.ts | 72 ++++++++++++++++++++++ src/plugins/Sqlite/utils/transTime.ts | 23 +++++++ src/types/Sqlite/Abyss.d.ts | 7 ++- 4 files changed, 128 insertions(+), 4 deletions(-) create mode 100644 src/plugins/Sqlite/utils/transAbyssData.ts create mode 100644 src/plugins/Sqlite/utils/transTime.ts diff --git a/src/plugins/Sqlite/index.ts b/src/plugins/Sqlite/index.ts index 959e8cbf..3ad9ba88 100644 --- a/src/plugins/Sqlite/index.ts +++ b/src/plugins/Sqlite/index.ts @@ -12,7 +12,7 @@ import initDataSql from "./sql/initData"; import initTableSql from "./sql/initTable"; import { importUIAFData } from "./sql/updateData"; import { getUiafStatus } from "../../utils/UIAF"; -import { insertAppData, insertGameAccountData } from "./sql/insertData"; +import { insertAbyssData, insertAppData, insertGameAccountData } from "./sql/insertData"; class Sqlite { /** @@ -81,7 +81,7 @@ class Sqlite { * @param {TGApp.User.Account.Game[]} accounts * @returns {Promise} */ - public async insertAccount (accounts: TGApp.User.Account.Game[]): Promise { + public async saveAccount (accounts: TGApp.User.Account.Game[]): Promise { const db = await Database.load(this.dbPath); for (const a of accounts) { const sql = insertGameAccountData(a); @@ -297,6 +297,32 @@ class Sqlite { } return achievements; } + + /** + * @description 保存深渊数据 + * @since Alpha v0.2.0 + * @param {TGApp.Game.Abyss.FullData} data 深渊数据 + * @returns {Promise} + */ + public async saveAbyss (data: TGApp.Game.Abyss.FullData): Promise { + const db = await Database.load(this.dbPath); + const sql = insertAbyssData(data); + await db.execute(sql); + await db.close(); + } + + /** + * @description 获取深渊数据 + * @since Alpha v0.2.0 + * @returns {Promise} + */ + public async getAbyss (): Promise { + const db = await Database.load(this.dbPath); + const sql = "SELECT * FROM SpiralAbyss"; + const res: TGApp.Sqlite.Abyss.SingleTable[] = await db.select(sql); + await db.close(); + return res; + } } const TGSqlite = new Sqlite(); diff --git a/src/plugins/Sqlite/utils/transAbyssData.ts b/src/plugins/Sqlite/utils/transAbyssData.ts new file mode 100644 index 00000000..171dd552 --- /dev/null +++ b/src/plugins/Sqlite/utils/transAbyssData.ts @@ -0,0 +1,72 @@ +/** + * @file plugins Sqlite utils transCharacter.ts + * @description Sqlite 数据转换 + * @author BTMuli + * @since Alpha v0.2.0 + */ + +import { timeToSecond } from "./transTime"; + +/** + * @description 将通过 api 获取到的深渊数据转换为数据库中的数据 + * @since Alpha v0.2.0 + * @param {TGApp.Game.Abyss.CharacterData[]} data 深渊数据 + * @returns {string} 转换后的深渊数据 + */ +export function transCharacterData (data: TGApp.Game.Abyss.CharacterData[]): string { + const res = data.map((item) => { + return { + id: item.avatar_id, + value: item.value, + star: item.rarity, + }; + }) as TGApp.Sqlite.Abyss.Character[]; + console.log(JSON.stringify(res)); + return JSON.stringify(res); +} + +/** + * @description 将通过 api 获取到的深渊数据转换为数据库中的数据 + * @since Alpha v0.2.0 + * @param {TGApp.Game.Abyss.Floor} data 深渊数据 + * @returns {string} 转换后的深渊数据 + */ +export function transFloorData (data: TGApp.Game.Abyss.Floor[]): string { + const floor = data.map((item) => { + return { + id: item.index, + winStar: item.star, + maxStar: item.max_star, + isUnlock: item.is_unlock ? 1 : 0, + levels: item.levels.map((level) => { + return { + id: level.index, + winStar: level.star, + maxStar: level.max_star, + upBattle: transBattleData(level.battles.find((l) => l.index === 1) as TGApp.Game.Abyss.Battle), + downBattle: transBattleData(level.battles.find((l) => l.index === 2) as TGApp.Game.Abyss.Battle), + }; + }), + }; + }) as TGApp.Sqlite.Abyss.Floor[]; + return JSON.stringify(floor); +} + +/** + * @description 将通过 api 获取到的深渊数据转换为数据库中的数据 + * @since Alpha v0.2.0 + * @param {TGApp.Game.Abyss.Battle} data 深渊数据 + * @returns {TGApp.Sqlite.Abyss.Battle} 转换后的深渊数据 + */ +function transBattleData (data: TGApp.Game.Abyss.Battle): TGApp.Sqlite.Abyss.Battle { + return { + time: timeToSecond(data.timestamp), + characters: data.avatars.map((item) => { + return { + id: item.id, + level: item.level, + star: item.rarity, + }; + }), + }; +} diff --git a/src/plugins/Sqlite/utils/transTime.ts b/src/plugins/Sqlite/utils/transTime.ts new file mode 100644 index 00000000..a3f80dab --- /dev/null +++ b/src/plugins/Sqlite/utils/transTime.ts @@ -0,0 +1,23 @@ +/** + * @file plugins Sqlite utils transTime.ts + * @description Sqlite 时间转换工具类 + * @author BTMuli + * @since Alpha v0.2.0 + */ + +/** + * @description 将时间戳转换为时间字符串 + * @since Alpha v0.2.0 + * @param {string} timestamp 时间戳 (秒) + * @returns {string} 时间字符串,格式为 YYYY-MM-DD HH:mm:ss + */ +export function timeToSecond (timestamp: string): string { + const date = new Date(Number(timestamp) * 1000); + const year = date.getFullYear(); + const month = date.getMonth() + 1; + const day = date.getDate(); + const hour = String(date.getHours()).padStart(2, "0"); + const minute = String(date.getMinutes()).padStart(2, "0"); + const second = String(date.getSeconds()).padStart(2, "0"); + return `${year}-${month}-${day} ${hour}:${minute}:${second}`; +} diff --git a/src/types/Sqlite/Abyss.d.ts b/src/types/Sqlite/Abyss.d.ts index 103b8440..f6d71d66 100644 --- a/src/types/Sqlite/Abyss.d.ts +++ b/src/types/Sqlite/Abyss.d.ts @@ -117,11 +117,14 @@ declare namespace TGApp.Sqlite.Abyss { * @description 数据库-深境螺旋表-角色数据 * @since Alpha v0.2.0 * @interface CharacterInfo - * @extends Character + * @property {number} id - 角色 ID + * @property {number} star - 星级 * @property {number} level - 等级 * @return CharacterInfo */ - export interface CharacterInfo extends Character { + export interface CharacterInfo { + id: number level: number + star: number } }