diff --git a/real_estate/client/src/pages/Listing.jsx b/real_estate/client/src/pages/Listing.jsx index 895ec7b..f9ce7fb 100644 --- a/real_estate/client/src/pages/Listing.jsx +++ b/real_estate/client/src/pages/Listing.jsx @@ -1,7 +1,6 @@ import { useEffect, useState } from "react" import {useParams} from 'react-router-dom' import {Swiper, SwiperSlide} from 'swiper/react' -import { useSelector } from 'react-redux'; import 'swiper/css'; import 'swiper/css/free-mode'; import 'swiper/css/navigation'; @@ -16,7 +15,6 @@ const Listing = () => { const [loading, setLoading] = useState(false); const [error, setError] = useState(false); const [listing, setListing] = useState(null); - const { currentUser } = useSelector((state) => state.user); useEffect(() => { const fetchListing = async() =>{ try { @@ -89,10 +87,10 @@ const Listing = () => {
- About this property + About this property {listing.description}
- + > } diff --git a/real_estate/server/controllers/listing.controller.js b/real_estate/server/controllers/listing.controller.js index c713f34..95ca6f1 100644 --- a/real_estate/server/controllers/listing.controller.js +++ b/real_estate/server/controllers/listing.controller.js @@ -56,4 +56,47 @@ export const getListing = async (req, res, next) => { } catch (error) { next(error); } -} \ No newline at end of file +}; + +export const getListings = async (req, res, next) => { + try { + const limit = parseInt(req.query.limit) || 9; + const startIndex = parseInt(req.query.startIndex) || 0; + + let offer = req.query.offer; + if(offer === undefined || offer === 'false'){ + offer = {$in: [false, true]}; + } + let furnished = req.query.furnished; + if(furnished === undefined || furnished === 'false'){ + furnished = {$in: [false, true]}; + } + let parking = req.query.parking; + if(parking === undefined || parking === 'false'){ + parking = {$in: [false, true]}; + } + let type = req.query.type; + if(type === undefined || type === 'all'){ + type = {$in: ['sale', 'rent']}; + } + + const searchTerm = req.query.searchTerm || ''; + const sort = req.query.sort || 'createdAt'; + const order = req.query.order || 'desc'; + const listings = await Listing.find({ + name: { + $regex: searchTerm, + $options: 'i' + }, + offer, + furnished, + parking, + type, + }).sort({ [sort]: order }).limit(limit).skip(startIndex); + + return res.status(200).json(listings); + + } catch (error) { + next(error); + } +}; \ No newline at end of file diff --git a/real_estate/server/routes/listing.route.js b/real_estate/server/routes/listing.route.js index 5c41463..1b137c2 100644 --- a/real_estate/server/routes/listing.route.js +++ b/real_estate/server/routes/listing.route.js @@ -1,5 +1,5 @@ import express from 'express'; -import { createListing, deleteListing, updateListing, getListing } from '../controllers/listing.controller.js'; +import { createListing, deleteListing, updateListing, getListing, getListings } from '../controllers/listing.controller.js'; import { verifyToken } from '../utils/verifyUser.js'; @@ -9,5 +9,6 @@ router.post('/create', verifyToken, createListing) router.delete('/delete/:id', verifyToken, deleteListing) router.post('/update/:id', verifyToken, updateListing) router.get('/get/:id', getListing) +router.get('/get', getListings) export default router; \ No newline at end of file