瀏覽代碼

Refactor: Update menu and product actions to use mongoose ObjectId for userID and clean up code structure

emrecevik106 1 月之前
父節點
當前提交
f8d5765990

+ 2 - 2
src/actions/auth/register/index.ts

@@ -85,7 +85,7 @@ const register = async (input: RegisterInput): Promise<RegisterResult> => {
             isActive: true,
             products: []
         });
-
+        /* 
         const starterPlan = await Plan.findOne({
             title: "Starter"
         });
@@ -108,7 +108,7 @@ const register = async (input: RegisterInput): Promise<RegisterResult> => {
             endDate: new Date(new Date().setFullYear(new Date().getFullYear() + 1)),
             status: "active",
             price: starterPlan!.type.find((t: { type: string; price: number }) => t.type === "yearly")?.price ?? 0
-        });
+        }); */
 
         await smsSend({
             userID: newUser._id.toString()

+ 3 - 1
src/actions/menu/addCategory/index.ts

@@ -1,3 +1,4 @@
+import mongoose from "mongoose";
 import {
     Category
 } from "../../../models";
@@ -16,6 +17,7 @@ const addCategory = async (userID: string, categoryLimit: number, input: AddCate
         const categoryCount = await Category.countDocuments({
             userID
         });
+        
         if (categoryCount >= categoryLimit) {
             return {
                 message: "category-limit-reached",
@@ -35,7 +37,7 @@ const addCategory = async (userID: string, categoryLimit: number, input: AddCate
         }
 
         const newCategory = await Category.create({
-            userID,
+            userID: new mongoose.Types.ObjectId(userID),
             title,
             index
         });

+ 3 - 1
src/actions/menu/addMenu/index.ts

@@ -1,3 +1,4 @@
+import mongoose from "mongoose";
 import {
     Menu
 } from "../../../models";
@@ -18,6 +19,7 @@ const addMenu = async (userID: string, menuLimit: number, input: AddMenuInput):
         const menuCount = await Menu.countDocuments({
             userID
         });
+        
         if (menuCount >= menuLimit) {
             return {
                 message: "menu-limit-reached",
@@ -26,11 +28,11 @@ const addMenu = async (userID: string, menuLimit: number, input: AddMenuInput):
         }
 
         const newMenu = await Menu.create({
+            userID: new mongoose.Types.ObjectId(userID), 
             isViewPrice,
             description,
             products: [],
             isActive,
-            userID,
             title
         });
 

+ 4 - 3
src/actions/menu/addProduct/index.ts

@@ -1,3 +1,4 @@
+import mongoose from "mongoose";
 import {
     Product,
     Menu
@@ -26,9 +27,9 @@ const addProduct = async (userID: string, productLimit: number, input: AddProduc
         }
 
         const newProduct = await Product.create({
-            categoryIDs: categoryIDs,
+            categoryIDs: categoryIDs.map(id => new mongoose.Types.ObjectId(id)),
+            userID: new mongoose.Types.ObjectId(userID),
             ...rest,
-            userID,
         });
 
         const activeMenu = await Menu.findOne({
@@ -41,7 +42,7 @@ const addProduct = async (userID: string, productLimit: number, input: AddProduc
                 $push: {
                     products: {
                         productID: newProduct._id,
-                        categoryIDs: categoryIDs,
+                        categoryIDs: categoryIDs.map(id => new mongoose.Types.ObjectId(id)),
                         isViewPrice: true
                     }
                 }

+ 4 - 1
src/actions/menu/deleteCategory/index.ts

@@ -14,6 +14,9 @@ const deleteCategory = async (userID: string, input: DeleteCategoryInput): Promi
             categoryIDs
         } = input;
 
+        const objectUserID = new mongoose.Types.ObjectId(userID);
+
+
         if (categoryIDs.length === 0) {
             return {
                 message: "categoryIDs-cannot-be-empty",
@@ -40,7 +43,7 @@ const deleteCategory = async (userID: string, input: DeleteCategoryInput): Promi
             _id: {
                 $in: objectIdArray
             },
-            userID: userID
+            userID: objectUserID
         });
 
         if (result.deletedCount === 0) {

+ 6 - 4
src/actions/menu/deleteMenu/index.ts

@@ -13,6 +13,8 @@ const deleteMenu = async (userID: string, input: DeleteMenuInput): Promise<Delet
             menuIDs
         } = input;
 
+        const objectUserID = new mongoose.Types.ObjectId(userID);
+
         if (menuIDs.length === 0) {
             return {
                 message: "menuIDs-cannot-be-empty",
@@ -26,7 +28,7 @@ const deleteMenu = async (userID: string, input: DeleteMenuInput): Promise<Delet
             _id: {
                 $in: objectIdArray
             },
-            userID: userID
+            userID: objectUserID
         });
 
         if (existingMenusCount !== objectIdArray.length) {
@@ -37,7 +39,7 @@ const deleteMenu = async (userID: string, input: DeleteMenuInput): Promise<Delet
         }
 
         const activeMenuCount = await Menu.countDocuments({
-            userID: userID,
+            userID: objectUserID,
             isActive: true
         });
 
@@ -45,7 +47,7 @@ const deleteMenu = async (userID: string, input: DeleteMenuInput): Promise<Delet
             _id: {
                 $in: objectIdArray
             },
-            userID: userID,
+            userID: objectUserID,
             isActive: true
         });
 
@@ -60,7 +62,7 @@ const deleteMenu = async (userID: string, input: DeleteMenuInput): Promise<Delet
             _id: {
                 $in: objectIdArray
             },
-            userID: userID
+            userID: objectUserID
         });
 
         return {

+ 5 - 3
src/actions/menu/deleteProduct/index.ts

@@ -15,6 +15,8 @@ const deleteProduct = async (userID: string, input: DeleteProductInput): Promise
             productIDs
         } = input;
 
+        const objectUserID = new mongoose.Types.ObjectId(userID);
+
         if (productIDs.length === 0) {
             return {
                 message: "productIDs-cannot-be-empty",
@@ -28,7 +30,7 @@ const deleteProduct = async (userID: string, input: DeleteProductInput): Promise
             _id: {
                 $in: objectIdArray
             },
-            userID: userID
+            userID: objectUserID
         });
 
         if (result.deletedCount === 0) {
@@ -40,7 +42,7 @@ const deleteProduct = async (userID: string, input: DeleteProductInput): Promise
 
         await Menu.updateMany(
             {
-                userID: userID
+                userID: objectUserID
             },
             {
                 $pull: {
@@ -57,7 +59,7 @@ const deleteProduct = async (userID: string, input: DeleteProductInput): Promise
             productID: {
                 $in: objectIdArray
             },
-            userID: userID
+            userID: objectUserID
         });
 
         return {

+ 3 - 1
src/actions/menu/deleteRecommendedProduct/index.ts

@@ -13,6 +13,8 @@ const deleteRecommendedProduct = async (userID: string, input: DeleteRecommended
             recommendedProductIDs
         } = input;
 
+        const objectUserID = new mongoose.Types.ObjectId(userID);
+
         if (recommendedProductIDs.length === 0) {
             return {
                 message: "recommendedProductIDs-cannot-be-empty",
@@ -26,7 +28,7 @@ const deleteRecommendedProduct = async (userID: string, input: DeleteRecommended
             _id: {
                 $in: objectIdArray
             },
-            userID: userID
+            userID: objectUserID 
         });
 
         if (result.deletedCount === 0) {

+ 4 - 1
src/actions/menu/getCategories/index.ts

@@ -1,3 +1,4 @@
+import mongoose from "mongoose";
 import {
     Category
 } from "../../../models";
@@ -7,8 +8,10 @@ import {
 
 const getCategories = async (userID: string): Promise<GetCategoriesResult> => {
     try {
+        const objectUserID = new mongoose.Types.ObjectId(userID);
+
         const categories = await Category.find({
-            userID
+            objectUserID
         }).sort({
             index: 1 
         });

+ 2 - 1
src/actions/menu/getMenus/index.ts

@@ -1,3 +1,4 @@
+import mongoose from "mongoose";
 import {
     Menu
 } from "../../../models";
@@ -14,7 +15,7 @@ const getMenus = async (userID: string, query: GetMenusInput): Promise<GetMenusR
         } = query;
 
         const matchStage: any = {
-            userID
+            userID: new mongoose.Types.ObjectId(userID)
         };
 
         if (isActive !== undefined) {

+ 0 - 1
src/actions/menu/getProducts/index.ts

@@ -10,7 +10,6 @@ import {
 
 const getProducts = async (userID: string, query: GetProductsInput): Promise<GetProductsResult> => {
     try {
-
         const {
             categoryIDs,
             search

+ 16 - 14
src/actions/menu/getRecommendedProducts/index.ts

@@ -64,20 +64,22 @@ const getRecommendedProducts = async (userID: string, query: GetRecommendedProdu
             }
         ]);
 
-        const payload = recommendedProducts.map((rec) => ({
-            _id: rec._id.toString(),
-            productID: rec.productID.toString(),
-            title: rec.title,
-            description: rec.description,
-            delay: rec.delay,
-            isActive: rec.isActive,
-            productDetails: rec.productDetails ? {
-                price: rec.productDetails.price,
-                photos: rec.productDetails.photos,
-                isAvailable: rec.productDetails.isAvailable,
-                originalTitle: rec.productDetails.title
-            } : null
-        }));
+        const payload = recommendedProducts.map((rec) => {
+            return {
+                _id: rec._id.toString(),
+                productID: rec.productID.toString(),
+                title: rec.title,
+                description: rec.description,
+                delay: rec.delay,
+                isActive: rec.isActive,
+                productDetails: rec.productDetails ? {
+                    price: rec.productDetails.price,
+                    photos: rec.productDetails.photos,
+                    isAvailable: rec.productDetails.isAvailable,
+                    originalTitle: rec.productDetails.title
+                } : null
+            };
+        });
 
         return {
             message: "recommended-products-retrieved-successfully",

+ 0 - 1
src/actions/menu/updateMenu/index.ts

@@ -18,7 +18,6 @@ const updateMenu = async (userID: string, input: UpdateMenuInput): Promise<Updat
         const objectUserID = new mongoose.Types.ObjectId(userID);
 
         if (updateFields.isActive === false) {
-
             const activeMenuCount = await Menu.countDocuments({
                 userID: objectUserID,
                 isActive: true

+ 15 - 52
src/controllers/authController.ts

@@ -28,60 +28,39 @@ export const register = async (req: Request, res: Response): Promise<void> => {
 };
 
 export const login = async (req: Request, res: Response): Promise<void> => {
-    try {
-        const result = await _login(req.body);
+    const result = await _login(req.body);
 
-        res.status(result.code).json({
+    res.status(result.code)
+        .json({
             message: result.message,
             code: result.code,
             ...(result.payload && {
                 payload: result.payload
             }),
         });
-
-    } catch (error) {
-        console.error("Login controller error:", error);
-        res.status(500).json({
-            message: "server-error",
-            code: 500,
-        });
-    }
 };
 
 export const logout = async (req: AuthRequest, res: Response): Promise<void> => {
-    try {
-        const result = await _logout(req.context!);
+    const result = await _logout(req.context!);
 
-        res.status(result.code).json({
+    res.status(result.code)
+        .json({
             message: result.message,
             code: result.code,
         });
-    } catch (error) {
-        console.error("Logout controller error:", error);
-        res.status(500).json({
-            message: "server-error",
-            code: 500,
-        });
-    }
 };
 
 export const me = async (req: AuthRequest, res: Response): Promise<void> => {
-    try {
-        const result = await _me(req.context!);
+    const result = await _me(req.context!);
 
-        res.status(result.code).json({
+    res.status(result.code)
+        .json({
             message: result.message,
             code: result.code,
             ...(result.payload && {
                 payload: result.payload
             })
         });
-    } catch (error) {
-        res.status(500).json({
-            message: "server-error",
-            code: 500
-        });
-    }
 };
 
 export const refreshToken = async (req: Request, res: Response): Promise<void> => {
@@ -98,24 +77,16 @@ export const refreshToken = async (req: Request, res: Response): Promise<void> =
 };
 
 export const startMailVerify = async (req: AuthRequest, res: Response): Promise<void> => {
-    try {
-        const result = await _startMailVerify(req.context!);
+    const result = await _startMailVerify(req.context!);
 
-        res.status(result.code).json({
+    res.status(result.code)
+        .json({
             message: result.message,
             code: result.code,
             ...(result.payload && {
                 payload: result.payload
             }),
         });
-
-    } catch (error) {
-        console.error("StartMailVerify controller error:", error);
-        res.status(500).json({
-            message: "internal-server-error",
-            code: 500
-        });
-    }
 };
 
 export const finishMailVerify = async (req: AuthRequest, res: Response): Promise<void> => {
@@ -139,22 +110,14 @@ export const smsOTP = async (req: Request, res: Response): Promise<void> => {
 };
 
 export const smsSend = async (req: Request, res: Response): Promise<void> => {
-    try {
-        const result = await _smsSend(req.body);
+    const result = await _smsSend(req.body);
 
-        res.status(result.code).json({
+    res.status(result.code)
+        .json({
             message: result.message,
             code: result.code,
             ...(result.payload && {
                 payload: result.payload
             }),
         });
-
-    } catch (error) {
-        console.error("SmsSend controller error:", error);
-        res.status(500).json({
-            message: "internal-server-error",
-            code: 500
-        });
-    }
 };

+ 4 - 1
src/routes/index.ts

@@ -3,10 +3,13 @@ import {
 } from "express";
 import authRoutes from "./authRoutes";
 import menuRoutes from "./menuRoutes";
+import {
+    authMiddleware 
+} from "../middlewares/authMiddleware";
 
 const router = Router();
 
 router.use("/auth", authRoutes);
-router.use("/menu", menuRoutes);
+router.use("/menu", authMiddleware, menuRoutes);
 
 export default router;

+ 16 - 21
src/routes/menuRoutes.ts

@@ -19,7 +19,6 @@ import {
     getMenus,
     addMenu
 } from "../controllers/menuController";
-
 import {
     DeleteRecommendedProductInput,
     UpdateRecommendedProductInput,
@@ -34,10 +33,6 @@ import {
     DeleteMenuInput,
     AddMenuInput
 } from "../actions/menu/types";
-
-import {
-    authMiddleware
-} from "../middlewares/authMiddleware";
 import {
     validateBody
 } from "../middlewares/validateBody";
@@ -45,27 +40,27 @@ import {
 const router = Router();
 
 // --- KATEGORİ ENDPOINTLERİ ---
-router.delete("/deleteCategory", authMiddleware, validateBody(DeleteCategoryInput), deleteCategory);
-router.put("/updateCategory", authMiddleware, validateBody(UpdateCategoryInput), updateCategory);
-router.post("/addCategory", authMiddleware, validateBody(AddCategoryInput), addCategory);
-router.get("/getCategories", authMiddleware, getCategories);
+router.delete("/deleteCategory", validateBody(DeleteCategoryInput), deleteCategory);
+router.put("/updateCategory", validateBody(UpdateCategoryInput), updateCategory);
+router.post("/addCategory", validateBody(AddCategoryInput), addCategory);
+router.get("/getCategories", getCategories);
 
 // --- ÜRÜN ENDPOINTLERİ ---
-router.delete("/deleteProduct", authMiddleware, validateBody(DeleteProductInput), deleteProduct);
-router.put("/updateProduct", authMiddleware, validateBody(UpdateProductInput), updateProduct);
-router.post("/addProduct", authMiddleware, validateBody(AddProductInput), addProduct);
-router.get("/getProducts", authMiddleware, getProducts);
+router.delete("/deleteProduct", validateBody(DeleteProductInput), deleteProduct);
+router.put("/updateProduct", validateBody(UpdateProductInput), updateProduct);
+router.post("/addProduct", validateBody(AddProductInput), addProduct);
+router.get("/getProducts", getProducts);
 
 // --- MENÜ ENDPOINTLERİ ---
-router.delete("/deleteMenu", authMiddleware, validateBody(DeleteMenuInput), deleteMenu);
-router.put("/updateMenu", authMiddleware, validateBody(UpdateMenuInput), updateMenu);
-router.post("/addMenu", authMiddleware, validateBody(AddMenuInput), addMenu);
-router.get("/getMenus", authMiddleware, getMenus);
+router.delete("/deleteMenu", validateBody(DeleteMenuInput), deleteMenu);
+router.put("/updateMenu", validateBody(UpdateMenuInput), updateMenu);
+router.post("/addMenu", validateBody(AddMenuInput), addMenu);
+router.get("/getMenus", getMenus);
 
 // --- ÖNE ÇIKAN ÜRÜN ENDPOINTLERİ ---
-router.delete("/deleteRecommendedProduct", authMiddleware, validateBody(DeleteRecommendedProductInput), deleteRecommendedProduct);
-router.put("/updateRecommendedProduct", authMiddleware, validateBody(UpdateRecommendedProductInput), updateRecommendedProduct);
-router.post("/addRecommendedProduct", authMiddleware, validateBody(AddRecommendedProductInput), addRecommendedProduct);
-router.get("/getRecommendedProducts", authMiddleware, getRecommendedProducts);
+router.delete("/deleteRecommendedProduct", validateBody(DeleteRecommendedProductInput), deleteRecommendedProduct);
+router.put("/updateRecommendedProduct", validateBody(UpdateRecommendedProductInput), updateRecommendedProduct);
+router.post("/addRecommendedProduct", validateBody(AddRecommendedProductInput), addRecommendedProduct);
+router.get("/getRecommendedProducts", getRecommendedProducts);
 
 export default router;