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