@ -32,9 +32,10 @@ export function runDB(
export function allDB < T > (
db : sqlite3.Database ,
query : string ,
params? : any [ ]
) : Promise < unknown [ ] > {
return new Promise ( ( resolve , reject ) = > {
db . all ( query , ( err , rows ) = > {
db . all ( query , params , ( err , rows ) = > {
if ( err ) {
reject ( err ) ;
} else {
@ -95,7 +96,6 @@ export function closeDatabase(db: sqlite3.Database) {
/* Create all the tables in the database */
export function createTables ( db : sqlite3.Database ) {
createRegisteredUserTable ( db ) ;
createLanguageTable ( db ) ;
createWorkTable ( db ) ;
}
@ -103,6 +103,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)
@ -110,8 +111,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 , [ ] ) ;
}
@ -120,13 +126,13 @@ export function createRegisteredUserTable(db: sqlite3.Database): Promise<void> {
export async function insertUser (
db : sqlite3.Database ,
login : string ,
email : string ,
password : string ,
permissions : number ,
) : Promise < boolean > {
const insertUserQuery = ` INSERT INTO registered_user (login, password, permissions) VALUES (?, ?, ?) ` ;
const insertUserQuery = ` INSERT INTO registered_user (login, email, password, permissions) VALUES (?, ?, ?, ?) ` ;
try {
await runDB ( db , insertUserQuery , [ login , password, permissions ] ) ;
await runDB ( db , insertUserQuery , [ login , email, password, permissions ] ) ;
return true ;
} catch ( e ) {
const error = e as error ;
@ -192,6 +198,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 = ? ` ;
@ -234,94 +249,26 @@ export function selectUserById(db: sqlite3.Database, id: number) {
return getDB ( db , selectUserByIdQuery , [ id ] ) ;
}
/////////////////////////// Gestion des Languages ///////////////////////////
// CREATE TABLE language (
// id_language SERIAL PRIMARY KEY,
// designation VARCHAR(30) NOT NULL,
// version INT NOT NULL,
// );
/* Créer la table language dans la base de données */
export function createLanguageTable ( db : sqlite3.Database ) : Promise < void > {
const tableLanguage =
` CREATE TABLE IF NOT EXISTS language (id_language INTEGER PRIMARY KEY AUTOINCREMENT, designation TEXT NOT NULL, version INTEGER NOT NULL) ` ;
return runDB ( db , tableLanguage , [ ] ) ;
}
/* Insérer un language dans la table language */
export function insertLanguage (
db : sqlite3.Database ,
designation : string ,
version : number ,
) {
const insertLanguageQuery = ` INSERT INTO language (designation, version) VALUES (?, ?) ` ;
return runDB ( db , insertLanguageQuery , [ designation , version ] ) ;
}
/* Modifier la designation d'un language dans la table language */
export function updateLanguageDesignation (
db : sqlite3.Database ,
id : number ,
newDesignation : string ,
) {
const updateLanguageDesignationQuery = ` UPDATE language SET designation = ? WHERE id_language = ? ` ;
return runDB ( db , updateLanguageDesignationQuery , [ newDesignation , id ] ) ;
}
/* Modifier la version d'un language dans la table language */
export function updateLanguageVersion (
db : sqlite3.Database ,
id : number ,
newVersion : number ,
) {
const updateLanguageVersionQuery = ` UPDATE language SET version = ? WHERE id_language = ? ` ;
return runDB ( db , updateLanguageVersionQuery , [ newVersion , id ] ) ;
}
/* Supprimer un language de la table language par son ID */
export function deleteLanguage ( db : sqlite3.Database , id : number ) {
const deleteLanguageQuery = ` DELETE FROM language WHERE id_language = ? ` ;
return runDB ( db , deleteLanguageQuery , [ id ] ) ;
}
/* Supprimer tous les languages de la table language */
export function deleteAllLanguages ( db : sqlite3.Database ) {
const deleteAllLanguagesQuery = ` DELETE FROM language ` ;
return runDB ( db , deleteAllLanguagesQuery , [ ] ) ;
}
/* Sélectionner tous les languages de la table language */
export function selectAllLanguages ( db : sqlite3.Database ) : Promise < unknown [ ] > {
const selectAllLanguagesQuery = ` SELECT * FROM language ` ;
return allDB ( db , selectAllLanguagesQuery ) ;
}
/* Sélectionner un language par son ID */
export function selectLanguageById ( db : sqlite3.Database , id : number ) {
const selectLanguageByIdQuery = ` SELECT * FROM language WHERE id_language = ? ` ;
return getDB ( db , selectLanguageByIdQuery , [ id ] ) ;
}
/////////////////////////// Gestion des works ///////////////////////////
// CREATE TABLE work (
// id_work SERIAL PRIMARY KEY,
// link CHAR(36) NOT NULL,
// user_id INT REFERENCES registered_user(id_user),
// language_id INT NOT NULL REFERENCES language(id_language)
// language TEXT NOT NULL,
// 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 TEXT NOT NULL ,
title TEXT NOT NULL ,
content TEXT NOT NULL ,
date TIMESTAMP DEFAULT CURRENT_TIMESTAMP ) ` ;
return runDB ( db , tableWork , [ ] ) ;
}
@ -330,12 +277,13 @@ export function insertWork(
db : sqlite3.Database ,
link : string ,
user_id : number ,
language_id : number ,
language : string ,
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 , title, content, date) VALUES (?, ?, ?, ?, ?, ?)` ;
return runDB ( db , insertWorkQuery , [ link , user_id , language _id, content ] ) ;
return runDB ( db , insertWorkQuery , [ link , user_id , language , title , content , new Date ( ) . toISOString ( ) ] ) ;
}
/* Sélectionner tous les works de la table work */
@ -345,6 +293,29 @@ export function selectAllWorks(db: sqlite3.Database): Promise<unknown[]> {
return allDB ( db , selectAllWorksQuery ) ;
}
/* Sélectionner tous les works de la table work */
export function selectWorksByUserId ( db : sqlite3.Database , user_id : number ) : Promise < unknown [ ] > {
const selectWorksByUserIdQuery = ` SELECT * FROM work WHERE user_id = ? ` ;
return allDB ( db , selectWorksByUserIdQuery , [ user_id ] ) ;
}
/* Sélectionner un work par son ID */
export function selectWorkByLink ( db : sqlite3.Database , link : string ) {
const selectWorkByLinkQuery = ` SELECT * FROM work WHERE link = ? ` ;
return getDB ( db , selectWorkByLinkQuery , [ link ] ) ;
}
/* Sélectionner le dernier work par l'id de l'utilisateur */
export function selectLastWorkByUserId ( db : sqlite3.Database , user_id : number ) {
const selectLastWorkByUserIdQuery = ` SELECT * FROM work
WHERE user_id = ?
ORDER BY date DESC
LIMIT 1 ` ;
return getDB ( db , selectLastWorkByUserIdQuery , [ user_id ] ) ;
}
/* Supprimer tous les works de la table work */
export function deleteAllWorks ( db : sqlite3.Database ) {
const deleteAllWorksQuery = ` DELETE FROM work ` ;
@ -359,9 +330,27 @@ export function deleteWork(db: sqlite3.Database, id: number) {
return runDB ( db , deleteWorkQuery , [ id ] ) ;
}
/* Sélectionner un work par son ID */
export function selectWorkById ( db : sqlite3.Database , id : number ) {
const selectWorkByIdQuery = ` SELECT * FROM work WHERE id_work = ? ` ;
/* 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 getDB ( db , selectWorkByIdQuery , [ id ] ) ;
return runDB( db , updateWorkTitleQuery , [ newTitle , id ] ) ;
}
/* Update the work content by its ID */
export function updateWorkContent (
db : sqlite3.Database ,
id : number ,
newContent : string ,
language : string ,
) {
const updateWorkContentQuery = ` UPDATE work SET content = ?, language = ? WHERE id_work = ? ` ;
return runDB ( db , updateWorkContentQuery , [ newContent , language , id ] ) ;
}