unoffical wafrn mirror wafrn.net
atproto social-network activitypub
at angular21 102 lines 2.4 kB view raw
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 }