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 (
// 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,8 +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<void> {
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, []);
}
@ -115,12 +121,13 @@ export function createRegisteredUserTable(db: sqlite3.Database): Promise<void> {
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 */
@ -156,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 = ?`;
@ -279,13 +295,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<void> {
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, []);
}
@ -295,11 +318,12 @@ export function insertWork(
link: string,
user_id: number,
language_id: number,
title: 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 */
@ -329,3 +353,27 @@ export function selectWorkById(db: sqlite3.Database, id: number) {
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: {
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 });
},
);
@ -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 */
fastify.delete(
"/users/:id",
@ -449,13 +480,14 @@ fastify.post(
id_user: Type.Number(),
link: Type.String(),
id_language: Type.Number(),
title: Type.String(),
code: 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 } = request.body;
await db.insertWork(database, link, id_user, id_language, title, code);
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 */
async function forwardOutput() {
for await (const [buff] of receiver) {

Loading…
Cancel
Save