Skip to content

Commit ddfbd07

Browse files
authored
Merge pull request #1275 from Ayushmaanagarwal1211/Bugs
Created Backend for adding related users to the question and created a model for that
2 parents 82c4307 + 37f642c commit ddfbd07

File tree

6 files changed

+109
-40
lines changed

6 files changed

+109
-40
lines changed

website3.0/components/forumpage/ForumPost.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ function ForumPost({theme,id,finalUser,setMsg,setIsPopup}) {
130130
id:id,
131131
authorImage:finalUser.image1,
132132
authorName:finalUser.name,
133-
userId:finalUser._id
133+
userId:finalUser._id,
134134
})
135135
})
136136
let date=Date.now()

website3.0/pages/ForumPage.js

Lines changed: 75 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -92,12 +92,19 @@ function ForumPage({ theme,finalUser,setIsPopup,setMsg }) {
9292
const router = useRouter();
9393
const [hoveredUser, setHoveredUser] = useState(null);
9494
const [cursorPosition, setCursorPosition] = useState({ x: 0, y: 0 });
95+
let [users,setUsers]=useState([])
9596
let [top,setTop]=useState([])
9697
const [isClosed,setIsClosed]=useState(false)
9798
let [sortedArray,setSortedArray]=useState([])
98-
const handleMouseEnter = (event, userImg) => {
99+
const handleMouseEnter =async (event, userImg) => {
99100
setCursorPosition({ x: event.clientX, y: event.clientY });
100-
setHoveredUser(userImg);
101+
let obj={...userImg}
102+
console.log(userImg)
103+
let u=await fetch("/api/getuser",{method:"POST",body:JSON.stringify({id:userImg.authorId})})
104+
u=await u.json()
105+
u=u.msg
106+
obj={...obj,count:Object.keys(u.followers).length,questions:u.questions,answers:u.answers}
107+
setHoveredUser(obj);
101108
};
102109

103110
const handleMouseLeave = () => {
@@ -130,29 +137,54 @@ function ForumPage({ theme,finalUser,setIsPopup,setMsg }) {
130137
useEffect(()=>{
131138
fetchData()
132139
},[])
133-
async function fetchData(){
134-
let data=await fetch("/api/createquestion",{method:"GET"})
135-
data=await data.json()
136-
data=data.data
137-
let arr=data.filter((data)=>data.createdAt!==undefined)
138-
arr=arr.sort((a,b)=>a.createdAt-b.createdAt)
139-
// data=data.sort((a,b)=>b.dateTime-a.dateTime)
140-
setSortedArray([...arr])
141-
let arr1=arr.sort((a,b)=>b.views-a.views)
142-
setTop([...arr1])
143-
console.log(data,'dsjidddddddddddd')
144-
data.reverse()
145-
setIssues([...data])
146-
setOriginalIssues([...data])
147-
}
140+
useEffect(()=>{
141+
console.log(users,'users')
142+
},[users])
143+
async function fetchData() {
144+
try {
145+
// Fetch initial data
146+
let response = await fetch("/api/createquestion", { method: "GET" });
147+
let data = await response.json();
148+
data = data.data;
149+
150+
// Filter out items without 'createdAt'
151+
let arr = data.filter(item => item.createdAt !== undefined);
152+
153+
// Create an empty object to store user messages
154+
let obj1 = [];
155+
156+
// Collect all user IDs to fetch in parallel
157+
let userPromises = data.flatMap(item =>
158+
item.relatedUser.map(async (userRef) => {
159+
console.log(userRef)
160+
setUsers(prev=>[...prev,userRef.authorId])
161+
162+
})
163+
);
164+
// Sort and update state
165+
arr = arr.sort((a, b) => a.createdAt - b.createdAt);
166+
setSortedArray([...arr]);
167+
168+
let arr1 = [...arr].sort((a, b) => b.views - a.views);
169+
setTop([...arr1]);
170+
171+
// Reverse the data and update state
172+
data.reverse();
173+
setIssues([...data]);
174+
setOriginalIssues([...data]);
175+
176+
} catch (error) {
177+
console.error("Error fetching data:", error);
178+
}
179+
}
180+
148181
let search=useRef()
149182
function handleSearch(){
150183
let arr=originalIssues
151184
let value=search.current.value
152185
if(value.length==0){
153186
setIssues([...originalIssues])
154187
}
155-
console.log(value)
156188
value=value.toLowerCase()
157189
arr=arr.filter((data)=>data.title.toLowerCase().includes(value))
158190
setIssues([...arr])
@@ -509,16 +541,18 @@ const handlePageChange = (page) => {
509541

510542
<div className="flex max-md:pl-[50px] max-sm:gap-[1rem] max-sm:items-center items-center gap-6 max-sm:mt-2 text-gray-500 flex-wrap">
511543
<div className="flex items-center gap-1 hover:gap-2 transition-all duration-500 mt-2 max-sm:mt-0">
512-
{issue?.discussionUsers?.map((userImg, idx) => (
513-
<img
514-
key={idx}
515-
src={userImg}
516-
alt="Discussion User"
517-
className="rounded-full w-5 h-5"
518-
onMouseEnter={(event) => handleMouseEnter(event, userImg)}
519-
onMouseLeave={handleMouseLeave}
520-
/>
521-
))}
544+
{issue?.relatedUser.map((user, idx) => {
545+
return <img
546+
key={idx}
547+
onClick={()=>router.push(`/profile?id=${user.authorId}`)}
548+
src={user.authorImage}
549+
id="img"
550+
alt="Discussion User"
551+
className="rounded-full w-5 h-5"
552+
onMouseEnter={(event) => handleMouseEnter(event, user)}
553+
onMouseLeave={handleMouseLeave}
554+
/>
555+
})}
522556
</div>
523557
<div onClick={(e)=>handleLike(e,issue)} className=" flex items-center gap-2 max-sm:text-[11px]">
524558
<FontAwesomeIcon color={`${finalUser&&issue?.likes?.includes(finalUser._id)?"blue":""}`} icon={faHeart} />
@@ -567,16 +601,16 @@ className="flex items-center gap-4">
567601

568602
<div className="flex max-md:pl-[50px] max-sm:gap-[1rem] max-sm:items-center items-center gap-6 max-sm:mt-2 text-gray-500 flex-wrap">
569603
<div className="flex items-center gap-1 hover:gap-2 transition-all duration-500 mt-2 max-sm:mt-0">
570-
{issue?.discussionUsers?.map((userImg, idx) => (
571-
<img
604+
{issue?.relatedUser.map((user, idx) => {
605+
return <img
572606
key={idx}
573-
src={userImg}
607+
src={user.authorImage}
574608
alt="Discussion User"
575609
className="rounded-full w-5 h-5"
576-
onMouseEnter={(event) => handleMouseEnter(event, userImg)}
610+
onMouseEnter={(event) => handleMouseEnter(event, user)}
577611
onMouseLeave={handleMouseLeave}
578612
/>
579-
))}
613+
})}
580614
</div>
581615
<div onClick={(e)=>handleLike(e,issue)} className=" flex items-center gap-2 max-sm:text-[11px]">
582616
<FontAwesomeIcon color={`${finalUser&&issue?.likes?.includes(finalUser._id)?"blue":""}`} icon={faHeart} />
@@ -595,23 +629,26 @@ className="flex items-center gap-4">
595629
</div>
596630
))}
597631
{hoveredUser && (
632+
<label htmlFor="id">
633+
598634
<div
599635
className={`forummodal ease-out fixed border p-4 w-[400px] h-[200px] rounded-lg ${theme?"bg-white border-gray-300": "bg-[#2b2b2b] border-slate-50 border-[1px] text-gray-400"} shadow-lg`}
600636
style={{ top: cursorPosition.y + 10, left: cursorPosition.x - 400 }}
601637
>
602638
<div className="w-[100%] flex gap-4 items-center">
603-
<img src={hoveredUser} alt="Hovered User" className="w-20 h-20 rounded-full" />
639+
<img src={hoveredUser.authorImage} alt="Hovered User" className="w-20 h-20 rounded-full" />
604640
<div className="flex w-[100%] items-start gap-2 h-[100%] justify-center flex-col ">
605-
<p>User Name</p>
641+
<p>{hoveredUser.authorName}</p>
606642
<button className={`bg-transparent pt-1 pb-1 pl-3 pr-3 rounded-md border-[1px] border-gray-500 `}>Follow</button>
607643
</div>
608644
</div>
609645
<div className="p-[20px] mt-4 flex gap-6 w-[100%] justify-center">
610-
<p className="flex flex-col h-[100%] items-center"><h2>Answers</h2><p>40</p></p>
611-
<p className="flex h-[100%] flex-col items-center"><h2>Questions</h2><p>40</p></p>
612-
<p className="flex h-[100%] items-center flex-col"><h2>Followers</h2><p>40</p></p>
646+
<p className="flex flex-col h-[100%] items-center"><h2>Answers</h2><p>{hoveredUser&&hoveredUser.answers}</p></p>
647+
<p className="flex h-[100%] flex-col items-center"><h2>Questions</h2><p>{hoveredUser&&hoveredUser.questions}</p></p>
648+
<p className="flex h-[100%] items-center flex-col"><h2>Followers</h2><p>{hoveredUser&&hoveredUser.count}</p></p>
613649
</div>
614650
</div>
651+
</label>
615652
)}
616653
</div>
617654
</div>

website3.0/src/app/api/addsolution/route.js

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import Questions from "@utils/models/question"; // Importing Mongoose model for blog collection
22
import mongoose from "mongoose"; // Importing Mongoose for MongoDB interactions
33
import { NextResponse } from "next/server"; // Importing Next.js server response utility
4+
import user from "@utils/models/user"; // Importing Mongoose model for newsletter subscription
45

56

67
export async function POST(req) {
@@ -13,8 +14,22 @@ export async function POST(req) {
1314
// Connect to MongoDB using Mongoose
1415
await mongoose.connect(MONGO_URI);
1516
let date= Date.now()
17+
let users=await user.findById(userId)
18+
users.answers+=1
19+
await user.findByIdAndUpdate(userId,{
20+
$set:users
21+
})
1622
// Create a new instance of Blogs model with the received payload
1723
let blog = await Questions.findById(id)
24+
let isHave=false
25+
blog.relatedUser.map((data)=>{
26+
if(data.authorName==authorName){
27+
isHave=true
28+
}
29+
})
30+
if(!isHave){
31+
blog.relatedUser.push({authorImage:authorImage,authorName:authorName,authorId:userId})
32+
}
1833
blog.solutions.push({ans:ans,authorImage:authorImage,authorName:authorName,isAccepted:false,authorId:userId,date:date})
1934
// Save the new blog record to MongoDB
2035
const result = await Questions.findByIdAndUpdate(id,{

website3.0/src/app/api/createquestion/route.js

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import Questions from "@utils/models/question"; // Importing Mongoose model for blog collection
22
import mongoose from "mongoose"; // Importing Mongoose for MongoDB interactions
33
import { NextResponse } from "next/server"; // Importing Next.js server response utility
4+
import user from "@utils/models/user"; // Importing Mongoose model for newsletter subscription
45

56
export async function GET(req) {
67
try {
@@ -32,7 +33,11 @@ export async function POST(req) {
3233

3334
// Create a new instance of Blogs model with the received payload
3435
let blog = new Questions(payload);
35-
36+
let users=await user.findById(payload.authorId)
37+
users.questions+=1
38+
await user.findByIdAndUpdate(payload.authorId,{
39+
$set:users
40+
})
3641
// Save the new blog record to MongoDB
3742
const result = await blog.save();
3843
console.log(result)

website3.0/utils/models/question.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,10 @@ type:String
8181
solutions:{
8282
type:Array,
8383
default:[]
84+
},
85+
relatedUser:{
86+
type:Array,
87+
default:[]
8488
}
8589
});
8690

website3.0/utils/models/user.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,14 @@ const newsletterModel = new mongoose.Schema({
4747

4848
type:Array,
4949
default:[]
50+
},
51+
answers:{
52+
type:Number,
53+
default:0
54+
},
55+
questions:{
56+
type:Number,
57+
default:0
5058
}
5159
}, {
5260
timestamps: true // Add timestamps (createdAt, updatedAt)

0 commit comments

Comments
 (0)