File size: 2,099 Bytes
f0743f4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
import { connectDb } from '@librechat/backend/db/connect';
import {
  findUser,
  deleteConvos,
  deleteMessages,
  deleteAllUserSessions,
} from '@librechat/backend/models';
import { User, Balance, Transaction, AclEntry, Token, Group } from '@librechat/backend/db/models';

type TUser = { email: string; password: string };

export default async function cleanupUser(user: TUser) {
  const { email } = user;
  try {
    console.log('πŸ€–: global teardown has been started');
    const db = await connectDb();
    console.log('πŸ€–:  βœ…  Connected to Database');

    const foundUser = await findUser({ email });
    if (!foundUser) {
      console.log('πŸ€–:  ⚠️  User not found in Database');
      return;
    }

    const userId = foundUser._id;
    console.log('πŸ€–:  βœ…  Found user in Database');

    // Delete all conversations & associated messages
    const { deletedCount, messages } = await deleteConvos(userId, {});

    if (messages.deletedCount > 0 || deletedCount > 0) {
      console.log(`πŸ€–:  βœ…  Deleted ${deletedCount} convos & ${messages.deletedCount} messages`);
    }

    // Ensure all user messages are deleted
    const { deletedCount: deletedMessages } = await deleteMessages({ user: userId });
    if (deletedMessages > 0) {
      console.log(`πŸ€–:  βœ…  Deleted ${deletedMessages} remaining message(s)`);
    }

    // Delete all user sessions
    await deleteAllUserSessions(userId.toString());

    // Delete user, balance, transactions, tokens, ACL entries, and remove from groups
    await Balance.deleteMany({ user: userId });
    await Transaction.deleteMany({ user: userId });
    await Token.deleteMany({ userId: userId });
    await AclEntry.deleteMany({ principalId: userId });
    await Group.updateMany({ memberIds: userId }, { $pull: { memberIds: userId } });
    await User.deleteMany({ _id: userId });

    console.log('πŸ€–:  βœ…  Deleted user from Database');

    await db.connection.close();
  } catch (error) {
    console.error('Error:', error);
  }
}

process.on('uncaughtException', (err) => console.error('Uncaught Exception:', err));