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 (
diff --git a/Site Web/client/src/components/Post/NouveauDisplayPosts.js b/Site Web/client/src/components/Post/NouveauDisplayPosts.js
deleted file mode 100644
index a95c213d..00000000
--- a/Site Web/client/src/components/Post/NouveauDisplayPosts.js
+++ /dev/null
@@ -1,45 +0,0 @@
-import React, { useEffect, useState } from 'react';
-import { useDispatch, useSelector } from 'react-redux';
-import { getPosts } from '../../actions/post.actions';
-import { isEmpty } from "../Utils";
-import Post from './PostNouvelleAffichage';
-
-const NouveauDisplayPosts = () => {
- const [loadPost, setLoadPost] = useState(true);
- const [count , setCount] = useState(5);
- const dispatch = useDispatch();
- const postsData = useSelector((state) => state.post.post);
-
- const loadMore = () => {
- if (window.innerHeight + document.documentElement.scrollTop + 1 > document.scrollingElement.scrollHeight){
- setLoadPost(true);
- }
- }
-
- useEffect(() => {
- if (loadPost) {
- dispatch(getPosts(count));
- setLoadPost(false);
- setCount(count + 5);
- }
- window.addEventListener('scroll', loadMore);
- return () => window.removeEventListener('scroll',loadMore);
- }, [loadPost,dispatch,count])
-
- if (!loadPost) {
- return Loading...
;
- }
-
- return (
-
-
- {!isEmpty(postsData[0]) &&
- postsData.map((post) => {
- return
- })}
-
-
- );
-};
-
-export default NouveauDisplayPosts;
\ No newline at end of file
diff --git a/Site Web/client/src/components/Post/PostNouvelleAffichage.js b/Site Web/client/src/components/Post/PostNouvelleAffichage.js
index 4e4d8d0a..813da68e 100644
--- a/Site Web/client/src/components/Post/PostNouvelleAffichage.js
+++ b/Site Web/client/src/components/Post/PostNouvelleAffichage.js
@@ -5,7 +5,7 @@ import FollowHandler from '../UserProfil/FollowHandler';
import { dateParser, isEmpty } from '../Utils';
import ButtonLike from './ButtonLike';
import Comment from './Comment';
-
+import Commentaire from '../../assets/img/commentaire.png';
const LinkPreview = ({ link }) => {
const [preview, setPreview] = useState({ image: '', title: '' });
@@ -70,7 +70,7 @@ const PostNouvelleAffichage = ( { post } ) => {
{post.likers.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