📦 NEW: backend: Tasks
This commit is contained in:
		
							
								
								
									
										18
									
								
								api/app.js
									
									
									
									
									
								
							
							
						
						
									
										18
									
								
								api/app.js
									
									
									
									
									
								
							| @@ -27,6 +27,7 @@ app.use('/admin', require('./routes/admin')); | ||||
| app.use('/favorites', require('./routes/favorites')); | ||||
| app.use('/comments', require('./routes/comments')); | ||||
| app.use('/quotes', require('./routes/quotes')); | ||||
| app.use('/tasks', require('./routes/tasks')); | ||||
|  | ||||
| /* Errors Handling */ | ||||
| app.use((_req, _res, next) => errorHandling(next, { statusCode: 404, message: "La route n'existe pas!" })); // 404 | ||||
| @@ -37,12 +38,13 @@ app.use((error, _req, res, _next) => { | ||||
| }); | ||||
|  | ||||
| /* Database Relations */ | ||||
| const Functions   = require('./models/functions'); | ||||
| const Categories  = require('./models/categories'); | ||||
| const Users       = require('./models/users'); | ||||
| const Favorites   = require('./models/favorites'); | ||||
| const Comments    = require('./models/comments'); | ||||
| const Quotes      = require('./models/quotes'); | ||||
| const Functions  = require('./models/functions'); | ||||
| const Categories = require('./models/categories'); | ||||
| const Users      = require('./models/users'); | ||||
| const Favorites  = require('./models/favorites'); | ||||
| const Comments   = require('./models/comments'); | ||||
| const Quotes     = require('./models/quotes'); | ||||
| const Tasks      = require('./models/tasks'); | ||||
|  | ||||
| // A function has a category | ||||
| Categories.hasOne(Functions, { constraints: true, onDelete: 'CASCADE'}); | ||||
| @@ -64,6 +66,10 @@ Comments.belongsTo(Functions, { constraints: false }); | ||||
| Users.hasMany(Quotes); | ||||
| Quotes.belongsTo(Users, { constraints: false }); | ||||
|  | ||||
| // Users can have tasks | ||||
| Users.hasMany(Tasks); | ||||
| Tasks.belongsTo(Users, { constraints: false }); | ||||
|  | ||||
| /* Server */ | ||||
| // sequelize.sync({ force: true }) | ||||
| sequelize.sync() | ||||
|   | ||||
							
								
								
									
										68
									
								
								api/controllers/tasks.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										68
									
								
								api/controllers/tasks.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,68 @@ | ||||
| const errorHandling                   = require('../assets/utils/errorHandling'); | ||||
| const { serverError, requiredFields } = require('../assets/config/errors'); | ||||
| const Tasks                           = require('../models/tasks'); | ||||
|  | ||||
| exports.getTasks = async (req, res, next) => { | ||||
|     try { | ||||
|         const tasks = await Tasks.findAll({ | ||||
|             where: { | ||||
|                 userId: req.userId | ||||
|             }, | ||||
|             order: [['createdAt', 'DESC']] | ||||
|         }); | ||||
|         return res.status(200).json(tasks); | ||||
|     } catch (error) { | ||||
|         console.log(error); | ||||
|         return errorHandling(next, serverError); | ||||
|     } | ||||
| } | ||||
|  | ||||
| exports.postTask = async (req, res, next) => { | ||||
|     const { task } = req.body; | ||||
|     try { | ||||
|         if (!task) { | ||||
|             return errorHandling(next, requiredFields); | ||||
|         } | ||||
|         const taskResult = await Tasks.create({ task, userId: req.userId }); | ||||
|         return res.status(201).json(taskResult); | ||||
|     } catch (error) { | ||||
|         console.log(error); | ||||
|         return errorHandling(next, serverError); | ||||
|     } | ||||
| } | ||||
|  | ||||
| exports.putTask = async (req, res, next) => { | ||||
|     const { id }          = req.params; | ||||
|     const { isCompleted } = req.body; | ||||
|     try { | ||||
|         if (typeof isCompleted !== 'boolean') { | ||||
|             return errorHandling(next, { message: "isCompleted doit être un booléen.", statusCode: 400 }); | ||||
|         } | ||||
|  | ||||
|         const taskResult = await Tasks.findOne({ where: { id, userId: req.userId } }); | ||||
|         if (!taskResult) { | ||||
|             return errorHandling(next, { message: `La "tâche à faire" n'existe pas.`, statusCode: 404 }); | ||||
|         } | ||||
|         taskResult.isCompleted = isCompleted; | ||||
|         const taskSaved = await taskResult.save(); | ||||
|         return res.status(200).json(taskSaved); | ||||
|     } catch (error) { | ||||
|         console.log(error); | ||||
|         return errorHandling(next, serverError); | ||||
|     } | ||||
| } | ||||
|  | ||||
| exports.deleteTask = async (req, res, next) => { | ||||
|     const { id } = req.params; | ||||
|     try { | ||||
|         const taskResult = await Tasks.findOne({ where: { id, userId: req.userId } }); | ||||
|         if (!taskResult) { | ||||
|             return errorHandling(next, { message: `La "tâche à faire" n'existe pas.`, statusCode: 404 }); | ||||
|         } | ||||
|         await taskResult.destroy(); | ||||
|         return res.status(200).json({ message: `La "tâche à faire" a bien été supprimée!` }); | ||||
|     } catch (error) { | ||||
|         console.log(error); | ||||
|         return errorHandling(next, serverError); | ||||
|     } | ||||
| } | ||||
							
								
								
									
										20
									
								
								api/models/tasks.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								api/models/tasks.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,20 @@ | ||||
| const Sequelize = require('sequelize'); | ||||
| const sequelize = require('../assets/utils/database'); | ||||
|  | ||||
| module.exports = sequelize.define('task', { | ||||
|     id: { | ||||
|         type: Sequelize.INTEGER, | ||||
|         allowNull: false, | ||||
|         autoIncrement: true, | ||||
|         primaryKey: true | ||||
|     }, | ||||
|     task: { | ||||
|         type: Sequelize.STRING, | ||||
|         allowNull: false, | ||||
|     }, | ||||
|     isCompleted: { | ||||
|         type: Sequelize.BOOLEAN, | ||||
|         allowNull: false, | ||||
|         defaultValue: 0 | ||||
|     } | ||||
| }); | ||||
							
								
								
									
										23
									
								
								api/routes/tasks.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								api/routes/tasks.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,23 @@ | ||||
| const { Router }      = require('express'); | ||||
| const tasksController = require('../controllers/tasks'); | ||||
| const isAuth          = require('../middlewares/isAuth'); | ||||
|  | ||||
| const TasksRouter = Router(); | ||||
|  | ||||
| TasksRouter.route('/') | ||||
|  | ||||
|     // Récupère les tâches à faire d'un user | ||||
|     .get(isAuth, tasksController.getTasks) | ||||
|  | ||||
|     // Poster une nouvelle tâche à faire | ||||
|     .post(isAuth, tasksController.postTask); | ||||
|  | ||||
| TasksRouter.route('/:id') | ||||
|  | ||||
|     // Permet de mettre une tâche à faire en isCompleted ou !isCompleted | ||||
|     .put(isAuth, tasksController.putTask) | ||||
|  | ||||
|     // Supprimer une tâche à faire | ||||
|     .delete(isAuth, tasksController.deleteTask); | ||||
|  | ||||
| module.exports = TasksRouter; | ||||
		Reference in New Issue
	
	Block a user