添加 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[] = [
"Achievements",
"AchievementSeries",
"AppCharacters",
"AppData",
"GameAccount",
"NameCard",
@@ -187,7 +188,9 @@ class Sqlite {
*/
public async getNameCard (seriesId: number): Promise<TGApp.Sqlite.NameCard.Item> {
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);
await db.close();
return res[0];
@@ -203,7 +206,10 @@ class Sqlite {
const db = await Database.load(this.dbPath);
let sql;
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 {
sql = "SELECT * FROM Achievements ORDER BY isCompleted, `order`;";
}
@@ -249,9 +255,15 @@ class Sqlite {
let sql;
if (keyword.startsWith("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 {
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\`;`;
}
const res: TGApp.Sqlite.Achievement.SingleTable[] = await db.select(sql);
@@ -318,11 +330,25 @@ class Sqlite {
*/
public async getAbyss (): Promise<TGApp.Sqlite.Abyss.SingleTable[]> {
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);
await db.close();
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();

View File

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

View File

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

View File

@@ -5,13 +5,17 @@
* @since Alpha v0.2.0
*/
// utils
import { timeToSecond } from "../utils/transTime";
import { transCharacterData, transFloorData } from "../utils/transAbyssData";
/**
* @description 插入成就数据
* @since Alpha v0.2.0
* @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}, '',
@@ -33,10 +37,11 @@ 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}', datetime('now', 'localtime'))
VALUES (${data.id}, ${data.order}, '${data.name}', '${data.version}', '${data.card}',
datetime('now', 'localtime'))
ON CONFLICT(id) DO UPDATE
SET name = '${data.name}',
"order" = ${data.order},
@@ -53,11 +58,12 @@ 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'))
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 游戏账号数据
* @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 `
@@ -91,7 +97,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'))
@@ -101,3 +107,68 @@ export function insertNameCardData (data: TGApp.App.NameCard.Item): string {
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
}
}