Compare commits

...

5 Commits

Author SHA1 Message Date
helori_ollivier d9f173d028 added update folder + reworked folder fetching hierarchy 2026-04-26 15:27:39 +02:00
helori_ollivier a0e23b672a reworked folder hierarchy fetch + adde folder creation 2026-04-26 14:42:43 +02:00
helori_ollivier 132b8cacd5 foder route ok 2026-04-24 23:28:53 +02:00
helori_ollivier 6813dd23e1 initilisation api (suite) 2026-04-24 22:39:11 +02:00
helori_ollivier 3c001d2623 initilisation api 2026-04-24 22:29:05 +02:00
11 changed files with 1350 additions and 224 deletions
+18
View File
@@ -0,0 +1,18 @@
const { Sequelize } = require('sequelize');
// Connexion à la base de données MySQL
const db = new Sequelize(
process.env.DB_NAME, // Nom de la base de données
process.env.DB_USER, // Utilisateur
process.env.DB_PASSWORD, // Mot de passe
{
host: process.env.DB_HOST, // Hôte de la base de données (localhost ou IP)
dialect: 'mysql', // Type de base de données
logging: false, // Désactiver les logs de SQL (facultatif)
define: {
timestamps: false
}
}
);
module.exports = db;
+92
View File
@@ -0,0 +1,92 @@
const folder = require('../models/folder.model');
exports.getFoldersByHierarchy = async (req, res) => {
let folders = await folder.findAll();
let hierarchy = []
for (let i = 0; i < folders.length; i++) {
folders[i].dataValues.subFolders = []
}
let curNode = findByValue(folders, "folderParent", null);
while (folders.length > 0 && curNode != null) {
let childNode = findByValue(folders, "folderParent", curNode.folderId)
if (childNode) {
curNode.dataValues.subFolders.push(childNode);
curNode = childNode;
}
else if (curNode.folderParent != null) {
folders.splice(folders.indexOf(curNode), 1);
curNode = findByValue(folders, "folderId", curNode.folderParent);
}
else {
folders.splice(folders.indexOf(curNode), 1);
hierarchy.push(curNode);
curNode = findByValue(folders, "folderParent", null);
}
}
res.json(hierarchy);
}
exports.getFolders = async (req, res) => {
const folders = await folder.findAll();
res.json(folders);
}
exports.getFoldersById = async (req, res) => {
const id = req.params.id
const folders = await folder.findAll({
where: {
folderId: id,
}},
);
res.json(folders);
}
exports.createFolder = async (req, res) => {
const jsonFolder = req.body;
await folder.create({
folderName: jsonFolder.name,
folderParent: jsonFolder.parent,
});
res.status(201).json("ok");
}
exports.updateFolder = async (req, res) => {
const folderId = req.params.id
const jsonFolder = req.body;
await folder.update({
folderName: jsonFolder.name,
folderParent: jsonFolder.parent,
},
{
where: {
folderId: folderId,
},
});
res.status(200).json("ok");
}
function findByValue(list, key, value) {
for (el of list) {
if (el[key] == value) {
return el;
}
}
return null;
}
View File
+25 -9
View File
@@ -1,11 +1,27 @@
const express = require('express') require('dotenv').config();
const app = express()
const port = 3000
app.get('/', (req, res) => { const express = require('express');
res.send('Hello World!') const app = express();
})
app.listen(port, () => { const folderRoutes = require('./routes/folder.routes');
console.log(`Example app listening on port ${port}`) const db = require('./config/db');
})
// Middleware pour le parsing des JSON
app.use(express.json());
// Utilisation des routes
app.use('/api', folderRoutes);
// Démarrer l'application et connecter la base de données
const port = process.env.PORT || 5000
db
.authenticate()
.then(() => {
console.log('Connexion à la base de données réussie');
app.listen(port, () => {
console.log(`Serveur démarré sur le port ${port}`);
});
})
.catch((error) => {
console.error('Impossible de se connecter à la base de données:', error);
});
+28
View File
@@ -0,0 +1,28 @@
const {Sequelize, DataTypes} = require('sequelize');
const db = require('../config/db')
const folder = db.define('Folders', {
folderId: {
type: DataTypes.INTEGER,
primaryKey: true,
autoIncrement: true,
},
folderName: {
type: DataTypes.STRING,
allowNull: false,
},
folderParent: {
type: DataTypes.INTEGER,
allowNull: true,
references: {
model: 'File',
key: 'folderId',
},
},
});
folder.hasMany(folder, { as: 'subFolders', foreignKey: 'folderParent' });
module.exports = folder;
View File
+1162 -211
View File
File diff suppressed because it is too large Load Diff
+8 -4
View File
@@ -3,14 +3,18 @@
"version": "0.0.0", "version": "0.0.0",
"private": true, "private": true,
"scripts": { "scripts": {
"start": "node ./bin/www" "start": "node index.js"
}, },
"dependencies": { "dependencies": {
"body-parser": "^2.2.2",
"cookie-parser": "~1.4.4", "cookie-parser": "~1.4.4",
"debug": "~2.6.9", "debug": "~2.6.9",
"express": "~4.16.1", "dotenv": "^17.4.2",
"express": "^4.22.1",
"http-errors": "~1.6.3", "http-errors": "~1.6.3",
"jade": "~1.11.0", "jade": "^0.29.0",
"morgan": "~1.9.1" "morgan": "^1.10.1",
"mysql2": "^3.22.2",
"sequelize": "^6.37.8"
} }
} }
+13
View File
@@ -0,0 +1,13 @@
const express = require('express');
const router = express.Router();
const folderController = require('../controller/folder.controller')
router.get('/folders', folderController.getFolders);
router.get('/folders/hierarchy', folderController.getFoldersByHierarchy);
router.get('/folders/:id', folderController.getFoldersById);
router.post('/folders', folderController.createFolder);
router.put('/folders/:id', folderController.updateFolder);
module.exports = router;
View File
+4
View File
@@ -0,0 +1,4 @@
module.exports = (err, req, res, next) => {
console.error(err);
res.status(500).json({ message: 'Erreur serveur interne' });
};