From bb00177fbced6fef86e61e9b6b486c5d5540981f Mon Sep 17 00:00:00 2001 From: KayPrime Date: Fri, 14 Jun 2024 09:24:55 +0100 Subject: [PATCH] update: update config for deployment --- .gitignore | 4 +++ config/config.js | 9 +++--- controllers/generalControllers.js | 2 +- controllers/riderController.js | 3 ++ controllers/userControllers.js | 29 ++++++++++++++++-- index.js | 7 +++-- middlewares/errorHandler.js | 2 -- models/orderModel.js | 8 +++++ package-lock.json | 13 ++++++++ package.json | 1 + ...nd-admin-17161110659867981279711370906.png | Bin .../food-17162279739342014224797683009.jpg | Bin .../food-17162279739343434188194176493.png | Bin .../food-17162279739361692026030119212.png | Bin .../food-17162282592082036284686933507.jpg | Bin .../food-17162282592102641740830386514.png | Bin .../food-17162282592179598597894536434.png | Bin .../food-1716229751198405401691107672.jpg | Bin .../food-1716229751199424199191390553.png | Bin .../food-17162297512012372086327621557.png | Bin .../food-17162300197782134846594746873.jpg | Bin .../food-17162300197801635264588589325.png | Bin .../food-17162300197852046930990709042.png | Bin .../food-17162880519245237751907561106.jpg | Bin .../food-17162880519295335473147977088.png | Bin .../food-17162880519348541152273099026.png | Bin .../user-17163928760402308490686139187.png | Bin routes/generalRoutes.js | 2 +- routes/userRoutes.js | 2 ++ utils/userValidations.js | 22 ++++--------- 30 files changed, 76 insertions(+), 28 deletions(-) rename {uploads => public/uploads}/admin/second-admin-17161110659867981279711370906.png (100%) rename {uploads => public/uploads}/food/food-17162279739342014224797683009.jpg (100%) rename {uploads => public/uploads}/food/food-17162279739343434188194176493.png (100%) rename {uploads => public/uploads}/food/food-17162279739361692026030119212.png (100%) rename {uploads => public/uploads}/food/food-17162282592082036284686933507.jpg (100%) rename {uploads => public/uploads}/food/food-17162282592102641740830386514.png (100%) rename {uploads => public/uploads}/food/food-17162282592179598597894536434.png (100%) rename {uploads => public/uploads}/food/food-1716229751198405401691107672.jpg (100%) rename {uploads => public/uploads}/food/food-1716229751199424199191390553.png (100%) rename {uploads => public/uploads}/food/food-17162297512012372086327621557.png (100%) rename {uploads => public/uploads}/food/food-17162300197782134846594746873.jpg (100%) rename {uploads => public/uploads}/food/food-17162300197801635264588589325.png (100%) rename {uploads => public/uploads}/food/food-17162300197852046930990709042.png (100%) rename {uploads => public/uploads}/food/food-17162880519245237751907561106.jpg (100%) rename {uploads => public/uploads}/food/food-17162880519295335473147977088.png (100%) rename {uploads => public/uploads}/food/food-17162880519348541152273099026.png (100%) rename {uploads => public/uploads}/users/user-17163928760402308490686139187.png (100%) diff --git a/.gitignore b/.gitignore index 37d7e73..5b81b28 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,6 @@ node_modules .env +.vscode +public/uploads/admin/* +public/uploads/users/* +public/uploads/food/* \ No newline at end of file diff --git a/config/config.js b/config/config.js index 8a75a2f..6562baf 100644 --- a/config/config.js +++ b/config/config.js @@ -14,9 +14,10 @@ export const jwtSecret = process.env.JWT_SECRET; export const jwtExpiration = 24 * 60 * 60; // API prefixes +export const apiPrefix = "/api/v1/"; export const apiPrefixes = { - generalApi: "/api/v1", - adminApi: "/api/v2", - userApi: "/api/v3", - riderApi: "/api/v4", + generalApi: apiPrefix + "app", + adminApi: apiPrefix + "admin", + userApi: apiPrefix + "user", + riderApi: apiPrefix + "rider", }; diff --git a/controllers/generalControllers.js b/controllers/generalControllers.js index 1bff7f2..8044a12 100644 --- a/controllers/generalControllers.js +++ b/controllers/generalControllers.js @@ -14,7 +14,7 @@ export const getFoods = catchErrorFunc(async (req, res) => { }); export const getFoodById = catchErrorFunc(async (req, res) => { - const { id } = req.params; + const { id } = req.query; const food = await FoodModel.findById(id, { createdBy: 0, lastUpdatedBy: 0 }); res.status(200).json({ success: true, data: { food } }); }); diff --git a/controllers/riderController.js b/controllers/riderController.js index 283ae9d..ca81c45 100644 --- a/controllers/riderController.js +++ b/controllers/riderController.js @@ -173,10 +173,13 @@ export const updateAvailability = catchErrorFunc(async (req, res) => { switch (status) { case 0: availability = "UNAVAILABLE"; + break; case 1: availability = "AVAILABLE"; + break; default: availability = "UNAVAILABLE"; + break; } const updatedAvailability = await RiderModel.findByIdAndUpdate( id, diff --git a/controllers/userControllers.js b/controllers/userControllers.js index 8f78904..d465d9d 100644 --- a/controllers/userControllers.js +++ b/controllers/userControllers.js @@ -217,11 +217,11 @@ export const getDeliveryStatus = catchErrorFunc(async (req, res) => { }); export const getOrder = catchErrorFunc(async (req, res) => { - const { id: orderId } = req.params; + const { id: orderId } = req.query; const order = await OrderModel.findById(orderId); - if (!delivery) + if (!order) throw new AppError( "1204", 404, @@ -237,3 +237,28 @@ export const getOrder = catchErrorFunc(async (req, res) => { }, }); }); + +export const getOrders = catchErrorFunc(async (req, res) => { + const { id } = req.verifiedUser; + + console.log(id); + + const order = await OrderModel.find( + { orderBy: id }, + { rider: 0 }, + { limit: 10 } + ).populate("food"); + if (order.length < 1) + throw new AppError( + "1204", + 404, + "This user hasn't made any other yet", + "No orders found" + ); + + res.status(200).json({ + success: true, + message: "user orders successfully retrieved", + data: order, + }); +}); diff --git a/index.js b/index.js index cf0433d..128c6f9 100644 --- a/index.js +++ b/index.js @@ -1,6 +1,7 @@ import "dotenv/config"; import express from "express"; import morgan from "morgan"; +import cors from "cors"; import { apiPrefixes, port } from "./config/config.js"; import { connectDB } from "./database/db.js"; import { adminRouter } from "./routes/adminRoutes.js"; @@ -14,15 +15,17 @@ const app = express(); /* Middlewares */ app + .use(cors({ origin: "http://localhost:3001", credentials: true })) .use(morgan("dev")) // Logging requests and response .use(express.json()) // Parse incoming requests with JSON payload .use(express.urlencoded({ extended: true })) // Parses incoming requests with urlencoded payloads + .use("/images", express.static("public")) /* Router for admin routes */ .use(apiPrefixes.generalApi, generalRouter) - .use(apiPrefixes.adminApi, adminRouter) - .use(apiPrefixes.riderApi, riderRouter) .use(apiPrefixes.userApi, userRouter) + .use(apiPrefixes.riderApi, riderRouter) + .use(apiPrefixes.adminApi, adminRouter) .use("*", (req, res) => res.status(404).json({ status: "error", diff --git a/middlewares/errorHandler.js b/middlewares/errorHandler.js index 415979a..26001ac 100644 --- a/middlewares/errorHandler.js +++ b/middlewares/errorHandler.js @@ -20,8 +20,6 @@ export function errorHandler(error, req, res, next) { res.status(error.responseCode).json({ success, message: error.message, - type: error.type, - details: error.details, }); } else if (error instanceof MulterError) { res.status(400).json({ success, message: error.message }); diff --git a/models/orderModel.js b/models/orderModel.js index 32c81a8..48a9528 100644 --- a/models/orderModel.js +++ b/models/orderModel.js @@ -21,6 +21,14 @@ const orderSchema = new mongoose.Schema( type: String, required: true, }, + rider: { + type: mongoose.Schema.Types.ObjectId, + ref: "Rider", + }, + status: { + type: String, + enum: ["PENDING", "DISPATCHED", "DELIVERED", "FAILED"], + }, }, { timestamps: true } ); diff --git a/package-lock.json b/package-lock.json index 3923fa7..f920081 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,6 +10,7 @@ "license": "ISC", "dependencies": { "bcrypt": "^5.1.1", + "cors": "^2.8.5", "dotenv": "^16.4.5", "express": "^4.19.2", "jsonwebtoken": "^9.0.2", @@ -681,6 +682,18 @@ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, "node_modules/cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", diff --git a/package.json b/package.json index ba0c707..1565b3d 100644 --- a/package.json +++ b/package.json @@ -20,6 +20,7 @@ "description": "", "dependencies": { "bcrypt": "^5.1.1", + "cors": "^2.8.5", "dotenv": "^16.4.5", "express": "^4.19.2", "jsonwebtoken": "^9.0.2", diff --git a/uploads/admin/second-admin-17161110659867981279711370906.png b/public/uploads/admin/second-admin-17161110659867981279711370906.png similarity index 100% rename from uploads/admin/second-admin-17161110659867981279711370906.png rename to public/uploads/admin/second-admin-17161110659867981279711370906.png diff --git a/uploads/food/food-17162279739342014224797683009.jpg b/public/uploads/food/food-17162279739342014224797683009.jpg similarity index 100% rename from uploads/food/food-17162279739342014224797683009.jpg rename to public/uploads/food/food-17162279739342014224797683009.jpg diff --git a/uploads/food/food-17162279739343434188194176493.png b/public/uploads/food/food-17162279739343434188194176493.png similarity index 100% rename from uploads/food/food-17162279739343434188194176493.png rename to public/uploads/food/food-17162279739343434188194176493.png diff --git a/uploads/food/food-17162279739361692026030119212.png b/public/uploads/food/food-17162279739361692026030119212.png similarity index 100% rename from uploads/food/food-17162279739361692026030119212.png rename to public/uploads/food/food-17162279739361692026030119212.png diff --git a/uploads/food/food-17162282592082036284686933507.jpg b/public/uploads/food/food-17162282592082036284686933507.jpg similarity index 100% rename from uploads/food/food-17162282592082036284686933507.jpg rename to public/uploads/food/food-17162282592082036284686933507.jpg diff --git a/uploads/food/food-17162282592102641740830386514.png b/public/uploads/food/food-17162282592102641740830386514.png similarity index 100% rename from uploads/food/food-17162282592102641740830386514.png rename to public/uploads/food/food-17162282592102641740830386514.png diff --git a/uploads/food/food-17162282592179598597894536434.png b/public/uploads/food/food-17162282592179598597894536434.png similarity index 100% rename from uploads/food/food-17162282592179598597894536434.png rename to public/uploads/food/food-17162282592179598597894536434.png diff --git a/uploads/food/food-1716229751198405401691107672.jpg b/public/uploads/food/food-1716229751198405401691107672.jpg similarity index 100% rename from uploads/food/food-1716229751198405401691107672.jpg rename to public/uploads/food/food-1716229751198405401691107672.jpg diff --git a/uploads/food/food-1716229751199424199191390553.png b/public/uploads/food/food-1716229751199424199191390553.png similarity index 100% rename from uploads/food/food-1716229751199424199191390553.png rename to public/uploads/food/food-1716229751199424199191390553.png diff --git a/uploads/food/food-17162297512012372086327621557.png b/public/uploads/food/food-17162297512012372086327621557.png similarity index 100% rename from uploads/food/food-17162297512012372086327621557.png rename to public/uploads/food/food-17162297512012372086327621557.png diff --git a/uploads/food/food-17162300197782134846594746873.jpg b/public/uploads/food/food-17162300197782134846594746873.jpg similarity index 100% rename from uploads/food/food-17162300197782134846594746873.jpg rename to public/uploads/food/food-17162300197782134846594746873.jpg diff --git a/uploads/food/food-17162300197801635264588589325.png b/public/uploads/food/food-17162300197801635264588589325.png similarity index 100% rename from uploads/food/food-17162300197801635264588589325.png rename to public/uploads/food/food-17162300197801635264588589325.png diff --git a/uploads/food/food-17162300197852046930990709042.png b/public/uploads/food/food-17162300197852046930990709042.png similarity index 100% rename from uploads/food/food-17162300197852046930990709042.png rename to public/uploads/food/food-17162300197852046930990709042.png diff --git a/uploads/food/food-17162880519245237751907561106.jpg b/public/uploads/food/food-17162880519245237751907561106.jpg similarity index 100% rename from uploads/food/food-17162880519245237751907561106.jpg rename to public/uploads/food/food-17162880519245237751907561106.jpg diff --git a/uploads/food/food-17162880519295335473147977088.png b/public/uploads/food/food-17162880519295335473147977088.png similarity index 100% rename from uploads/food/food-17162880519295335473147977088.png rename to public/uploads/food/food-17162880519295335473147977088.png diff --git a/uploads/food/food-17162880519348541152273099026.png b/public/uploads/food/food-17162880519348541152273099026.png similarity index 100% rename from uploads/food/food-17162880519348541152273099026.png rename to public/uploads/food/food-17162880519348541152273099026.png diff --git a/uploads/users/user-17163928760402308490686139187.png b/public/uploads/users/user-17163928760402308490686139187.png similarity index 100% rename from uploads/users/user-17163928760402308490686139187.png rename to public/uploads/users/user-17163928760402308490686139187.png diff --git a/routes/generalRoutes.js b/routes/generalRoutes.js index 8549022..0cdb44d 100644 --- a/routes/generalRoutes.js +++ b/routes/generalRoutes.js @@ -3,4 +3,4 @@ import { getFoodById, getFoods } from "../controllers/generalControllers.js"; export const generalRouter = Router(); -generalRouter.get("/get-foods", getFoods).get("/food/:id", getFoodById); +generalRouter.get("/get-foods", getFoods).get("/food", getFoodById); diff --git a/routes/userRoutes.js b/routes/userRoutes.js index 106a10f..00f4859 100644 --- a/routes/userRoutes.js +++ b/routes/userRoutes.js @@ -4,6 +4,7 @@ import { createOrder, getDeliveryStatus, getOrder, + getOrders, getUser, userLoginController, userSignupController, @@ -19,4 +20,5 @@ userRouter .get("/get-user", getUser) .get("/delivery-status/:id", getDeliveryStatus) .get("/get-order", getOrder) + .get("/get-orders", getOrders) .post("/create-order", createOrder); diff --git a/utils/userValidations.js b/utils/userValidations.js index 8d031fd..e8810e8 100644 --- a/utils/userValidations.js +++ b/utils/userValidations.js @@ -43,7 +43,7 @@ export const userSignupSchema = z.object({ password: z .string({ required_error: "password field is required" }) .trim() - .min(8, { message: "password must be 8 characters or more" }) + .min(8, { message: "password too short. must be 8 characters or more" }) .max(100, { message: "password is limitted to 100 characters" }), address: z .string({ required_error: "'address' field is required for registration" }) @@ -65,7 +65,9 @@ export const userLoginSchema = z.object({ password: z .string({ required_error: "password is required to sign in" }) .trim() - .min(8, { message: "password must be 8 characters or longer" }), + .min(8, { + message: "password is too short. must be 8 characters or longer", + }), }); /* VALIDATORS */ @@ -77,13 +79,7 @@ export function validateUserSignupReqBody(data) { return result.data; } else { const details = result.error.issues.map((issue) => issue.message); - throw new AppError( - "1000", - 400, - "ValidationError", - "Incomplete or invalid sign up body", - details - ); + throw new AppError("1000", 400, "ValidationError", details[0], details); } } @@ -94,12 +90,6 @@ export function validateUserLoginReqBody(data) { return result.data; } else { const details = result.error.issues.map((issue) => issue.message); - throw new AppError( - "1001", - 400, - "ValidationError", - "Incomplete or invalid login body", - details - ); + throw new AppError("1001", 400, "ValidationError", details[0], details); } }