30 lines
775 B
TypeScript
30 lines
775 B
TypeScript
import { DataSource } from 'typeorm';
|
|
import { RoomEntity } from '../../../entities';
|
|
import { UpdateRoomCommand } from '../../types';
|
|
import {
|
|
applyUpdates,
|
|
boolToInt,
|
|
jsonOrNull,
|
|
TransformMap
|
|
} from './utils/applyUpdates';
|
|
|
|
const ROOM_TRANSFORMS: TransformMap = {
|
|
isPrivate: boolToInt,
|
|
userCount: (val) => (val ?? 0),
|
|
permissions: jsonOrNull,
|
|
channels: jsonOrNull
|
|
};
|
|
|
|
export async function handleUpdateRoom(command: UpdateRoomCommand, dataSource: DataSource): Promise<void> {
|
|
const repo = dataSource.getRepository(RoomEntity);
|
|
const { roomId, updates } = command.payload;
|
|
const existing = await repo.findOne({ where: { id: roomId } });
|
|
|
|
if (!existing)
|
|
return;
|
|
|
|
applyUpdates(existing, updates, ROOM_TRANSFORMS);
|
|
await repo.save(existing);
|
|
}
|
|
|