GIF89a
import fs from "fs";
import { ApiResponse } from "../utils/ApiResponse.js";
import { Share, User } from "../models/user.model.js";
export const createUser = async (req, res) => {
const { firstName, lastName, email, mobile, dob, gender } = req.body;
const profilePic = req.files?.profilePic?.[0]?.path ?? "";
try {
// check if user already exists
const userExists = await User.findOne({ mobile }, { mobile: 1 });
// if user exists, return error
if (userExists) {
console.log("User already exists");
return res.status(400).json(new ApiResponse(400, "User already exists"));
}
if (!firstName || !lastName || !email || !mobile || !dob || !gender) {
return res.status(400).json(new ApiResponse(400, "All fields are required"));
}
// create user
const user = await User.create({
firstName,
lastName,
email,
mobile,
dob,
gender,
profilePic: profilePic ?? "",
});
return res.json(new ApiResponse(200, user, "User created successfully"));
} catch (err) {
console.log(err);
return res.status(500).json(new ApiResponse(500, "Something went wrong", err));
}
};
export const getUsers = async (req, res) => {
let filter = {};
try {
let users = await User.find(filter).sort({ createdAt: -1 });
return res.json(new ApiResponse(200, users));
} catch (err) {
console.log(err);
return res.status(500).json(new ApiResponse(500, "Something went wrong", err));
}
};
export const getUserById = async (req, res) => {
const { userId } = req.params;
try {
const user = await User.findById(userId);
return res.json(new ApiResponse(200, user));
} catch (err) {
console.log(err);
return res.status(500).json(new ApiResponse(500, "Something went wrong", err));
}
};
export const updateUser = async (req, res) => {
const { userId } = req.params;
const updateFields = {};
// Only add fields that are present in the request body
if (req.body.firstName) updateFields.firstName = req.body.firstName;
if (req.body.lastName) updateFields.lastName = req.body.lastName;
if (req.body.email) updateFields.email = req.body.email;
// if (req.body.mobile) updateFields.mobile = req.body.mobile;
if (req.body.dob) updateFields.dob = req.body.dob;
if (req.body.gender) updateFields.gender = req.body.gender;
if (req.body.setTimer) updateFields.setTimer = req.body.setTimer;
if (req.body.totalPhotoClick) updateFields.totalPhotoClick = req.body.totalPhotoClick;
// Handle profile pic if present in request
if (req.files?.profilePic?.[0]?.path) {
const existingUser = await User.findById(userId, { profilePic: 1 });
if (existingUser?.profilePic) {
try {
await fs.promises.unlink(existingUser.profilePic);
} catch (error) {
if (error.code !== 'ENOENT') {
throw error;
}
// Ignore file not found error and continue
}
}
updateFields.profilePic = req.files.profilePic[0].path;
}
try {
const user = await User.findByIdAndUpdate(
userId,
{ $set: updateFields },
{ new: true }
);
return res.json(new ApiResponse(200, user, 'User updated successfully'));
} catch (err) {
console.log(err);
return res.status(500).json(new ApiResponse(500, "Something went wrong", err));
}
};
export const shareImage = async (req, res) => {
const { userId } = req.params;
const { wpNumber } = req.body;
if (!userId || !wpNumber) {
return res.status(400).json(new ApiResponse(400, "User ID and WhatsApp number are required"));
}
try {
let user = await User.findById(userId, { totalPhotoClick: 1 });
console.log(user);
if (!user) {
return res.status(404).json(new ApiResponse(404, "User not found"));
}
await Share.create({
userId,
wpNumber
});
let updatedUser = await User.findByIdAndUpdate(userId, {
$inc: { totalPhotoClick: +1 }
}, { new: true });
return res.json(new ApiResponse(200, updatedUser, "Image shared successfully"));
} catch (err) {
console.log(err);
return res.status(500).json(new ApiResponse(500, "Something went wrong", err));
}
}