50 lines
2.1 KiB
JavaScript
50 lines
2.1 KiB
JavaScript
// db.js
|
|
const Database = require('better-sqlite3');
|
|
|
|
const db = new Database('todos.db');
|
|
db.pragma('journal_mode = WAL');
|
|
|
|
// Création table si absente
|
|
db.exec(`
|
|
CREATE TABLE IF NOT EXISTS users (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
pseudo TEXT NOT NULL,
|
|
discord_id TEXT NOT NULL UNIQUE,
|
|
created_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS todos (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
users_id INTEGER NOT NULL,
|
|
title TEXT NOT NULL,
|
|
completed INTEGER NOT NULL DEFAULT 0,
|
|
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
FOREIGN KEY (users_id) REFERENCES users(id) ON DELETE CASCADE
|
|
);
|
|
`);
|
|
|
|
// Ajout de l'utilisateur test si absent
|
|
const userTest = db.prepare('SELECT * FROM users WHERE id = 1').get();
|
|
if (!userTest) {
|
|
db.prepare('INSERT INTO users (id, pseudo, discord_id) VALUES (?, ?, ?)').run(1, 'test', 'null id');
|
|
}
|
|
|
|
module.exports = {
|
|
// USERS
|
|
allUsers: () => db.prepare('SELECT * FROM users ORDER BY id DESC').all(),
|
|
getUserById: (id) => db.prepare('SELECT * FROM users WHERE id = ?').get(id),
|
|
getUserByDiscordId: (discord_id) => db.prepare('SELECT * FROM users WHERE discord_id = ?').get(discord_id),
|
|
createUser: (pseudo, discord_id) =>
|
|
db.prepare('INSERT INTO users (pseudo, discord_id) VALUES (?, ?)').run(pseudo, discord_id),
|
|
|
|
// TODOS
|
|
allTodos: () => db.prepare('SELECT * FROM todos ORDER BY id DESC').all(),
|
|
getTodo: (id) => db.prepare('SELECT * FROM todos WHERE id = ?').get(id),
|
|
getTodosByUser: (users_id) => db.prepare('SELECT * FROM todos WHERE users_id = ? ORDER BY id DESC').all(users_id),
|
|
createTodo: (users_id, title) =>
|
|
db.prepare('INSERT INTO todos (users_id, title) VALUES (?, ?)').run(users_id, title),
|
|
updateTodo: (id, { title, completed }) =>
|
|
db.prepare('UPDATE todos SET title = COALESCE(?, title), completed = COALESCE(?, completed) WHERE id = ?')
|
|
.run(title ?? null, typeof completed === 'number' ? completed : null, id),
|
|
removeTodo: (id) => db.prepare('DELETE FROM todos WHERE id = ?').run(id),
|
|
};
|