totolist/db.js
2025-08-28 13:57:06 +02:00

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