mirror of
https://github.com/BTMuli/TeyvatGuide.git
synced 2025-12-15 09:48:14 +08:00
✨ 将战绩数据存到数据库中
This commit is contained in:
@@ -12,7 +12,12 @@ import initDataSql from "./sql/initData";
|
||||
import initTableSql from "./sql/initTable";
|
||||
import { importUIAFData } from "./sql/updateData";
|
||||
import { getUiafStatus } from "../../utils/UIAF";
|
||||
import { insertAbyssData, insertAppData, insertGameAccountData } from "./sql/insertData";
|
||||
import {
|
||||
insertAbyssData,
|
||||
insertAppData,
|
||||
insertGameAccountData,
|
||||
insertRecordData,
|
||||
} from "./sql/insertData";
|
||||
|
||||
class Sqlite {
|
||||
/**
|
||||
@@ -34,6 +39,7 @@ class Sqlite {
|
||||
"GameAccount",
|
||||
"NameCard",
|
||||
"SprialAbyss",
|
||||
"UserRecord",
|
||||
];
|
||||
|
||||
/**
|
||||
@@ -336,6 +342,35 @@ class Sqlite {
|
||||
return res;
|
||||
}
|
||||
|
||||
/**
|
||||
* @description 保存战绩数据
|
||||
* @since Alpha v0.2.0
|
||||
* @param {TGApp.Game.Record.FullData} data 战绩数据
|
||||
* @param {string} uid 用户 uid
|
||||
* @returns {Promise<void>}
|
||||
*/
|
||||
public async saveUserRecord (data: TGApp.Game.Record.FullData, uid: string): Promise<void> {
|
||||
const db = await Database.load(this.dbPath);
|
||||
const sql = insertRecordData(data, uid);
|
||||
await db.execute(sql);
|
||||
await db.close();
|
||||
}
|
||||
|
||||
/**
|
||||
* @description 获取战绩数据
|
||||
* @since Alpha v0.2.0
|
||||
* @param {string} uid 用户 uid
|
||||
* @returns {Promise<TGApp.Sqlite.Record.SingleTable|false>}
|
||||
*/
|
||||
public async getUserRecord (uid: string): Promise<TGApp.Sqlite.Record.SingleTable | false> {
|
||||
const db = await Database.load(this.dbPath);
|
||||
const sql = `SELECT * FROM UserRecord WHERE uid = '${uid}'`;
|
||||
const res: TGApp.Sqlite.Record.SingleTable[] = await db.select(sql);
|
||||
await db.close();
|
||||
if (res.length === 0) return false;
|
||||
return res[0];
|
||||
}
|
||||
|
||||
/**
|
||||
* @description 获取角色数据
|
||||
* @since Alpha v0.2.0
|
||||
|
||||
@@ -35,15 +35,15 @@ create table if not exists AchievementSeries
|
||||
-- @brief 创建角色数据表
|
||||
create table if not exists AppCharacters
|
||||
(
|
||||
id integer primary key,
|
||||
name text,
|
||||
title text,
|
||||
birthday text,
|
||||
star integer,
|
||||
element text,
|
||||
weapon text,
|
||||
nameCard text,
|
||||
updated text
|
||||
id integer primary key,
|
||||
name text,
|
||||
title text,
|
||||
birthday text,
|
||||
star integer,
|
||||
element text,
|
||||
weapon text,
|
||||
nameCard text,
|
||||
updated text
|
||||
);
|
||||
|
||||
-- @brief 创建应用数据表
|
||||
@@ -99,4 +99,16 @@ create table if not exists SpiralAbyss
|
||||
energySkillRank text,
|
||||
floors text,
|
||||
updated text
|
||||
);
|
||||
);
|
||||
|
||||
-- @brief 创建战绩数据表
|
||||
create table if not exists UserRecord
|
||||
(
|
||||
uid integer primary key,
|
||||
role text,
|
||||
avatars text,
|
||||
stats text,
|
||||
worldExplore text,
|
||||
homes text,
|
||||
updated text
|
||||
)
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
// utils
|
||||
import { timeToSecond } from "../utils/transTime";
|
||||
import { transCharacterData, transFloorData } from "../utils/transAbyssData";
|
||||
import { transUserRecord } from "../utils/transUserRecord";
|
||||
|
||||
/**
|
||||
* @description 插入成就数据
|
||||
@@ -15,7 +16,7 @@ import { transCharacterData, transFloorData } from "../utils/transAbyssData";
|
||||
* @param {TGApp.App.Achievement.Item} data 成就数据
|
||||
* @returns {string} sql
|
||||
*/
|
||||
export function insertAchievementData(data: TGApp.App.Achievement.Item): string {
|
||||
export function insertAchievementData (data: TGApp.App.Achievement.Item): string {
|
||||
return `
|
||||
INSERT INTO Achievements (id, series, "order", name, description, reward, completedTime, version, updated)
|
||||
VALUES (${data.id}, ${data.series}, ${data.order}, '${data.name}', '${data.description}', ${data.reward}, '',
|
||||
@@ -37,7 +38,7 @@ export function insertAchievementData(data: TGApp.App.Achievement.Item): string
|
||||
* @param {TGApp.App.Achievement.Series} data 成就系列数据
|
||||
* @returns {string} sql
|
||||
*/
|
||||
export function insertAchievementSeriesData(data: TGApp.App.Achievement.Series): string {
|
||||
export function insertAchievementSeriesData (data: TGApp.App.Achievement.Series): string {
|
||||
return `
|
||||
INSERT INTO AchievementSeries (id, "order", name, version, nameCard, updated)
|
||||
VALUES (${data.id}, ${data.order}, '${data.name}', '${data.version}', '${data.card}',
|
||||
@@ -58,7 +59,7 @@ export function insertAchievementSeriesData(data: TGApp.App.Achievement.Series):
|
||||
* @param {string} value 值
|
||||
* @returns {string} sql
|
||||
*/
|
||||
export function insertAppData(key: string, value: string): string {
|
||||
export function insertAppData (key: string, value: string): string {
|
||||
return `
|
||||
INSERT INTO AppData (key, value, updated)
|
||||
VALUES ('${key}', '${value}', datetime('now', 'localtime'))
|
||||
@@ -73,7 +74,7 @@ export function insertAppData(key: string, value: string): string {
|
||||
* @param {TGApp.User.Account.Game} data 游戏账号数据
|
||||
* @returns {string} sql
|
||||
*/
|
||||
export function insertGameAccountData(data: TGApp.User.Account.Game): string {
|
||||
export function insertGameAccountData (data: TGApp.User.Account.Game): string {
|
||||
const isChosen = data.is_chosen ? 1 : 0;
|
||||
const isOfficial = data.is_official ? 1 : 0;
|
||||
return `
|
||||
@@ -97,7 +98,7 @@ export function insertGameAccountData(data: TGApp.User.Account.Game): string {
|
||||
* @param {TGApp.App.NameCard.Item} data 名片数据
|
||||
* @returns {string} sql
|
||||
*/
|
||||
export function insertNameCardData(data: TGApp.App.NameCard.Item): string {
|
||||
export function insertNameCardData (data: TGApp.App.NameCard.Item): string {
|
||||
return `
|
||||
INSERT INTO NameCard (name, "desc", type, source, updated)
|
||||
VALUES ('${data.name}', '${data.desc}', '${data.type}', '${data.source}', datetime('now', 'localtime'))
|
||||
@@ -114,7 +115,7 @@ export function insertNameCardData(data: TGApp.App.NameCard.Item): string {
|
||||
* @param {TGApp.User.Character.Item} data 角色数据
|
||||
* @returns {string} sql
|
||||
*/
|
||||
export function insertCharacterData(data: TGApp.App.Character.WikiBriefInfo): string {
|
||||
export function insertCharacterData (data: TGApp.App.Character.WikiBriefInfo): string {
|
||||
return `
|
||||
INSERT INTO AppCharacters (id, name, star, element, weapon, nameCard, birthday, updated)
|
||||
VALUES (${data.id}, '${data.name}', ${data.star}, '${data.element}', '${data.weapon}',
|
||||
@@ -135,7 +136,7 @@ export function insertCharacterData(data: TGApp.App.Character.WikiBriefInfo): st
|
||||
* @param {TGApp.User.Abyss} data 深渊数据
|
||||
* @returns {string} sql
|
||||
*/
|
||||
export function insertAbyssData(data: TGApp.Game.Abyss.FullData): string {
|
||||
export function insertAbyssData (data: TGApp.Game.Abyss.FullData): string {
|
||||
const startTime = timeToSecond(data.start_time);
|
||||
const endTime = timeToSecond(data.end_time);
|
||||
const isUnlock = data.is_unlock ? 1 : 0;
|
||||
@@ -172,3 +173,27 @@ export function insertAbyssData(data: TGApp.Game.Abyss.FullData): string {
|
||||
updated = datetime('now', 'localtime');
|
||||
`;
|
||||
}
|
||||
|
||||
/**
|
||||
* @description 插入原神战绩数据
|
||||
* @since Alpha v0.2.0
|
||||
* @param {TGApp.Game.Record.FullData} data 原神战绩数据
|
||||
* @param {string} uid 用户 UID
|
||||
* @returns {string} sql
|
||||
*/
|
||||
export function insertRecordData (data: TGApp.Game.Record.FullData, uid: string): string {
|
||||
const transData = transUserRecord(data);
|
||||
transData.uid = uid;
|
||||
return `
|
||||
INSERT INTO UserRecord(uid, role, avatars, stats, worldExplore, homes, updated)
|
||||
VALUES ('${transData.uid}', '${transData.role}', '${transData.avatars}', '${transData.stats}',
|
||||
'${transData.worldExplore}', '${transData.homes}', datetime('now', 'localtime'))
|
||||
ON CONFLICT(uid) DO UPDATE
|
||||
SET role = '${transData.role}',
|
||||
avatars = '${transData.avatars}',
|
||||
stats = '${transData.stats}',
|
||||
worldExplore = '${transData.worldExplore}',
|
||||
homes = '${transData.homes}',
|
||||
updated = datetime('now', 'localtime');
|
||||
`;
|
||||
}
|
||||
|
||||
144
src/plugins/Sqlite/utils/transUserRecord.ts
Normal file
144
src/plugins/Sqlite/utils/transUserRecord.ts
Normal file
@@ -0,0 +1,144 @@
|
||||
/**
|
||||
* @file plugins Sqlite utils transUserRecord.ts
|
||||
* @description Sqlite 数据转换 用户战绩数据转换模块
|
||||
* @author BTMuli <bt-muli@outlook.com>
|
||||
* @since Alpha v0.2.0
|
||||
*/
|
||||
|
||||
/**
|
||||
* @description 将通过 api 获取到的用户战绩数据转换为数据库中的数据
|
||||
* @since Alpha v0.2.0
|
||||
* @param {TGApp.Game.Record.FullData} data 用户战绩数据
|
||||
* @returns {TGApp.Sqlite.Record.SingleTable} 转换后的用户战绩数据
|
||||
*/
|
||||
export function transUserRecord (data: TGApp.Game.Record.FullData): TGApp.Sqlite.Record.SingleTable {
|
||||
return {
|
||||
uid: "",
|
||||
role: transRole(data.role),
|
||||
avatars: transAvatar(data.avatars),
|
||||
stats: transStat(data.stats),
|
||||
worldExplore: transWorld(data.world_explorations),
|
||||
homes: transHome(data.homes),
|
||||
updated: "",
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* @description 将角色信息转换为数据库中的数据
|
||||
* @since Alpha v0.2.0
|
||||
* @param {TGApp.Game.Record.Role} data 角色信息
|
||||
* @returns {string} 转换后的角色信息
|
||||
*/
|
||||
function transRole (data: TGApp.Game.Record.Role): string {
|
||||
const role: TGApp.Sqlite.Record.Role = {
|
||||
nickname: data.nickname,
|
||||
region: data.region,
|
||||
level: data.level,
|
||||
};
|
||||
return JSON.stringify(role);
|
||||
}
|
||||
|
||||
/**
|
||||
* @description 将角色列表转换为数据库中的数据
|
||||
* @since Alpha v0.2.0
|
||||
* @param {TGApp.Game.Record.Avatar[]} data 角色列表
|
||||
* @returns {string} 转换后的角色列表
|
||||
*/
|
||||
function transAvatar (data: TGApp.Game.Record.Avatar[]): string {
|
||||
const avatars: TGApp.Sqlite.Record.Avatar[] = data.map(item => {
|
||||
return {
|
||||
id: item.id,
|
||||
name: item.name,
|
||||
element: item.element,
|
||||
fetter: item.fetter,
|
||||
level: item.level,
|
||||
star: item.rarity,
|
||||
constellation: item.actived_constellation_num,
|
||||
isShow: item.is_chosen ? 1 : 0,
|
||||
} as TGApp.Sqlite.Record.Avatar;
|
||||
});
|
||||
return JSON.stringify(avatars);
|
||||
}
|
||||
|
||||
/**
|
||||
* @description 将统计信息转换为数据库中的数据
|
||||
* @since Alpha v0.2.0
|
||||
* @param {TGApp.Game.Record.Stats} data 统计信息
|
||||
* @return {string} 转换后的统计信息
|
||||
*/
|
||||
function transStat (data: TGApp.Game.Record.Stats): string {
|
||||
const stats: TGApp.Sqlite.Record.Stats = {
|
||||
activeDays: data.active_day_number,
|
||||
achievementNumber: data.achievement_number,
|
||||
avatarNumber: data.avatar_number,
|
||||
wayPoints: data.way_point_number,
|
||||
domainNumber: data.domain_number,
|
||||
anemoCulus: data.anemoculus_number,
|
||||
geoCulus: data.geoculus_number,
|
||||
electroCulus: data.electroculus_number,
|
||||
dendroCulus: data.dendroculus_number,
|
||||
sprialAbyss: data.spiral_abyss,
|
||||
luxuriousChest: data.luxurious_chest_number,
|
||||
preciousChest: data.precious_chest_number,
|
||||
exquisiteChest: data.exquisite_chest_number,
|
||||
commonChest: data.common_chest_number,
|
||||
magicChest: data.magic_chest_number,
|
||||
};
|
||||
return JSON.stringify(stats);
|
||||
}
|
||||
|
||||
/**
|
||||
* @description 将探索信息转换为数据库中的数据
|
||||
* @since Alpha v0.2.0
|
||||
* @param {TGApp.Game.Record.WorldExplore[]} data 城市探索信息
|
||||
* @returns {string} 转换后的城市探索信息
|
||||
*/
|
||||
function transWorld (data: TGApp.Game.Record.WorldExplore[]): string {
|
||||
const worlds: TGApp.Sqlite.Record.WorldExplore[] = data.map(item => {
|
||||
let offerings;
|
||||
console.log(item.Offerings);
|
||||
if (item.Offerings !== undefined) {
|
||||
offerings = item.Offerings.map(offering => {
|
||||
return {
|
||||
name: offering.name,
|
||||
icon: offering.icon,
|
||||
level: offering.level,
|
||||
} as TGApp.Sqlite.Record.WorldOffering;
|
||||
});
|
||||
}
|
||||
return {
|
||||
level: item.level,
|
||||
exploration: item.exploration_percentage,
|
||||
iconLight: item.icon,
|
||||
iconDark: item.inner_icon,
|
||||
name: item.name,
|
||||
type: item.type,
|
||||
offerings,
|
||||
bg: item.background_image,
|
||||
cover: item.cover,
|
||||
} as TGApp.Sqlite.Record.WorldExplore;
|
||||
});
|
||||
return JSON.stringify(worlds);
|
||||
}
|
||||
|
||||
/**
|
||||
* @description 将住宅信息转换为数据库中的数据
|
||||
* @since Alpha v0.2.0
|
||||
* @param {TGApp.Game.Record.Home[]} data 住宅信息
|
||||
* @returns {string} 转换后的住宅信息
|
||||
*/
|
||||
function transHome (data: TGApp.Game.Record.Home[]): string {
|
||||
const homes: TGApp.Sqlite.Record.Home[] = data.map(item => {
|
||||
return {
|
||||
comfortIcon: item.comfort_level_icon,
|
||||
comfortName: item.comfort_level_name,
|
||||
name: item.name,
|
||||
level: item.level,
|
||||
comfort: item.comfort_num,
|
||||
furniture: item.item_num,
|
||||
visit: item.visit_num,
|
||||
bg: item.icon,
|
||||
} as TGApp.Sqlite.Record.Home;
|
||||
});
|
||||
return JSON.stringify(homes);
|
||||
}
|
||||
Reference in New Issue
Block a user