unoffical wafrn mirror
wafrn.net
atproto
social-network
activitypub
1import { Op } from 'sequelize'
2import { Follows, sequelize, User } from '../../../models/index.js'
3import { activityPubObject } from '../../../interfaces/fediverse/activityPubObject.js'
4import { getAllLocalUserIds } from '../../cacheGetters/getAllLocalUserIds.js'
5import { follow } from '../../follow.js'
6import { logger } from '../../logger.js'
7import { getRemoteActor } from '../getRemoteActor.js'
8
9async function MoveActivity(body: activityPubObject, remoteUser: User, user: User) {
10 // WIP move
11 // TODO get list of users who where following old account
12 // then make them follow the new one, sending petition
13 const apObject: activityPubObject = body
14 logger.debug({
15 message: 'MOVE ACTIVITY',
16 activity: apObject
17 })
18 if (!apObject.target) return
19
20 const newUser = await getRemoteActor(apObject.target, user)
21 const oldUser = await User.findByPk(remoteUser.id) // a bit paranoid, innit?
22 if (newUser && oldUser) {
23 logger.debug({ message: `Moving ${oldUser.url} to ${newUser.url}` })
24 const followsToMove = await Follows.findAll({
25 where: {
26 [Op.and]: [
27 {
28 followedId: oldUser.id,
29 accepted: true,
30 followerId: { [Op.in]: await getAllLocalUserIds() }
31 },
32 sequelize.literal(
33 `"followerId" NOT IN (select "followerId" from "follows" where "followedId"='${newUser.id}')`
34 )
35 ]
36 }
37 })
38 if (followsToMove) {
39 for await (const followToMove of followsToMove) {
40 await follow(followToMove.followerId, newUser.id)
41 }
42 }
43 }
44}
45
46export { MoveActivity }