Merge branch 'update-bdd' of https://codefirst.iut.uca.fr/git/sandkasten/labyrinth into update-bdd
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/pr Build is passing Details

pull/3/head
Matis MAZINGUE 11 months ago
commit 10c9d5e41b

@ -98,6 +98,7 @@ export function createTables(db: sqlite3.Database) {
// CREATE TABLE registered_user ( // CREATE TABLE registered_user (
// id_user SERIAL PRIMARY KEY, // id_user SERIAL PRIMARY KEY,
// login VARCHAR(64) NOT NULL, // login VARCHAR(64) NOT NULL,
// email VARCHAR(64) NOT NULL,
// password VARCHAR(72) NOT NULL, // password VARCHAR(72) NOT NULL,
// permissions INT NOT NULL, // permissions INT NOT NULL,
// UNIQUE (login) // UNIQUE (login)
@ -105,8 +106,13 @@ export function createTables(db: sqlite3.Database) {
/* Créer la table registered_user dans la base de données */ /* Créer la table registered_user dans la base de données */
export function createRegisteredUserTable(db: sqlite3.Database): Promise<void> { export function createRegisteredUserTable(db: sqlite3.Database): Promise<void> {
const tableRegisteredUser = const tableRegisteredUser = `CREATE TABLE IF NOT EXISTS registered_user (
`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))`; 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, []); return runDB(db, tableRegisteredUser, []);
} }
@ -115,12 +121,13 @@ export function createRegisteredUserTable(db: sqlite3.Database): Promise<void> {
export function insertUser( export function insertUser(
db: sqlite3.Database, db: sqlite3.Database,
login: string, login: string,
email: string,
password: string, password: string,
permissions: number, 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 */ /* Modifier le login d'un utilisateur dans la table registered_user */
@ -156,6 +163,15 @@ export function updateUserPermissions(
return runDB(db, updateUserPermissionsQuery, [newPermissions, id]); 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 */ /* Supprimer un utilisateur de la table registered_user par son ID */
export function deleteUserById(db: sqlite3.Database, id: number) { export function deleteUserById(db: sqlite3.Database, id: number) {
const deleteUserQuery = `DELETE FROM registered_user WHERE id_user = ?`; const deleteUserQuery = `DELETE FROM registered_user WHERE id_user = ?`;
@ -279,13 +295,20 @@ export function selectLanguageById(db: sqlite3.Database, id: number) {
// link CHAR(36) NOT NULL, // link CHAR(36) NOT NULL,
// user_id INT REFERENCES registered_user(id_user), // user_id INT REFERENCES registered_user(id_user),
// language_id INT NOT NULL REFERENCES language(id_language) // language_id INT NOT NULL REFERENCES language(id_language)
// title VARCHAR(30) NOT NULL,
// content TEXT NOT NULL, // content TEXT NOT NULL,
// date TIMESTAMP DEFAULT CURRENT_TIMESTAMP
// ); // );
/* Créer la table work dans la base de données */ /* Créer la table work dans la base de données */
export function createWorkTable(db: sqlite3.Database): Promise<void> { export function createWorkTable(db: sqlite3.Database): Promise<void> {
const tableWork = const tableWork = `CREATE TABLE IF NOT EXISTS work (
`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)`; 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, []); return runDB(db, tableWork, []);
} }
@ -295,11 +318,12 @@ export function insertWork(
link: string, link: string,
user_id: number, user_id: number,
language_id: number, language_id: number,
title: string,
content: string, content: 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, new Date().toISOString()]);
} }
/* Sélectionner tous les works de la table work */ /* Sélectionner tous les works de la table work */
@ -329,3 +353,27 @@ export function selectWorkById(db: sqlite3.Database, id: number) {
return getDB(db, selectWorkByIdQuery, [id]); return getDB(db, selectWorkByIdQuery, [id]);
} }
/* Update the work title by its ID */
export function updateWorkTitle(
db: sqlite3.Database,
id: number,
newTitle: string
) {
const updateWorkTitleQuery = `UPDATE work SET title = ? WHERE id_work = ?`;
return runDB(db, updateWorkTitleQuery, [newTitle, id]);
}
/* Update the work content by its ID */
export function updateWorkContent(
db: sqlite3.Database,
id: number,
newContent: string
) {
const updateWorkContentQuery = `UPDATE work SET content = ? WHERE id_work = ?`;
return runDB(db, updateWorkContentQuery, [newContent, id]);
}

@ -161,14 +161,15 @@ fastify.post(
schema: { schema: {
body: Type.Object({ body: Type.Object({
login: Type.String(), login: Type.String(),
email: Type.String(),
password: Type.String(), password: Type.String(),
permissions: Type.Number(), permissions: Type.Number(),
}), }),
}, },
}, },
async (request, reply) => { async (request, reply) => {
const { login, password, permissions } = request.body; const { login, email, password, permissions } = request.body;
db.insertUser(database, login, password, permissions); db.insertUser(database, login, email, password, permissions);
reply.send({ success: true }); reply.send({ success: true });
}, },
); );
@ -242,6 +243,36 @@ 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;
// Check if the ID relates to an existing ID.
const user = await db.selectUserById(database, id);
if (!user) {
reply.status(404).send({ error: "User not found" });
return;
}
await db.updateUserEmail(database, id, newEmail);
reply.send({ success: true });
}
);
/* Route pour supprimer un utilisateur par son ID */ /* Route pour supprimer un utilisateur par son ID */
fastify.delete( fastify.delete(
"/users/:id", "/users/:id",
@ -449,13 +480,14 @@ fastify.post(
id_user: Type.Number(), id_user: Type.Number(),
link: Type.String(), link: Type.String(),
id_language: Type.Number(), id_language: Type.Number(),
title: Type.String(),
code: Type.String(), code: Type.String(),
}), }),
}, },
}, },
async (request, reply) => { async (request, reply) => {
const { id_user, link, id_language, code } = request.body; const { id_user, link, id_language, title, code } = request.body;
db.insertWork(database, link, id_user, id_language, code); await db.insertWork(database, link, id_user, id_language, title, code);
reply.send({ success: true }); reply.send({ success: true });
}, },
); );
@ -510,6 +542,54 @@ fastify.get(
}, },
); );
/* Update the work title by its ID */
fastify.put(
"/works/:id/title",
{
schema: {
params: Type.Object({
id: Type.Number({
minimum: 0,
}),
}),
body: Type.Object({
newTitle: Type.String(),
}),
},
},
async (request, reply) => {
const { id } = request.params;
const { newTitle } = request.body;
await db.updateWorkTitle(database, id, newTitle);
reply.send({ success: true });
}
);
/* Update the work content by its ID */
fastify.put(
"/works/:id/content",
{
schema: {
params: Type.Object({
id: Type.Number({
minimum: 0,
}),
}),
body: Type.Object({
newContent: Type.String(),
}),
},
},
async (request, reply) => {
const { id } = request.params;
const { newContent } = request.body;
await db.updateWorkContent(database, id, newContent);
reply.send({ success: true });
}
);
/* Forward output est une fonction asynchrone qui permet de récupérer les messages envoyés par le container et de les renvoyer au client */ /* Forward output est une fonction asynchrone qui permet de récupérer les messages envoyés par le container et de les renvoyer au client */
async function forwardOutput() { async function forwardOutput() {
for await (const [buff] of receiver) { for await (const [buff] of receiver) {

Loading…
Cancel
Save