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; // } // }, // }, };