Skip to content

Commit 521d93d

Browse files
committed
user service & controller
1 parent 2744d14 commit 521d93d

19 files changed

+249
-36
lines changed

controller/auth.controller.js

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ const { v4: uuidv4 } = require('uuid');
44

55
const {userService} = require('../services/index');
66
const {errorCode, successCode, InvalidLogin, InvalidOtp} = require('../utils/message');
7-
const { ACCESS_TOKEN_SECERT } = require("../utils/config");
7+
const { JWT_SECRET } = require("../utils/config");
88
const { UnauthorizedError, handleCustomError } = require("../utils/errors");
99

1010
module.exports = {
@@ -50,7 +50,7 @@ module.exports = {
5050
id: users.id,
5151
},
5252
},
53-
ACCESS_TOKEN_SECERT,
53+
JWT_SECRET,
5454
{ expiresIn: "15m" });
5555
return res.json({statusCode:successCode, token:accessToken, data:usersData, message:'successful'});
5656
}
@@ -88,16 +88,13 @@ module.exports = {
8888
let current_timestamp = Math.floor(Date.now() / 1000)
8989
if((Number(users.otptimestamp)+10020 > Number(current_timestamp) && (Number(users.otp) === Number(otp)))){
9090
const usersData = await userService.getUsersByEmail(users.email)
91-
const accessToken = jwt.sign(
92-
{
93-
user: {
94-
name: users.name,
95-
email: users.email,
96-
id: users.id,
97-
},
98-
},
99-
process.env.ACCESS_TOKEN_SECERT,
100-
{ expiresIn: "15m" }
91+
const accessToken = jwt.sign({
92+
name: users.name,
93+
email: users.email,
94+
id: users._id,
95+
},
96+
JWT_SECRET,
97+
{ expiresIn: "24h" }
10198
);
10299
return res.json({statusCode:successCode, token:accessToken, result:usersData, message:'successful'});
103100
}

controller/category.controller.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ module.exports = {
1414
await categoryService.createNewCategory(item);
1515
return res.send({statusCode:successCode, message: `New category ${title} added successfully`});
1616
} catch (error) {
17-
console.log("PRODUCT CONTROLLER -- addProduct :: ", error);
17+
console.log("CATEGORY CONTROLLER -- addNewCategory :: ", error);
1818
return handleCustomError(res, error)
1919
}
2020
},
@@ -25,7 +25,7 @@ module.exports = {
2525
const response = await categoryService.getCategory(skip, limit);
2626
return res.send({statusCode:successCode, data:response, message: 'All Category fetched successfully'});
2727
} catch (error) {
28-
console.log("PRODUCT CONTROLLER -- addProduct :: ", error);
28+
console.log("CATEGORY CONTROLLER -- getCategory :: ", error);
2929
return handleCustomError(res, error)
3030
}
3131
}

controller/product.controller.js

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,19 +15,34 @@ module.exports = {
1515
item.variantId = uuidv4();
1616
})
1717
const response2 = await productService.createNewVariants(variants);
18-
let countVariant = await response2.data.length
18+
let countVariant = response2.data.length
1919
return res.send({statusCode:successCode, message: `New Product ${title} with ${countVariant} Variants added successfully`});
2020
} catch (error) {
2121
console.log("PRODUCT CONTROLLER -- addProduct :: ", error);
2222
return handleCustomError(res, error)
2323
}
2424
},
25+
addVariants : async (req, res) => {
26+
const { productId, variants } = req.body;
27+
try {
28+
variants.map((item) => {
29+
item.productId = productId;
30+
item.variantId = uuidv4();
31+
})
32+
const response2 = await productService.createNewVariants(variants);
33+
let countVariant = response2.data.length
34+
return res.send({statusCode:successCode, message: `${countVariant} Variants added successfully`});
35+
} catch (error) {
36+
console.log("PRODUCT CONTROLLER -- addProduct :: ", error);
37+
return handleCustomError(res, error)
38+
}
39+
},
2540
getProductById : async (req, res) => {
2641
const { id } = req.params;
2742
try {
2843
const response = await productService.getProductById(id);
2944
if(response){
30-
return res.send({statusCode:successCode, data : response, message: 'Product fetched successfully'});
45+
return res.send({statusCode:successCode, data : response[0], message: 'Product fetched successfully'});
3146
} else {
3247
return res.send({statusCode:successCode, data : {}, message: 'No Product found from this Product Id'});
3348
}

controller/user.controller.js

Lines changed: 36 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,15 @@
1-
const {userService} = require('../services/index');
1+
const {userService, userAddressService} = require('../services/index');
22
const {errorCode, successCode} = require('../utils/message')
33

44
module.exports = {
55
getUsersById : async (req, res) => {
6-
const { userid } = req.params.userid;
6+
console.log("req.user", req.user);
7+
const userid = req.user.id
78
try {
89
const users = await userService.getUsersById(userid || null);
910
return res.json({statusCode:successCode, result:users, message:'successful'});
1011
} catch (error) {
11-
console.log("controller -- getUsersById :: ", error);
12+
console.log("USER CONTROLLER -- getUsersById :: ", error);
1213
return res.status(500).json({ message: error.message,statusCode:errorCode });
1314
}
1415
},
@@ -17,7 +18,38 @@ module.exports = {
1718
const users = await userService.getUsers();
1819
return res.json({statusCode:successCode, result:users, message:'successful'});
1920
} catch (error) {
20-
console.log("controller -- getAllUsers :: ", error);
21+
console.log("USER CONTROLLER -- getAllUsers :: ", error);
22+
return res.status(500).json({ message: error.message,statusCode:errorCode });
23+
}
24+
},
25+
getUserAddress : async (req, res) => {
26+
try {
27+
const users = await userService.getUsers();
28+
return res.json({statusCode:successCode, result:users, message:'successful'});
29+
} catch (error) {
30+
console.log("USER CONTROLLER -- getUserAddress :: ", error);
31+
return res.status(500).json({ message: error.message,statusCode:errorCode });
32+
}
33+
},
34+
addUserAddress : async (req, res) => {
35+
const { addressline1, addressline2, city, landmark, pincode, district, state, country } = req.body;
36+
try {
37+
let userId = req.user.id
38+
let item = {userId, addressline1, addressline2, city, landmark, pincode, district, state, country}
39+
const users = await userAddressService.addUserAddress(item);
40+
return res.json({statusCode:successCode, result:users, message:'successful'});
41+
} catch (error) {
42+
console.log("USER CONTROLLER -- getUsersById :: ", error);
43+
return res.status(500).json({ message: error.message,statusCode:errorCode });
44+
}
45+
},
46+
updateUserAddress : async (req, res) => {
47+
const { userid } = req.params.userid;
48+
try {
49+
const users = await userService.getUsersById(userid || null);
50+
return res.json({statusCode:successCode, result:users, message:'successful'});
51+
} catch (error) {
52+
console.log("USER CONTROLLER -- getUsersById :: ", error);
2153
return res.status(500).json({ message: error.message,statusCode:errorCode });
2254
}
2355
}

middleware/auth/requireUserLogin.js

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
const config = require('../../utils/config');
2+
const { errorCode, AuthenticationFailed } = require('../../utils/message');
3+
const jwt = require('jsonwebtoken');
4+
5+
const isTokenProvided = (req, res, next) => {
6+
const token = req.headers['authorization'];
7+
if (!token) {
8+
return res.status(401).json({ message: 'No token provided', statusCode:errorCode });
9+
}
10+
next();
11+
}
12+
13+
const isAuthenticated = (req, res, next) => {
14+
const token = req.headers['authorization'];
15+
jwt.verify(token, config.JWT_SECRET, async(err, decoded) => {
16+
if (err) {
17+
return res.status(403).json({ message: AuthenticationFailed, statusCode:errorCode});
18+
}
19+
req._id = decoded._id;
20+
next()
21+
})
22+
}
23+
24+
module.exports = {
25+
requireUserLogin : [
26+
isTokenProvided,
27+
isAuthenticated
28+
]
29+
}

models/user.model.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,9 @@ const userSchema = new mongoose.Schema({
2323
type : String,
2424
required : true
2525
},
26-
billingAddress: {
27-
type: Number,
28-
default:null
26+
address: {
27+
type: String,
28+
default:null
2929
},
3030
signupSession : {
3131
type : String,

models/userAddress.model.js

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
const mongoose = require('mongoose');
2+
3+
const userAddressSchema = new mongoose.Schema({
4+
userId : {
5+
type : mongoose.Schema.Types.ObjectId, ref:'User',
6+
required : true
7+
},
8+
addressline1 : {
9+
type : String,
10+
required : true
11+
},
12+
addressline2 : {
13+
type : String,
14+
required : true
15+
},
16+
city : {
17+
type : String,
18+
required : true
19+
},
20+
landmark : {
21+
type : String
22+
},
23+
pincode : {
24+
type : Number,
25+
required : true
26+
},
27+
district : {
28+
type : String,
29+
required : true
30+
},
31+
state : {
32+
type : String,
33+
required : true
34+
},
35+
country : {
36+
type : String,
37+
required : true
38+
},
39+
date: { type: Date, default: Date.now },
40+
}, {timestamps:true, timeseries:true})
41+
42+
const UserAddress = mongoose.model("userAddress", userAddressSchema)
43+
44+
module.exports = UserAddress

postman/auth.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ curl --location 'http://localhost:4010/api/main/login' \
2222
"email":"kartik@gmail.com", "password":"123456"
2323
}'
2424

25-
VERIFY SIGNUP OTP
25+
VERIFY LOGIN OTP
2626
---------------------------------------------------------------------------------
2727
curl --location 'http://localhost:4010/api/main/verifyOtp' \
2828
--header 'Content-Type: application/json' \

postman/product.txt

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,13 @@ GET PRODUCT
33
curl --location 'http://localhost:4010/api/admin/getProducts?page=2&limit=2' \
44
--data ''
55

6+
7+
PRODUCT VIEW
8+
---------------------------------------------------------------------------------
9+
curl --location 'http://localhost:4010/api/admin/getProducts/65eed2073ef75548c4fee5f8' \
10+
--data ''
11+
12+
613
ADD PRODUCT
714
---------------------------------------------------------------------------------
815
curl --location --request POST 'http://localhost:4010/api/admin/addProduct' \
@@ -25,6 +32,30 @@ curl --location --request POST 'http://localhost:4010/api/admin/addProduct' \
2532
]
2633
}'
2734

35+
36+
37+
ADD VARIANTS
38+
---------------------------------------------------------------------------------
39+
curl --location --request POST 'http://localhost:4010/api/admin/addVariants' \
40+
--header 'Content-Type: application/json' \
41+
--data-raw '{
42+
"productId":"1",
43+
"variants":[
44+
{
45+
"variantName":"128GB Red",
46+
"price":"150",
47+
"discount":"10",
48+
"discountType":"FLAT"
49+
},
50+
{
51+
"variantName":"256GB Blue",
52+
"price":"250",
53+
"discount":"10",
54+
"discountType":"PERCENTAGE"
55+
}
56+
]
57+
}'
58+
2859
ADD CATEGORY
2960
---------------------------------------------------------------------------------
3061
curl --location --request POST 'http://localhost:4010/api/admin/addCategory' \

postman/user.txt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
USER PROFILE
2+
---------------------------------------------------------------------------------
3+
curl --location 'http://localhost:4010/api/user/profile' \
4+
--header 'Content-Type: application/json' \
5+
--data ''

routes/admin.routes.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ const express = require('express');
22
const router = express.Router();
33

44
router.use(require('./user.routes').userRouter)
5+
router.use(require('./user.routes').adminRouter)
56
router.use(require('./product.routes').adminRouter)
67
router.use(require('./category.routes').adminRouter)
78

routes/index.js

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,12 @@
11
const express = require('express');
22
const router = express.Router();
33

4-
router.use('/admin',require('./admin.routes'))
5-
router.use('/main',require('./main.routes'))
4+
const userRoute = require('./users.routes')
5+
const adminRoute = require('./admin.routes')
6+
const mainRoute = require('./main.routes')
7+
8+
router.use('/admin', adminRoute)
9+
router.use('/user', userRoute)
10+
router.use('/main', mainRoute)
611

712
module.exports = router

routes/product.routes.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ const productController = require('../controller/product.controller');
55
const { validateProduct } = require('../middleware/validation/productValidation');
66

77
adminRouter.post('/addProduct', validateProduct, productController.addProduct);
8+
adminRouter.post('/addVariants', productController.addVariants);
89
adminRouter.get('/getProducts/:id', productController.getProductById);
910
adminRouter.get('/getProducts', productController.getProducts);
1011

routes/user.routes.js

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,14 @@
11
const express = require('express');
22
const userRouter = express.Router();
33
const adminRouter = express.Router();
4+
const {requireUserLogin} = require('../middleware/auth/requireUserLogin');
45

56
const userController = require('../controller/user.controller');
67

7-
userRouter.get('/getAllUsers', userController.getAllUsers);
8-
userRouter.get('/getUserById/:userid', userController.getUsersById);
8+
adminRouter.get('/getAllUsers', userController.getAllUsers);
9+
adminRouter.get('/getUserById/:userid', userController.getUsersById);
10+
userRouter.get('/profile', requireUserLogin, userController.getUsersById);
11+
userRouter.post('/addUserAddress', userController.addUserAddress);
12+
userRouter.get('/getUserAddress', userController.getUserAddress);
913

1014
module.exports = {userRouter,adminRouter};

routes/users.routes.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
const express = require('express');
2+
const router = express.Router();
3+
4+
router.use(require('./user.routes').userRouter)
5+
6+
module.exports = router;

services/address.service.js

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
const UserAddress = require("../models/userAddress.model")
2+
3+
module.exports = {
4+
addUserAddress : async(item) => {
5+
try {
6+
let newEntry = new UserAddress(item)
7+
const response = await newEntry.save()
8+
return response
9+
} catch (error) {
10+
console.error('Error in addUserAddress : ', error);
11+
throw error;
12+
}
13+
}
14+
}

services/index.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
module.exports = {
22
productService : require("./product.service"),
33
userService : require("./user.service"),
4+
userAddressService : require("./address.service"),
45
categoryService : require("./category.service")
56
}

services/product.service.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@ module.exports = {
2727
// const response = Product.findById({_id}, {__v:0}).populate('categoryId')
2828
const response = Product.aggregate([
2929
// Match product by ID
30-
// IF IT WORKS DO NOT TOUCH
3130
{ $match: { _id: new mongoose.Types.ObjectId(_id) } },
3231
// Join with category table
3332
{

0 commit comments

Comments
 (0)