File size: 1,532 Bytes
00a912e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import { EVENTS } from '@music-together/shared'
import type { TypedServer } from '../middleware/types.js'
import { roomRepo } from '../repositories/roomRepository.js'
import { revokeRejoinTickets } from './rejoinTicketService.js'
import { toPublicRoomState } from '../utils/roomUtils.js'
import * as authService from './authService.js'

export function replaceActiveUserId(oldUserId: string, newUserId: string, io: TypedServer): void {
  for (const room of roomRepo.getAll().values()) {
    let changed = false
    const onlineUser = room.users.find((user) => user.id === oldUserId)
    if (onlineUser) {
      onlineUser.id = newUserId
      changed = true
    }
    const rosterMember = room.members.find((member) => member.id === oldUserId)
    if (rosterMember) {
      rosterMember.id = newUserId
      changed = true
    }
    if (room.creatorId === oldUserId) {
      room.creatorId = newUserId
      changed = true
    }
    if (room.hostId === oldUserId) {
      room.hostId = newUserId
      changed = true
    }
    if (room.adminUserIds.delete(oldUserId)) {
      room.adminUserIds.add(newUserId)
      changed = true
    }
    if (room.temporaryAdminUserId === oldUserId) {
      room.temporaryAdminUserId = newUserId
      changed = true
    }
    if (!changed) continue

    revokeRejoinTickets(room.id, oldUserId)
    roomRepo.persist(room.id)
    io.to(room.id).emit(EVENTS.ROOM_STATE, toPublicRoomState(room))
  }

  roomRepo.replaceUserId(oldUserId, newUserId)
  authService.replaceUserId(oldUserId, newUserId)
}