添加 AppCharacter 表

This commit is contained in:
BTMuli
2023-06-01 19:51:40 +08:00
parent 7aa8ec0240
commit 7ddbe149c1
5 changed files with 168 additions and 19 deletions

View File

@@ -29,6 +29,7 @@ class Sqlite {
private readonly tables: string[] = [ private readonly tables: string[] = [
"Achievements", "Achievements",
"AchievementSeries", "AchievementSeries",
"AppCharacters",
"AppData", "AppData",
"GameAccount", "GameAccount",
"NameCard", "NameCard",
@@ -187,7 +188,9 @@ class Sqlite {
*/ */
public async getNameCard (seriesId: number): Promise<TGApp.Sqlite.NameCard.Item> { public async getNameCard (seriesId: number): Promise<TGApp.Sqlite.NameCard.Item> {
const db = await Database.load(this.dbPath); const db = await Database.load(this.dbPath);
const sql = `SELECT * FROM NameCard WHERE name = (SELECT nameCard FROM AchievementSeries WHERE id = ${seriesId});`; const sql = `SELECT *
FROM NameCard
WHERE name = (SELECT nameCard FROM AchievementSeries WHERE id = ${seriesId});`;
const res: TGApp.Sqlite.NameCard.Item[] = await db.select(sql); const res: TGApp.Sqlite.NameCard.Item[] = await db.select(sql);
await db.close(); await db.close();
return res[0]; return res[0];
@@ -203,7 +206,10 @@ class Sqlite {
const db = await Database.load(this.dbPath); const db = await Database.load(this.dbPath);
let sql; let sql;
if (seriesId) { if (seriesId) {
sql = `SELECT * FROM Achievements WHERE series=${seriesId} ORDER BY isCompleted, \`order\`;`; sql = `SELECT *
FROM Achievements
WHERE series = ${seriesId}
ORDER BY isCompleted, \`order\`;`;
} else { } else {
sql = "SELECT * FROM Achievements ORDER BY isCompleted, `order`;"; sql = "SELECT * FROM Achievements ORDER BY isCompleted, `order`;";
} }
@@ -249,9 +255,15 @@ class Sqlite {
let sql; let sql;
if (keyword.startsWith("v")) { if (keyword.startsWith("v")) {
const version = keyword.replace("v", ""); const version = keyword.replace("v", "");
sql = `SELECT * FROM Achievements WHERE version LIKE '%${version}%' ORDER BY isCompleted, \`order\`;`; sql = `SELECT *
FROM Achievements
WHERE version LIKE '%${version}%'
ORDER BY isCompleted, \`order\`;`;
} else { } else {
sql = `SELECT * FROM Achievements WHERE name LIKE '%${keyword}%' OR description LIKE '%${keyword}%' sql = `SELECT *
FROM Achievements
WHERE name LIKE '%${keyword}%'
OR description LIKE '%${keyword}%'
ORDER BY isCompleted, \`order\`;`; ORDER BY isCompleted, \`order\`;`;
} }
const res: TGApp.Sqlite.Achievement.SingleTable[] = await db.select(sql); const res: TGApp.Sqlite.Achievement.SingleTable[] = await db.select(sql);
@@ -318,11 +330,25 @@ class Sqlite {
*/ */
public async getAbyss (): Promise<TGApp.Sqlite.Abyss.SingleTable[]> { public async getAbyss (): Promise<TGApp.Sqlite.Abyss.SingleTable[]> {
const db = await Database.load(this.dbPath); const db = await Database.load(this.dbPath);
const sql = "SELECT * FROM SpiralAbyss"; const sql = "SELECT * FROM SpiralAbyss order by id desc";
const res: TGApp.Sqlite.Abyss.SingleTable[] = await db.select(sql); const res: TGApp.Sqlite.Abyss.SingleTable[] = await db.select(sql);
await db.close(); await db.close();
return res; return res;
} }
/**
* @description 获取角色数据
* @since Alpha v0.2.0
* @param {number} id 角色 ID
* @returns {Promise<TGApp.Sqlite.Character.AppData}> 角色数据
*/
public async getAppCharacter (id: number): Promise<TGApp.Sqlite.Character.AppData> {
const db = await Database.load(this.dbPath);
const sql = `SELECT * FROM AppCharacters WHERE id = ${id}`;
const res: TGApp.Sqlite.Character.AppData[] = await db.select(sql);
await db.close();
return res[0];
}
} }
const TGSqlite = new Sqlite(); const TGSqlite = new Sqlite();

View File

@@ -42,7 +42,8 @@ create table if not exists AppCharacters
star integer, star integer,
element text, element text,
weapon text, weapon text,
nameCard text default '' nameCard text,
updated text
); );
-- @brief 创建应用数据表 -- @brief 创建应用数据表

View File

@@ -9,11 +9,17 @@
import { app } from "@tauri-apps/api"; import { app } from "@tauri-apps/api";
// utils // utils
import { getBuildTime } from "../../../utils/TGBuild"; import { getBuildTime } from "../../../utils/TGBuild";
import { insertAchievementData, insertAchievementSeriesData, insertNameCardData } from "./insertData"; import {
insertAchievementData,
insertAchievementSeriesData,
insertNameCardData,
insertCharacterData,
} from "./insertData";
import { import {
AppAchievementsData, AppAchievementsData,
AppAchievementSeriesData, AppAchievementSeriesData,
AppNameCardsData, AppNameCardsData,
AppCharacterData,
} from "../../../data"; } from "../../../data";
/** /**
@@ -73,6 +79,15 @@ function initNameCardData (): string[] {
return AppNameCardsData.map((item) => insertNameCardData(item)); return AppNameCardsData.map((item) => insertNameCardData(item));
} }
/**
* @description 初始化角色数据
* @since Alpha v0.2.0
* @returns {string[]} sql
*/
function initCharacterData (): string[] {
return AppCharacterData.map((item) => insertCharacterData(item));
}
/** /**
* @description 初始化数据 * @description 初始化数据
* @since Alpha v0.2.0 * @since Alpha v0.2.0
@@ -84,6 +99,7 @@ async function initDataSql (): Promise<string[]> {
sqlRes.push(...initAchievementSeriesData()); sqlRes.push(...initAchievementSeriesData());
sqlRes.push(...initAchievementData()); sqlRes.push(...initAchievementData());
sqlRes.push(...initNameCardData()); sqlRes.push(...initNameCardData());
sqlRes.push(...initCharacterData());
return sqlRes; return sqlRes;
} }

View File

@@ -5,13 +5,17 @@
* @since Alpha v0.2.0 * @since Alpha v0.2.0
*/ */
// utils
import { timeToSecond } from "../utils/transTime";
import { transCharacterData, transFloorData } from "../utils/transAbyssData";
/** /**
* @description 插入成就数据 * @description 插入成就数据
* @since Alpha v0.2.0 * @since Alpha v0.2.0
* @param {TGApp.App.Achievement.Item} data 成就数据 * @param {TGApp.App.Achievement.Item} data 成就数据
* @returns {string} sql * @returns {string} sql
*/ */
export function insertAchievementData (data: TGApp.App.Achievement.Item): string { export function insertAchievementData(data: TGApp.App.Achievement.Item): string {
return ` return `
INSERT INTO Achievements (id, series, "order", name, description, reward, completedTime, version, updated) 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}, '', VALUES (${data.id}, ${data.series}, ${data.order}, '${data.name}', '${data.description}', ${data.reward}, '',
@@ -33,16 +37,17 @@ export function insertAchievementData (data: TGApp.App.Achievement.Item): string
* @param {TGApp.App.Achievement.Series} data 成就系列数据 * @param {TGApp.App.Achievement.Series} data 成就系列数据
* @returns {string} sql * @returns {string} sql
*/ */
export function insertAchievementSeriesData (data: TGApp.App.Achievement.Series): string { export function insertAchievementSeriesData(data: TGApp.App.Achievement.Series): string {
return ` return `
INSERT INTO AchievementSeries (id, "order", name, version, nameCard, updated) INSERT INTO AchievementSeries (id, "order", name, version, nameCard, updated)
VALUES (${data.id}, ${data.order}, '${data.name}', '${data.version}','${data.card}', datetime('now', 'localtime')) VALUES (${data.id}, ${data.order}, '${data.name}', '${data.version}', '${data.card}',
datetime('now', 'localtime'))
ON CONFLICT(id) DO UPDATE ON CONFLICT(id) DO UPDATE
SET name = '${data.name}', SET name = '${data.name}',
"order" = ${data.order}, "order" = ${data.order},
version = '${data.version}', version = '${data.version}',
nameCard = '${data.card}', nameCard = '${data.card}',
updated = datetime('now', 'localtime'); updated = datetime('now', 'localtime');
`; `;
} }
@@ -53,11 +58,12 @@ export function insertAchievementSeriesData (data: TGApp.App.Achievement.Series)
* @param {string} value 值 * @param {string} value 值
* @returns {string} sql * @returns {string} sql
*/ */
export function insertAppData (key: string, value: string): string { export function insertAppData(key: string, value: string): string {
return ` return `
INSERT INTO AppData (key, value, updated) INSERT INTO AppData (key, value, updated)
VALUES ('${key}', '${value}', datetime('now', 'localtime')) VALUES ('${key}', '${value}', datetime('now', 'localtime'))
ON CONFLICT(key) DO UPDATE SET value = '${value}', updated = datetime('now', 'localtime'); ON CONFLICT(key) DO UPDATE SET value = '${value}',
updated = datetime('now', 'localtime');
`; `;
} }
@@ -67,7 +73,7 @@ export function insertAppData (key: string, value: string): string {
* @param {TGApp.User.Account.Game} data 游戏账号数据 * @param {TGApp.User.Account.Game} data 游戏账号数据
* @returns {string} sql * @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 isChosen = data.is_chosen ? 1 : 0;
const isOfficial = data.is_official ? 1 : 0; const isOfficial = data.is_official ? 1 : 0;
return ` return `
@@ -91,7 +97,7 @@ export function insertGameAccountData (data: TGApp.User.Account.Game): string {
* @param {TGApp.App.NameCard.Item} data 名片数据 * @param {TGApp.App.NameCard.Item} data 名片数据
* @returns {string} sql * @returns {string} sql
*/ */
export function insertNameCardData (data: TGApp.App.NameCard.Item): string { export function insertNameCardData(data: TGApp.App.NameCard.Item): string {
return ` return `
INSERT INTO NameCard (name, "desc", type, source, updated) INSERT INTO NameCard (name, "desc", type, source, updated)
VALUES ('${data.name}', '${data.desc}', '${data.type}', '${data.source}', datetime('now', 'localtime')) VALUES ('${data.name}', '${data.desc}', '${data.type}', '${data.source}', datetime('now', 'localtime'))
@@ -101,3 +107,68 @@ export function insertNameCardData (data: TGApp.App.NameCard.Item): string {
updated = datetime('now', 'localtime'); updated = datetime('now', 'localtime');
`; `;
} }
/**
* @description 插入角色数据
* @since Alpha v0.2.0
* @param {TGApp.User.Character.Item} data 角色数据
* @returns {string} sql
*/
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}',
'${data.nameCard}', '${data.birthday}', datetime('now', 'localtime'))
ON CONFLICT(id) DO UPDATE
SET name = '${data.name}',
star = ${data.star},
element = '${data.element}',
weapon = '${data.weapon}',
nameCard = '${data.nameCard}',
birthday = '${data.birthday}';
`;
}
/**
* @description 插入深渊数据
* @since Alpha v0.2.0
* @param {TGApp.User.Abyss} data 深渊数据
* @returns {string} sql
*/
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;
const revealRank = transCharacterData(data.reveal_rank);
const defeatRank = transCharacterData(data.defeat_rank);
const damageRank = transCharacterData(data.damage_rank);
const takeDamageRank = transCharacterData(data.take_damage_rank);
const normalSkillRank = transCharacterData(data.normal_skill_rank);
const energySkillRank = transCharacterData(data.energy_skill_rank);
const floors = transFloorData(data.floors);
return `
INSERT INTO SpiralAbyss (id, startTime, endTime, totalBattleTimes, totalWinTimes, maxFloor, totalStar, isUnlock,
revealRank, defeatRank, damageRank, takeDamageRank, normalSkillRank, energySkillRank,
floors, updated)
VALUES (${data.schedule_id}, '${startTime}', '${endTime}', ${data.total_battle_times}, ${data.total_win_times},
'${data.max_floor}', ${data.total_star},
${isUnlock}, '${revealRank}', '${defeatRank}', '${damageRank}', '${takeDamageRank}', '${normalSkillRank}',
'${energySkillRank}', '${floors}', datetime('now', 'localtime'))
ON CONFLICT(id) DO UPDATE
SET startTime = '${startTime}',
endTime = '${endTime}',
totalBattleTimes = ${data.total_battle_times},
totalWinTimes = ${data.total_win_times},
maxFloor = '${data.max_floor}',
totalStar = ${data.total_star},
isUnlock = ${isUnlock},
revealRank = '${revealRank}',
defeatRank = '${defeatRank}',
damageRank = '${damageRank}',
takeDamageRank = '${takeDamageRank}',
normalSkillRank = '${normalSkillRank}',
energySkillRank = '${energySkillRank}',
floors = '${floors}',
updated = datetime('now', 'localtime');
`;
}

35
src/types/Sqlite/Character.d.ts vendored Normal file
View File

@@ -0,0 +1,35 @@
/**
* @file types Sqlite Character.d.ts
* @description 角色相关类型定义文件
* @author BTMuli <bt-muli@outlook.com>
* @since Alpha v0.2.0
*/
declare namespace TGApp.Sqlite.Character {
/**
* @description 应用数据库中的角色类型
* @since Alpha v0.2.0
* @interface AppData
* @property {number} id - 角色 ID
* @property {string} name - 角色名称
* @property {string} title - 角色称号
* @property {string} birthday - 角色生日
* @property {number} star - 角色星级
* @property {string} element - 角色元素类型
* @property {string} weapon - 角色武器类型
* @property {string} nameCard - 角色名片
* @property {string} updated - 数据更新时间
* @return AppData
*/
export interface AppData {
id: number
name: string
title: string
birthday: string
star: number
element: string
weapon: string
nameCard: string
updated: string
}
}