117 lines
3.5 KiB
TypeScript
117 lines
3.5 KiB
TypeScript
import Database from "better-sqlite3";
|
|
import { Config } from "./Config";
|
|
import { join } from "node:path";
|
|
import { readFileSync } from "node:fs";
|
|
import { GuildRow, GuildType } from "../../db/db";
|
|
import { Logger } from "./Logger";
|
|
|
|
const database = new Database(Config.dbPath);
|
|
|
|
const schemaPath = join(process.cwd(), "db/schema.sql");
|
|
const schema = readFileSync(schemaPath, "utf-8");
|
|
database.exec(schema);
|
|
|
|
Logger.ready("DB 활성화!");
|
|
|
|
const stmt = {
|
|
guild: {
|
|
// 전체
|
|
all: database.prepare("SELECT * FROM guilds"),
|
|
// 가져오기
|
|
get: database.prepare("SELECT * FROM guilds WHERE ID = ?"),
|
|
// 추가
|
|
insert: (data: GuildRow) => {
|
|
const keys = Object.keys(data);
|
|
if (keys.length === 0) throw new Error("insert: 키1개는 있어야함");
|
|
return database.prepare(`INSERT INTO guilds (${
|
|
keys.map(k => `"${k}"`).join(", ")
|
|
}) VALUES (${
|
|
keys.map(k => `@${k}`).join(", ")
|
|
})`).run(data);
|
|
},
|
|
// 수정
|
|
update: (data: GuildRow) => {
|
|
const keys = Object.keys(data).filter(k => k !== "id");
|
|
if (keys.length === 0) throw new Error("update: 키1개는 있어야함");
|
|
return database.prepare(`UPDATE guilds SET ${
|
|
keys.map(k => `${k} = @${k}`).join(", ")
|
|
} WHERE id = @id`).run(data);
|
|
},
|
|
},
|
|
// user: {
|
|
// // 가져오기
|
|
// get: database.prepare("SELECT * FROM users WHERE guild_id = ? AND id = ?"),
|
|
// // 추가
|
|
// insert: (data: UserType) => {
|
|
// const keys = Object.keys(data);
|
|
// if (keys.length === 0) throw new Error("insert: 키1개는 있어야함");
|
|
// return database.prepare(`INSERT INTO users (${
|
|
// keys.map(k => `"${k}"`).join(", ")
|
|
// }) VALUES (${
|
|
// keys.map(k => `@${k}`).join(", ")
|
|
// })`).run(data);
|
|
// },
|
|
// // 수정
|
|
// update: (data: UserType) => {
|
|
// const keys = Object.keys(data).filter(k => k !== "guild_id" && k !== "id");
|
|
// if (keys.length === 0) throw new Error("update: 키1개는 있어야함");
|
|
// return database.prepare(`UPDATE users SET ${
|
|
// keys.map(k => `${k} = @${k}`).join(", ")
|
|
// } WHERE guild_id = @guild_id AND id = @id`).run(data);
|
|
// },
|
|
// },
|
|
};
|
|
|
|
export const DB = {
|
|
guild: {
|
|
all() {
|
|
return stmt.guild.all.all() as GuildType[];
|
|
},
|
|
get(id: string) {
|
|
const row = stmt.guild.get.get(id) as GuildRow | undefined;
|
|
if (!row) return undefined;
|
|
return { ...row, options: JSON.parse(row.options) } as GuildType;
|
|
},
|
|
set(data: GuildType) {
|
|
try {
|
|
stmt.guild.insert({ ...data, options: JSON.stringify(data.options) });
|
|
return true;
|
|
} catch (err) {
|
|
Logger.error(String(err));
|
|
return false;
|
|
}
|
|
},
|
|
update(data: GuildType) {
|
|
try {
|
|
stmt.guild.update({ ...data, options: JSON.stringify(data.options) });
|
|
return true;
|
|
} catch (err) {
|
|
Logger.error(String(err));
|
|
return false;
|
|
}
|
|
},
|
|
},
|
|
// user: {
|
|
// get(guildId: string, id: string) {
|
|
// return stmt.user.get.get(guildId, id) as UserType | undefined;
|
|
// },
|
|
// set(data: UserType) {
|
|
// try {
|
|
// stmt.user.insert(data);
|
|
// return true;
|
|
// } catch (err) {
|
|
// Logger.error(String(err));
|
|
// return false;
|
|
// }
|
|
// },
|
|
// update(data: UserType) {
|
|
// try {
|
|
// stmt.user.update(data);
|
|
// return true;
|
|
// } catch (err) {
|
|
// Logger.error(String(err));
|
|
// return false;
|
|
// }
|
|
// },
|
|
// },
|
|
}; |