
해당 유저가 작성한 게시물, 댓글을 시간 순으로 나열
const username = router.query.username;
const {data, error} = useSWR<any>(username? `/users/${username}`:null)
유저가 작성한 post, comment도 함께 전달
클래스 형식을 json으로 변환해야 expose한 getter들을 사용할 수 있다.
const getUserData =async (req: Request, res: Response) => {
try {
//get user info
const user = await User.findOneOrFail({
where:{username: req.params.username},
select:["username","createdAt"],
})
//post that user posted
const posts = await Post.find({
where: {username: user.username},
relations:["comments","votes","sub"],
})
//comment that user made
const comments = await Comment.find({
where:{username:user.username},
relations:["post"]
});
//set user vote
if(res.locals.user){
const {user} = res.locals;
posts.forEach((p)=>p.setUserVote(user));
comments.forEach((c)=>c.setUserVote(user));
}
let userData : any[] = [];
//convert post & comment to JSON and add to userData
posts.forEach((p)=>userData.push({type: "Post",...p.toJSON()}))
comments.forEach((c)=>userData.push({type: "Comment",...c.toJSON()}))
//sort by date
userData.sort((a,b)=>{
if(b.createdAt>a.createdAt) return 1;
if(b.createdAt<a.createdAt) return -1;
return 0;
})
return res.json({user,userData});
} catch (error) {
console.error(error);
return res.status(500).json({error: "Something went wrong"})
}
}
router.get("/:username",userMiddleware,getUserData)