🎨 feat(sqlite): 添加 GameAccount 表用于存储游戏账号数据

This commit is contained in:
BTMuli
2023-05-06 01:40:07 +08:00
parent 5074ce2953
commit 7189b65f3c
4 changed files with 112 additions and 31 deletions

View File

@@ -450,7 +450,12 @@ async function inputCookie () {
// 获取 Cookie // 获取 Cookie
async function readCookie () { async function readCookie () {
const cookie = JSON.parse(await TGSqlite.getCookie()); const getCookie = await TGSqlite.getDataByKey("AppData", "key", "cookie") as Array<{
key: string;
value: string;
updated: string;
}>;
const cookie = JSON.parse(getCookie[0].value);
if (cookie) { if (cookie) {
confirmShow.value = false; confirmShow.value = false;
let cookieStr = ""; let cookieStr = "";

View File

@@ -46,7 +46,12 @@ export interface tokenRes {
} }
onMounted(async () => { onMounted(async () => {
cookie.value = JSON.parse(await TGSqlite.getCookie()) as BTMuli.User.Base.Cookie; const getCookie = await TGSqlite.getDataByKey("AppData", "key", "cookie") as Array<{
key: string;
value: string;
updated: string;
}>;
cookie.value = JSON.parse(getCookie[0].value) as BTMuli.User.Base.Cookie;
}); });
// 根据获取到的 cookie.login_ticket 获取 stoken 和 ltoken // 根据获取到的 cookie.login_ticket 获取 stoken 和 ltoken
@@ -80,7 +85,10 @@ async function saveToken () {
// 验证 stoken 的有效性 // 验证 stoken 的有效性
async function vertifyStoken () { async function vertifyStoken () {
// 获取 stoken // 获取 stoken
const stoken = await TGSqlite.getAppDataItem("stoken"); const stoken = (await TGSqlite.getDataByKey("AppData", "key", "stoken") as unknown as Array<{
key: string;
value: string;
}>)[0].value as string;
console.log("stoken", stoken); console.log("stoken", stoken);
const vertifyRes = await TGRequest.User.vetifyStoken(cookie.value, stoken); const vertifyRes = await TGRequest.User.vetifyStoken(cookie.value, stoken);
console.log(vertifyRes); console.log(vertifyRes);
@@ -88,7 +96,10 @@ async function vertifyStoken () {
// 获取 ltoken // 获取 ltoken
async function getLToken () { async function getLToken () {
const stoken = await TGSqlite.getAppDataItem("stoken"); const stoken = (await TGSqlite.getDataByKey("AppData", "key", "stoken") as unknown as Array<{
key: string;
value: string;
}>)[0].value as string;
console.log("stoken", stoken); console.log("stoken", stoken);
const tokenRes = await TGRequest.User.getLToken(cookie.value, stoken); const tokenRes = await TGRequest.User.getLToken(cookie.value, stoken);
console.log(tokenRes); console.log(tokenRes);
@@ -96,7 +107,10 @@ async function getLToken () {
// 获取 cookieToken, done, 但是登录失效 // 获取 cookieToken, done, 但是登录失效
async function getCookieToken () { async function getCookieToken () {
const stoken = await TGSqlite.getAppDataItem("stoken"); const stoken = (await TGSqlite.getDataByKey("AppData", "key", "stoken") as unknown as Array<{
key: string;
value: string;
}>)[0].value as string;
console.log("stoken", stoken); console.log("stoken", stoken);
const cookieRes = await TGRequest.User.byStoken.getCookieToken(cookie.value, stoken); const cookieRes = await TGRequest.User.byStoken.getCookieToken(cookie.value, stoken);
console.log(cookieRes); console.log(cookieRes);
@@ -108,19 +122,50 @@ async function getUserGameCard () {
console.log(gameCard); console.log(gameCard);
} }
// 获取绑定角色 done,但是登录失效 // 通过 stoken 获取绑定角色,但是登录失效
async function getBindRole () { async function getBindRole () {
const ck = TGUtils.Tools.cookieToString(cookie.value); const ck = TGUtils.Tools.cookieToString(cookie.value);
const stoken = await TGSqlite.getAppDataItem("stoken"); const stoken = (await TGSqlite.getDataByKey("AppData", "key", "stoken") as unknown as Array<{
key: string;
value: string;
}>)[0].value as string;
const bindRole = await TGRequest.User.byStoken.getAccounts(ck, stoken); const bindRole = await TGRequest.User.byStoken.getAccounts(ck, stoken);
console.log(bindRole); console.log(bindRole);
} }
// 获取绑定角色 v2, done但是登录失效 // 通过 cookie 获取绑定角色
async function getBindRoleV2 () { async function getBindRoleV2 () {
const ck = TGUtils.Tools.cookieToString(cookie.value); const ck = TGUtils.Tools.cookieToString(cookie.value);
const bindRole = await TGRequest.User.byCookie.getAccounts(ck); const bindRole = await TGRequest.User.byCookie.getAccounts(ck);
console.log(bindRole); console.log(bindRole);
// 如果是数组,说明数据获取成功
if (Array.isArray(bindRole)) {
bindRole.map(async (role: BTMuli.User.Game.Account) => {
const sql = `
INSERT INTO GameAccount (gameBiz, gameUid, isChosen, isOfficial, level, nickname, region, regionName, updated)
Values ('${role.game_biz}', '${role.game_uid}', ${role.is_chosen ? 1 : 0}, ${role.is_official ? 1 : 0}, '${role.level}', '${role.nickname}', '${role.region}', '${role.region_name}', datetime('now', 'localtime')
ON CONFILCT (gameBiz, gameUid) DO UPDATE SET
isChosen = ${role.is_chosen ? 1 : 0},
isOfficial = ${role.is_official ? 1 : 0},
level = '${role.level}',
nickname = '${role.nickname}',
region = '${role.region}',
regionName = '${role.region_name}',
updated = datetime('now', 'localtime');
`;
// 保存到数据库
await TGSqlite.saveData(sql);
});
console.log("保存成功");
} else {
await dialog.message(
bindRole.message,
{
type: "error",
title: `获取绑定角色失败,retcode: ${bindRole.retcode}`,
},
);
}
} }
</script> </script>

View File

@@ -2,7 +2,7 @@
* @file utils TGSql.ts * @file utils TGSql.ts
* @description 数据库sql语句 * @description 数据库sql语句
* @author BTMuli<bt-muli@outlook.com> * @author BTMuli<bt-muli@outlook.com>
* @since Alpha v0.1.4 * @since Alpha v0.2.0
*/ */
import { app } from "@tauri-apps/api"; import { app } from "@tauri-apps/api";
@@ -28,6 +28,33 @@ function initAppTable (): string[] {
return sqlRes; return sqlRes;
} }
/**
* @description 初始化游戏账号数据表
* @since Alpha v0.2.0
* @see BTMuli.User.Game.Account
* @returns {string[]} sql
*/
function initGameAccountTable (): string[] {
const sqlRes = [];
// 创建游戏账号数据表
sqlRes.push(`
CREATE TABLE IF NOT EXISTS GameAccount
(
gameBiz TEXT PRIMARY KEY,
gameUid TEXT DEFAULT NULL,
isChosen BOOLEAN DEFAULT 0,
isOfficial BOOLEAN DEFAULT 0,
level INTEGER DEFAULT 0,
nickname TEXT DEFAULT NULL,
region TEXT DEFAULT NULL,
regionName TEXT DEFAULT NULL,
updated TEXT DEFAULT NULL,
PRIMARY KEY (gameBiz, gameUid)
);
`);
return sqlRes;
}
/** /**
* @description 初始化成就系列数据表 * @description 初始化成就系列数据表
* @since Alpha v0.1.4 * @since Alpha v0.1.4
@@ -126,14 +153,16 @@ function initNameCardTable (): string[] {
`); `);
return sqlRes; return sqlRes;
} }
/** /**
* @description 初始化数据库表 * @description 初始化数据库表
* @since Alpha v0.1.4 * @since Alpha v0.2.0
* @returns {string[]} sql * @returns {string[]} sql
*/ */
export function initSQLiteTable (): string[] { export function initSQLiteTable (): string[] {
const sqlRes = []; const sqlRes = [];
sqlRes.push(...initAppTable()); sqlRes.push(...initAppTable());
sqlRes.push(...initGameAccountTable());
sqlRes.push(...initAchievementSeriesTable()); sqlRes.push(...initAchievementSeriesTable());
sqlRes.push(...initAchievementTable()); sqlRes.push(...initAchievementTable());
sqlRes.push(...initNameCardTable()); sqlRes.push(...initNameCardTable());

View File

@@ -30,6 +30,7 @@ class TGSqlite {
"AppData", "AppData",
"Achievements", "Achievements",
"AchievementSeries", "AchievementSeries",
"GameAccount",
"NameCard", "NameCard",
]; ];
@@ -68,18 +69,33 @@ class TGSqlite {
} }
/** /**
* @description 获取应用数据某一项 * @description 封装-根据 table keys 获取数据
* @memberof TGSqlite * @memberof TGSqlite
* @since Alpha v0.2.0 * @since Alpha v0.2.0
* @param {string} key * @param {string} table 表名
* @returns {Promise<string>} * @param {string} keyName 键名
* @param {string} keyValue 键值
* @returns {Promise<unknown[]>} 数据
*/ */
public async getAppDataItem (key: string): Promise<string> { public async getDataByKey (table: string, keyName: string, keyValue: string): Promise<unknown[]> {
const db = await Database.load(this.dbPath); const db = await Database.load(this.dbPath);
const sql = `SELECT value FROM AppData WHERE key='${key}';`; const sql = `SELECT * FROM ${table} WHERE ${keyName}='${keyValue}';`;
const res: Array<{ value: string }> = await db.select(sql); const res: unknown[] = await db.select(sql);
await db.close();
return res;
}
/**
* @description 封装-保存数据
* @memberof TGSqlite
* @since Alpha v0.2.0
* @param {string} sql sql语句
* @returns {Promise<void>}
*/
public async saveData (sql: string): Promise<void> {
const db = await Database.load(this.dbPath);
await db.execute(sql);
await db.close(); await db.close();
return res[0].value;
} }
/** /**
@@ -99,20 +115,6 @@ class TGSqlite {
await db.close(); await db.close();
} }
/**
* @description 获取 cookie
* @memberof TGSqlite
* @since Alpha v0.2.0
* @returns {Promise<string>}
*/
public async getCookie (): Promise<string> {
const db = await Database.load(this.dbPath);
const sql = "SELECT value FROM AppData WHERE key='cookie';";
const res: Array<{ value: string }> = await db.select(sql);
await db.close();
return res[0].value;
}
/** /**
* @description 保存 appData * @description 保存 appData
* @memberof TGSqlite * @memberof TGSqlite