Parcourir la source

Feature: Implement finish mail verification functionality and update related routes

emrecevik106 il y a 1 mois
Parent
commit
1cbe66b105

+ 72 - 0
src/actions/auth/finishMailVerified/index.ts

@@ -0,0 +1,72 @@
+import {
+    User 
+} from "../../../models/User";
+import redis from "../../../config/redis";
+
+interface FinishMailVerifyInput {
+    userID: string;
+    code: string;
+}
+
+interface FinishMailVerifyResult {
+    message: string;
+    code: number;
+}
+
+const finishMailVerify = async (input: FinishMailVerifyInput): Promise<FinishMailVerifyResult> => {
+    try {
+        const {
+            userID,
+            code 
+        } = input;
+
+        if (!userID || !code) {
+            return {
+                message: "userID-and-code-required",
+                code: 400,
+            };
+        }
+
+        const user = await User.findById(userID);
+        if (!user) {
+            return {
+                message: "user-not-found",
+                code: 404
+            };
+        }
+
+        const cachedCode = await redis.get(`mail-verify-${userID}`);
+        if (!cachedCode) {
+            return {
+                message: "exceeded-time-limit-for-request",
+                code: 400
+            };
+        }
+
+        if (cachedCode !== code) {
+            return {
+                message: "invalid-code",
+                code: 400
+            };
+        }
+
+        await User.findByIdAndUpdate(userID, {
+            isMailVerified: true 
+        });
+        await redis.del(`mail-verify-${userID}`);
+
+        return {
+            message: "mail-verified",
+            code: 200
+        };
+
+    } catch (error) {
+        console.error("FinishMailVerify error:", error);
+        return {
+            message: "internal-server-error",
+            code: 500
+        };
+    }
+};
+
+export default finishMailVerify;

+ 3 - 0
src/actions/auth/index.ts

@@ -13,3 +13,6 @@ export {
 export {
     default as refreshToken 
 } from "./refreshToken";
+export {
+    default as finishMailVerify 
+} from "./finishMailVerified";

+ 27 - 0
src/controllers/authController.ts

@@ -4,6 +4,7 @@ import {
 } from "express";
 import {
     refreshToken as _refreshToken,
+    finishMailVerify as _finishMailVerify,
     register as _register,
     logout as _logout,
     login as _login,
@@ -170,4 +171,30 @@ export const refreshToken = async (req: Request, res: Response): Promise<void> =
                 code: 500,
             });
     }
+};
+
+export const finishMailVerify = async (req: Request, res: Response): Promise<void> => {
+    try {
+        const {
+            userID,
+            code 
+        } = req.body;
+
+        const result = await _finishMailVerify({
+            userID, 
+            code 
+        });
+
+        res.status(result.code).json({
+            message: result.message,
+            code: result.code,
+        });
+
+    } catch (error) {
+        console.error("FinishMailVerify controller error:", error);
+        res.status(500).json({
+            message: "internal-server-error",
+            code: 500
+        });
+    }
 };

+ 3 - 2
src/routes/authRoutes.ts

@@ -2,11 +2,12 @@ import {
     Router
 } from "express";
 import {
+    finishMailVerify,
     refreshToken,
     register,
     logout,
     login,
-    me
+    me,
 } from "../controllers/authController";
 import {
     authMiddleware, 
@@ -30,6 +31,6 @@ router.get("/validate-token", authMiddleware, (req:AuthRequest, res) => {
 });
 
 router.post("/refresh-token", refreshToken);
-
+router.post("/finish-mail-verify", finishMailVerify);
 
 export default router;