🎨 fix(db): 调整结构,将名片数据也写到数据库里

This commit is contained in:
BTMuli
2023-04-25 20:02:51 +08:00
parent f40d9e61d4
commit c9bef8927b
6 changed files with 1534 additions and 1560 deletions

View File

@@ -9,29 +9,6 @@ import { app } from "@tauri-apps/api";
import { getBuildTime } from "./TGBuild";
import { TGAppData } from "../data";
const TGSql = {
initTable: {
all: initSQLiteTable(),
app: initAppTable(),
achievement: initAchievementTable(),
achievementSeries: initAchievementSeriesTable(),
},
initData: {
all: initSQLiteData(),
app: initAppData(),
achievement: initAchievementData(),
achievementSeries: initAchievementSeriesData(),
},
insert: {
achievement: insertAchievementData,
achievementSeries: insertAchievementSeriesData,
UIAF: importUIAFData,
},
update: {
achievement: updateAchievementData,
},
};
/**
* @description 初始化应用数据表
* @since Alpha v0.1.4
@@ -79,7 +56,7 @@ function initAchievementSeriesTable (): string[] {
totalCount INTEGER DEFAULT 0,
finCount INTEGER DEFAULT 0,
icon TEXT NOT NULL,
nameCard TEXT DEFAULT NULL,
nameCard TEXT NOT NULL,
updated TEXT DEFAULT NULL
);
`);
@@ -133,16 +110,42 @@ function initAchievementTable (): string[] {
`);
return sqlRes;
}
/**
* @description 初始化名片数据表
* @since Alpha v0.1.4
* @returns {string[]} sql
*/
function initNameCardTable (): string[] {
const sqlRes = [];
// 创建名片数据表
sqlRes.push(`
CREATE TABLE IF NOT EXISTS NameCard
(
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT DEFAULT NULL,
description TEXT DEFAULT NULL,
icon TEXT NOT NULL,
bg TEXT NOT NULL,
profile TEXT NOT NULL,
type INTEGER DEFAULT 0,
source TEXT DEFAULT NULL,
updated TEXT DEFAULT NULL
);
`);
return sqlRes;
}
/**
* @description 初始化数据库表
* @since Alpha v0.1.4
* @returns {string[]} sql
*/
function initSQLiteTable (): string[] {
export function initSQLiteTable (): string[] {
const sqlRes = [];
sqlRes.push(...initAppTable());
sqlRes.push(...initAchievementSeriesTable());
sqlRes.push(...initAchievementTable());
sqlRes.push(...initNameCardTable());
return sqlRes;
}
@@ -177,8 +180,11 @@ async function initAppData (): Promise<string[]> {
function initAchievementSeriesData (): string[] {
const sqlRes: string[] = [];
const oriData = TGAppData.achievementSeries;
Object.values(oriData).map((series) => {
const sql = insertAchievementSeriesData(series);
oriData.map((data) => {
const sql = `
INSERT INTO AchievementSeries (id, "order", name, version, icon, nameCard, updated)
VALUES (${data.id}, ${data.order}, '${data.name}', '${data.version}', '${data.icon}', '${data.card}', datetime('now', 'localtime'));
`;
return sqlRes.push(sql);
});
return sqlRes;
@@ -192,8 +198,29 @@ function initAchievementSeriesData (): string[] {
function initAchievementData (): string[] {
const sqlRes: string[] = [];
const oriData = TGAppData.achievements;
Object.values(oriData).map((achievement) => {
const sql = insertAchievementData(achievement);
oriData.map((data) => {
const sql = `
INSERT INTO Achievements (id, series, "order", name, description, reward, version, updated)
VALUES (${data.id}, ${data.series}, ${data.order}, '${data.name}', '${data.description}', ${data.reward}, '${data.version}', datetime('now', 'localtime'));
`;
return sqlRes.push(sql);
});
return sqlRes;
}
/**
* @description 初始化名片数据
* @since Alpha v0.1.4
* @returns {string[]} sql
*/
function initNameCardData (): string[] {
const sqlRes: string[] = [];
const oriData = TGAppData.nameCards;
oriData.map((data) => {
const sql = `
INSERT INTO NameCard (name, description, icon, bg, profile, type, source, updated)
VALUES ('${data.name}', '${data.description}', '${data.icon}', '${data.bg}', '${data.profile}', ${data.type}, '${data.source}', datetime('now', 'localtime'));
`;
return sqlRes.push(sql);
});
return sqlRes;
@@ -204,82 +231,22 @@ function initAchievementData (): string[] {
* @since Alpha v0.1.4
* @returns {Promise<string[]>} sql
*/
async function initSQLiteData (): Promise<string[]> {
export async function initSQLiteData (): Promise<string[]> {
const sqlRes = [];
sqlRes.push(...initAchievementSeriesData());
sqlRes.push(...initAchievementData());
sqlRes.push(...initNameCardData());
sqlRes.push(...await initAppData());
return sqlRes;
}
/**
* @description 插入数据-成就系列
* @since Alpha v0.1.4
* @param {BTMuli.Genshin.AchievementSeries} data
* @returns {string} sql
*/
function insertAchievementSeriesData (data: BTMuli.Genshin.AchievementSeries): string {
let sql;
if (data.card) {
sql = `
INSERT INTO AchievementSeries (id, "order", name, version, icon, nameCard, updated)
VALUES (${data.id}, ${data.order}, '${data.name}', '${data.version}', '${data.icon}', '${data.card}', datetime('now', 'localtime'));
`;
} else {
sql = `
INSERT INTO AchievementSeries (id, "order", name, version, icon, updated)
VALUES (${data.id}, ${data.order}, '${data.name}', '${data.version}', '${data.icon}', datetime('now', 'localtime'));
`;
}
return sql;
}
/**
* @description 插入数据-成就
* @since Alpha v0.1.4
* @param {BTMuli.Genshin.Achievement} data
* @returns {string} sql
*/
function insertAchievementData (data: BTMuli.Genshin.Achievement): string {
const sql = `
INSERT INTO Achievements (id, series, "order", name, description, reward, version, updated)
VALUES (${data.id}, ${data.series}, ${data.order}, '${data.name}', '${data.description}', ${data.reward}, '${data.version}', datetime('now', 'localtime'));
`;
return sql;
}
/**
* @description 更新数据-成就
* @since Alpha v0.1.4
* @param {BTMuli.Genshin.Achievement} data
* @returns {string} sql
*/
function updateAchievementData (data: BTMuli.Genshin.Achievement): string {
let sql;
const isCompleted = data.completed ? 1 : 0;
if (data.completed && data.completed_time) {
sql = `
UPDATE Achievements
SET completed = ${isCompleted}, completedTime = '${data.completed_time}', progress = ${data.progress}, updated = datetime('now', 'localtime')
WHERE id = ${data.id};
`;
} else {
sql = `
UPDATE Achievements
SET completed = ${isCompleted}, progress = ${data.progress}, updated = datetime('now', 'localtime')
WHERE id = ${data.id};
`;
}
return sql;
}
/**
* @description 导入UIAF数据
* @since Alpha v0.1.4
* @param {TGPlugin.UIAF.Achievement[]} data
* @returns {string[]} sql
*/
function importUIAFData (data: TGPlugin.UIAF.Achievement[]): string[] {
export function importUIAFData (data: TGPlugin.UIAF.Achievement[]): string[] {
const sqlRes: string[] = [];
data.map((achievement) => {
let sql;
@@ -303,5 +270,3 @@ function importUIAFData (data: TGPlugin.UIAF.Achievement[]): string[] {
});
return sqlRes;
}
export default TGSql;