Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class Forum {
- users;
- questions;
- #id;
- logged;
- set users(value) {
- this._users = value;
- }
- set questions(value) {
- this._questions = value;
- }
- set logged(value) {
- this._logged = value;
- }
- get users() {
- return this._users;
- }
- get questions() {
- return this._questions;
- }
- constructor() {
- this._users = [];
- this._questions = [];
- this.#id = 1;
- this._logged = [];
- }
- register(username, password, repeatPassword, email) {
- if (username === "" || password === "" || repeatPassword === "" || email === "") {
- throw new Error("Input can not be empty");
- }
- if (password !== repeatPassword) {
- throw new Error("Passwords do not match");
- }
- let isRegistered = this._users.filter(el => el.username === username)[0];
- let isRegisteredEmail = this._users.filter(el => el.email === email)[0];
- if (isRegistered !== undefined || isRegisteredEmail !== undefined) {
- throw new Error("This user already exists!");
- }
- let obj = {
- username: username,
- email: email,
- password: password
- };
- this._users.push(obj);
- return `${username} with ${email} was registered successfully!`;
- }
- login(username, password) {
- let user = this._users.filter(el => el.username === username)[0];
- if (user === undefined) {
- throw new Error("There is no such user");
- }
- if (user.username === username && user.password === password) {
- this._logged.push(user);
- return "Hello! You have logged in successfully";
- }
- }
- logout(username, password) {
- let user = this._users.filter(el => el.username === username)[0];
- if (user === undefined) {
- throw new Error("There is no such user");
- }
- if (user.username === username && user.password === password) {
- let indexOf = this._logged.indexOf(user);
- this._logged.splice(indexOf, 1);
- return "You have logged out successfully";
- }
- }
- postQuestion(username, question) {
- let user = this._users.filter(el => el.username === username)[0];
- let isLogged = this._logged.filter(el => el.username === username)[0];
- if (user === undefined || isLogged === undefined) {
- throw new Error("You should be logged in to post questions");
- }
- if (question === "") {
- throw new Error("Invalid question");
- }
- let obj = {
- id: this.#id,
- question: question,
- username: username,
- answers: []
- };
- this._questions.push(obj);
- this.#id++;
- return "Your question has been posted successfully";
- }
- postAnswer(username, id, answer) {
- let user = this._users.filter(el => el.username === username)[0];
- let isLogged = this._logged.filter(el => el.username === username)[0];
- if (user === undefined || isLogged === undefined) {
- throw new Error("You should be logged in to post answers");
- }
- if (answer === "") {
- throw new Error("Invalid answer");
- }
- let question = this._questions.filter(el => el.id === id)[0];
- if (question === undefined) {
- throw new Error("There is no such question");
- }
- let obj = {
- username: username,
- answer: answer
- };
- question.answers.push(obj);
- return "Your answer has been posted successfully";
- }
- showQuestions() {
- let output = "";
- this._questions.forEach(el => {
- output += `Question ${el.id} by ${el.username}: ${el.question}\n`;
- let answers = "";
- el.answers.forEach(answer => {
- answers += `---${answer.username}: ${answer.answer}\n`;
- });
- output += answers;
- });
- return output.trim();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement