universo-platform-3d

Форк
0
90 строк · 2.4 Кб
1
import { Logger, UseFilters, UseGuards, UseInterceptors } from '@nestjs/common'
2
import {
3
  MessageBody,
4
  SubscribeMessage,
5
  WebSocketGateway
6
} from '@nestjs/websockets'
7
import { GodotSocketExceptionFilter } from '../godot-server/godot-socket-exception.filter'
8
import { GodotSocketInterceptor } from '../godot-server/godot-socket.interceptor'
9
import { UpdateEnvironmentDto } from './dto/update-environment.dto'
10
import { EnvironmentService } from './environment.service'
11
import {
12
  AdminTokenWS,
13
  UserTokenWS
14
} from '../godot-server/get-user-ws.decorator'
15
import { UserId } from '../util/mongo-object-id-helpers'
16
import { WsAuthGuard } from '../godot-server/ws-auth.guard'
17

18
enum ZoneEnvironmentMessage {
19
  GET_ONE = 'zone_get_environment',
20
  UPDATE_ONE = 'zone_update_environment'
21
}
22

23
@WebSocketGateway()
24
@UseGuards(WsAuthGuard)
25
@UseInterceptors(GodotSocketInterceptor)
26
@UseFilters(GodotSocketExceptionFilter)
27
export class EnvironmentGateway {
28
  constructor(
29
    private readonly environmentService: EnvironmentService,
30
    private readonly logger: Logger
31
  ) {}
32

33
  @SubscribeMessage(ZoneEnvironmentMessage.GET_ONE)
34
  public findOneEnvironment(
35
    @UserTokenWS('user_id') userId: UserId,
36
    @AdminTokenWS() isAdmin: boolean,
37
    @MessageBody('id') id: string
38
  ) {
39
    this.logger.log(
40
      `${JSON.stringify(
41
        {
42
          ZoneTerrainMessage: ZoneEnvironmentMessage.GET_ONE,
43
          id: id
44
        },
45
        null,
46
        2
47
      )}`,
48
      EnvironmentGateway.name
49
    )
50
    if (isAdmin) {
51
      return this.environmentService.findOne(id)
52
    }
53
    if (userId) {
54
      return this.environmentService.findOneWithRolesCheck(id, userId)
55
    }
56
    return
57
  }
58

59
  @SubscribeMessage(ZoneEnvironmentMessage.UPDATE_ONE)
60
  public updateOne(
61
    @UserTokenWS('user_id') userId: UserId,
62
    @AdminTokenWS() isAdmin: boolean,
63
    @MessageBody('id') id: string,
64
    @MessageBody('dto') updateEnvironmentDto: UpdateEnvironmentDto
65
  ) {
66
    this.logger.log(
67
      `${JSON.stringify(
68
        {
69
          ZoneTerrainMessage: ZoneEnvironmentMessage.UPDATE_ONE,
70
          id: id,
71
          updateEnvironmentDto: updateEnvironmentDto
72
        },
73
        null,
74
        2
75
      )}`,
76
      EnvironmentGateway.name
77
    )
78
    if (isAdmin) {
79
      return this.environmentService.update(id, updateEnvironmentDto)
80
    }
81
    if (userId) {
82
      return this.environmentService.updateWithRolesCheck(
83
        id,
84
        updateEnvironmentDto,
85
        userId
86
      )
87
    }
88
    return
89
  }
90
}
91

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.