Skip to content

Commit

Permalink
ADDS all base code for user-service APIs
Browse files Browse the repository at this point in the history
  • Loading branch information
ashwin authored and ashwin committed Nov 2, 2023
1 parent 7fd8d5a commit 9b4765e
Show file tree
Hide file tree
Showing 20 changed files with 689 additions and 86 deletions.
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,2 +1,4 @@
package-lock.json
.env
.idea/
qodana.yaml
59 changes: 59 additions & 0 deletions controllers/userAddressController.js
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;
167 changes: 87 additions & 80 deletions controllers/userController.js
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;
66 changes: 66 additions & 0 deletions controllers/userPaymentInformationController.js
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;
59 changes: 59 additions & 0 deletions controllers/userPurchaseHistoryController.js
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;
Loading

0 comments on commit 9b4765e

Please sign in to comment.