diff --git a/real_estate/client/src/components/Navbar.jsx b/real_estate/client/src/components/Navbar.jsx
index 7946f4f..6aa91d6 100644
--- a/real_estate/client/src/components/Navbar.jsx
+++ b/real_estate/client/src/components/Navbar.jsx
@@ -19,7 +19,7 @@ const Navbar = () => {
{error ? error : ''}
{updateSuccess ? 'User profile is updated successfully' : ''}
diff --git a/real_estate/client/src/redux/user/userSlice.js b/real_estate/client/src/redux/user/userSlice.js index 6589e21..d8bd976 100644 --- a/real_estate/client/src/redux/user/userSlice.js +++ b/real_estate/client/src/redux/user/userSlice.js @@ -34,8 +34,37 @@ const userSlice = createSlice({ state.error = action.payload; state.loading = false; }, + deleteUserStart: (state) => { + state.loading = true; + }, + deleteUserSuccess: (state) => { + state.currentUser = null; + state.loading = false; + state.error = null; + }, + deleteUserFailure: (state, action) => { + state.error = action.payload; + state.loading = false; + }, + logoutUserStart: (state) => { + state.loading = true; + }, + logoutUserSuccess: (state) => { + state.currentUser = null; + state.loading = false; + state.error = null; + }, + logoutUserFailure: (state, action) => { + state.error = action.payload; + state.loading = false; + }, + } }); -export const {loginStart, loginSuccess, loginFailure, updateUserStart, updateUserSuccess, updateUserFailure} = userSlice.actions; +export const { + loginStart, loginSuccess, loginFailure, + updateUserStart, updateUserSuccess, updateUserFailure, + deleteUserStart, deleteUserSuccess, deleteUserFailure, + logoutUserStart, logoutUserSuccess, logoutUserFailure} = userSlice.actions; export default userSlice.reducer; \ No newline at end of file diff --git a/real_estate/server/controllers/auth.controller.js b/real_estate/server/controllers/auth.controller.js index 3a23f71..856a50c 100644 --- a/real_estate/server/controllers/auth.controller.js +++ b/real_estate/server/controllers/auth.controller.js @@ -58,4 +58,13 @@ export const google = async(req, res, next) => { } catch (error) { next(error) } +}; + +export const logout = async (req, res, next) => { + try { + res.clearCookie('access_token'); + res.status(200).json('User has been logged out'); + } catch (error) { + next(error) + } } \ No newline at end of file diff --git a/real_estate/server/controllers/listing.controller.js b/real_estate/server/controllers/listing.controller.js new file mode 100644 index 0000000..77e5f22 --- /dev/null +++ b/real_estate/server/controllers/listing.controller.js @@ -0,0 +1,10 @@ +import Listing from "../models/listing.model.js"; + +export const createListing = async (req, res, next) => { + try { + const listing = await Listing.create(req.body); + return res.status(201).json(listing) + } catch (error) { + next(error) + } +} \ No newline at end of file diff --git a/real_estate/server/controllers/user.controller.js b/real_estate/server/controllers/user.controller.js index 5c1ee41..5337912 100644 --- a/real_estate/server/controllers/user.controller.js +++ b/real_estate/server/controllers/user.controller.js @@ -28,4 +28,15 @@ export const updateUser = async (req, res, next) =>{ } catch (error) { next(error) } +}; + +export const deleteUser = async (req, res, next) => { + if(req.user.id !== req.params.id) return next(errorHandler(401, 'You can only delete your account')) + try { + await User.findByIdAndDelete(req.params.id) + res.clearCookie('access_token'); + res.status(200).json('User has been deleted') + } catch (error) { + next(error) + } } \ No newline at end of file diff --git a/real_estate/server/index.js b/real_estate/server/index.js index bb6d9b6..eb99b50 100644 --- a/real_estate/server/index.js +++ b/real_estate/server/index.js @@ -3,6 +3,7 @@ import mongoose from 'mongoose'; import dotenv from 'dotenv'; import userRouter from './routes/user.route.js'; import authRouter from './routes/auth.route.js'; +import listingRouter from './routes/listing.route.js' import cookieParser from 'cookie-parser'; @@ -28,6 +29,7 @@ app.listen(3000, () =>{ //create api route app.use('/server/user', userRouter) app.use('/server/auth', authRouter) +app.use('/server/listing', listingRouter) //middleware to catch an error app.use((err, req, res, next) => { diff --git a/real_estate/server/models/listing.model.js b/real_estate/server/models/listing.model.js new file mode 100644 index 0000000..ddadfc9 --- /dev/null +++ b/real_estate/server/models/listing.model.js @@ -0,0 +1,63 @@ +import mongoose from "mongoose"; + +const listingSchema = new mongoose.Schema( + { + name:{ + type: String, + required: true, + }, + description:{ + type: String, + required: true, + }, + address:{ + type: String, + required: true, + }, + currentPrice:{ + type: Number, + required: true, + }, + discountPrice:{ + type: Number, + required: true, + }, + bath:{ + type: Number, + required: true, + }, + bed:{ + type: Number, + required: true + }, + furnished:{ + type: Boolean, + required: true, + }, + parking:{ + type: Boolean, + required: true, + }, + type:{ + type: String, + required: true, + }, + offer:{ + type: Boolean, + required: true, + }, + imageUrls:{ + type: Array, + required: true, + }, + userRef:{ + type: String, + required: true, + }, + }, + { timestamps: true } +); + +const Listing = mongoose.model('Listing', listingSchema); + +export default Listing; \ No newline at end of file diff --git a/real_estate/server/routes/auth.route.js b/real_estate/server/routes/auth.route.js index 498ef60..25bf348 100644 --- a/real_estate/server/routes/auth.route.js +++ b/real_estate/server/routes/auth.route.js @@ -1,10 +1,11 @@ import express from 'express' -import { google, login, signup } from '../controllers/auth.controller.js'; +import { google, login, logout, signup } from '../controllers/auth.controller.js'; const router = express.Router(); router.post('/signup', signup); router.post('/login', login); -router.post('/google', google) +router.post('/google', google); +router.get('/logout', logout); export default router \ No newline at end of file diff --git a/real_estate/server/routes/listing.route.js b/real_estate/server/routes/listing.route.js new file mode 100644 index 0000000..bb23189 --- /dev/null +++ b/real_estate/server/routes/listing.route.js @@ -0,0 +1,10 @@ +import express from 'express'; +import { createListing } from '../controllers/listing.controller.js'; +import { verifyToken } from '../utils/verifyUser.js'; + + +const router = express.Router(); + +router.post('/create', verifyToken,createListing) + +export default router; \ No newline at end of file diff --git a/real_estate/server/routes/user.route.js b/real_estate/server/routes/user.route.js index d75ebd1..728df3b 100644 --- a/real_estate/server/routes/user.route.js +++ b/real_estate/server/routes/user.route.js @@ -1,10 +1,11 @@ import express from 'express' -import { test, updateUser } from '../controllers/user.controller.js'; +import { deleteUser, test, updateUser } from '../controllers/user.controller.js'; import { verifyToken } from '../utils/verifyUser.js'; const router = express.Router(); router.get('/test', test) router.post('/update/:id', verifyToken, updateUser) +router.delete('/delete/:id', verifyToken, deleteUser) export default router \ No newline at end of file