ソースを参照

Merge branch 'feature/me-endpoint-feature' into develop

BedirhanOZCAN 1 ヶ月 前
コミット
a54ce66621

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

@@ -7,3 +7,6 @@ export {
 export {
     default as logout
 } from "./logout";
+export {
+    default as me
+} from "./me";

+ 3 - 1
src/actions/auth/login/index.ts

@@ -58,7 +58,9 @@ export const login = async (input: LoginInput): Promise<LoginResult> => {
             code: 403,
             payload: {
                 isMailVerified: user.isMailVerified,
-                mail: user.mail,
+                user: {
+                    mail: user.mail,
+                }
             },
         };
     }

+ 6 - 7
src/actions/auth/login/types.ts

@@ -25,14 +25,13 @@ export interface LoginResult {
         isMailVerified?: boolean;
         refreshToken?: string;
         accessToken?: string;
-        mail?: string;
         user?: {
-            companyName: string;
-            phoneNumber: string;
-            firstName: string;
-            lastName: string;
-            fullName: string;
-            userId: string;
+            phoneNumber?: string;
+            companyName?: string;
+            firstName?: string;
+            fullName?: string;
+            lastName?: string;
+            userId?: string;
             mail: string;
         };
     };

+ 42 - 0
src/actions/auth/me/index.ts

@@ -0,0 +1,42 @@
+import {
+    User
+} from "../../../models/User";
+import {
+    MeResult
+} from "./types";
+
+export const me = async (userId: string): Promise<MeResult> => {
+    try {
+        const user = await User.findById(userId).select("-password -refreshToken");
+
+        if (!user) {
+            return {
+                message: "User not found",
+                code: 404,
+            };
+        }
+
+        return {
+            message: "User profile retrieved",
+            code: 200,
+            payload: {
+                user: {
+                    phoneNumber: user.phoneNumber,
+                    companyName: user.companyName,
+                    userId: user._id.toString(),
+                    firstName: user.firstName,
+                    fullName: user.fullName,
+                    lastName: user.lastName,
+                    mail: user.mail,
+                }
+            }
+        };
+    } catch (error) {
+        console.error("Me action error:", error);
+        return {
+            message: "Internal server error", code: 500
+        };
+    }
+};
+
+export default me;

+ 15 - 0
src/actions/auth/me/types.ts

@@ -0,0 +1,15 @@
+export interface MeResult {
+    message: string;
+    code: number;
+    payload?: {
+        user: {
+            phoneNumber: string;
+            companyName: string;
+            userId: string;
+            firstName: string;
+            fullName: string;
+            lastName: string;
+            mail: string;
+        };
+    };
+}

+ 30 - 0
src/controllers/authController.ts

@@ -11,6 +11,9 @@ import {
 import {
     logout as _logout
 } from "../actions/auth/logout";
+import {
+    me as _me
+} from "../actions/auth/me";
 import {
     AuthRequest
 } from "../middlewares/authMiddleware";
@@ -117,4 +120,31 @@ export const logout = async (req: AuthRequest, res: Response): Promise<void> =>
             code: 500,
         });
     }
+};
+
+export const me = async (req: AuthRequest, res: Response): Promise<void> => {
+    try {
+        const context = req.context;
+
+        if (!context || !context.userId) {
+            res.status(401).json({
+                message: "Unauthorized", code: 401
+            });
+            return;
+        }
+
+        const result = await _me(context.userId);
+
+        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
+        });
+    }
 };

+ 4 - 2
src/routes/authRoutes.ts

@@ -1,10 +1,11 @@
 import {
-    Router 
+    Router
 } from "express";
 import {
     register,
+    logout,
     login,
-    logout
+    me
 } from "../controllers/authController";
 import {
     authMiddleware
@@ -13,6 +14,7 @@ import {
 const router = Router();
 
 router.post("/logout", authMiddleware, logout);
+router.get("/me", authMiddleware, me);
 router.post("/register", register);
 router.post("/login", login);