diff --git a/src/database.ts b/src/database.ts index b602b81..f9f5531 100644 --- a/src/database.ts +++ b/src/database.ts @@ -85,6 +85,7 @@ function closeDatabase(db: sqlite3.Database) { function createTables(db: sqlite3.Database) { createRegisteredUserTable(db); createLanguageTable(db); + createWorkTable(db); } /////////////////////////// Gestion des utilisateurs /////////////////////////// @@ -248,6 +249,60 @@ function selectLanguageById(db: sqlite3.Database, id: number) { return getDB(db, selectLanguageByIdQuery, [id]); } +/////////////////////////// Gestion des works /////////////////////////// +// CREATE TABLE work ( +// id_work SERIAL PRIMARY KEY, +// user_id INT REFERENCES registered_user(id_user), +// language_id INT NOT NULL REFERENCES language(id_language) +// content TEXT NOT NULL, +// ); + +// Créer la table work dans la base de données +function createWorkTable(db: sqlite3.Database): Promise { + const tableWork = `CREATE TABLE IF NOT EXISTS work (id_work INTEGER PRIMARY KEY AUTOINCREMENT, user_id INTEGER REFERENCES registered_user(id_user), language_id INTEGER NOT NULL REFERENCES language(id_language), content TEXT NOT NULL)`; + return runDB(db, tableWork, []); +} + +// Insérer un work dans la table work +function insertWork( + db: sqlite3.Database, + user_id: number, + language_id: number, + content: string +) { + const insertWorkQuery = `INSERT INTO work (user_id, language_id, content) VALUES (?, ?, ?)`; + + return runDB(db, insertWorkQuery, [user_id, language_id, content]); +} + +// Sélectionner tous les works de la table work +function selectAllWorks(db: sqlite3.Database): Promise { + const selectAllWorksQuery = `SELECT * FROM work`; + + return allDB(db, selectAllWorksQuery); +} + +// Supprimer tous les works de la table work +function deleteAllWorks(db: sqlite3.Database) { + const deleteAllWorksQuery = `DELETE FROM work`; + + return runDB(db, deleteAllWorksQuery, []); +} + +// Supprimer un work de la table work +function deleteWork(db: sqlite3.Database, id: number) { + const deleteWorkQuery = `DELETE FROM work WHERE id_work = ?`; + + return runDB(db, deleteWorkQuery, [id]); +} + +// Sélectionner un work par son ID +function selectWorkById(db: sqlite3.Database, id: number) { + const selectWorkByIdQuery = `SELECT * FROM work WHERE id_work = ?`; + + return getDB(db, selectWorkByIdQuery, [id]); +} + /////////////////////////// Export des fonctions /////////////////////////// export { createDbDirectory, @@ -270,4 +325,9 @@ export { deleteAllLanguages, selectAllLanguages, selectLanguageById, + insertWork, + selectAllWorks, + deleteAllWorks, + deleteWork, + selectWorkById, }; diff --git a/src/server.ts b/src/server.ts index fa60b02..daff54c 100644 --- a/src/server.ts +++ b/src/server.ts @@ -26,6 +26,11 @@ import { deleteAllLanguages, selectAllLanguages, selectLanguageById, + insertWork, + selectAllWorks, + deleteAllWorks, + deleteWork, + selectWorkById, } from "./database"; const sender = new Push(); @@ -238,6 +243,49 @@ fastify.get("/languages", async (request, reply) => { reply.send(languages); }); +// Route pour créer un work +fastify.post<{ + Body: { + id_user: number; + id_language: number; + code: string; + }; +}>("/works", async (request, reply) => { + const { id_user, id_language, code } = request.body; + insertWork(db, id_user, id_language, code); + reply.send({ success: true }); +}); + +// Route pour récupérer tous les works +fastify.get("/works", async (request, reply) => { + const works = await selectAllWorks(db); + reply.send(works); +}); + +// Route pour supprimer tous les works +fastify.delete("/works", async (request, reply) => { + deleteAllWorks(db); + reply.send({ success: true }); +}); + +// Route pour supprimer un work +fastify.delete<{ + Params: { id: string }; +}>("/works/:id", async (request, reply) => { + const { id } = request.params; + deleteWork(db, parseInt(id)); + reply.send({ success: true }); +}); + +// Route pour récupérer un work par son ID +fastify.get<{ + Params: { id: string }; +}>("/works/:id", async (request, reply) => { + const { id } = request.params; + const work = await selectWorkById(db, parseInt(id)); + reply.send(work); +}); + // Forward output from the runner to the client async function forwardOutput() {