User Privacy Settings Controller Function

This is a JavaScript controller function using Express and Mongoose to fetch or initialize default privacy settings for a user based on their unique ID.
user_3179742 avatar
user_3179742
javascript
02/09/2026 3:23 AM
4.0 KB
16
Indexable
import PrivacySettings from "./PrivacySettings.js";
import User from '../users/User.js';

// Get user's privacy settings
export const getPrivacySettings = async (req, res) => {
  try {
    console.log('Fetching privacy settings for user:', req.user.id);
    
    let settings = await PrivacySettings.findOne({ userId: req.user.id });
    
    // If no settings exist, create default ones
    if (!settings) {
      console.log('No settings found, creating default for user:', req.user.id);
      settings = await PrivacySettings.create({
        userId: req.user.id,
        profileVisibility: 'public',
        emailVisibility: 'private',
        phoneVisibility: 'private',
        activityStatus: true,
        dataSharing: false,
        personalizedAds: false
      });
    }
    
    console.log('Successfully retrieved settings for user:', req.user.id);
    res.json(settings);
  } catch (error) {
    console.error('Get privacy settings error:', error);
    res.status(500).json({ 
      error: 'Failed to fetch privacy settings',
      details: error.message 
    });
  }
};

// Update privacy settings
export const updatePrivacySettings = async (req, res) => {
  try {
    const {
      profileVisibility,
      emailVisibility,
      phoneVisibility,
      activityStatus,
      dataSharing,
      personalizedAds
    } = req.body;

    const settings = await PrivacySettings.findOneAndUpdate(
      { userId: req.user.id },
      {
        profileVisibility,
        emailVisibility,
        phoneVisibility,
        activityStatus,
        dataSharing,
        personalizedAds
      },
      { new: true, upsert: true }
    );

    res.json(settings);
  } catch (error) {
    console.error('Update privacy settings error:', error);
    res.status(500).json({ error: 'Failed to update privacy settings' });
  }
};

// Export user data
export const exportUserData = async (req, res) => {
  try {
    const user = await User.findById(req.user.id).select('-password');
    const privacySettings = await PrivacySettings.findOne({ userId: req.user.id });
    
    const userData = {
      user: user.toObject(),
      privacySettings: privacySettings ? privacySettings.toObject() : null,
      exportedAt: new Date().toISOString()
    };

    res.json({
      message: 'Data export completed successfully',
      data: userData
    });
  } catch (error) {
    console.error('Export data error:', error);
    res.status(500).json({ error: 'Failed to export data' });
  }
};

// Delete user account
export const deleteAccount = async (req, res) => {
  try {
    const userId = req.user.id;

    await PrivacySettings.deleteOne({ userId });
    await User.findByIdAndDelete(userId);

    // TODO: Delete other related data (posts, comments, etc.)

    res.json({ message: 'Account deleted successfully' });
  } catch (error) {
    console.error('Delete account error:', error);
    res.status(500).json({ error: 'Failed to delete account' });
  }
};
Editor is loading...
Leave a Comment