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