frontend et backend : Profil Public

This commit is contained in:
Divlo
2020-04-06 23:06:21 +02:00
parent 76298b6087
commit 7d69561499
15 changed files with 258 additions and 5 deletions

View File

@ -24,6 +24,8 @@ app.use('/functions', require('./routes/functions'));
app.use('/categories', require('./routes/categories'));
app.use('/users', require('./routes/users'));
app.use('/admin', require('./routes/admin'));
app.use('/favorites', require('./routes/favorites'));
app.use('/comments', require('./routes/comments'));
/* Errors Handling */
app.use((_req, _res, next) => errorHandling(next, { statusCode: 404, message: "La route n'existe pas!" })); // 404
@ -36,10 +38,26 @@ 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');
// A function has a category
Categories.hasOne(Functions, { constraints: true, onDelete: 'CASCADE'});
Functions.belongsTo(Categories);
// Users can have favorites functions
Users.hasMany(Favorites);
Favorites.belongsTo(Users, { constraints: false });
Functions.hasMany(Favorites);
Favorites.belongsTo(Functions, { constraints: false });
// Users can post comments on functions
Users.hasMany(Comments);
Comments.belongsTo(Users);
Functions.hasMany(Comments);
Comments.belongsTo(Functions);
/* Server */
// sequelize.sync({ force: true })
sequelize.sync()

View File

@ -0,0 +1,2 @@
const errorHandling = require('../assets/utils/errorHandling');
const Comments = require('../models/comments');

View File

@ -0,0 +1,2 @@
const errorHandling = require('../assets/utils/errorHandling');
const Favorites = require('../models/categories');

View File

@ -9,6 +9,10 @@ const transporter = require('../assets/config/transporter');
const { EMAIL_INFO, HOST } = require('../assets/config/config');
const { emailTemplate } = require('../assets/config/emails');
const Users = require('../models/users');
const Favorites = require('../models/favorites');
const Functions = require('../models/functions');
const Categories = require('../models/categories');
const Comments = require('../models/comments');
exports.register = async (req, res, next) => {
const { name, email, password } = req.body;
@ -130,4 +134,54 @@ exports.newPassword = async (req, res, next) => {
console.log(error);
errorHandling(next, serverError);
}
}
exports.getUserInfo = async (req, res, next) => {
const { name } = req.params;
try {
const user = await Users.findOne({
where: { name },
attributes: {
exclude: ["updatedAt", "isAdmin", "isConfirmed", "password", "tempToken", "tempExpirationToken"]
},
});
if (!user) {
return errorHandling(next, { message: "L'utilisateur n'existe pas.", statusCode: 404 });
}
const favorites = await Favorites.findAll({
where: { userId: user.id },
include: [
{ model: Functions, attributes: { exclude: ["updatedAt", "utilizationForm", "article", "isOnline"] }, include: { model: Categories, attributes: ["name", "color"] } }
]
});
const favoritesArray = favorites.map((favorite) => favorite.function);
const comments = await Comments.findAll({
where: { userId: user.id },
include: [
{ model: Functions, attributes: { exclude: ["updatedAt", "utilizationForm", "article", "isOnline"] } }
]
});
const commentsArray = comments.map((commentObject) => {
return {
id: commentObject.id,
message: commentObject.message,
createdAt: commentObject.createdAt,
function: commentObject.function.dataValues
};
});
const userObject = {
// Si Public Email
... (user.isPublicEmail) && { email: user.email },
name: user.name,
biography: user.biography,
logo: user.logo,
createdAt: user.createdAt,
favoritesArray,
commentsArray
};
return res.status(200).json(userObject);
} catch (error) {
console.log(error);
errorHandling(next, serverError);
}
}

15
api/models/comments.js Normal file
View File

@ -0,0 +1,15 @@
const Sequelize = require('sequelize');
const sequelize = require('../assets/utils/database');
module.exports = sequelize.define('comment', {
id: {
type: Sequelize.INTEGER,
allowNull: false,
autoIncrement: true,
primaryKey: true
},
message: {
type: Sequelize.TEXT,
allowNull: false
}
});

11
api/models/favorites.js Normal file
View File

@ -0,0 +1,11 @@
const Sequelize = require('sequelize');
const sequelize = require('../assets/utils/database');
module.exports = sequelize.define('favorite', {
id: {
type: Sequelize.INTEGER,
allowNull: false,
autoIncrement: true,
primaryKey: true
}
});

11
api/routes/comments.js Normal file
View File

@ -0,0 +1,11 @@
const { Router } = require('express');
const commentsController = require('../controllers/comments');
const CommentsRouter = Router();
// CommentsRouter.route('/')
// // Récupère les catégories
// .get(commentsController.getCategories);
module.exports = CommentsRouter;

11
api/routes/favorites.js Normal file
View File

@ -0,0 +1,11 @@
const { Router } = require('express');
const favoritesController = require('../controllers/categories');
const FavoritesRouter = Router();
// FavoritesRouter.route('/')
// // Récupère les catégories
// .get(favoritesController.getCategories);
module.exports = FavoritesRouter;

View File

@ -18,8 +18,8 @@ UsersRouter.post('/login', [
.withMessage(requiredFields.message)
], usersController.login);
// TODO: Récupère les informations public d'un profil
// UsersRouter.get('/profile/:userName', usersController.getUserInfo);
// Récupère les informations public d'un profil
UsersRouter.get('/:name', usersController.getUserInfo);
// Permet de s'inscrire
UsersRouter.post('/register', [