-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
ADDS all base code for user-service APIs
- Loading branch information
ashwin
authored and
ashwin
committed
Nov 2, 2023
1 parent
7fd8d5a
commit 9b4765e
Showing
20 changed files
with
689 additions
and
86 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,2 +1,4 @@ | ||
package-lock.json | ||
.env | ||
.idea/ | ||
qodana.yaml |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,59 @@ | ||
const UserAddress = require('../models/UserAddress.model'); | ||
|
||
const userAddressController = { | ||
// GET /users/:userId/addresses | ||
getUserAddresses: async (req, res) => { | ||
try { | ||
const userId = req.params.userId; | ||
const addresses = await UserAddress.findAll({ where: { userId } }); | ||
res.json(addresses); | ||
} catch (error) { | ||
res.status(500).json({ message: error.message }); | ||
} | ||
}, | ||
|
||
// POST /users/:userId/addresses | ||
addUserAddress: async (req, res) => { | ||
try { | ||
const userId = req.params.userId; | ||
const addressData = { userId, ...req.body }; | ||
const newAddress = await UserAddress.create(addressData); | ||
res.status(201).json(newAddress); | ||
} catch (error) { | ||
res.status(500).json({ message: error.message }); | ||
} | ||
}, | ||
|
||
// PUT /addresses/:addressId | ||
updateAddress: async (req, res) => { | ||
try { | ||
const addressId = req.params.addressId; | ||
const address = await UserAddress.findByPk(addressId); | ||
if (!address) { | ||
return res.status(404).json({ message: 'Address not found' }); | ||
} | ||
Object.assign(address, req.body); | ||
await address.save(); | ||
res.json({ message: 'Address updated successfully' }); | ||
} catch (error) { | ||
res.status(500).json({ message: error.message }); | ||
} | ||
}, | ||
|
||
// DELETE /addresses/:addressId | ||
deleteAddress: async (req, res) => { | ||
try { | ||
const addressId = req.params.addressId; | ||
const address = await UserAddress.findByPk(addressId); | ||
if (!address) { | ||
return res.status(404).json({ message: 'Address not found' }); | ||
} | ||
await address.destroy(); | ||
res.json({ message: 'Address deleted successfully' }); | ||
} catch (error) { | ||
res.status(500).json({ message: error.message }); | ||
} | ||
} | ||
}; | ||
|
||
module.exports = userAddressController; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,94 +1,101 @@ | ||
const bcrypt = require('bcryptjs'); | ||
const jwt = require('jsonwebtoken'); | ||
const User = require('../models/User'); | ||
const User = require('../models/User.model'); | ||
|
||
exports.createUser = async (req, res) => { | ||
try { | ||
const { username, password, email, firstName, lastName } = req.body; | ||
const hashedPassword = await bcrypt.hash(password, 12); | ||
const user = await User.create({ | ||
username, | ||
password: hashedPassword, | ||
email, | ||
firstName, | ||
lastName, | ||
createdDate: new Date(), | ||
isActive: true | ||
}); | ||
res.status(201).send(user); | ||
} catch (error) { | ||
res.status(500).send(error.message); | ||
} | ||
}; | ||
|
||
exports.getUser = async (req, res) => { | ||
try { | ||
const userId = req.params.userId; | ||
const user = await User.findByPk(userId); | ||
if (!user) { | ||
return res.status(404).send('User not found'); | ||
const userController = { | ||
// POST /users | ||
createUser: async (req, res) => { | ||
try { | ||
const { username, password, email, firstName, lastName } = req.body; | ||
const hashedPassword = await bcrypt.hash(password, 12); | ||
const user = await User.create({ | ||
username, | ||
password: hashedPassword, | ||
email, | ||
firstName, | ||
lastName, | ||
createdDate: new Date(), | ||
isActive: true | ||
}); | ||
res.status(201).json(user); | ||
} catch (error) { | ||
res.status(500).json({ message: error.message }); | ||
} | ||
res.send(user); | ||
} catch (error) { | ||
res.status(500).send(error.message); | ||
} | ||
}; | ||
}, | ||
|
||
exports.updateUser = async (req, res) => { | ||
try { | ||
const userId = req.params.userId; | ||
const { username, email, firstName, lastName, isActive } = req.body; | ||
const user = await User.findByPk(userId); | ||
if (!user) { | ||
return res.status(404).send('User not found'); | ||
// GET /users/:userId | ||
getUser: async (req, res) => { | ||
try { | ||
const userId = req.params.userId; | ||
const user = await User.findByPk(userId); | ||
if (!user) { | ||
return res.status(404).json({ message: 'User not found' }); | ||
} | ||
res.json(user); | ||
} catch (error) { | ||
res.status(500).json({ message: error.message }); | ||
} | ||
user.username = username; | ||
user.email = email; | ||
user.firstName = firstName; | ||
user.lastName = lastName; | ||
user.isActive = isActive; | ||
await user.save(); | ||
res.send('User updated successfully'); | ||
} catch (error) { | ||
res.status(500).send(error.message); | ||
} | ||
}; | ||
}, | ||
|
||
exports.deleteUser = async (req, res) => { | ||
try { | ||
const userId = req.params.userId; | ||
const user = await User.findByPk(userId); | ||
if (!user) { | ||
return res.status(404).send('User not found'); | ||
// PUT /users/:userId | ||
updateUser: async (req, res) => { | ||
try { | ||
const userId = req.params.userId; | ||
const { username, email, firstName, lastName, isActive } = req.body; | ||
const user = await User.findByPk(userId); | ||
if (!user) { | ||
return res.status(404).json({ message: 'User not found' }); | ||
} | ||
user.username = username || user.username; | ||
user.email = email || user.email; | ||
user.firstName = firstName || user.firstName; | ||
user.lastName = lastName || user.lastName; | ||
user.isActive = (isActive !== undefined) ? isActive : user.isActive; | ||
await user.save(); | ||
res.json({ message: 'User updated successfully' }); | ||
} catch (error) { | ||
res.status(500).json({ message: error.message }); | ||
} | ||
await user.destroy(); | ||
res.send('User deleted successfully'); | ||
} catch (error) { | ||
res.status(500).send(error.message); | ||
} | ||
}; | ||
}, | ||
|
||
exports.login = async (req, res) => { | ||
try { | ||
const { username, password } = req.body; | ||
const user = await User.findOne({ where: { username } }); | ||
if (!user) { | ||
return res.status(404).send('User not found'); | ||
// DELETE /users/:userId | ||
deleteUser: async (req, res) => { | ||
try { | ||
const userId = req.params.userId; | ||
const user = await User.findByPk(userId); | ||
if (!user) { | ||
return res.status(404).json({ message: 'User not found' }); | ||
} | ||
await user.destroy(); | ||
res.json({ message: 'User deleted successfully' }); | ||
} catch (error) { | ||
res.status(500).json({ message: error.message }); | ||
} | ||
const isPasswordMatch = await bcrypt.compare(password, user.password); | ||
if (!isPasswordMatch) { | ||
return res.status(401).send('Invalid credentials'); | ||
}, | ||
|
||
// POST /users/login | ||
login: async (req, res) => { | ||
try { | ||
const { username, password } = req.body; | ||
const user = await User.findOne({ where: { username } }); | ||
if (!user) { | ||
return res.status(404).json({ message: 'User not found' }); | ||
} | ||
const isPasswordMatch = await bcrypt.compare(password, user.password); | ||
if (!isPasswordMatch) { | ||
return res.status(401).json({ message: 'Invalid credentials' }); | ||
} | ||
const token = jwt.sign({ userId: user.userId }, process.env.JWT_SECRET, { expiresIn: '1h' }); | ||
res.json({ token }); | ||
} catch (error) { | ||
res.status(500).json({ message: error.message }); | ||
} | ||
const token = jwt.sign({ userId: user.userId }, process.env.JWT_SECRET, { expiresIn: '1h' }); | ||
res.send({ token }); | ||
} catch (error) { | ||
res.status(500).send(error.message); | ||
}, | ||
|
||
// POST /users/logout | ||
logout: (req, res) => { | ||
res.json({ message: 'Logout successful' }); | ||
} | ||
}; | ||
|
||
exports.logout = (req, res) => { | ||
// Note: Implementing logout functionality usually requires storing tokens in a database or cache | ||
// and marking them as invalid once a user logs out. Since this example doesn't implement token storage, | ||
// the logout endpoint is a placeholder to show where such functionality would go. | ||
res.send('Logout successful'); | ||
}; | ||
module.exports = userController; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,66 @@ | ||
const UserPaymentInformation = require('../models/UserPaymentInformation.model'); | ||
|
||
const userPaymentInformationController = { | ||
// GET /users/:userId/payments | ||
getUserPayments: async (req, res) => { | ||
try { | ||
const userId = req.params.userId; | ||
const payments = await UserPaymentInformation.findAll({ where: { userId } }); | ||
res.json(payments); | ||
} catch (error) { | ||
res.status(500).json({ message: error.message }); | ||
} | ||
}, | ||
|
||
// POST /users/:userId/payments | ||
addUserPayment: async (req, res) => { | ||
try { | ||
const userId = req.params.userId; | ||
const { cardType, lastFourDigits, expiryDate, paymentMethodName, isDefault } = req.body; | ||
const newPayment = await UserPaymentInformation.create({ | ||
userId, cardType, lastFourDigits, expiryDate, paymentMethodName, isDefault | ||
}); | ||
res.status(201).json(newPayment); | ||
} catch (error) { | ||
res.status(500).json({ message: error.message }); | ||
} | ||
}, | ||
|
||
// PUT /payments/:paymentId | ||
updatePayment: async (req, res) => { | ||
try { | ||
const paymentId = req.params.paymentId; | ||
const { cardType, lastFourDigits, expiryDate, paymentMethodName, isDefault } = req.body; | ||
const payment = await UserPaymentInformation.findByPk(paymentId); | ||
if (!payment) { | ||
return res.status(404).json({ message: 'Payment information not found' }); | ||
} | ||
payment.cardType = cardType; | ||
payment.lastFourDigits = lastFourDigits; | ||
payment.expiryDate = expiryDate; | ||
payment.paymentMethodName = paymentMethodName; | ||
payment.isDefault = isDefault; | ||
await payment.save(); | ||
res.json({ message: 'Payment information updated successfully' }); | ||
} catch (error) { | ||
res.status(500).json({ message: error.message }); | ||
} | ||
}, | ||
|
||
// DELETE /payments/:paymentId | ||
deletePayment: async (req, res) => { | ||
try { | ||
const paymentId = req.params.paymentId; | ||
const payment = await UserPaymentInformation.findByPk(paymentId); | ||
if (!payment) { | ||
return res.status(404).json({ message: 'Payment information not found' }); | ||
} | ||
await payment.destroy(); | ||
res.json({ message: 'Payment information deleted successfully' }); | ||
} catch (error) { | ||
res.status(500).json({ message: error.message }); | ||
} | ||
} | ||
}; | ||
|
||
module.exports = userPaymentInformationController; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,59 @@ | ||
const UserPurchaseHistory = require('../models/UserPurchaseHistory.model'); | ||
|
||
const userPurchaseHistoryController = { | ||
// GET /users/:userId/purchases | ||
getUserPurchases: async (req, res) => { | ||
try { | ||
const userId = req.params.userId; | ||
const purchases = await UserPurchaseHistory.findAll({ where: { userId } }); | ||
res.json(purchases); | ||
} catch (error) { | ||
res.status(500).json({ message: error.message }); | ||
} | ||
}, | ||
|
||
// POST /users/:userId/purchases | ||
logUserPurchase: async (req, res) => { | ||
try { | ||
const userId = req.params.userId; | ||
const { productId, purchaseDate, quantity, totalAmount } = req.body; | ||
const newPurchase = await UserPurchaseHistory.create({ | ||
userId, productId, purchaseDate, quantity, totalAmount | ||
}); | ||
res.status(201).json(newPurchase); | ||
} catch (error) { | ||
res.status(500).json({ message: error.message }); | ||
} | ||
}, | ||
|
||
// GET /purchases/:purchaseId | ||
getPurchase: async (req, res) => { | ||
try { | ||
const purchaseId = req.params.purchaseId; | ||
const purchase = await UserPurchaseHistory.findByPk(purchaseId); | ||
if (!purchase) { | ||
return res.status(404).json({ message: 'Purchase not found' }); | ||
} | ||
res.json(purchase); | ||
} catch (error) { | ||
res.status(500).json({ message: error.message }); | ||
} | ||
}, | ||
|
||
// DELETE /purchases/:purchaseId | ||
deletePurchase: async (req, res) => { | ||
try { | ||
const purchaseId = req.params.purchaseId; | ||
const purchase = await UserPurchaseHistory.findByPk(purchaseId); | ||
if (!purchase) { | ||
return res.status(404).json({ message: 'Purchase not found' }); | ||
} | ||
await purchase.destroy(); | ||
res.json({ message: 'Purchase deleted successfully' }); | ||
} catch (error) { | ||
res.status(500).json({ message: error.message }); | ||
} | ||
} | ||
}; | ||
|
||
module.exports = userPurchaseHistoryController; |
Oops, something went wrong.