// routes/ad
router.post("/ad", requireSignin, ad.create);
// controllers/ad
// imports
import { nanoid } from "nanoid";
import * as config from "../config.js";
import Ad from "../models/ad.js";
import User from "../models/user.js";
import slugify from "slugify";
export const create = async (req, res) => {
try {
const { photos, description, address, price, type, landsize } = req.body;
if (!photos?.length) {
return res.json({ error: "Photos are required" });
}
if (!price) {
return res.json({ error: "Price is required" });
}
if (!type) {
return res.json({ error: "Is property house or land?" });
}
if (!address) {
return res.json({ error: "Address is required" });
}
if (!description) {
return res.json({ error: "Description is required" });
}
const geo = await config.GOOGLE_GEOCODER.geocode(address);
const ad = await new Ad({
...req.body,
slug: slugify(`${type}-${address}-${price}-${nanoid(6)}`),
postedBy: req.user._id,
location: {
type: "Point",
coordinates: [geo?.[0]?.longitude, geo?.[0]?.latitude],
},
googleMap: geo,
}).save();
const user = await User.findByIdAndUpdate(
req.user._id,
{
$addToSet: { role: "Seller" },
},
{ new: true }
);
user.password = undefined;
user.resetCode = undefined;
res.json({
ad,
user,
});
} catch (err) {
console.log(err);
res.json({ error: "Something went wrong. Try later." });
}
};