Skip to content

Commit 2ea371e

Browse files
committed
Added GetProfileInfo
1 parent 1cf8895 commit 2ea371e

File tree

12 files changed

+143
-34
lines changed

12 files changed

+143
-34
lines changed

auth-service/package-lock.json

Lines changed: 9 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

auth-service/package.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,14 @@
2222
"express": "^4.18.2",
2323
"jsdom": "^22.1.0",
2424
"jsonwebtoken": "^9.0.1",
25+
"lodash": "^4.17.21",
2526
"mongoose": "^7.3.2",
2627
"node-fetch": "^3.3.1",
2728
"nodemailer": "^6.9.4"
2829
},
2930
"devDependencies": {
3031
"@types/express": "^4.17.17",
31-
"@types/jsdom": "^21.1.1"
32+
"@types/jsdom": "^21.1.1",
33+
"@types/lodash": "^4.14.196"
3234
}
3335
}

auth-service/src/controllers/authController.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ const login = async (req: Request, res: Response) => {
8282
}
8383

8484
const payload = {
85-
donor: {
85+
user: {
8686
id: user.id,
8787
},
8888
};
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import { Request, Response } from 'express';
2+
import UserModel from '../models/User';
3+
4+
const getUserInfo = async (req: Request, res: Response) => {
5+
try{
6+
const user = req.user;
7+
if(!user){
8+
return res.status(400).json({error: "User Not Found!"});
9+
}
10+
11+
let userInfo = await UserModel.findById(user.id).select("name email batch program batch sectionCode registrationNumber gender");
12+
if(!userInfo){
13+
return res.status(400).json({error: "User Not Found!"});
14+
}
15+
16+
return res.json({success: true, userInfo});
17+
}catch(error){
18+
console.log(error);
19+
return res.json({error: "Something Went Wrong!"});
20+
}
21+
}
22+
23+
export { getUserInfo };
Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,31 @@
1-
require('dotenv').config();
2-
3-
import { NextFunction, Response, Request } from 'express';
1+
import { Request, Response, NextFunction } from 'express';
2+
import dotenv from 'dotenv';
3+
dotenv.config();
44
import jwt from 'jsonwebtoken';
5+
import { merge } from 'lodash';
56

6-
const JWT_SECRET = process.env.JWT_SECRET;
7+
const JWT_SECRET = process.env.JWT_SECRET as string;
78

89
interface UserPayload {
9-
user: any;
10+
user: string;
1011
}
1112

12-
const fetchUser = (req: Request, res: Response, next: NextFunction)=>{
13+
const fetchuser = (req: Request, res: Response, next: NextFunction)=>{
1314

14-
// Get the user from auth tokein and extract id and then add it to the req object
15-
const token = req.header('auth-token');
16-
15+
const token:any = req.header('auth-token');
1716
if(!token){
1817
res.status(401).send({error: "Token Validation Error!"})
1918
}
2019

2120
try{
22-
const data = jwt.verify(token!, JWT_SECRET!) as UserPayload;
23-
req.user = data.user;
24-
next();
21+
22+
const data = jwt.verify(token, JWT_SECRET) as UserPayload;
23+
merge(req, {user: data.user});
24+
25+
return next();
2526
}catch(error){
2627
res.status(401).send({error: "Token Validation Error!"})
2728
}
2829
}
2930

30-
export default fetchUser;
31+
export default fetchuser;

auth-service/src/routes/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
import {Router} from 'express';
22
import auth from './auth';
3+
import user from './user';
34

45
const router = Router();
56

67
export default (): Router => {
78
auth(router);
9+
user(router);
810
return router;
911
};

auth-service/src/routes/user.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import {Router} from 'express';
2+
import { getUserInfo } from '../controllers/userController';
3+
import fetchuser from '../middleware/fetchuser';
4+
5+
export default (router: Router) => {
6+
router.route('/api/getprofileinfo').get(fetchuser, getUserInfo);
7+
}

web/src/components/Navbar.tsx

Lines changed: 24 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
import { Link } from "react-router-dom";
22
import Logo from "../assets/logo";
33
import { useAppSelector, useAppDispatch } from "@/app/hooks";
4-
import { selectUser ,logout} from "@/features/user/UserSlice";
4+
import { selectUser, logout } from "@/features/user/UserSlice";
55
import { useEffect } from "react";
6+
import { useNavigate } from "react-router-dom";
67

78
const Navbar = () => {
9+
const navigate = useNavigate();
810
const user = useAppSelector(selectUser);
911
const dispatch = useAppDispatch();
1012
useEffect(() => {
@@ -14,14 +16,17 @@ const Navbar = () => {
1416
<>
1517
<header className="header z-10 sticky top-0 bg-slate-100 dark:bg-dark1 dark:text-white shadow-md flex items-center justify-between px-8 py-02">
1618
{/* logo */}
17-
<Link to="/" className="md:w-3/12 w-6/12 p-2 flex justify-start my-auto">
19+
<Link
20+
to="/"
21+
className="md:w-3/12 w-6/12 p-2 flex justify-start my-auto"
22+
>
1823
{/* <img className="fill-blue-400" height={50} width={30} src="/logo.svg" /> */}
1924
<Logo />
20-
<span
21-
className={`my-auto font-bold`}
22-
>
25+
<span className={`my-auto font-bold`}>
2326
<span className="text-blue-500">CODE</span>
24-
<span className="text-white bg-blue-500 dark:bg-transparent dark:text-white">berg</span>
27+
<span className="text-white bg-blue-500 dark:bg-transparent dark:text-white">
28+
berg
29+
</span>
2530
</span>
2631
</Link>
2732
{/* navigation */}
@@ -41,11 +46,20 @@ const Navbar = () => {
4146
{/* buttons -*/}
4247
<div className="w-6/12 md:w-3/12 flex justify-end">
4348
{!user.isLogged ? (
44-
<Link to="/login" className="dark:bg-dark3 dark:hover:bg-dark4 bg-slate-200 hover:bg-slate-300 dark:text-white rounded-lg shadow-md px-4 py-2 font-semibold">
45-
Login
46-
</Link>
49+
<Link
50+
to="/login"
51+
className="dark:bg-dark3 dark:hover:bg-dark4 bg-slate-200 hover:bg-slate-300 dark:text-white rounded-lg shadow-md px-4 py-2 font-semibold"
52+
>
53+
Login
54+
</Link>
4755
) : (
48-
<button onClick={()=> dispatch(logout())} className="dark:bg-dark3 dark:hover:bg-dark4 bg-slate-200 hover:bg-slate-300 dark:text-white rounded-lg shadow-md px-4 py-2 font-semibold">
56+
<button
57+
onClick={() => {
58+
dispatch(logout());
59+
navigate("/");
60+
}}
61+
className="dark:bg-dark3 dark:hover:bg-dark4 bg-slate-200 hover:bg-slate-300 dark:text-white rounded-lg shadow-md px-4 py-2 font-semibold"
62+
>
4963
Logout
5064
</button>
5165
)}

web/src/components/Profile/ProfileCard.tsx

Lines changed: 29 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,30 @@
1-
import React from "react";
1+
import {useEffect} from "react";
2+
import { setUser } from "@/features/user/UserSlice";
3+
import { useAppDispatch, useAppSelector } from "@/app/hooks";
4+
import { fetchUser } from "@/features/user/UserAPI";
5+
import { selectUser } from "@/features/user/UserSlice";
6+
import { useNavigate } from "react-router-dom";
27

38
const ProfileCard = () => {
9+
10+
const navigate = useNavigate();
11+
const user = useAppSelector(selectUser);
12+
13+
const dispatch = useAppDispatch();
14+
const handleFetchUser = async () => {
15+
const user = await fetchUser();
16+
dispatch(setUser(user));
17+
};
18+
19+
useEffect(() => {
20+
if(!user.isLogged) {
21+
navigate("/login");
22+
return;
23+
}
24+
handleFetchUser();
25+
}, []);
26+
27+
428
return (
529
<div>
630
<div className="md:px-16">
@@ -58,13 +82,13 @@ const ProfileCard = () => {
5882
<div className="md:mt-20 mt-5 text-center border-b pb-12">
5983
{" "}
6084
<h1 className="text-4xl font-medium text-gray-700 dark:text-white">
61-
Saket Aryan{" "}
85+
{user.name}{" "}
6286
</h1>{" "}
63-
<p className="font-light text-gray-600 mt-3 dark:text-white">CSE - Z, 2025</p>{" "}
87+
<p className="font-light text-gray-600 mt-3 dark:text-white">{user.registrationNumber}</p>{" "}
6488
<p className="mt-8 text-gray-500">
65-
Solution Manager - Creative Tim Officer
89+
{user.sectionCode}, {user.batch}
6690
</p>{" "}
67-
<p className="mt-2 text-gray-500">University of Computer Science</p>
91+
<p className="mt-2 text-gray-500">{user.program}</p>
6892
</div>{" "}
6993
<div className="mt-12 flex flex-col justify-center">
7094
{" "}

web/src/features/user/UserAPI.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,19 @@
11
const fetchUser = async () => {
22
const authToken = localStorage.getItem("auth-token");
3+
if (authToken) {
4+
const response = await fetch("http://localhost:9000/api/getprofileinfo", {
5+
method: "GET",
6+
headers: {
7+
"Content-Type": "application/json",
8+
"auth-token": authToken,
9+
},
10+
});
11+
const data = await response.json();
12+
if(data.success){
13+
return data.userInfo;
14+
}
15+
}
16+
return null;
317
};
418

519
const isLoggedin = () => {

0 commit comments

Comments
 (0)