diff --git a/Site Web/client/src/components/Configurations/ConfigurationDuCompte.js b/Site Web/client/src/components/Configurations/ConfigurationDuCompte.js index a0f2c819..293e97b9 100644 --- a/Site Web/client/src/components/Configurations/ConfigurationDuCompte.js +++ b/Site Web/client/src/components/Configurations/ConfigurationDuCompte.js @@ -1,16 +1,31 @@ import { NavLink } from "react-router-dom"; -import React, { useState } from 'react'; +import React, { useState,useContext } from 'react'; import { useSelector } from 'react-redux'; -/*import PolitiqueDeConfidentialite from '../components/'; -*/ +import axios from "axios"; -const ConfigurationDuCompte =()=>{ - const [email, setEmail] = useState(''); - const [password, setPassword] = useState(''); +const ConfigurationDuCompte =()=>{ + const userData = useSelector((state) => state.user.user); + const [email, setEmail] = useState(userData.email); + const [password, setPassword] = useState(userData.password); const [controlPassword, setControlPassword] = useState(''); + + const handleUpdate=(e)=>{ + e.preventDefault(); + console.log(userData._id); + axios + .put(`${process.env.REACT_APP_API_URL}api/user/update/`+ userData._id , { email, password }) + .then(response => { + console.log(response); + }) + .catch(error => { + console.log(error); + }); + } + + return(
@@ -47,7 +62,7 @@ const ConfigurationDuCompte =()=>{ value={controlPassword}/>
- +
diff --git a/Site Web/client/src/components/Configurations/ConfigurationDuProfil.js b/Site Web/client/src/components/Configurations/ConfigurationDuProfil.js index 9f3257e5..f54fd261 100644 --- a/Site Web/client/src/components/Configurations/ConfigurationDuProfil.js +++ b/Site Web/client/src/components/Configurations/ConfigurationDuProfil.js @@ -1,26 +1,23 @@ -import React, { useState } from 'react'; +import React, { useState, useEffect,useContext} from 'react'; import { useSelector, useDispatch } from 'react-redux'; -import PP from "../../assets/img/unknown.png"; import PLUS from "../../assets/img/plus.png"; import { NavLink } from "react-router-dom"; import axios from "axios"; import { uploadPicture } from '../../actions/user.actions'; - - +import { useParams } from 'react-router-dom'; +import { UidContext } from '../AppContext'; const ConfigurationDuProfil = ()=>{ const userData = useSelector((state) => state.user.user); const [pseudo, setPseudo] = useState(userData.pseudo); - const[userPicture, setUserPicture] = useState(userData.picture); - const [tmpImage, setTmpImage] =useState(PLUS); + const[userPicture, setUserPicture] = useState(null); + const [tmpImage, setTmpImage] =useState(null); + const [tmpAffichageImage, setTmpAffichageImage]=useState(PLUS) const [displayAdd, setDisplayAdd] = useState(false); - const dispatch = useDispatch(); + const uid = useContext(UidContext); + const [message, setMessage] = useState(''); - const handleValidationPopup =(e)=>{ - setUserPicture(tmpImage); - setDisplayAdd(false); - } const handleLoadFile=(e)=>{ const file=e.target.files[0]; const reader = new FileReader(); @@ -29,25 +26,49 @@ const ConfigurationDuProfil = ()=>{ setTmpImage({ data: reader.result, contentType: file.type, + }); + console.log("eeee"); }; + console.log("rrrrrr"); + setTmpAffichageImage(`${tmpImage.data}`) + console.log("uuuuuuuuuuuu"); }; + useEffect(() => { + const fetchImage = async () => { + try { + const { data } = await axios.get(`/api/users/${uid}/image`); + setUserPicture(`data:${data.contentType};base64,${data.data}`); + } catch (err) { + console.error(err); + } + }; + fetchImage(); + }, [uid]); + + const handleTPM =()=> { console.log("test"); console.log(tmpImage); + console.log("test8888"); + console.log(userPicture); } const handleUpdate = async (e) => { - console.log(userPicture) - e.preventDefault(); - const data = new FormData(); - data.append("pseudo", pseudo); - data.append("userId", userData._id); - data.append("file",userPicture); - dispatch(uploadPicture(data,userData._id)); + e.preventDefault(); + try { + await axios.patch( `${process.env.REACT_APP_API_URL}api/user/${uid}/image`, tmpImage); + setMessage("Image de profil mise à jour avec succès!"); + } catch (err) { + setMessage("Erreur lors de la mise à jour de l'image de profil"); + } + + userPicture(tmpAffichageImage); + console.log(userPicture); + setDisplayAdd(false); //const pseudoError = document.querySelector(".pseudo.error"); /* const pictureError =document.querySelector(".picture.error"); await axios({ @@ -136,12 +157,12 @@ const ConfigurationDuProfil = ()=>{ Changer {/*onChange={handleLoadFile} onChange={(e)=> setTmpImage(e.target.files[0].name)} */} - +
- +
@@ -152,18 +173,6 @@ const ConfigurationDuProfil = ()=>{ ) - - - - - - - - - - - - } export default ConfigurationDuProfil; \ No newline at end of file diff --git a/Site Web/client/src/components/Post/DisplayPost/NouveauDisplayPosts.js b/Site Web/client/src/components/Post/DisplayPost/NouveauDisplayPosts.js index 5cceea77..d928176f 100644 --- a/Site Web/client/src/components/Post/DisplayPost/NouveauDisplayPosts.js +++ b/Site Web/client/src/components/Post/DisplayPost/NouveauDisplayPosts.js @@ -14,6 +14,10 @@ const NouveauDisplayPosts = () => { dispatch(getPosts()); },[dispatch]) + if (!postsData) { + return

Loading...

; + } + return (
- setComments(!comments)}/> + setComments(!comments)}/>
{post.comments.length}
diff --git a/Site Web/controllers/user.controller.js b/Site Web/controllers/user.controller.js index ee192b5c..663f4307 100644 --- a/Site Web/controllers/user.controller.js +++ b/Site Web/controllers/user.controller.js @@ -1,5 +1,6 @@ const UserModel = require("../models/user.model"); const ObjectID = require("mongoose").Types.ObjectId; +/*const Image = mongoose.model('Image', ImageSchema);*/ //-password pour ne pas donner le password module.exports.getAllUsers = async (req, res) => { @@ -16,11 +17,9 @@ module.exports.getNotif = async (req, res) => { module.exports.userInfo = (req, res) => { if (!ObjectID.isValid(req.params.id)) return res.status(400).send("ID unknown : " + req.params.id); - console.log('userinfo:',req.params.id) UserModel.findById(req.params.id, (err, docs) => { if (!err) { - console.log('doc:',docs) res.send(docs); } else @@ -48,20 +47,61 @@ module.exports.updateUser = async (req, res) => { } }; -// module.exports.compteUpdate = async (req,res)=>{ +module.exports.compteUpdatePseudo = async (req, res) => { + + try { + console.log("test1"); + console.log(req.body.email); + console.log(req.body.password); + console.log(req.params.id); + /*if (!UserModel.isValid(req.params.id)) { + return res.status(400).send("ID unknown : " + req.params.id); + } + */ + console.log("test"); + const updatedUser = await UserModel.findByIdAndUpdate( + { _id: req.params.id }, + { + $set: { + email: req.body.email, + password: req.body.password, + } + }, + { runValidators: true, new: true} + ); + res.status(200).json({ message: "User updated successfully", data: updatedUser }); + } catch (err) { + return res.status(500).json({ message: err }); + } + +} + +module.exports.getImage = async (req, res) => { + + try { + const image = await Image.findById(req.params.id); + res.status(200).json(image); + } catch (err) { + res.status(500).json({ message: 'Error getting image' }); + } +}; + +module.exports.saveImage = async (req, res) => { + try { + const { data, contentType } = req.body; + const image = new Image({ data, contentType }); + await image.save(); + res.status(201).json(image); + } catch (err) { + res.status(500).json({ message: 'Error saving image' }); + } + }; -// const{email, password}=req.body -// try{ -// await UserModel.findOneAndUpdate{ -// {_id: req.params.id} -// {set:{ -// email: req.body.email -// }} -// } -// } -// } + + + diff --git a/Site Web/models/user.model.js b/Site Web/models/user.model.js index 5cabeadd..bdc8029f 100644 --- a/Site Web/models/user.model.js +++ b/Site Web/models/user.model.js @@ -24,6 +24,18 @@ const NotifSchema = new mongoose.Schema({ } }); +const PictureSchema = new mongoose.Schema({ + data: { + type: String, + required: true, + }, + contentType: { + type: String, + required: true, + } +}); + + //trim pour supprimer les espaces const userSchema = new mongoose.Schema( { @@ -50,7 +62,7 @@ const userSchema = new mongoose.Schema( minlength: 6 }, picture: { - type: String, + type: PictureSchema, default: "./random-user.png" }, bio :{ @@ -96,5 +108,4 @@ userSchema.statics.login = async function({email, password}) { }; const UserModel = mongoose.model("user", userSchema); - -module.exports = UserModel; \ No newline at end of file +module.exports = UserModel; diff --git a/Site Web/routes/user.routes.js b/Site Web/routes/user.routes.js index 33e9407d..fabdb7e3 100644 --- a/Site Web/routes/user.routes.js +++ b/Site Web/routes/user.routes.js @@ -18,13 +18,16 @@ router.get('/logout', authController.logout); router.get('/', userController.getAllUsers); router.get('/:id', userController.userInfo); router.put("/:id", userController.updateUser); -router.put('/:id', userController.updateUser); router.delete('/:id', userController.deleteUser); router.patch('/follow/:id', userController.follow); router.patch('/unfollow/:id', userController.unfollow); router.patch('/notif/:id', userController.getNotif); - +router.patch('/:id/image', userController.saveImage); +router.get('/:id/image',userController.getImage); +router.put('/update/:id',userController.compteUpdatePseudo); //upload pb avec postman -router.post("/upload", upload.single('file'), uploadController.uploadProfil); +//router.post("/upload", upload.single('file'), uploadController.uploadProfil); + + module.exports = router; \ No newline at end of file