Advertisement
AlexandrP

Untitled

Jan 31st, 2023 (edited)
1,883
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. class User {
  2.   constructor(username, password, email) {
  3.     this.username = username;
  4.     this.password = password;
  5.     this.email = email;
  6.   }
  7. }
  8.  
  9. class UserManager {
  10.   constructor() {
  11.     // this.users = []; same as row below
  12.   }
  13.  
  14.   users = [new User("slavozar", "bahur", "[email protected]")];
  15.   loggedUser = null;
  16.  
  17.   // register
  18.   addUser(user) {
  19.     const existingUsers = this.users.filter(
  20.       (e) => e.username === user.username
  21.     );
  22.  
  23.     if (existingUsers.length) {
  24.       console.log("User already exists");
  25.     } else {
  26.       this.users.push(user);
  27.       console.log("User added");
  28.     }
  29.   }
  30.  
  31.   login(user) {
  32.     if (this.loggedUser) {
  33.       console.log("User already logged");
  34.     } else {
  35.       const existingUsers = this.users.filter(
  36.         (e) => e.username === user.username && e.password === user.password
  37.       );
  38.  
  39.       if (existingUsers.length) {
  40.         this.loggedUser = user;
  41.         console.log("User logged in");
  42.       } else {
  43.         console.log("Wrong credentials");
  44.       }
  45.     }
  46.   }
  47.  
  48.   logout() {
  49.     this.loggedUser = null;
  50.     console.log("Logged Out");
  51.   }
  52.  
  53.   deleteUser(user) {
  54.     this.users = this.users.filter((e) => e.username !== user.username);
  55.   }
  56. }
  57.  
  58. class Offer {
  59.   constructor(price, title, photos, description, vehicle, creator) {
  60.     this.price = price;
  61.     this.title = title;
  62.     this.photos = photos;
  63.     this.description = description;
  64.     this.vehicle = vehicle;
  65.     this.creator = creator;
  66.   }
  67. }
  68.  
  69. class Vehicle {
  70.   constructor(make, model) {
  71.     this.make = make;
  72.     this.model = model;
  73.   }
  74. }
  75.  
  76. class Car extends Vehicle {
  77.   constructor(make, model, color, tyres) {
  78.     super(make, model);
  79.     this.color = color;
  80.     this.tyres = tyres;
  81.   }
  82. }
  83.  
  84. class OfferManager {
  85.   offers = [];
  86.  
  87.   addOffer(offer, userManager) {
  88.     // ? operator before property access is called optional chaining
  89.     // this expression will be undefined if userManager is null or undefined or if
  90.     // userManager.loggedUser is null or undefined
  91.     if (offer.creator.username === userManager?.loggedUser?.username) {
  92.       this.offers.push(offer);
  93.       console.log(`Offer with title "${offer.title}" added`);
  94.     }
  95.   }
  96.  
  97.   filterOffers(property, keyWord) {
  98.     let results = 0;
  99.     this.offers.forEach((e) => {
  100.       if (e[property] === keyWord) {
  101.         console.log(e);
  102.         results++;
  103.       } else if (
  104.         e[property].toLowerCase().includes(keyWord.toLowerCase()) &&
  105.         typeof e[property] === "string"
  106.       ) {
  107.         console.log(e);
  108.         results++;
  109.       } else if (property === "vehicle") {
  110.         let vehicleValues = Object.values(e[property]);
  111.         vehicleValues.forEach((el) => {
  112.           if (el === keyWord) {
  113.             console.log(e);
  114.           } else if (
  115.             typeof el === "string" &&
  116.             el.toLowerCase().includes(keyWord.toLowerCase())
  117.           ) {
  118.             console.log(e);
  119.           }
  120.         });
  121.         results++;
  122.       }
  123.     });
  124.     if (!results) {
  125.       console.log("Not found!");
  126.     }
  127.   }
  128.  
  129.   editOffer(offer, userManager, property, newValue) {
  130.     if (
  131.       offer.creator.username === userManager?.loggedUser?.username &&
  132.       offer.hasOwnProperty(property) &&
  133.       property !== "creator"
  134.     ) {
  135.       offer[property] = newValue;
  136.       console.log("Offer has been edited");
  137.     } else if (!userManager.loggedUser) {
  138.       console.log("Log in for editioning of an offer");
  139.     } else if (offer.creator.username !== userManager?.loggedUser?.username) {
  140.       console.log("You are trying to edit offer of another user");
  141.     } else {
  142.       console.log("This property doesn't corespond this offer");
  143.     }
  144.   }
  145.  
  146.   deleteOffer(offer, userManager) {
  147.     if (
  148.       this.offers.length > 0 &&
  149.       offer.creator.username === userManager?.loggedUser?.username
  150.     ) {
  151.       this.offers = this.offers.filter((e) => e.title !== offer.title);
  152.       console.log("Offer was deleted");
  153.     } else if (!userManager.loggedUser) {
  154.       console.log("Log in for deletion of the offer");
  155.     } else if (offer.creator.username !== userManager?.loggedUser?.username) {
  156.       console.log("You are trying to delete offer of another user");
  157.     }
  158.   }
  159. }
  160.  
  161. let userManager = new UserManager();
  162. let offerManager = new OfferManager();
  163.  
  164. let joro = new User("gosho", "bahur1", "[email protected]");
  165. let testUser = new User("TestName", "TestPass", "[email protected]");
  166.  
  167. let audi = new Car("Audi", "A3", 200, "Top!");
  168. let renault = new Car("Renualt", "Austra", 150, "Top!");
  169.  
  170. let offer = new Offer(
  171.   1000,
  172.   "Realni km, nov vnos, baba q e karala.",
  173.   ["photo1", "photo2"],
  174.   "Mnogo e zapazena. Babata e hodila samo do magazina s neq. Napylno obslujena!",
  175.   audi,
  176.   joro
  177. );
  178.  
  179. let offer2 = new Offer(
  180.   2000,
  181.   "4isto nova, malko polzvana, prodavam q za6oto samo sibira prah!",
  182.   ["photo1", "photo2"],
  183.   "Naistina ne e polzvana po4ti nikoga, kupena za x3 pari ot teku6ta tsena, ne e za izpuskane!",
  184.   renault,
  185.   testUser
  186. );
  187.  
  188. console.log("Start activity on site:");
  189.  
  190. userManager.addUser(joro);
  191. userManager.addUser(testUser);
  192.  
  193. userManager.login(joro);
  194. offerManager.addOffer(offer, userManager);
  195. userManager.logout();
  196.  
  197. userManager.login(testUser);
  198. offerManager.addOffer(offer2, userManager);
  199. offerManager.editOffer(offer2, userManager, "title", "New test title");
  200. userManager.logout();
  201.  
  202. console.log("All offers after site activity:");
  203. console.log(offerManager.offers);
  204.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement