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)
}
|