From 027380fdf67bd75d6be9096b3bf6e43b94c04abf Mon Sep 17 00:00:00 2001 From: catsAndIvy Date: Wed, 5 Jul 2023 13:13:45 +0100 Subject: [PATCH] add solutions to day01 --- _solutions/day-01/exercise3/level1.js | 21 ++++ _solutions/day-01/exercise3/level2.js | 89 +++++++++++++++ _solutions/day-01/exercise3/level3.js | 106 ++++++++++++++++++ _solutions/day-01/exercise3/users-products.js | 74 ++++++++++++ 4 files changed, 290 insertions(+) create mode 100644 _solutions/day-01/exercise3/level1.js create mode 100644 _solutions/day-01/exercise3/level2.js create mode 100644 _solutions/day-01/exercise3/level3.js create mode 100644 _solutions/day-01/exercise3/users-products.js diff --git a/_solutions/day-01/exercise3/level1.js b/_solutions/day-01/exercise3/level1.js new file mode 100644 index 0000000..c0e1301 --- /dev/null +++ b/_solutions/day-01/exercise3/level1.js @@ -0,0 +1,21 @@ +// Exercise 3 - Level 1 + +const dog = {} + +dog.name = 'Montgomery' +dog.legs = 4 +dog.colour = 'brown' +dog.age = 2 + +dog.bark = function () { + console.log('woof woof') +} + +dog.breed = 'Pug' +dog.getDog = function () { + console.log(dog) +} + +console.log(dog.name, dog.legs, dog.colour, dog.age, dog.breed) + +dog.getDog() \ No newline at end of file diff --git a/_solutions/day-01/exercise3/level2.js b/_solutions/day-01/exercise3/level2.js new file mode 100644 index 0000000..ae05c1d --- /dev/null +++ b/_solutions/day-01/exercise3/level2.js @@ -0,0 +1,89 @@ +// Exercise 3 - Level 2 + +const users = { + Alex: { + email: 'alex@alex.com', + skills: ['HTML', 'CSS', 'JavaScript'], + age: 20, + isLoggedIn: false, + points: 30 + }, + Asab: { + email: 'asab@asab.com', + skills: ['HTML', 'CSS', 'JavaScript', 'Redux', 'MongoDB', 'Express', 'React', 'Node'], + age: 25, + isLoggedIn: false, + points: 50 + }, + Brook: { + email: 'daniel@daniel.com', + skills: ['HTML', 'CSS', 'JavaScript', 'React', 'Redux'], + age: 30, + isLoggedIn: true, + points: 50 + }, + Daniel: { + email: 'daniel@alex.com', + skills: ['HTML', 'CSS', 'JavaScript', 'Python'], + age: 20, + isLoggedIn: false, + points: 40 + }, + John: { + email: 'john@john.com', + skills: ['HTML', 'CSS', 'JavaScript', 'React', 'Redux', 'Node.js'], + age: 20, + isLoggedIn: true, + points: 50 + }, + Thomas: { + email: 'thomas@thomas.com', + skills: ['HTML', 'CSS', 'JavaScript', 'React'], + age: 20, + isLoggedIn: false, + points: 40 + }, + Paul: { + email: 'paul@paul.com', + skills: ['HTML', 'CSS', 'JavaScript', 'MongoDB', 'Express', 'React', 'Node'], + age: 20, + isLoggedIn: false, + points: 40 + } + } + +getMostSkilled = function () { + let maxSkillsPerson = null; + let maxSkillsCount = 0; + + Object.keys(users).forEach((person) => { + const skillsCount = users[person].skills.length; + if (skillsCount > maxSkillsCount) { + maxSkillsPerson = person; + maxSkillsCount = skillsCount; + } + }); + +console.log(maxSkillsPerson); +} + +getMostSkilled(); + + +const copyUsers = Object.assign({}, users) + +const newUser = { + email: 'newuser@example.com', + skills: ['HTML', 'CSS', 'JavaScript'], + age: 22, + isLoggedIn: true, + points: 35 + }; + +copyUsers['NewUser'] = newUser; + + +const keys = Object.keys(copyUsers) +const values = Object.values(copyUsers) +const entries = Object.entries(copyUsers) + diff --git a/_solutions/day-01/exercise3/level3.js b/_solutions/day-01/exercise3/level3.js new file mode 100644 index 0000000..3ef4e50 --- /dev/null +++ b/_solutions/day-01/exercise3/level3.js @@ -0,0 +1,106 @@ +// Exercise 3 - Level 3 + +const {users, products} = require('./users-products.js'); + +const currentDate = new Date() + +const personAccount = { + firstName: '', + lastName: '', + incomes: '', + expenses: '', + totalIncome: function () { + + }, + totalExpense: function () { + + }, + accountInfo: function () { + + }, + addIncome: function () { + + }, + addExpense: function () { + + }, + accountBalance: function () { + + } +} + + +formatDateTime = function () { + const year = currentDate.getFullYear() + const month = currentDate.getMonth() + const day = currentDate.getDate() + const hours = currentDate.getHours() + const minutes = currentDate.getMinutes() + let amPm = 'AM' + let formatDay = day + let formatMonth = month + + if (hours > 11) { + amPm = 'PM' + } else amPm = 'AM' + + if (day < 10) { + formatDay = `0${day}` + } + + if (month < 10) { + formatMonth = `0${month}` + } + + return `${formatDay}/${formatMonth}/${year} ${hours}:${minutes} ${amPm}` +} + + + +// a. Create a function called signUp which allows user to add to the collection. If user exists, inform the user that he has already an account. + +signUp = function (email, password) { + if (users.some((user) => user.email === email)) { + console.log('An account with this email already exists!'); + } else { + const username = email.slice(0, email.indexOf('@')); + const capitalUsername = username[0].toUpperCase + username.slice(1) + newUser = { + _id: 'az17ds', + username: capitalUsernamesername, + email: email, + password: password, + createdAt: formatDateTime(), + isLoggedIn: true, + } + users.push(newUser) + console.log('New user created!') + } +} + +function deleteUserByEmail(email) { + const userIndex = users.findIndex((user) => user.email === email); + + if (userIndex !== -1) { + users.splice(userIndex, 1); + console.log(`User with email ${email} has been deleted.`); + } else { + console.log('User with email not found.'); + } + } + + +// b. Create a function called signIn which allows user to sign in to the application + +const signIn = function (email, password) { + const foundUser = users.find((user) => user.email === email && user.password === password); + + if (foundUser) { + foundUser.isLoggedIn = true; + console.log('You have logged in!'); + } else { + console.log('Incorrect email or password.'); + } + }; + + diff --git a/_solutions/day-01/exercise3/users-products.js b/_solutions/day-01/exercise3/users-products.js new file mode 100644 index 0000000..da3988d --- /dev/null +++ b/_solutions/day-01/exercise3/users-products.js @@ -0,0 +1,74 @@ +const users = [ + { + _id: 'ab12ex', + username: 'Alex', + email: 'alex@alex.com', + password: '123123', + createdAt: '08/01/2020 9:00 AM', + isLoggedIn: false, + }, + { + _id: 'fg12cy', + username: 'Asab', + email: 'asab@asab.com', + password: '123456', + createdAt: '08/01/2020 9:30 AM', + isLoggedIn: true, + }, + { + _id: 'zwf8md', + username: 'Brook', + email: 'brook@brook.com', + password: '123111', + createdAt: '08/01/2020 9:45 AM', + isLoggedIn: true, + }, + { + _id: 'eefamr', + username: 'Martha', + email: 'martha@martha.com', + password: '123222', + createdAt: '08/01/2020 9:50 AM', + isLoggedIn: false, + }, + { + _id: 'ghderc', + username: 'Thomas', + email: 'thomas@thomas.com', + password: '123333', + createdAt: '08/01/2020 10:00 AM', + isLoggedIn: false, + }, + ] + + const products = [ + { + _id: 'eedfcf', + name: 'mobile phone', + description: 'Huawei Honor', + price: 200, + ratings: [ + { userId: 'fg12cy', rate: 5 }, + { userId: 'zwf8md', rate: 4.5 }, + ], + likes: [], + }, + { + _id: 'aegfal', + name: 'Laptop', + description: 'MacPro: System Darwin', + price: 2500, + ratings: [], + likes: ['fg12cy'], + }, + { + _id: 'hedfcg', + name: 'TV', + description: 'Smart TV:Procaster', + price: 400, + ratings: [{ userId: 'fg12cy', rate: 5 }], + likes: ['fg12cy'], + }, + ] + +module.exports = {users, products} \ No newline at end of file