diff --git a/app.js b/app.js index a82e0d468037dd72bfe8e5137b147e5daf4ea5e5..60e5638c370cd6dc825db9103c474f091c03d522 100644 --- a/app.js +++ b/app.js @@ -84,6 +84,39 @@ app.get("/document", (req, res) => { }); +// route pour la sauvegarde de documents +app.post('/document/save', async (req, res) => { + try { + const documentData = req.body; + const savedDocumentId = await db.saveDocument(documentData); + + res.status(200).json({ message: 'Document sauvegardé avec succès', documentId: savedDocumentId }); + } catch (error) { + console.error('Erreur lors de la sauvegarde du document:', error); + res.status(500).json({ message: 'Erreur lors de la sauvegarde du document' }); + } +}); + + + +// route pour affichier mes docs +app.get("/mes-documents", async (req, res) => { + if (!res.locals.user) { + return res.redirect("/login"); // Redirige vers la page de connexion si l'utilisateur n'est pas connecté + } + try { + // la fonction db.getDocumentsByUserId(userId) renvoie tous les documents pour cet utilisateur + const documents = await db.getDocumentsByUserId(res.locals.user._id); + res.render("index", { documents: documents }); // Passezles documents au template EJS + } catch (error) { + console.error('Erreur lors de la récupération des documents:', error); + res.status(500).send('Erreur lors de la récupération des documents'); + } +}); + + + + app.all("*", (req, res) => res.status(404).send("<h1>Il semblerait que cette page n'existe pas.</h1>")); diff --git a/db/Database.js b/db/Database.js index 948635d7b2ef047f06f606227663452f8f6d6fb9..b111cec24528869fecc14609cd5e7a66c84ac4d2 100644 --- a/db/Database.js +++ b/db/Database.js @@ -60,6 +60,33 @@ class Database{ }; } + // sauvgarde le fichier + async saveDocument(documentData) { + // Vérifie si le document a un ID pour déterminer si c'est une création ou une mise à jour + if (documentData._id) { + // Convertir _id en un objet ObjectId + const documentId = documentData._id; + delete documentData._id; // Retire _id des données car on ne peut pas le mettre à jour + const result = await this.#db.collection('documents').updateOne( + { _id: new this.#client.ObjectId(documentId) }, + { $set: documentData } + ); + return result.upsertedId || documentId; // Retourne l'ID mis à jour ou l'ID existant + } else { + // C'est un nouveau document, utilisez la méthode insert + const result = await this.insert('documents', documentData); + return result; // Retourne l'ID du nouveau document créé + } + } + + + + // chercher les docs d'un utilisateur + async getDocumentsByUserId(userId) { + return await this.#db.collection('documents').find({ auteur: userId }).toArray(); + } + + // Gestion des Collections async createPartage(userId, documentId) { await this.insert('partage', { userId, documentId }); diff --git a/views/document.ejs b/views/document.ejs index ad2ae00c5d637d0c6ba4543ee3d05a7f90625dfc..575af694601cadbd0ab816cf0203e8fe3668872c 100644 --- a/views/document.ejs +++ b/views/document.ejs @@ -10,6 +10,7 @@ <body> <%- include('partials/header') %> <div class="spreadsheet-container"> + <button onclick="sauvegarderDocument()">Sauvegarder</button> <table> <% for(let row = 0; row < 18; row++) { %> <tr> @@ -27,6 +28,43 @@ <script> // JavaScript pour la gestion des événements peut être ajouté ici + function sauvegarderDocument() { + const tableau = []; + const lignes = document.querySelectorAll("table tr"); + + lignes.forEach((ligne, rowIndex) => { + if (rowIndex === 0) return; // Ignorer l'en-tête + + const cellules = ligne.querySelectorAll("td"); + const rowData = Array.from(cellules).map(cell => cell.innerText || ""); + tableau.push(rowData); + }); + + // Créer un objet pour envoyer + const documentData = { + nom: "Nom du Document", // le rendre dynamique si nécessaire + contenu: tableau + }; + + // Appel AJAX pour envoyer les données + envoyerDonnees(documentData); + } + + function envoyerDonnees(data) { + fetch('/document/save', { // Mette ici ton URL de sauvegarde + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify(data) + }) + .then(response => response.json()) + .then(data => { + console.log('Succès:', data); + // Traite ici le retour de la sauvegarde + }) + .catch((error) => { + console.error('Erreur:', error); + }); + } </script> </body> <%- include('partials/footer') %>