Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class User {
- constructor(username, password, email) {
- this.username = username;
- this.password = password;
- this.email = email;
- }
- }
- class UserManager {
- constructor() {
- // this.users = []; same as row below
- }
- loggedUser = null;
- // register
- addUser(user) {
- const existingUsers = this.users.filter(
- (e) => e.username === user.username
- );
- if (existingUsers.length) {
- console.log("User already exists");
- } else {
- this.users.push(user);
- console.log("User added");
- }
- }
- login(user) {
- if (this.loggedUser) {
- console.log("User already logged");
- } else {
- const existingUsers = this.users.filter(
- (e) => e.username === user.username && e.password === user.password
- );
- if (existingUsers.length) {
- this.loggedUser = user;
- console.log("User logged in");
- } else {
- console.log("Wrong credentials");
- }
- }
- }
- logout() {
- this.loggedUser = null;
- console.log("Logged Out");
- }
- deleteUser(user) {
- this.users = this.users.filter((e) => e.username !== user.username);
- }
- }
- class Offer {
- constructor(price, title, photos, description, vehicle, creator) {
- this.price = price;
- this.title = title;
- this.photos = photos;
- this.description = description;
- this.vehicle = vehicle;
- this.creator = creator;
- }
- }
- class Vehicle {
- constructor(make, model) {
- this.make = make;
- this.model = model;
- }
- }
- class Car extends Vehicle {
- constructor(make, model, color, tyres) {
- super(make, model);
- this.color = color;
- this.tyres = tyres;
- }
- }
- class OfferManager {
- offers = [];
- addOffer(offer, userManager) {
- // ? operator before property access is called optional chaining
- // this expression will be undefined if userManager is null or undefined or if
- // userManager.loggedUser is null or undefined
- if (offer.creator.username === userManager?.loggedUser?.username) {
- this.offers.push(offer);
- console.log(`Offer with title "${offer.title}" added`);
- }
- }
- filterOffers(property, keyWord) {
- let results = 0;
- this.offers.forEach((e) => {
- if (e[property] === keyWord) {
- console.log(e);
- results++;
- } else if (
- e[property].toLowerCase().includes(keyWord.toLowerCase()) &&
- typeof e[property] === "string"
- ) {
- console.log(e);
- results++;
- } else if (property === "vehicle") {
- let vehicleValues = Object.values(e[property]);
- vehicleValues.forEach((el) => {
- if (el === keyWord) {
- console.log(e);
- } else if (
- typeof el === "string" &&
- el.toLowerCase().includes(keyWord.toLowerCase())
- ) {
- console.log(e);
- }
- });
- results++;
- }
- });
- if (!results) {
- console.log("Not found!");
- }
- }
- editOffer(offer, userManager, property, newValue) {
- if (
- offer.creator.username === userManager?.loggedUser?.username &&
- offer.hasOwnProperty(property) &&
- property !== "creator"
- ) {
- offer[property] = newValue;
- console.log("Offer has been edited");
- } else if (!userManager.loggedUser) {
- console.log("Log in for editioning of an offer");
- } else if (offer.creator.username !== userManager?.loggedUser?.username) {
- console.log("You are trying to edit offer of another user");
- } else {
- console.log("This property doesn't corespond this offer");
- }
- }
- deleteOffer(offer, userManager) {
- if (
- this.offers.length > 0 &&
- offer.creator.username === userManager?.loggedUser?.username
- ) {
- this.offers = this.offers.filter((e) => e.title !== offer.title);
- console.log("Offer was deleted");
- } else if (!userManager.loggedUser) {
- console.log("Log in for deletion of the offer");
- } else if (offer.creator.username !== userManager?.loggedUser?.username) {
- console.log("You are trying to delete offer of another user");
- }
- }
- }
- let userManager = new UserManager();
- let offerManager = new OfferManager();
- let audi = new Car("Audi", "A3", 200, "Top!");
- let renault = new Car("Renualt", "Austra", 150, "Top!");
- let offer = new Offer(
- 1000,
- "Realni km, nov vnos, baba q e karala.",
- ["photo1", "photo2"],
- "Mnogo e zapazena. Babata e hodila samo do magazina s neq. Napylno obslujena!",
- audi,
- joro
- );
- let offer2 = new Offer(
- 2000,
- "4isto nova, malko polzvana, prodavam q za6oto samo sibira prah!",
- ["photo1", "photo2"],
- "Naistina ne e polzvana po4ti nikoga, kupena za x3 pari ot teku6ta tsena, ne e za izpuskane!",
- renault,
- testUser
- );
- console.log("Start activity on site:");
- userManager.addUser(joro);
- userManager.addUser(testUser);
- userManager.login(joro);
- offerManager.addOffer(offer, userManager);
- userManager.logout();
- userManager.login(testUser);
- offerManager.addOffer(offer2, userManager);
- offerManager.editOffer(offer2, userManager, "title", "New test title");
- userManager.logout();
- console.log("All offers after site activity:");
- console.log(offerManager.offers);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement