Skip to content

Commit

Permalink
ajout des commentaires
Browse files Browse the repository at this point in the history
  • Loading branch information
lucas-science committed May 21, 2021
1 parent fb717a7 commit c32e351
Show file tree
Hide file tree
Showing 3 changed files with 93 additions and 82 deletions.
151 changes: 79 additions & 72 deletions app.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,19 +5,17 @@ const cookieParser = require('cookie-parser');
const app = express();
const mongoose = require('mongoose');
const cors = require('cors')
const User = require('./models/user');
const Groupe = require('./models/groupe');
const User = require('./models/user'); // model "User" de la DB
const Groupe = require('./models/groupe'); // model "Groupe" de la DB
const jwt = require('jsonwebtoken');

// routage pour le chemin /signup et /signin
const connexionRoutes = require('./routes/user');
//const appRoutes = require()

// fonction pour vérifier si la personne est connecté
const authController = require('./controllers/auth');
const user = require('./models/user');


// initialisation body parser pour récupérer donné au format json
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }))
Expand All @@ -29,11 +27,11 @@ app.use(cookieParser());
app.use(
cors({
origin: 'http://localhost:3000',
credentials: true
credentials: true // laisser passer les cookie entre différent url
})
);

//connection DB
//connection à mongoDB
mongoose.connect('mongodb+srv://ichat:LjfNhCj0YwwryZiF@cluster0.uzln9.mongodb.net/<dbname>?retryWrites=true&w=majority', {
useCreateIndex: true,
useNewUrlParser: true,
Expand All @@ -46,10 +44,6 @@ mongoose.connect('mongodb+srv://ichat:LjfNhCj0YwwryZiF@cluster0.uzln9.mongodb.ne
// routeur réunissant /authentification/signin et /authentification/signup
app.use('/authentification', connexionRoutes);

// test
app.post('/test', (req, res, next) => {
console.log(req.body)
})

// vérification si la personne possède les cookie de conneion, avec middelware analysant ceci
app.post('/auth', authController.withAuth, (req, res, next) => {
Expand All @@ -58,216 +52,229 @@ app.post('/auth', authController.withAuth, (req, res, next) => {



// test d'ajout d'amis dans la base de donné pour un utilisateur précis
const secret = "clef-secret";
// récupere le nombre de message envooyé entre deux personnes
const secret = "clef-secret"; // clef de JsonWebToken
app.use('/app/statByUser', authController.withAuth, (req, res, next) => {
// récupère le cookie "token"
const token =
req.body.token ||
req.query.token ||
req.headers['x-access-token'] ||
req.cookies.token;

// si il y a des cookies, vérifier s'ils sont encore valide avec la fonction du package JSONwebtoken
jwt.verify(token, secret, async function(err, decoded) {
if (err) {
res.status(401).send({ error: "invalide token" });
} else {
try {
// récupère les donné du groupe voulue
const GroupeDocs = await Groupe.find({ "membres._id": decoded.userId })
const statistique = []
// boucle qui récupère chaque groupe où est présent le user
for (let i = 0; i < GroupeDocs.length; i++) {
let nbr_message = GroupeDocs[i].message.length
let friend_id = GroupeDocs[i].membres.filter(friend => friend._id != decoded.userId)
const pseudoFriend = await User.find({ _id: friend_id[0]._id })
let friendName = pseudoFriend[0].pseudo
statistique.push({ friend_name: friendName, nbr_message: nbr_message })
let nbr_message = GroupeDocs[i].message.length // récupère le nopmbre de message dans le groupe
let friend_id = GroupeDocs[i].membres.filter(friend => friend._id != decoded.userId) // récupère l'id de l'ami qui est dans le groupe avec le user
const pseudoFriend = await User.find({ _id: friend_id[0]._id }) // cherche l'id de l'ami dans la DB
let friendName = pseudoFriend[0].pseudo // prend le pseudo de l'ami
statistique.push({ friend_name: friendName, nbr_message: nbr_message }) // stocke dans une Array le nom de l'ami et le nombre de message
}
res.status(200).json(statistique)
res.status(200).json(statistique) // retourne l'array "statistique"
} catch (err) {
res.status(401).json({ err })
res.status(401).json({ err }) // renvois une erreur
}
}
})
});

// change le pseudo d'une personne
app.use('/app/changeName', authController.withAuth, (req, res, next) => {
// récupère le cookie "token"
const token =
req.body.token ||
req.query.token ||
req.headers['x-access-token'] ||
req.cookies.token;

// si il y a des cookies, vérifier s'ils sont encore valide avec la fonction du package JSONwebtoken
jwt.verify(token, secret, async function(err, decoded) {
if (err) {
console.log("here")
res.status(401).send({ error: "invalide token" });
} else {
try {
let doc = await User.findOneAndUpdate({ _id: decoded.userId }, { pseudo: req.body.newName });
let doc = await User.findOneAndUpdate({ _id: decoded.userId }, { pseudo: req.body.newName }); // cherche le user qu'il faut changer de nom
console.log(doc.pseudo)
res.status(200).send({ message: 'OK' })
res.status(200).send({ message: 'OK' }) // renvois le message 'OK' si la modification à bien été effectué
} catch (err) {
res.status(401).json({ err })
res.status(401).json({ err }) // renvois une erreur en cas d'échec
}
}
});
})

// récupère la liste d'ami d'un utilisateur
app.use('/app/friendlist', authController.withAuth, (req, res, next) => {
// récupère le cookie "token"
const token =
req.body.token ||
req.query.token ||
req.headers['x-access-token'] ||
req.cookies.token;

// si il y a des cookies, vérifier s'ils sont encore valide avec la fonction du package JSONwebtoken
jwt.verify(token, secret, async function(err, decoded) {
if (err) {
res.status(401).send({ error: "invalide token" });
} else {
try {
const UserDocs = await User.findOne({ _id: decoded.userId })
const UserDocs = await User.findOne({ _id: decoded.userId }) // cherche l'utilisateur dans la DB
let data = []
for (let i = 0; i < UserDocs.friends.length; i++) {
let friendid = UserDocs.friends[i]._id
const GetFriendName = await User.find({ _id: friendid })
data.push({ id: friendid, pseudo: GetFriendName[0].pseudo })
for (let i = 0; i < UserDocs.friends.length; i++) { // boucle qui fait le tour de chaque ami
let friendid = UserDocs.friends[i]._id // récupère l'ID de l'ami [i]
const GetFriendName = await User.find({ _id: friendid }) // cherche dans la DB l'ami grace à son ID
data.push({ id: friendid, pseudo: GetFriendName[0].pseudo }) // ajoute l'ID de l'ami et son pseudo dans une Array
}
res.status(200).send({ data: data, firstFriend: UserDocs.friends[0]._id, pseudo: UserDocs.pseudo })
res.status(200).send({ data: data, firstFriend: UserDocs.friends[0]._id, pseudo: UserDocs.pseudo }) // retourne le la liste d'ami, l'id du première ami et le pseudo de l'utilisateur
} catch (err) {
res.status(401).json({ err })
res.status(401).json({ err }) // retourne une erreur
}
}
});
});

// récupère le nom d'un ami
app.use('/app/getFriendName', authController.withAuth, (req, res, next) => {
// récupère le cookie "token"
const token =
req.body.token ||
req.query.token ||
req.headers['x-access-token'] ||
req.cookies.token;

// si il y a des cookies, vérifier s'ils sont encore valide avec la fonction du package JSONwebtoken
jwt.verify(token, secret, function(err, decoded) {
if (err) {
res.status(401).send({ error: "invalide token" });
} else {
//console.log("decoded id : ", decoded)
// si les cookie sont validé, passé à la prochaine fonction grâce à "next()"
User.findOne({ _id: req.body.name }, function(err, docs) {
User.findOne({ _id: req.body.name }, function(err, docs) { // cherche un ami grâce à son id
if (err) {
res.status(401).send({ error })
} else {
res.json(docs.pseudo)
res.json(docs.pseudo) // renvois le pseudo de l'ami rechercher
}
});
}
});
})



// cherche le groupe dans la DB celon l'id du User et de son ami
app.use('/app/getgroupeid', authController.withAuth, (req, res, next) => {
// récupère le cookie "token"
const token =
req.body.token ||
req.query.token ||
req.headers['x-access-token'] ||
req.cookies.token;

// si il y a des cookies, vérifier s'ils sont encore valide avec la fonction du package JSONwebtoken
jwt.verify(token, secret, function(err, decoded) {
if (err) {
res.status(401).send({ error: "invalide token" });
} else {
//console.log("decoded id : ", decoded)
// si les cookie sont validé, passé à la prochaine fonction grâce à "next()"
Groupe.find({ $and: [{ "membres._id": decoded.userId }, { "membres._id": req.body.friendID }] }, function(err, docs) {
Groupe.find({ $and: [{ "membres._id": decoded.userId }, { "membres._id": req.body.friendID }] }, function(err, docs) { // cherche groupe possédant l'id de l'utilisateur et l'id de l'ami
if (err) {
console.log("problem is here")
res.status(401).send({ error })
} else {
//console.log("le groupe : ", docs)
res.json(docs)
res.json(docs) // renvois le groupe trouvé
}
})
}
});
})

// récupere la liste des messages dans un groupe
app.use('/app/getgroupechatlist', authController.withAuth, (req, res, next) => {
// récupère le cookie "token"
const token =
req.body.token ||
req.query.token ||
req.headers['x-access-token'] ||
req.cookies.token;

// si il y a des cookies, vérifier s'ils sont encore valide avec la fonction du package JSONwebtoken
jwt.verify(token, secret, function(err, decoded) {
if (err) {
res.status(401).send({ error: "invalide token" });
} else {
//console.log("decoded id : ", decoded)
// si les cookie sont validé, passé à la prochaine fonction grâce à "next()"
Groupe.find({ $and: [{ "membres._id": decoded.userId }, { "membres._id": req.body.friendID }] }, function(err, docs) {
Groupe.find({ $and: [{ "membres._id": decoded.userId }, { "membres._id": req.body.friendID }] }, function(err, docs) { // cherche un groupe ou les membres sont composé de l'utilisateur et l'id de son ami
if (err) {
console.log("problem is here")
res.status(401).send({ error })
} else {
//console.log("le groupe : ", docs)
res.json(docs)
res.json(docs) // renvois la collection du groupe
}
})
}
});
})


// cherche le nom d'une personne grâce à son id
app.use('/app/getname', authController.withAuth, (req, res, next) => {
// récupère le cookie "token"
const token =
req.body.token ||
req.query.token ||
req.headers['x-access-token'] ||
req.cookies.token;

// si il y a des cookies, vérifier s'ils sont encore valide avec la fonction du package JSONwebtoken
jwt.verify(token, secret, function(err, decoded) {
if (err) {
res.status(401).send({ error: "invalide token" });
} else {
//console.log("decoded id : ", decoded)
// si les cookie sont validé, passé à la prochaine fonction grâce à "next()"
User.find({ _id: decoded.userId }, function(err, docs) {
User.find({ _id: decoded.userId }, function(err, docs) { // cherche un User avec un ID donné
if (err) {
console.log(err)
} else if (docs == null) {
res.status(400).send({ error: "introuvable" });
res.status(400).send({ error: "introuvable" }); // renvois une erreur comme quoi la personne recherché est introuvable
} else {
res.json(docs.pseudo)
res.json(docs.pseudo) // renvois le pseudo de la personne cherché
}
})
}
});
})

// ajout d'un amis
app.post('/app/newfriend', authController.withAuth, (req, res, next) => {
console.log("demande d'amis à " + req.body.new_friend)
console.log("demande d'ami à " + req.body.new_friend);
// récupère le cookie "token"
const token =
req.body.token ||
req.query.token ||
req.headers['x-access-token'] ||
req.cookies.token;

// si il y a des cookies, vérifier s'ils sont encore valide avec la fonction du package JSONwebtoken
User.findOne({ pseudo: req.body.new_friend }, function(err, docs) {
if (err) {
console.log(err)
} else if (docs == null) {
res.status(400).send({ error: "introuvable" });
} else {
//console.log("user findone", docs)
const friendID = docs._id
const friendID = docs._id // récupère l'ID de l'amis
jwt.verify(token, secret, function(err, decoded) {
if (err) {
res.status(401).send({ error: "invalide token" });
} else {
User.findOne({ _id: decoded.userId, "friends._id": friendID }, function(err, docs) {
User.findOne({ _id: decoded.userId, "friends._id": friendID }, function(err, docs) { // cherche l'utilisateur avec son ID et voir s'il a déja en amis la personne recherché
if (err) {
console.log(err)
} else if (docs == null) {
} else if (docs == null) { // Si pas d'utilisateur trouvé, alors la personne recherché n'est pas encore son amis
const userID = decoded.userId
User.updateOne({
User.updateOne({ // modifie la collection de l'utilisateur
_id: decoded.userId
}, {
$push: {
$push: { // ajout du nouvel amis avec son id et son prénom
friends: {
_id: friendID,
_pseudo: req.body.new_friend
Expand All @@ -277,16 +284,15 @@ app.post('/app/newfriend', authController.withAuth, (req, res, next) => {
if (err) {
console.log(err)
} else {
//console.log("docs1 update : ", docs)
User.findOne({ _id: userID }, function(err, docs) {
User.findOne({ _id: userID }, function(err, docs) { // cherche l'utilisateur dans la DB
if (err) {
console.log(err)
} else {
const userPseudo = docs.pseudo
User.updateOne({
const userPseudo = docs.pseudo // récupère le pseudo de l'utilisateur
User.updateOne({ // modifie la collection de l'ami
_id: friendID,
}, {
$push: {
$push: { // ajoute l'utilisateur en amis
friends: {
_id: userID,
_pseudo: userPseudo
Expand All @@ -301,25 +307,26 @@ app.post('/app/newfriend', authController.withAuth, (req, res, next) => {
})
}
})
res.status(200).send({ message: "demande d'amis envoyé" })
res.status(200).send({ message: "demande d'amis envoyé" }) // renvois que la demande d'avis a été envoyé
// création d'un nouveau groupe composé de l'utilisateur et de son amis ajouté
const groupe = new Groupe({
membres: [
{ _id: friendID },
{ _id: userID }
]
})
groupe.save()
groupe.save() // enregistre le nouveau groupe
.then(() => {
console.log("groupe créer")
res.status(200)
res.status(200) // renvois un status 200 (succes) pour montrer qu'il n'y a pas d'erreur
})
// renvois éventuelles érreurs
.catch(error => res.status(401));
.catch(error => res.status(401)); // renvois une erreur en cas d'échec d'enregistrement
}
})
} else {
res.status(402).send({ error: "utilisateur déja amis" })
console.log("c est deja ton amis zbi")
res.status(402).send({ error: "utilisateur déja ami" }) // si trouvé la collection de l'utilisateur avers la personne rechercher déja son ami
console.log("c est deja ton amis")
}
})
}
Expand Down
Loading

0 comments on commit c32e351

Please sign in to comment.