GIF89a php
Current File : /home/viralhoga/glambooth_viralhoga_com/src/controllers/user.controller.js
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));
    }

}