LISTING OWNER

 EVERY LISTING IS ASSIGNED AN OWNER TO AUTHORIZE THE LISTING INORDER TO EDIT/ DELETE THE LISTING.

BEFORE AUTHORIZATION OWNER FIELD IS ADDED TO THE USER SCHEMA AND IS INITIALIZED IN THE DATABASE.

IN init FOLDER INDEX.JS

const initDB = async () => {
  await Listing.deleteMany({});
 initData.data= initData.data.map((obj) => ({ ...obj, owner: "67d42a6d78000309d98682f2" }));
  await Listing.insertMany(initData.data);
};
initDB();


{ ...obj, owner:

...obj TO GET THE EXISTING  DATA IN obj

AFTER INITIALIZATION 


TO DISPLAY IT 

LISTINGS.JS

// SHOW ROUTE
router.get(
  "/:id",
  wrapAsync(async (req, res) => {
    let { id } = req.params;
    const listing = await Listing.findById(id)
      .populate("reviews")
      .populate("owner");
    if (!listing) {
      req.flash("error", "Listing requested doesn't exist!");
      res.redirect("/listings");
    }
    res.render("listings/show.ejs", { listing });
  })
);

SHOW.EJS

 <div class="card-body">
        <div class="card-text">
          <p>Owned By: <i><%= listing.owner.username %></i></p>
          <%= listing.description %><br />
          &#8377;<%= listing.price.toLocaleString("en-IN") %><br />
          <%= listing.location %><br />

WHEN A NEW LISTING IS CREATED THE OWNER INFO SHOULD BE SAVED INORDER TO DISPLAY THE OWNER NAME.

router.post(
  "/",
  isLoggedIn,
  ValidateListing,
  wrapAsync(async (req, res, next) => {
    const newListing = new Listing(req.body.listing);
    newListing.owner = req.user._id;
    await newListing.save();
    req.flash("success", "New Listing Added!");
    res.redirect("/listings");
  })
);




Comments