Merge branch 'master' of https://codefirst.iut.uca.fr/git/noan.randon/Favor
continuous-integration/drone/push Build encountered an error Details

master
Noan07 2 years ago
commit b92ae332da

File diff suppressed because it is too large Load Diff

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

@ -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(
<div>
@ -47,7 +62,7 @@ const ConfigurationDuCompte =()=>{
value={controlPassword}/>
<div className='password error'></div>
</div>
<button className='buttonValidationChangements'>Valider</button>
<button className='buttonValidationChangements' onClick={handleUpdate}>Valider</button>
</div>
</form>
<div />

@ -1,26 +1,22 @@
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(userData.picture.data);
const [tmpImage, setTmpImage] =useState(null);
const [tmpAffichageImage, setTmpAffichageImage]=useState(PLUS);
const [displayAdd, setDisplayAdd] = useState(false);
const dispatch = useDispatch();
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 +25,35 @@ const ConfigurationDuProfil = ()=>{
setTmpImage({
data: reader.result,
contentType: file.type,
});
console.log("eeee");
};
console.log("rrrrrr");
setTmpAffichageImage(`${tmpImage.data}`);
console.log("uuuuuuuuuuuu");
console.log(tmpImage);
};
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/${userData.id}/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 +142,12 @@ const ConfigurationDuProfil = ()=>{
<span>Changer</span>
</label>
<input type="file" id="file" name='file' accept=".jpg, .jpeg, .png" onChange={handleLoadFile}/> {/*onChange={handleLoadFile} onChange={(e)=> setTmpImage(e.target.files[0].name)} */}
<img src={tmpImage} className="imageDeProfil"id="output" />
<img src={tmpAffichageImage} className="imageDeProfil"id="output" />
</div>
</div >
<div className='buttonPopup'>
<button onClick={()=>setDisplayAdd(false)}>Retour</button>
<button onClick={handleTPM()} >Valider</button>
<button onClick={handleUpdate} >Valider</button>
</div>
</div>
@ -152,18 +158,6 @@ const ConfigurationDuProfil = ()=>{
)
}
export default ConfigurationDuProfil;

@ -1,5 +1,5 @@
import React, { useState } from 'react';
import { NavLink, redirect} from "react-router-dom";
import { NavLink} from "react-router-dom";
import axios from "axios";
import Connexion from "./Connexion";

@ -8,7 +8,6 @@ import FollowHandler from "./UserProfil/FollowHandler";
const MiniProfil = ({uid} ) => {
const [userData, setUserData] = useState(null);
useEffect(() => {
async function fetchData() {
const response = await fetch(`${process.env.REACT_APP_API_URL}api/user/${uid}`);
@ -22,12 +21,10 @@ const MiniProfil = ({uid} ) => {
return <p>Loading...</p>;
}
return (
<div className="ListReco">
<div className="UtiReco">
<img className="image" src={userData.picture}/>
<img className="image" src={userData.picture.data}/>
<a href={`/Profil/${uid}`}>{userData.pseudo}</a>
</div>
</div>

@ -14,6 +14,10 @@ const NouveauDisplayPosts = () => {
dispatch(getPosts());
},[dispatch])
if (!postsData) {
return <p>Loading...</p>;
}
return (
<div>
<ul>

@ -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 <p>Loading...</p>;
}
return (
<div>
<ul>
{!isEmpty(postsData[0]) &&
postsData.map((post) => {
return <Post post={post} key={post._id}/>
})}
</ul>
</div>
);
};
export default NouveauDisplayPosts;

@ -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: '' });
@ -49,6 +49,10 @@ const PostNouvelleAffichage = ( { post } ) => {
!isEmpty(usersData[0]) && setIsLoading(false)
})
if(!isLoading){
return <p></p>;
}
return (
<li className='PostesProfilConteneur' key={post._id}>
{isLoading ? (
@ -70,7 +74,7 @@ const PostNouvelleAffichage = ( { post } ) => {
<div>{post.likers.length}</div>
</div>
<div id="commentaire">
<img src="commentaire.png" onClick={() => setComments(!comments)}/>
<img src={Commentaire} onClick={() => setComments(!comments)}/>
<div >{post.comments.length}</div>
</div>
</div>

@ -1,6 +1,7 @@
const UserModel = require("../models/user.model");
const ObjectID = require("mongoose").Types.ObjectId;
//-password pour ne pas donner le password
module.exports.getAllUsers = async (req, res) => {
const users = await UserModel.find().select("-password");
@ -46,20 +47,63 @@ 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 user = await UserModel.findById(req.params.id);
if (!user) {
return res.status(404).json({ message: 'User not found' });
}
res.status(200).json(user.picture);
} 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 UserModel.picture({ 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
// }}
// }
// }
// }

@ -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,8 +62,8 @@ const userSchema = new mongoose.Schema(
minlength: 6
},
picture: {
type: String,
default: "./random-user.png"
type: PictureSchema,
default: { data: "data:image/png;base64,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", contentType: "image/png" }
},
bio :{
type: String,
@ -77,6 +89,7 @@ const userSchema = new mongoose.Schema(
// play function before save into display: 'block',
userSchema.pre("save", async function(next) {
const salt = await bcrypt.genSalt();
this.password = await bcrypt.hash(this.password, salt);
next();
@ -95,5 +108,4 @@ userSchema.statics.login = async function({email, password}) {
};
const UserModel = mongoose.model("user", userSchema);
module.exports = UserModel;
module.exports = UserModel;

File diff suppressed because it is too large Load Diff

@ -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;
Loading…
Cancel
Save