Compare commits

...

7 Commits

Author SHA1 Message Date
helori_ollivier 2bf87d1576 added page deletion 2026-04-26 16:59:13 +02:00
helori_ollivier e7383305ec added page edition 2026-04-26 16:56:25 +02:00
helori_ollivier 3fc60c5f85 changed DB schema 2026-04-26 16:43:03 +02:00
helori_ollivier 72ec88eb14 added get page by id + create page 2026-04-26 16:42:37 +02:00
helori_ollivier 22c108b086 added get pages 2026-04-26 16:07:53 +02:00
helori_ollivier 680b9d6fb1 added page model 2026-04-26 16:00:56 +02:00
helori_ollivier 2e5f38096e added folder delete 2026-04-26 15:54:13 +02:00
10 changed files with 191 additions and 3 deletions
+6
View File
@@ -0,0 +1,6 @@
DB_HOST=localhost
DB_USER=user
DB_PASSWORD=password
DB_NAME=dbName
PORT=5000
+13 -1
View File
@@ -63,7 +63,7 @@ exports.createFolder = async (req, res) => {
exports.updateFolder = async (req, res) => { exports.updateFolder = async (req, res) => {
const folderId = req.params.id const folderId = req.params.id;
const jsonFolder = req.body; const jsonFolder = req.body;
await folder.update({ await folder.update({
@@ -79,6 +79,18 @@ exports.updateFolder = async (req, res) => {
res.status(200).json("ok"); res.status(200).json("ok");
} }
exports.deleteFolder = async (req, res) => {
const folderId = req.params.id;
await folder.destroy({
where: {
folderId:folderId,
},
});
res.status(200).json("ok");
}
function findByValue(list, key, value) { function findByValue(list, key, value) {
for (el of list) { for (el of list) {
+75
View File
@@ -0,0 +1,75 @@
const page = require('../models/page.model');
exports.getPages = async (req, res) => {
const pages = await page.findAll();
res.json(pages);
}
exports.getPageById = async (req, res) => {
const id = req.params.id
const pages = await page.findAll({
where: {
pageId: id,
}},
);
res.json(pages);
}
exports.createPage = async (req, res) => {
const jsonPage = req.body
await page.create({
pageTitle: jsonPage.name,
pageFolder: jsonPage.folder,
})
res.status(201).json("ok");
}
exports.updatePage = async (req, res) => {
const jsonPage = req.body;
const pageId = req.params.id;
await page.update({
pageTitle: jsonPage.name,
pageFolder: jsonPage.folder,
},
{
where: {
pageId: pageId
}
})
res.status(200).json("ok");
}
exports.updatePageContent = async (req, res) => {
const jsonPage = req.body;
const pageId = req.params.id;
await page.update({
pageContent: jsonPage.content,
},
{
where: {
pageId: pageId
}
})
res.status(200).json("ok");
}
exports.deletePage = async (req, res) => {
const pageId = req.params.id;
await page.destroy(
{
where: {
pageId: pageId
}
});
res.status(200).json("ok");
}
+2
View File
@@ -4,6 +4,7 @@ const express = require('express');
const app = express(); const app = express();
const folderRoutes = require('./routes/folder.routes'); const folderRoutes = require('./routes/folder.routes');
const pageRoutes = require('./routes/page.routes');
const db = require('./config/db'); const db = require('./config/db');
// Middleware pour le parsing des JSON // Middleware pour le parsing des JSON
@@ -11,6 +12,7 @@ app.use(express.json());
// Utilisation des routes // Utilisation des routes
app.use('/api', folderRoutes); app.use('/api', folderRoutes);
app.use('/api', pageRoutes);
// Démarrer l'application et connecter la base de données // Démarrer l'application et connecter la base de données
const port = process.env.PORT || 5000 const port = process.env.PORT || 5000
+2 -2
View File
@@ -17,12 +17,12 @@ const folder = db.define('Folders', {
type: DataTypes.INTEGER, type: DataTypes.INTEGER,
allowNull: true, allowNull: true,
references: { references: {
model: 'File', model: 'Folders',
key: 'folderId', key: 'folderId',
}, },
}, },
}); });
folder.hasMany(folder, { as: 'subFolders', foreignKey: 'folderParent' }); folder.hasMany(folder, { as: 'subFolders', foreignKey: 'folderParent', onDelete: 'CASCADE' });
module.exports = folder; module.exports = folder;
+42
View File
@@ -0,0 +1,42 @@
const {Sequelize, DataTypes} = require('sequelize');
const db = require('../config/db');
const folder = require('./folder.model');
const page = db.define('Pages', {
pageId: {
type: DataTypes.INTEGER,
primaryKey: true,
autoIncrement: true,
},
pageTitle: {
type: DataTypes.STRING,
allowNull: false,
},
pageFolder: {
type: DataTypes.INTEGER,
allowNull: true,
references: {
model: 'Folders',
key: 'folderId',
},
},
pageContent: {
type: DataTypes.TEXT,
allowNull: true,
},
},
{
indexes: [
{
fields: ['pageTitle', 'pageFolder'],
unique: true,
}
]
});
//page.belongsTo(folder, { as: 'pageParentFolder', foreignKey: 'pageFolder', onDelete: 'CASCADE'})
module.exports = page;
+2
View File
@@ -9,5 +9,7 @@ router.get('/folders/:id', folderController.getFoldersById);
router.post('/folders', folderController.createFolder); router.post('/folders', folderController.createFolder);
router.put('/folders/:id', folderController.updateFolder); router.put('/folders/:id', folderController.updateFolder);
router.delete('/folders/:id', folderController.deleteFolder);
module.exports = router; module.exports = router;
View File
+14
View File
@@ -0,0 +1,14 @@
const express = require('express');
const router = express.Router();
const pageController = require('../controller/page.controller')
router.get('/pages', pageController.getPages);
router.get('/pages/:id', pageController.getPageById);
router.post('/pages', pageController.createPage);
router.put('/pages/:id', pageController.updatePage);
router.put('/pages/:id/content', pageController.updatePageContent);
router.delete('/pages/:id', pageController.deletePage);
module.exports = router;
+35
View File
@@ -0,0 +1,35 @@
DROP TABLE IF EXISTS Pages;
DROP TABLE IF EXISTS Folders;
-- CREATE TABLES
CREATE TABLE Folders (
folderId INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
folderName VARCHAR(50) NOT NULL,
folderParent INT UNSIGNED,
CONSTRAINT sf_folderParent_folderId FOREIGN KEY (folderParent) REFERENCES Folders(folderId) ON DELETE CASCADE
);
CREATE TABLE Pages (
pageId INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
pageTitle VARCHAR(50) NOT NULL,
pageFolder INT UNSIGNED,
pageContent TEXT,
CONSTRAINT fk_pages_folder FOREIGN KEY (pageFolder) REFERENCES Folders(folderId) ON DELETE CASCADE,
CONSTRAINT unique_titel_folder UNIQUE (pageTitle, pageFolder)
);
-- Populate Tables
INSERT INTO Folders (folderId, folderName, folderParent) VALUES
(1, "animaux", NULL),
(2, "mamifère", 1),
(3, "plantes", NULL);
INSERT INTO Pages (pageTitle, pageFolder, pageContent) VALUES
('Vache', 2, 'La vache est un mamifères'),
('Pin des Landes', NULL, 'Le pin des landes est un pin que lon retrouve dans les landes'),
('Le lézard', 1, 'Le lézard est un reptile à sang froid');