class Story {
#likes=[];
constructor (title, creator){
this.title=title;
this.creator=creator;
this.comments=[];
this.currentCommentId=0;
this.likesArr=[];
}
like(username){
if (this.#likes.includes(username)){
console.log('You cant like the same story twice!');
throw new Error (`You can't like the same story twice!`)
}
if (this.creator==username){
throw new Error (`You can't like your own story!"`)
}
let userExists=false;
for (let i=0; i1){
return `${this.#likes[0]} and ${this.#likes.length-1} others like this story!`
}
}
dislike(username){
//decrease dislikes once I figure em out
if (this.#likes.includes(username)==false){
throw new Error (`You can't dislike this story!`);
} else {
this.#likes.splice(this.#likes.indexOf(username));
return `${username} disliked ${this.title}`
}
}
comment(username, content, id){
let existingComment=this.comments.find(c=>c.id==id);
if (existingComment==undefined){
this.currentCommentId++;
let newComment=
{id:this.currentCommentId,
username:username, content:content,replies:[]
}
this.comments.push(newComment);
return `${username} commented on ${this.title}`
} else {
let replyId=`${existingComment.id}.${existingComment.replies.length+1}`
let newReply={id:replyId,username,content};
existingComment.replies.push(newReply);
return `You replied successfully`
}
}
toString(sortingType){
let res=`Title: ${this.title}\n`
res+=`Creator: ${this.creator}\n`;
res+=`Likes: ${this.#likes.length}\n`
res+=`Comments:\n`
let commentsStr="";
let commentsArr=[]
if (sortingType=="asc"){
this.comments.forEach(c=>{
commentsStr+=(`-- ${c.id}. ${c.username}: ${c.content}\n`);
if (c.replies.length>0){
c.replies.forEach(r=>{
commentsStr+=`--- ${r.id}. ${r.username}: ${r.content}\n`
})
}
})
res+=commentsStr.trim();
}
if (sortingType=='desc'){
let descendComments=[];
for (let i=this.comments.length-1; i>=0; i--){
let currCom=this.comments[i];
console.log(currCom)
currCom.replies.reverse();
descendComments.push(currCom)
}
let commStr=``
descendComments.forEach(c=>{
commStr+=`-- ${c.id}. ${c.username}: ${c.content}\n`;
if (c.replies.length>0){
c.replies.forEach(r => {
commStr+=`--- ${r.id}. ${r.username}: ${r.content}\n`
});
}
})
res+=commStr.trim();
}
if (sortingType=="username"){
let usernameSorted=this.comments.sort((a,b)=>a.username.localeCompare(b.username));
usernameSorted.forEach(u=>{
u.replies.sort((a,b)=>a.username.localeCompare(b.username))
})
let unStr="";
usernameSorted.forEach(u=>{
unStr+=`-- ${u.id}. ${u.username}: ${u.content}\n`;
if (u.replies.length>0){
u.replies.forEach(r => {
unStr+=`--- ${r.id}. ${r.username}: ${r.content}\n`
});
}
})
res+=unStr.trim();
}
return res;
}
}