From c8a26fd297a4b684676eef1b11342800eaa38b00 Mon Sep 17 00:00:00 2001 From: kinou-p Date: Wed, 14 Jun 2023 17:54:06 +0200 Subject: [PATCH] fix friend and block requests and replace dummy in New conversation --- containers/api/src/app.controller.ts | 32 ++++++++++++++- containers/api/src/users/users.service.ts | 39 ++++++++++++++----- .../react/src/components/Messages/Chats.jsx | 4 +- .../react/src/components/Messages/Modal.jsx | 30 ++++++++++---- .../src/components/Social/FriendRequest.jsx | 31 ++++++++++++--- .../react/src/components/Social/Social.jsx | 4 +- 6 files changed, 112 insertions(+), 28 deletions(-) diff --git a/containers/api/src/app.controller.ts b/containers/api/src/app.controller.ts index b1692d3a..c5beab79 100644 --- a/containers/api/src/app.controller.ts +++ b/containers/api/src/app.controller.ts @@ -60,6 +60,13 @@ export class AppController { return await this.userService.findOne(data.username); } + @UseGuards(JwtAuthGuard) + @Get('/users') + async getUsers( @Body() data: any) { + console.log(`usernamewwww= ${data.username}`) + return await this.userService.findAll(); + } + @UseGuards(JwtAuthGuard) @Get('/friends') async getFriends(@Request() req) { @@ -68,11 +75,13 @@ export class AppController { } @UseGuards(JwtAuthGuard) - @Post('/friend') + @Post('/friend')//need to do it 2 time when user accept one for each async newFriend(@Request() req, @Body() data: any) { // return await this.userService.getFriends(req.user.username); console.log(`user= ${req.user.username}`) const user = await this.userService.findOne(req.user.username) + if (!user) + return (0); return await this.userService.addFriend(user, data.username); } @@ -86,7 +95,17 @@ export class AppController { } @UseGuards(JwtAuthGuard) - @Get('/invite') + @Post('/invite') + async newInvite(@Request() req, @Body() data: any) { + console.log(`user= ${req.user.username}`) + const user = await this.userService.findOne(data.username) + if (!user) + return (0); + return await this.userService.newInvite(user, req.user.username); + } + + @UseGuards(JwtAuthGuard) + @Get('/inviteRequest') async getInvite(@Request() req) { // return await this.userService.getFriends(req.user.username); console.log(`useawdawd\n\n\nr= ${req.user.username}`) @@ -94,6 +113,15 @@ export class AppController { return await this.userService.getInvite(req.user.username); } + @UseGuards(JwtAuthGuard) + @Post('/refuseInvite') + async refuseInvite(@Request() req, @Body() data: any) { + // return await this.userService.getFriends(req.user.username); + // console.log(`useawdawd\n\n\nr= ${req.user.username}`) + const user = await this.userService.findOne(req.user.username) + return await this.userService.refuseInvite(user, data.username); + } + @UseGuards(JwtAuthGuard) @Post('/status') async setStatus(@Request() req, @Body() data: any) { diff --git a/containers/api/src/users/users.service.ts b/containers/api/src/users/users.service.ts index b8761fcf..5b596874 100644 --- a/containers/api/src/users/users.service.ts +++ b/containers/api/src/users/users.service.ts @@ -49,6 +49,20 @@ export class UsersService { return (friends) } + async newInvite(user: User, username: string) { + if (!(await this.findOne(username))) + return (0); + // user.friendRequest = user.friendRequest || []; + // console.log("newInvite") + // console.log(user.friendRequest) + user.friendRequest = user.friendRequest || []; + if (user.friendRequest.find(item => item === username)) + return (1); + user.friendRequest.push(username); + this.save(user); + return (1); + } + async getInvite(username: string) { const user = await this.findOne(username) let friendsTab = user.friendRequest @@ -61,6 +75,11 @@ export class UsersService { return (friends) } + async refuseInvite(user: User, username: string) { + user.friendRequest = user.friendRequest.filter((item) => item !== username); + this.save(user); + } + async getHistory(username: string) { const user = await this.findOne(username); @@ -69,20 +88,22 @@ export class UsersService { console.log(user); console.log(user.children); // or perform any operations with the children return children; - // You can also access specific properties of each child - // children.forEach((child) => { - // console.log(child.id); - // console.log(child.opponent); - // // Access other child properties as needed - // }); } } async addFriend(user: User, username: string) { if (!(await this.findOne(username))) return (0); + // user.friendRequest = user.friendRequest || []; user.friends = user.friends || []; + if (user.friends.find(item => item === username)) + { + user.friendRequest = user.friendRequest.filter((item) => item !== username); + this.save(user); + return (1); + } user.friends.push(username); + user.friendRequest = user.friendRequest.filter((item) => item !== username); this.save(user); return (1); } @@ -91,6 +112,8 @@ export class UsersService { if (!(await this.findOne(username))) return (0); user.blocked = user.blocked || []; + if (user.blocked.find(item => item === username)) + return (1); user.blocked.push(username); this.save(user); return (1); @@ -103,10 +126,6 @@ export class UsersService { async getPic( username: string) { // const user = await this.findOne(username); let result = await this.userRepository.query("select encode(photo, 'base64') FROM public.\"User\" WHERE username = $1;", [username]); - // console.log(`result= ${result}`) - // console.log(`result= ${result.text}`) - // console.log(`encode= ${result.encode}`) - // console.log(`encode= ${result.string}`) if (result.length > 0) { const encodedPhoto = result[0].encode; console.log(`pic!!! =`) diff --git a/containers/react/src/components/Messages/Chats.jsx b/containers/react/src/components/Messages/Chats.jsx index b694b9ae..87b29cbf 100644 --- a/containers/react/src/components/Messages/Chats.jsx +++ b/containers/react/src/components/Messages/Chats.jsx @@ -248,7 +248,7 @@ function Chats(){ const handleAddFriend = async () => { try{ - const res = await api.post("/friend", {username: friend}) + const res = await api.post("/invite", {username: friend}) // if (res.data === 1) // console.log("res in friend= ", res) console.log("res in friend= ", res.data) @@ -368,7 +368,7 @@ function Chats(){ null}> {showAddFriendAlert && addFriend && ( - + )} {showAddFriendAlert && !addFriend && ( diff --git a/containers/react/src/components/Messages/Modal.jsx b/containers/react/src/components/Messages/Modal.jsx index 9aa96f79..0f32b24c 100644 --- a/containers/react/src/components/Messages/Modal.jsx +++ b/containers/react/src/components/Messages/Modal.jsx @@ -1,8 +1,8 @@ import { motion } from "framer-motion"; import Backdrop from "../Sidebar/Backdrop"; -import { Rank } from "../../DataBase/DataRank" +// import { Rank } from "../../DataBase/DataRank" import '../../styles/Messages.css' -import { useState } from "react"; +import { useState, useEffect } from "react"; import { GrAdd } from "react-icons/gr"; import { Link } from "react-router-dom"; import api from "../../script/axiosApi"; @@ -23,10 +23,25 @@ const dropIn = { }; -const Modal = ({handleClose, text}) => { +const Modal = ({handleClose}) => { // const [multi, setMulti] = useState(false); const [selectTags, setSelectTag] = useState([{ id: 1, selectedOption: ''}]); const [selectedOptionArray, setSelectedOptionArray] = useState([]); + const [users, setUsers] = useState([]); + + useEffect(()=> { + + const getConv = async ()=>{ + try { + const tmpUsers = await api.get("/users"); + console.log("users=", tmpUsers.data); + setUsers(tmpUsers.data); + } catch(err){ + console.log(err) + } + } + getConv(); + }, []); const handleOptionChange = (selectId, selectedOption) => { console.log("selected Option=", selectedOption) @@ -62,7 +77,8 @@ const Modal = ({handleClose, text}) => { setSelectedOptionArray(selectedOptions); } - let new_name; + // let new_name; + return ( { - {Rank.filter((item) => !selectTags.some((tag) => tag.selectedOption === item.name)).map((item, index) => ( - ))} diff --git a/containers/react/src/components/Social/FriendRequest.jsx b/containers/react/src/components/Social/FriendRequest.jsx index 29020c86..7db7f0bd 100644 --- a/containers/react/src/components/Social/FriendRequest.jsx +++ b/containers/react/src/components/Social/FriendRequest.jsx @@ -28,14 +28,18 @@ const SideP = styled.p` export default function Friend({currentUser}) { const [profilePicture, setProfilePicture] = useState(''); - const [request, setRequest] = useState(''); + const [request, setRequest] = useState(''); //user who invite + const [clickEvent, setClickEvent] = useState(false); + // const [user, setUser] = useState(null); useEffect(() => { const fetchProfilePicture = async () => { try { - // const user = await api.get("/profile"); + // const user = await api.get("/profile");\ + // const tmpUser = await api.get("/profile") const pic = await api.post("/getPicture", {username: currentUser.username}) const tmpRequest = await api.post("/user", {username: currentUser.username}) + // setUser(tmpUser.data); setRequest(tmpRequest.data); // console.log(`user naem profile pic222= ${currentUser.username}`) // console.log(` profile pic222= ${pic.data}`) @@ -46,7 +50,7 @@ export default function Friend({currentUser}) }; fetchProfilePicture(); - }, []) + }, [clickEvent]) const handleButtonClick = (user) => { let path = `http://localhost/profile/${user.username}`; @@ -56,16 +60,33 @@ export default function Friend({currentUser}) window.location.reload(false); }; - const Accept = (user) => { + const Accept = async (request) => { + try{ + await api.post("/friend", {username: request.username}) + setClickEvent(true); + } catch(err) { + console.log(err); + } console.log("accept") console.log(`request = ${request}`) } - const Refuse = (user) => { + const Refuse = async (request) => { + try{ + await api.post("/refuseInvite", {username: request.username}) + setClickEvent(true); + } catch(err) { + console.log(err); + } console.log("refuse") console.log(`request = ${request}`) } + // Vérifier si le contenu doit être caché + if (clickEvent) { + return null; // Rendre null pour ne pas afficher le contenu + } + return ( {profilePicture ? ( diff --git a/containers/react/src/components/Social/Social.jsx b/containers/react/src/components/Social/Social.jsx index ef09288f..8f6b71e5 100644 --- a/containers/react/src/components/Social/Social.jsx +++ b/containers/react/src/components/Social/Social.jsx @@ -42,9 +42,9 @@ function Social (){ const getFriend = async ()=>{ try{ - const tmpFriends = await api.get("/friends") + const tmpFriends = await api.get("/friends") const tmpUser = await api.get("/profile") - const tmpInv = await api.get("/invite") + const tmpInv = await api.get("/inviteRequest") const pic = await api.post("/getPicture", {username: tmpUser.data.username}) setInvite(tmpInv.data);