将战绩数据存到数据库中

This commit is contained in:
BTMuli
2023-06-03 00:20:24 +08:00
parent 1c9989a030
commit 9f07918b27
7 changed files with 534 additions and 47 deletions

View File

@@ -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

View File

@@ -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
)

View File

@@ -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');
`;
}

View 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);
}