Compare commits

..

2 commits

Author SHA1 Message Date
30968bcd5b
split sql
All checks were successful
PR Check / lint-and-format (pull_request) Successful in 29s
2024-11-01 17:44:35 +01:00
a5bddd8c6f
move sql to it own file 2024-11-01 17:26:59 +01:00
12 changed files with 126 additions and 80 deletions

View file

@ -9,6 +9,7 @@ import {
setTimeoutReminder,
updateReminder,
} from "../../utils/commands/reminder";
import { readSQL } from "../../utils/db";
export const once = true;
@ -19,7 +20,7 @@ export default async (client: Client) => {
// Restart all the timeout about reminders here
new Promise((ok, ko) => {
// Fetch all reminders
client.db.all("SELECT * FROM reminder", [], (err, row) => {
client.db.all(readSQL("reminder/select"), [], (err, row) => {
if (err) {
ko(err);
}

13
src/sql/init.sql Normal file
View file

@ -0,0 +1,13 @@
CREATE TABLE IF NOT EXISTS
reminder (
id INTEGER PRIMARY KEY,
data TEXT,
expiration_date TEXT,
option_id INTEGER,
channel_id TEXT,
creation_date TEXT,
user_id TEXT,
guild_id TEXT,
locale TEXT,
timeout_id TEXT
);

14
src/sql/reminder/add.sql Normal file
View file

@ -0,0 +1,14 @@
INSERT INTO
reminder (
data,
expiration_date,
option_id,
channel_id,
creation_date,
user_id,
guild_id,
locale,
timeout_id
)
VALUES
(?, ?, ?, ?, ?, ?, ?, ?, ?);

13
src/sql/reminder/find.sql Normal file
View file

@ -0,0 +1,13 @@
SELECT
data,
creation_date,
expiration_date,
id
FROM
reminder
WHERE
user_id = ?
AND (
guild_id = ?
OR guild_id = 0
)

View file

@ -0,0 +1,6 @@
SELECT
*
FROM
reminder
WHERE
id = ?

View file

@ -0,0 +1,14 @@
SELECT
EXISTS (
SELECT
1
FROM
reminder
WHERE
id = ?
AND user_id = ?
AND (
guild_id = ?
OR guild_id = 0
)
)

View file

@ -0,0 +1,4 @@
DELETE FROM reminder
WHERE
creation_date = ?
AND user_id = ?

View file

@ -0,0 +1,4 @@
SELECT
*
FROM
reminder

View file

@ -0,0 +1,13 @@
UPDATE reminder
SET
data = ?,
expiration_date = ?,
option_id = ?,
channel_id = ?,
creation_date = ?,
user_id = ?,
guild_id = ?,
locale = ?,
timeout_id = ?
WHERE
ID = ?

View file

@ -5,6 +5,7 @@ import { Database } from "sqlite3";
import "../modules/client";
import { loadLocales } from "./locales";
import { YoutubeiExtractor } from "discord-player-youtubei";
import { readSQL } from "./db";
/** Creation of the client and definition of its properties */
export default async (isDev: boolean) => {
@ -59,7 +60,7 @@ export default async (isDev: boolean) => {
client.db = new Database(`${process.env.DOCKERIZED === "1" ? "/config" : "./config"}/db.sqlite3`);
initDatabase(client.db);
client.db.run(readSQL("init"));
return client;
};
@ -75,25 +76,3 @@ export const quit = (client: Client) => {
// Close client
client.destroy();
};
/**
* Initalize the database
* @param db Database
*/
const initDatabase = (db: Database) => {
// Table for reminders
db.run(
"CREATE TABLE IF NOT EXISTS reminder ( \
id INTEGER PRIMARY KEY, \
data TEXT, \
expiration_date TEXT, \
option_id INTEGER, \
channel_id TEXT, \
creation_date TEXT, \
user_id TEXT, \
guild_id TEXT, \
locale TEXT, \
timeout_id TEXT \
);",
);
};

View file

@ -3,6 +3,7 @@ import { getLocale } from "../locales";
import { blank, cleanCodeBlock } from "../misc";
import { showDate, strToSeconds, timeDeltaToString } from "../time";
import { RegexC, RegExpFlags } from "../regex";
import { readSQL } from "../db";
/**
* Option possible for reminders
@ -92,9 +93,7 @@ export const newReminder = async (client: Client, time: string, info: infoRemind
// Add the remind to the db
client.db.run(
"INSERT INTO reminder ( \
data, expiration_date, option_id, channel_id, creation_date, user_id, guild_id, locale, timeout_id \
) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ? );",
readSQL("reminder/add"),
[
info.message,
`${expiration_date}`,
@ -127,19 +126,15 @@ export const newReminder = async (client: Client, time: string, info: infoRemind
export const deleteReminder = (client: Client, createdAt: string, userId: string) => {
// Delete the reminder for the database
return new Promise((ok, ko) => {
// Add the remind to the db
client.db.run(
"DELETE FROM reminder WHERE creation_date = ? AND user_id = ?",
[createdAt, userId],
(err) => {
if (err) {
ko(err);
}
// Remove the remind to the db
client.db.run(readSQL("reminder/remove"), [createdAt, userId], (err) => {
if (err) {
ko(err);
}
// Send confirmation to user
ok(true);
},
);
// Send confirmation to user
ok(true);
});
});
};
@ -280,12 +275,7 @@ export const checkOwnershipReminder = async (
const data = (await new Promise((ok, ko) => {
// Check the ownership
client.db.all<returnData>(
"SELECT EXISTS ( \
SELECT 1 FROM reminder \
WHERE id = ? \
AND user_id = ? \
AND (guild_id = ? OR guild_id = 0) \
)",
readSQL("reminder/ownership_check"),
[id, userId, guildId],
(err, row) => {
if (err) {
@ -308,19 +298,14 @@ export const checkOwnershipReminder = async (
export const getReminderInfo = async (client: Client, id: number) => {
return (await new Promise((ok, ko) => {
// Check the ownership
client.db.all<dbReminder>(
"SELECT * FROM reminder \
WHERE id = ?",
[id],
(err, row) => {
if (err) {
ko(err);
}
client.db.all<dbReminder>(readSQL("reminder/findById"), [id], (err, row) => {
if (err) {
ko(err);
}
// Send all the current reminders
ok(row[0]);
},
);
// Send all the current reminders
ok(row[0]);
});
})) as dbReminder;
};
@ -334,17 +319,7 @@ export const updateReminder = (client: Client, data: dbReminder) => {
return new Promise((ok, ko) => {
// Update the db
client.db.run(
"UPDATE reminder \
SET data = ?, \
expiration_date = ?, \
option_id = ?, \
channel_id = ?, \
creation_date = ?, \
user_id = ?, \
guild_id = ?, \
locale = ?, \
timeout_id = ? \
WHERE ID = ?",
readSQL("reminder/update"),
[
data.data,
data.expiration_date,
@ -378,19 +353,14 @@ export const updateReminder = (client: Client, data: dbReminder) => {
const listReminders = async (client: Client, userId: string, guildId: string | null) => {
return (await new Promise((ok, ko) => {
// Check the ownership
client.db.all<dbReminder>(
"SELECT data, creation_date, expiration_date, id FROM reminder \
WHERE user_id = ? AND (guild_id = ? OR guild_id = 0)",
[userId, guildId ?? 0],
(err, row) => {
if (err) {
ko(err);
}
client.db.all<dbReminder>(readSQL("reminder/find"), [userId, guildId ?? 0], (err, row) => {
if (err) {
ko(err);
}
// Send all the current reminders
ok(row);
},
);
// Send all the current reminders
ok(row);
});
})) as dbReminder[];
};

15
src/utils/db.ts Normal file
View file

@ -0,0 +1,15 @@
import fs from "node:fs";
export const readSQL = (path: string) => {
const dir = "./src/sql/";
if (!path.startsWith(dir)) {
path = dir + path;
}
const ext = ".sql";
if (!path.endsWith(ext)) {
path += ext;
}
return fs.readFileSync(path, "utf8");
};