bobo_bobkata

Untitled

Nov 4th, 2019
128
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.12 KB | None | 0 0
  1. class Forum {
  2. users;
  3. questions;
  4. #id;
  5. logged;
  6.  
  7.  
  8. set users(value) {
  9. this._users = value;
  10. }
  11.  
  12. set questions(value) {
  13. this._questions = value;
  14. }
  15.  
  16. set logged(value) {
  17. this._logged = value;
  18. }
  19.  
  20. get users() {
  21. return this._users;
  22. }
  23.  
  24. get questions() {
  25. return this._questions;
  26. }
  27.  
  28. constructor() {
  29. this._users = [];
  30. this._questions = [];
  31. this.#id = 1;
  32. this._logged = [];
  33. }
  34.  
  35. register(username, password, repeatPassword, email) {
  36. if (username === "" || password === "" || repeatPassword === "" || email === "") {
  37. throw new Error("Input can not be empty");
  38. }
  39. if (password !== repeatPassword) {
  40. throw new Error("Passwords do not match");
  41. }
  42. let isRegistered = this._users.filter(el => el.username === username)[0];
  43. let isRegisteredEmail = this._users.filter(el => el.email === email)[0];
  44. if (isRegistered !== undefined || isRegisteredEmail !== undefined) {
  45. throw new Error("This user already exists!");
  46. }
  47. let obj = {
  48. username: username,
  49. email: email,
  50. password: password
  51. };
  52. this._users.push(obj);
  53. return `${username} with ${email} was registered successfully!`;
  54. }
  55.  
  56. login(username, password) {
  57. let user = this._users.filter(el => el.username === username)[0];
  58. if (user === undefined) {
  59. throw new Error("There is no such user");
  60. }
  61. if (user.username === username && user.password === password) {
  62. this._logged.push(user);
  63. return "Hello! You have logged in successfully";
  64. }
  65. }
  66.  
  67. logout(username, password) {
  68. let user = this._users.filter(el => el.username === username)[0];
  69. if (user === undefined) {
  70. throw new Error("There is no such user");
  71. }
  72. if (user.username === username && user.password === password) {
  73. let indexOf = this._logged.indexOf(user);
  74. this._logged.splice(indexOf, 1);
  75. return "You have logged out successfully";
  76. }
  77. }
  78.  
  79. postQuestion(username, question) {
  80. let user = this._users.filter(el => el.username === username)[0];
  81. let isLogged = this._logged.filter(el => el.username === username)[0];
  82. if (user === undefined || isLogged === undefined) {
  83. throw new Error("You should be logged in to post questions");
  84. }
  85. if (question === "") {
  86. throw new Error("Invalid question");
  87. }
  88. let obj = {
  89. id: this.#id,
  90. question: question,
  91. username: username,
  92. answers: []
  93. };
  94. this._questions.push(obj);
  95. this.#id++;
  96. return "Your question has been posted successfully";
  97. }
  98.  
  99. postAnswer(username, id, answer) {
  100. let user = this._users.filter(el => el.username === username)[0];
  101. let isLogged = this._logged.filter(el => el.username === username)[0];
  102. if (user === undefined || isLogged === undefined) {
  103. throw new Error("You should be logged in to post answers");
  104. }
  105. if (answer === "") {
  106. throw new Error("Invalid answer");
  107. }
  108. let question = this._questions.filter(el => el.id === id)[0];
  109. if (question === undefined) {
  110. throw new Error("There is no such question");
  111. }
  112. let obj = {
  113. username: username,
  114. answer: answer
  115. };
  116. question.answers.push(obj);
  117. return "Your answer has been posted successfully";
  118. }
  119.  
  120. showQuestions() {
  121. let output = "";
  122. this._questions.forEach(el => {
  123. output += `Question ${el.id} by ${el.username}: ${el.question}\n`;
  124. let answers = "";
  125. el.answers.forEach(answer => {
  126. answers += `---${answer.username}: ${answer.answer}\n`;
  127. });
  128. output += answers;
  129. });
  130. return output.trim();
  131. }
  132.  
  133. }
Add Comment
Please, Sign In to add comment