universo-platform-3d
90 строк · 2.4 Кб
1import { Logger, UseFilters, UseGuards, UseInterceptors } from '@nestjs/common'
2import {
3MessageBody,
4SubscribeMessage,
5WebSocketGateway
6} from '@nestjs/websockets'
7import { GodotSocketExceptionFilter } from '../godot-server/godot-socket-exception.filter'
8import { GodotSocketInterceptor } from '../godot-server/godot-socket.interceptor'
9import { UpdateEnvironmentDto } from './dto/update-environment.dto'
10import { EnvironmentService } from './environment.service'
11import {
12AdminTokenWS,
13UserTokenWS
14} from '../godot-server/get-user-ws.decorator'
15import { UserId } from '../util/mongo-object-id-helpers'
16import { WsAuthGuard } from '../godot-server/ws-auth.guard'
17
18enum ZoneEnvironmentMessage {
19GET_ONE = 'zone_get_environment',
20UPDATE_ONE = 'zone_update_environment'
21}
22
23@WebSocketGateway()
24@UseGuards(WsAuthGuard)
25@UseInterceptors(GodotSocketInterceptor)
26@UseFilters(GodotSocketExceptionFilter)
27export class EnvironmentGateway {
28constructor(
29private readonly environmentService: EnvironmentService,
30private readonly logger: Logger
31) {}
32
33@SubscribeMessage(ZoneEnvironmentMessage.GET_ONE)
34public findOneEnvironment(
35@UserTokenWS('user_id') userId: UserId,
36@AdminTokenWS() isAdmin: boolean,
37@MessageBody('id') id: string
38) {
39this.logger.log(
40`${JSON.stringify(
41{
42ZoneTerrainMessage: ZoneEnvironmentMessage.GET_ONE,
43id: id
44},
45null,
462
47)}`,
48EnvironmentGateway.name
49)
50if (isAdmin) {
51return this.environmentService.findOne(id)
52}
53if (userId) {
54return this.environmentService.findOneWithRolesCheck(id, userId)
55}
56return
57}
58
59@SubscribeMessage(ZoneEnvironmentMessage.UPDATE_ONE)
60public updateOne(
61@UserTokenWS('user_id') userId: UserId,
62@AdminTokenWS() isAdmin: boolean,
63@MessageBody('id') id: string,
64@MessageBody('dto') updateEnvironmentDto: UpdateEnvironmentDto
65) {
66this.logger.log(
67`${JSON.stringify(
68{
69ZoneTerrainMessage: ZoneEnvironmentMessage.UPDATE_ONE,
70id: id,
71updateEnvironmentDto: updateEnvironmentDto
72},
73null,
742
75)}`,
76EnvironmentGateway.name
77)
78if (isAdmin) {
79return this.environmentService.update(id, updateEnvironmentDto)
80}
81if (userId) {
82return this.environmentService.updateWithRolesCheck(
83id,
84updateEnvironmentDto,
85userId
86)
87}
88return
89}
90}
91