122 lines
3.2 KiB
JavaScript
122 lines
3.2 KiB
JavaScript
import { generateToken } from "../lib/utils.js";
|
|
import User from "../models/user.model.js";
|
|
import bcrypt from "bcryptjs";
|
|
|
|
export const signup = async (req, res) => {
|
|
const { fullName, email, password } = req.body;
|
|
try {
|
|
if (!fullName || !email || !password) {
|
|
return res.status(400).json({ message: "All fields are required" });
|
|
}
|
|
|
|
if (password.length < 6) {
|
|
return res
|
|
.status(400)
|
|
.json({ message: "Password must be at least 6 characters" });
|
|
}
|
|
|
|
const user = await User.findOne({ email });
|
|
|
|
if (user) return res.status(400).json({ message: "Email already exists" });
|
|
|
|
const salt = await bcrypt.genSalt(10);
|
|
const hashedPassword = await bcrypt.hash(password, salt);
|
|
|
|
const newUser = new User({
|
|
fullName,
|
|
email,
|
|
password: hashedPassword,
|
|
});
|
|
|
|
if (newUser) {
|
|
// generate jwt token here
|
|
generateToken(newUser._id, res);
|
|
await newUser.save();
|
|
|
|
res.status(201).json({
|
|
_id: newUser._id,
|
|
fullName: newUser.fullName,
|
|
email: newUser.email,
|
|
profilePic: newUser.profilePic,
|
|
});
|
|
} else {
|
|
res.status(400).json({ message: "Invalid user data" });
|
|
}
|
|
} catch (error) {
|
|
console.log("Error in signup controller", error.message);
|
|
res.status(500).json({ message: "Internal Server Error" });
|
|
}
|
|
};
|
|
|
|
export const login = async (req, res) => {
|
|
const { email, password } = req.body;
|
|
try {
|
|
const user = await User.findOne({ email });
|
|
|
|
if (!user) {
|
|
return res.status(400).json({ message: "Invalid credentials" });
|
|
}
|
|
|
|
const isPasswordCorrect = await bcrypt.compare(password, user.password);
|
|
if (!isPasswordCorrect) {
|
|
return res.status(400).json({ message: "Invalid credentials" });
|
|
}
|
|
|
|
generateToken(user._id, res);
|
|
|
|
res.status(200).json({
|
|
_id: user._id,
|
|
fullName: user.fullName,
|
|
email: user.email,
|
|
profilePic: user.profilePic,
|
|
});
|
|
} catch (error) {
|
|
console.log("Error in login controller", error.message);
|
|
res.status(500).json({ message: "Internal Server Error" });
|
|
}
|
|
};
|
|
|
|
export const logout = (req, res) => {
|
|
try {
|
|
res.cookie("jwt", "", { maxAge: 0 });
|
|
res.status(200).json({ message: "Logged out successfully" });
|
|
} catch (error) {
|
|
console.log("Error in logout controller", error.message);
|
|
res.status(500).json({ message: "Internal Server Error" });
|
|
}
|
|
};
|
|
|
|
export const updateProfile = async (req, res) => {
|
|
try {
|
|
const profilePic = req.file;
|
|
const userId = req.user._id;
|
|
|
|
if (!profilePic) {
|
|
return res.status(400).json({ message: "Profile pic is required" });
|
|
}
|
|
|
|
console.log(profilePic);
|
|
const updatedUser = await User.findByIdAndUpdate(
|
|
userId,
|
|
{
|
|
profilePic: `http://localhost:${process.env.PORT}/` + profilePic.path,
|
|
},
|
|
{ new: true },
|
|
);
|
|
|
|
res.status(200).json(updatedUser);
|
|
} catch (error) {
|
|
console.log("error in update profile:", error);
|
|
res.status(500).json({ message: "Internal server error" });
|
|
}
|
|
};
|
|
|
|
export const checkAuth = (req, res) => {
|
|
try {
|
|
res.status(200).json(req.user);
|
|
} catch (error) {
|
|
console.log("Error in checkAuth controller", error.message);
|
|
res.status(500).json({ message: "Internal Server Error" });
|
|
}
|
|
};
|