37 lines
1.3 KiB
TypeScript
37 lines
1.3 KiB
TypeScript
import { DataSource } from 'typeorm';
|
|
import { RoomEntity } from '../../../entities';
|
|
import { replaceRoomRelations } from '../../relations';
|
|
import { SaveRoomCommand } from '../../types';
|
|
|
|
export async function handleSaveRoom(command: SaveRoomCommand, dataSource: DataSource): Promise<void> {
|
|
const { room } = command.payload;
|
|
await dataSource.transaction(async (manager) => {
|
|
const repo = manager.getRepository(RoomEntity);
|
|
const entity = repo.create({
|
|
id: room.id,
|
|
name: room.name,
|
|
description: room.description ?? null,
|
|
topic: room.topic ?? null,
|
|
hostId: room.hostId,
|
|
password: room.password ?? null,
|
|
hasPassword: room.hasPassword ? 1 : 0,
|
|
isPrivate: room.isPrivate ? 1 : 0,
|
|
createdAt: room.createdAt,
|
|
userCount: room.userCount ?? 0,
|
|
maxUsers: room.maxUsers ?? null,
|
|
icon: room.icon ?? null,
|
|
iconUpdatedAt: room.iconUpdatedAt ?? null,
|
|
permissions: room.permissions != null ? JSON.stringify(room.permissions) : null,
|
|
sourceId: room.sourceId ?? null,
|
|
sourceName: room.sourceName ?? null,
|
|
sourceUrl: room.sourceUrl ?? null
|
|
});
|
|
|
|
await repo.save(entity);
|
|
await replaceRoomRelations(manager, room.id, {
|
|
channels: room.channels ?? [],
|
|
members: room.members ?? []
|
|
});
|
|
});
|
|
}
|