mirror of
https://github.com/BTMuli/TeyvatGuide.git
synced 2025-12-14 09:38:13 +08:00
✨ 添加角色列表数据
This commit is contained in:
@@ -17,6 +17,7 @@ import {
|
||||
insertAppData,
|
||||
insertGameAccountData,
|
||||
insertRecordData,
|
||||
insertRoleData,
|
||||
} from "./sql/insertData";
|
||||
|
||||
class Sqlite {
|
||||
@@ -39,6 +40,7 @@ class Sqlite {
|
||||
"GameAccount",
|
||||
"NameCard",
|
||||
"SpiralAbyss",
|
||||
"UserCharacters",
|
||||
"UserRecord",
|
||||
];
|
||||
|
||||
@@ -386,6 +388,35 @@ class Sqlite {
|
||||
await db.close();
|
||||
return res[0];
|
||||
}
|
||||
|
||||
/**
|
||||
* @description 保存用户角色数据
|
||||
* @since Alpha v0.2.0
|
||||
* @param {string} uid 用户 uid
|
||||
* @param {TGApp.Game.Character.ListItem[]} data 角色数据
|
||||
* @returns {Promise<void>}
|
||||
*/
|
||||
public async saveUserCharacter (uid: string, data: TGApp.Game.Character.ListItem[]): Promise<void> {
|
||||
const db = await Database.load(this.dbPath);
|
||||
const sql = insertRoleData(uid, data);
|
||||
await db.execute(sql);
|
||||
await db.close();
|
||||
}
|
||||
|
||||
/**
|
||||
* @description 获取用户角色数据
|
||||
* @since Alpha v0.2.0
|
||||
* @param {string} uid 用户 uid
|
||||
* @returns {Promise<TGApp.Sqlite.Character.UserRole[]|false>}
|
||||
*/
|
||||
public async getUserCharacter (uid: string): Promise<TGApp.Sqlite.Character.UserRole[] | false> {
|
||||
const db = await Database.load(this.dbPath);
|
||||
const sql = `SELECT * FROM UserCharacters WHERE uid = '${uid}'`;
|
||||
const res: TGApp.Sqlite.Character.UserRole[] = await db.select(sql);
|
||||
await db.close();
|
||||
if (res.length === 0) return false;
|
||||
return res;
|
||||
}
|
||||
}
|
||||
|
||||
const TGSqlite = new Sqlite();
|
||||
|
||||
@@ -113,4 +113,25 @@ create table if not exists UserRecord
|
||||
worldExplore text,
|
||||
homes text,
|
||||
updated text
|
||||
)
|
||||
);
|
||||
|
||||
-- @brief 创建角色数据表
|
||||
create table if not exists UserCharacters
|
||||
(
|
||||
uid integer,
|
||||
cid integer,
|
||||
img text,
|
||||
name text,
|
||||
fetter integer,
|
||||
level integer,
|
||||
element text,
|
||||
star integer,
|
||||
weapon text,
|
||||
reliquary text,
|
||||
constellation text,
|
||||
activeConstellation integer,
|
||||
costume text,
|
||||
talent text, -- todo: 数据获取
|
||||
updated text,
|
||||
primary key (uid, cid)
|
||||
);
|
||||
@@ -8,6 +8,7 @@
|
||||
// utils
|
||||
import { timeToSecond } from "../utils/transTime";
|
||||
import { transCharacterData, transFloorData } from "../utils/transAbyssData";
|
||||
import { transUserRoles } from "../utils/transUserRoles";
|
||||
import { transUserRecord } from "../utils/transUserRecord";
|
||||
|
||||
/**
|
||||
@@ -118,7 +119,7 @@ export function insertNameCardData (data: TGApp.App.NameCard.Item): 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}',
|
||||
VALUES (${data.id}, '${data.name}', ${data.star}, '${data.element}', '${data.weapon}',
|
||||
'${data.nameCard}', '${data.birthday}', datetime('now', 'localtime'))
|
||||
ON CONFLICT(id) DO UPDATE
|
||||
SET name = '${data.name}',
|
||||
@@ -186,15 +187,51 @@ export function insertRecordData (data: TGApp.Game.Record.FullData, uid: string)
|
||||
const transData = transUserRecord(data);
|
||||
transData.uid = uid;
|
||||
return `
|
||||
INSERT INTO UserRecord(uid, role, avatars, stats, worldExplore, homes, updated)
|
||||
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');
|
||||
SET role = '${transData.role}',
|
||||
avatars = '${transData.avatars}',
|
||||
stats = '${transData.stats}',
|
||||
worldExplore = '${transData.worldExplore}',
|
||||
homes = '${transData.homes}',
|
||||
updated = datetime('now', 'localtime');
|
||||
`;
|
||||
}
|
||||
|
||||
/**
|
||||
* @description 插入用户角色数据
|
||||
* @since Alpha v0.2.0
|
||||
* @param {string} uid 用户 UID
|
||||
* @param {TGApp.User.Character.Item[]} data 角色数据
|
||||
* @returns {string} sql
|
||||
*/
|
||||
export function insertRoleData (uid: string, data: TGApp.Game.Character.ListItem[]): string {
|
||||
const sql = data.map(item => {
|
||||
const role = transUserRoles(item);
|
||||
return `
|
||||
INSERT INTO UserCharacters (uid, cid, name, img, name, fetter, level, element, star, weapon, reliquary,
|
||||
constellation, activeConstellation, costume, talent, updated)
|
||||
VALUES (${uid}, ${role.cid}, '${role.name}', '${role.img}', '${role.name}', ${role.fetter}, ${role.level},
|
||||
'${role.element}', ${role.star}, '${role.weapon}', '${role.reliquary}', '${role.constellation}',
|
||||
${role.activeConstellation}, '${role.costume}', '${role.talent}', datetime('now', 'localtime'))
|
||||
ON CONFLICT(uid, cid) DO UPDATE
|
||||
SET name = '${role.name}',
|
||||
img = '${role.img}',
|
||||
name = '${role.name}',
|
||||
fetter = ${role.fetter},
|
||||
level = ${role.level},
|
||||
element = '${role.element}',
|
||||
star = ${role.star},
|
||||
weapon = '${role.weapon}',
|
||||
reliquary = '${role.reliquary}',
|
||||
constellation = '${role.constellation}',
|
||||
activeConstellation = ${role.activeConstellation},
|
||||
costume = '${role.costume}',
|
||||
talent = '${role.talent}',
|
||||
updated = datetime('now', 'localtime');
|
||||
`;
|
||||
});
|
||||
return sql.join("");
|
||||
}
|
||||
|
||||
154
src/plugins/Sqlite/utils/transUserRoles.ts
Normal file
154
src/plugins/Sqlite/utils/transUserRoles.ts
Normal file
@@ -0,0 +1,154 @@
|
||||
/**
|
||||
* @file plugins Sqlite utils transUserRoles.ts
|
||||
* @description 转换用户角色数据格式,用于数据库存储
|
||||
* @author BTMuli <bt-muli@outlook.com>
|
||||
* @since Alpha v0.2.0
|
||||
*/
|
||||
|
||||
enum EnumElementEn {
|
||||
pyro = "Pyro",
|
||||
hydro = "Hydro",
|
||||
anemo = "Anemo",
|
||||
electro = "Electro",
|
||||
cryo = "Cryo",
|
||||
geo = "Geo",
|
||||
dendro = "Dendro",
|
||||
}
|
||||
|
||||
enum EnumElement {
|
||||
pyro = "火元素",
|
||||
hydro = "水元素",
|
||||
anemo = "风元素",
|
||||
electro = "雷元素",
|
||||
cryo = "冰元素",
|
||||
geo = "岩元素",
|
||||
dendro = "草元素",
|
||||
}
|
||||
|
||||
/**
|
||||
* @description 将通过 api 获取到的用户角色数据转换为数据库中的数据
|
||||
* @since Alpha v0.2.0
|
||||
* @param {TGApp.Game.Character.ListItem} data 用户角色数据
|
||||
* @returns {TGApp.Sqlite.Character.UserRole} 转换后的用户角色数据
|
||||
*/
|
||||
export function transUserRoles (data: TGApp.Game.Character.ListItem): TGApp.Sqlite.Character.UserRole {
|
||||
return {
|
||||
uid: -1,
|
||||
cid: data.id,
|
||||
img: data.image,
|
||||
name: data.name,
|
||||
fetter: data.fetter,
|
||||
level: data.level,
|
||||
element: transElement(data.element as EnumElementEn),
|
||||
star: data.rarity === 105 ? 5 : data.rarity,
|
||||
weapon: transWeapon(data.weapon),
|
||||
reliquary: transReliquary(data.reliquaries),
|
||||
constellation: transConstellation(data.constellations),
|
||||
activeConstellation: data.actived_constellation_num,
|
||||
costume: JSON.stringify(data.costumes),
|
||||
talent: "",
|
||||
updated: "",
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* @description 将角色元素转换为数据库中的数据
|
||||
* @since Alpha v0.2.0
|
||||
* @param {EnumElementEn} data 角色元素
|
||||
* @returns {EnumElement} 转换后的角色元素
|
||||
*/
|
||||
function transElement (data: EnumElementEn): EnumElement {
|
||||
switch (data) {
|
||||
case EnumElementEn.pyro:
|
||||
return EnumElement.pyro;
|
||||
case EnumElementEn.hydro:
|
||||
return EnumElement.hydro;
|
||||
case EnumElementEn.anemo:
|
||||
return EnumElement.anemo;
|
||||
case EnumElementEn.electro:
|
||||
return EnumElement.electro;
|
||||
case EnumElementEn.cryo:
|
||||
return EnumElement.cryo;
|
||||
case EnumElementEn.geo:
|
||||
return EnumElement.geo;
|
||||
case EnumElementEn.dendro:
|
||||
return EnumElement.dendro;
|
||||
default:
|
||||
throw new Error("未知的角色元素类型");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @description 将角色武器转换为数据库中的数据
|
||||
* @since Alpha v0.2.0
|
||||
* @param {TGApp.Game.Character.LIWeapon} data 角色武器
|
||||
* @returns {string} 转换后的角色武器
|
||||
*/
|
||||
function transWeapon (data: TGApp.Game.Character.LIWeapon): string {
|
||||
const weapon: TGApp.Sqlite.Character.RoleWeapon = {
|
||||
id: data.id,
|
||||
name: data.name,
|
||||
type: data.type_name,
|
||||
star: data.rarity,
|
||||
level: data.level,
|
||||
promote: data.promote_level,
|
||||
description: data.desc,
|
||||
affix: data.affix_level,
|
||||
};
|
||||
return JSON.stringify(weapon);
|
||||
}
|
||||
|
||||
/**
|
||||
* @description 将角色命座转换为数据库中的数据
|
||||
* @since Alpha v0.2.0
|
||||
* @param {TGApp.Game.Character.LIRelic[]} data 角色命座
|
||||
* @returns {string} 转换后的角色命座
|
||||
*/
|
||||
function transReliquary (data: TGApp.Game.Character.LIRelic[]): string {
|
||||
if (data.length === 0) {
|
||||
return "";
|
||||
}
|
||||
const reliquary: TGApp.Sqlite.Character.RoleReliquary[] = [];
|
||||
for (const item of data) {
|
||||
reliquary.push({
|
||||
id: item.id,
|
||||
name: item.name,
|
||||
pos: item.pos,
|
||||
posName: item.pos_name,
|
||||
star: item.rarity,
|
||||
level: item.level,
|
||||
set: {
|
||||
id: item.set.id,
|
||||
name: item.set.name,
|
||||
effect: item.set.affixes.map((setItem) => {
|
||||
return {
|
||||
active: setItem.activation_number,
|
||||
description: setItem.effect,
|
||||
};
|
||||
}),
|
||||
},
|
||||
});
|
||||
}
|
||||
return JSON.stringify(reliquary);
|
||||
}
|
||||
|
||||
/**
|
||||
* @description 将角色命座转换为数据库中的数据
|
||||
* @since Alpha v0.2.0
|
||||
* @param {TGApp.Game.Character.LIConstellation[]} data 角色命座
|
||||
* @returns {string} 转换后的角色命座
|
||||
*/
|
||||
function transConstellation (data: TGApp.Game.Character.LIConstellation[]): string {
|
||||
const constellation: TGApp.Sqlite.Character.RoleConstellation[] = [];
|
||||
for (const item of data) {
|
||||
constellation.push({
|
||||
id: item.id,
|
||||
name: item.name,
|
||||
icon: item.icon,
|
||||
description: item.effect,
|
||||
active: item.is_actived,
|
||||
pos: item.pos,
|
||||
});
|
||||
}
|
||||
return JSON.stringify(constellation);
|
||||
}
|
||||
Reference in New Issue
Block a user