지금까지 내용 커밋
This commit is contained in:
117
bot/src/utils/Database.ts
Normal file
117
bot/src/utils/Database.ts
Normal file
@@ -0,0 +1,117 @@
|
||||
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;
|
||||
// }
|
||||
// },
|
||||
// },
|
||||
};
|
||||
Reference in New Issue
Block a user