From a9651ed09f025c5acf05f6f176f249017d3f4879 Mon Sep 17 00:00:00 2001 From: cofrizot Date: Tue, 28 May 2024 16:12:27 +0200 Subject: [PATCH] Add an email to User and title, date to Work --- src/database.ts | 41 ++++++++++++++++++++++++++++++++++------- src/server.ts | 34 ++++++++++++++++++++++++++++++---- 2 files changed, 64 insertions(+), 11 deletions(-) diff --git a/src/database.ts b/src/database.ts index c8b3d48..21b5ab1 100644 --- a/src/database.ts +++ b/src/database.ts @@ -98,6 +98,7 @@ export function createTables(db: sqlite3.Database) { // CREATE TABLE registered_user ( // id_user SERIAL PRIMARY KEY, // login VARCHAR(64) NOT NULL, +// email VARCHAR(64) NOT NULL, // password VARCHAR(72) NOT NULL, // permissions INT NOT NULL, // UNIQUE (login) @@ -105,7 +106,13 @@ export function createTables(db: sqlite3.Database) { /* Créer la table registered_user dans la base de données */ export function createRegisteredUserTable(db: sqlite3.Database): Promise { - const tableRegisteredUser = `CREATE TABLE IF NOT EXISTS registered_user (id_user INTEGER PRIMARY KEY AUTOINCREMENT, login TEXT NOT NULL, password TEXT NOT NULL, permissions INTEGER NOT NULL, UNIQUE (login))`; + const tableRegisteredUser = `CREATE TABLE IF NOT EXISTS registered_user ( + id_user INTEGER PRIMARY KEY AUTOINCREMENT, + login TEXT NOT NULL, + email TEXT NOT NULL, + password TEXT NOT NULL, + permissions INTEGER NOT NULL, + UNIQUE (login))`; return runDB(db, tableRegisteredUser, []); } @@ -114,12 +121,13 @@ export function createRegisteredUserTable(db: sqlite3.Database): Promise { export function insertUser( db: sqlite3.Database, login: string, + email: string, password: string, permissions: number ) { - const insertUserQuery = `INSERT INTO registered_user (login, password, permissions) VALUES (?, ?, ?)`; + const insertUserQuery = `INSERT INTO registered_user (login, email, password, permissions) VALUES (?, ?, ?, ?)`; - return runDB(db, insertUserQuery, [login, password, permissions]); + return runDB(db, insertUserQuery, [login, email, password, permissions]); } /* Modifier le login d'un utilisateur dans la table registered_user */ @@ -155,6 +163,15 @@ export function updateUserPermissions( return runDB(db, updateUserPermissionsQuery, [newPermissions, id]); } +export function updateUserEmail( + db: sqlite3.Database, + id: number, + newEmail: string +) { + const updateUserEmailQuery = `UPDATE registered_user SET email = ? WHERE id_user = ?`; + return runDB(db, updateUserEmailQuery, [newEmail, id]); +} + /* Supprimer un utilisateur de la table registered_user par son ID */ export function deleteUserById(db: sqlite3.Database, id: number) { const deleteUserQuery = `DELETE FROM registered_user WHERE id_user = ?`; @@ -277,12 +294,20 @@ export function selectLanguageById(db: sqlite3.Database, id: number) { // link CHAR(36) NOT NULL, // user_id INT REFERENCES registered_user(id_user), // language_id INT NOT NULL REFERENCES language(id_language) +// title VARCHAR(30) NOT NULL, // content TEXT NOT NULL, +// date TIMESTAMP DEFAULT CURRENT_TIMESTAMP // ); /* Créer la table work dans la base de données */ export function createWorkTable(db: sqlite3.Database): Promise { - const tableWork = `CREATE TABLE IF NOT EXISTS work (id_work INTEGER PRIMARY KEY AUTOINCREMENT, link CHAR(36) NOT NULL, user_id INTEGER REFERENCES registered_user(id_user), language_id INTEGER NOT NULL REFERENCES language(id_language), content TEXT NOT NULL)`; + const tableWork = `CREATE TABLE IF NOT EXISTS work ( + id_work INTEGER PRIMARY KEY AUTOINCREMENT, + link CHAR(36) NOT NULL, user_id INTEGER REFERENCES registered_user(id_user), + language_id INTEGER NOT NULL REFERENCES language(id_language), + title TEXT NOT NULL, + content TEXT NOT NULL, + date TIMESTAMP DEFAULT CURRENT_TIMESTAMP)`; return runDB(db, tableWork, []); } @@ -292,11 +317,13 @@ export function insertWork( link: string, user_id: number, language_id: number, - content: string + title: string, + content: string, + date: string ) { - const insertWorkQuery = `INSERT INTO work (link, user_id, language_id, content) VALUES (?, ?, ?, ?)`; + const insertWorkQuery = `INSERT INTO work (link, user_id, language_id, title, content, date) VALUES (?, ?, ?, ?, ?, ?)`; - return runDB(db, insertWorkQuery, [link, user_id, language_id, content]); + return runDB(db, insertWorkQuery, [link, user_id, language_id, title, content, date]); } /* Sélectionner tous les works de la table work */ diff --git a/src/server.ts b/src/server.ts index 8690712..fd70e5e 100644 --- a/src/server.ts +++ b/src/server.ts @@ -113,14 +113,15 @@ fastify.post( schema: { body: Type.Object({ login: Type.String(), + email: Type.String(), password: Type.String(), permissions: Type.Number(), }), }, }, async (request, reply) => { - const { login, password, permissions } = request.body; - db.insertUser(database, login, password, permissions); + const { login, email, password, permissions } = request.body; + db.insertUser(database, login, email, password, permissions); reply.send({ success: true }); } ); @@ -194,6 +195,29 @@ fastify.put( } ); +/* Route pour mettre à jour l'email d'un utilisateur */ +fastify.put( + "/users/:id/email", + { + schema: { + params: Type.Object({ + id: Type.Number({ + minimum: 0, + }), + }), + body: Type.Object({ + newEmail: Type.String(), + }), + }, + }, + async (request, reply) => { + const { id } = request.params; + const { newEmail } = request.body; + await db.updateUserEmail(database, id, newEmail); + reply.send({ success: true }); + } +); + /* Route pour supprimer un utilisateur par son ID */ fastify.delete( "/users/:id", @@ -401,13 +425,15 @@ fastify.post( id_user: Type.Number(), link: Type.String(), id_language: Type.Number(), + title: Type.String(), code: Type.String(), + date: Type.String(), }), }, }, async (request, reply) => { - const { id_user, link, id_language, code } = request.body; - db.insertWork(database, link, id_user, id_language, code); + const { id_user, link, id_language, title, code, date } = request.body; + db.insertWork(database, link, id_user, id_language, title, code, date); reply.send({ success: true }); } );