Prechádzať zdrojové kódy

Refactor: Add category, menu, product limits and refactor related actions

emrecevik106 1 mesiac pred
rodič
commit
54fd178a87

+ 5 - 5
src/actions/menu/addCategory/index.ts

@@ -1,27 +1,27 @@
 import {
     Category 
-} from "../../../models/Category";
+} from "../../../models";
 import {
     AddCategoryInput, 
     AddCategoryResult
 } from "./types";
 
-const addCategory = async (userID: string, input: AddCategoryInput): Promise<AddCategoryResult> => {
+const addCategory = async (userID: string, categoryLimit: number, input: AddCategoryInput): Promise<AddCategoryResult> => {
     try {
         const {
             title,
             index
         } = input;
 
-        /*  const categoryCount = await Category.countDocuments({
+        const categoryCount = await Category.countDocuments({
             userID
         });
-        if (categoryCount >= context.categoryLimit) {
+        if (categoryCount >= categoryLimit) {
             return {
                 message: "category-limit-reached",
                 code: 403
             };
-        } */
+        } 
 
         const existing = await Category.findOne({
             userID,

+ 6 - 6
src/actions/menu/addMenu/index.ts

@@ -1,12 +1,12 @@
 import {
-    Menu
-} from "../../../models/Menu";
+    Menu 
+} from "../../../models";
 import {
     AddMenuInput,
     AddMenuResult
 } from "./types";
 
-const addMenu = async (userID: string, input: AddMenuInput): Promise<AddMenuResult> => {
+const addMenu = async (userID: string, menuLimit: number, input: AddMenuInput): Promise<AddMenuResult> => {
     try {
         const {
             description,
@@ -15,15 +15,15 @@ const addMenu = async (userID: string, input: AddMenuInput): Promise<AddMenuResu
             title
         } = input;
 
-        /*   const menuCount = await Menu.countDocuments({
+        const menuCount = await Menu.countDocuments({
             userID
         });
-        if (menuCount >= context.menuLimit) {
+        if (menuCount >= menuLimit) {
             return {
                 message: "menu-limit-reached",
                 code: 403
             };
-        }  */
+        }  
 
         const newMenu = await Menu.create({
             isViewPrice,

+ 6 - 9
src/actions/menu/addProduct/index.ts

@@ -1,15 +1,12 @@
 import {
-    Menu
-} from "../../../models/Menu";
-import {
-    Product
-} from "../../../models/Product";
+    Menu, Product 
+} from "../../../models";
 import {
     AddProductInput,
     AddProductResult
 } from "./types";
 
-const addProduct = async (userID: string, input: AddProductInput): Promise<AddProductResult> => {
+const addProduct = async (userID: string, productLimit: number, input: AddProductInput): Promise<AddProductResult> => {
     try {
         const {
             categoryIDs,
@@ -20,15 +17,15 @@ const addProduct = async (userID: string, input: AddProductInput): Promise<AddPr
             ? categoryIDs
             : categoryIDs ? [categoryIDs] : [];
 
-        /*   const productCount = await Product.countDocuments({
+        const productCount = await Product.countDocuments({
             userID
         });
-        if (productCount >= context.productLimit) {
+        if (productCount >= productLimit) {
             return {
                 message: "product-limit-reached",
                 code: 403
             };
-        } */
+        } 
 
         const newProduct = await Product.create({
             categoryIDs: normalizedCategoryIDs,

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

@@ -1,9 +1,7 @@
 import {
-    Category
-} from "../../../models/Category";
-import {
-    Product
-} from "../../../models/Product";
+    Category, 
+    Product 
+} from "../../../models";
 import {
     DeleteCategoryResult,
     DeleteCategoryInput

+ 1 - 1
src/actions/menu/deleteMenu/index.ts

@@ -1,6 +1,6 @@
 import {
     Menu
-} from "../../../models/Menu";
+} from "../../../models";
 import {
     DeleteMenuInput,
     DeleteMenuResult

+ 2 - 4
src/actions/menu/deleteProduct/index.ts

@@ -1,10 +1,8 @@
 import mongoose from "mongoose";
 import {
+    Product,
     Menu
-} from "../../../models/Menu";
-import {
-    Product
-} from "../../../models/Product";
+} from "../../../models";
 import {
     DeleteProductInput,
     DeleteProductResult

+ 2 - 2
src/actions/menu/getCategories/index.ts

@@ -1,6 +1,6 @@
 import {
-    Category 
-} from "../../../models/Category";
+    Category
+} from "../../../models";
 import {
     GetCategoriesResult 
 } from "./types";

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

@@ -1,6 +1,6 @@
 import {
     Menu
-} from "../../../models/Menu";
+} from "../../../models";
 import {
     GetMenusInput,
     GetMenusResult

+ 2 - 4
src/actions/menu/getProducts/index.ts

@@ -1,14 +1,12 @@
 import mongoose from "mongoose";
-import {
-    Product
-} from "../../../models/Product";
 import {
     GetProductsResult,
     GetProductsInput
 } from "./types";
 import {
+    Product,
     Menu
-} from "../../../models/Menu";
+} from "../../../models/";
 
 const getProducts = async (userID: string , query: GetProductsInput): Promise<GetProductsResult> => {
     try {

+ 1 - 1
src/actions/menu/updateCategory/index.ts

@@ -1,6 +1,6 @@
 import {
     Category 
-} from "../../../models/Category";
+} from "../../../models";
 import {
     UpdateCategoryInput, 
     UpdateCategoryResult 

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

@@ -1,6 +1,6 @@
 import {
     Menu
-} from "../../../models/Menu";
+} from "../../../models";
 import {
     UpdateMenuInput,
     UpdateMenuResult

+ 1 - 1
src/actions/menu/updateProduct/index.ts

@@ -1,7 +1,7 @@
 import mongoose from "mongoose";
 import {
     Product
-} from "../../../models/Product";
+} from "../../../models";
 import {
     UpdateProductInput,
     UpdateProductResult

+ 6 - 3
src/controllers/menuController.ts

@@ -21,7 +21,8 @@ import {
 
 //#region Category Controllers
 export const addCategory = async (req: AuthRequest, res: Response): Promise<void> => {
-    const result = await _addCategory(req.context!.userID, req.body);
+    const categoryLimit = req.context!.planDetails?.categoryLimit ?? 0;
+    const result = await _addCategory(req.context!.userID, categoryLimit, req.body);
 
     res.status(result.code)
         .json({
@@ -72,7 +73,8 @@ export const getCategories = async (req: AuthRequest, res: Response): Promise<vo
 
 //#region Product Controllers
 export const addProduct = async (req: AuthRequest, res: Response): Promise<void> => {
-    const result = await _addProduct(req.context!.userID, req.body);
+    const productLimit = req.context!.planDetails?.productLimit ?? 0;
+    const result = await _addProduct(req.context!.userID, productLimit, req.body);
 
     res.status(result.code)
         .json({
@@ -126,7 +128,8 @@ export const deleteProduct = async (req: AuthRequest, res: Response): Promise<vo
 
 //#region Menu Controllers
 export const addMenu = async (req: AuthRequest, res: Response): Promise<void> => {
-    const result = await _addMenu(req.context!.userID, req.body);
+    const menuLimit = req.context!.planDetails?.menuLimit ?? 0;
+    const result = await _addMenu(req.context!.userID, menuLimit, req.body);
 
     res.status(result.code)
         .json({

+ 24 - 14
src/middlewares/authMiddleware.ts

@@ -15,8 +15,28 @@ export interface AuthRequest extends Request {
         fullName: string;
         userID: string;
         token: string;
+        planDetails: {
+            recommendedProductLimit: number;
+            categoryLimit: number;
+            productLimit: number;
+            planID: string;
+            menuLimit: number;
+        } | null;
     };
 }
+export interface DecodedToken {
+    companyName: string;
+    fullName: string;
+    userID: string;
+    token: string;
+    planDetails: {
+        recommendedProductLimit: number;
+        categoryLimit: number;
+        productLimit: number;
+        planID: string;
+        menuLimit: number;
+    } | null;
+}
 
 export const authMiddleware = async (req: AuthRequest, res: Response, next: NextFunction): Promise<void> => {
     try {
@@ -31,20 +51,9 @@ export const authMiddleware = async (req: AuthRequest, res: Response, next: Next
             return;
         }
 
-        let decoded: {
-            companyName: string;
-            fullName: string;
-            userID: string;
-            token: string;
-        };
-
+        let decoded: DecodedToken;
         try {
-            decoded = jwt.verify(token, process.env.JWT_SECRET as string) as {
-                companyName: string;
-                fullName: string;
-                userID: string,
-                token: string;
-            };
+            decoded = jwt.verify(token, process.env.JWT_SECRET as string) as DecodedToken;
         } catch (err) {
             res.status(401)
                 .json({
@@ -96,7 +105,8 @@ export const authMiddleware = async (req: AuthRequest, res: Response, next: Next
             companyName: decoded.companyName,
             fullName: decoded.fullName,
             userID: decoded.userID,
-            token: token
+            token: token,
+            planDetails: decoded.planDetails ?? null
         };
         next();