unoffical wafrn mirror
wafrn.net
atproto
social-network
activitypub
1import { Op } from 'sequelize'
2import {
3 EmojiReaction,
4 Follows,
5 Media,
6 Post,
7 PostMentionsUserRelation,
8 PostTag,
9 QuestionPollAnswer,
10 sequelize,
11 User,
12 UserEmojiRelation
13} from '../../models/index.js'
14import { completeEnvironment } from '../backendOptions.js'
15import { logger } from '../logger.js'
16import { redisCache } from '../redis.js'
17
18async function removeUser(userId: string) {
19 let deleted = false
20 try {
21 const userToRemove = await User.findOne({ where: { remoteId: userId } })
22 if (userToRemove) {
23 const ownerOfDeletedPost = await User.findOne({
24 where: {
25 url: completeEnvironment.deletedUser
26 }
27 })
28 if (!ownerOfDeletedPost) return
29
30 const postsIdsStringQuery = `"postId" IN (select "id" FROM "posts" WHERE "userId"='${userToRemove.id}')`
31 userToRemove.activated = false
32 await Post.update(
33 {
34 userId: ownerOfDeletedPost.id,
35 content: 'Post has been deleted because remote user has been deleted',
36 isDeleted: true
37 },
38 {
39 where: {
40 userId: userToRemove.id
41 }
42 }
43 )
44 await Media.destroy({
45 where: sequelize.literal(postsIdsStringQuery)
46 })
47 await PostTag.destroy({
48 where: sequelize.literal(postsIdsStringQuery)
49 })
50 await Follows.destroy({
51 where: {
52 [Op.or]: [
53 {
54 followerId: userToRemove.id
55 },
56 {
57 followedId: userToRemove.id
58 }
59 ]
60 }
61 })
62 await PostMentionsUserRelation.update(
63 {
64 userId: ownerOfDeletedPost.id
65 },
66 {
67 where: {
68 userId: userToRemove.id
69 }
70 }
71 )
72 await EmojiReaction.destroy({
73 where: {
74 userId: userToRemove.id
75 }
76 })
77 await UserEmojiRelation.destroy({
78 where: {
79 userId: userToRemove.id
80 }
81 })
82 await QuestionPollAnswer.destroy({
83 where: {
84 userId: userToRemove.id
85 }
86 })
87 //await userToRemove.save()
88 redisCache.del('userRemoteId:' + userToRemove.remoteId.toLocaleLowerCase())
89 await userToRemove.destroy()
90 deleted = true
91 }
92 } catch (error) {
93 logger.trace({
94 message: 'Error deleting user',
95 error: error,
96 userId: userId
97 })
98 }
99 return deleted
100}
101
102export { removeUser }