universo-platform-3d

Форк
0
78 строк · 2.0 Кб
1
import {
2
  MessageBody,
3
  SubscribeMessage,
4
  WebSocketGateway
5
} from '@nestjs/websockets'
6
import { AssetService } from './asset.service'
7
import { UpsertAssetDto } from './dto/upsert-asset.dto'
8
import { Logger, UseFilters, UseGuards, UseInterceptors } from '@nestjs/common'
9
import { GodotSocketInterceptor } from '../godot-server/godot-socket.interceptor'
10
import { GodotSocketExceptionFilter } from '../godot-server/godot-socket-exception.filter'
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 ZoneAssetWsMessage {
19
  GET_ONE = 'zone_get_asset',
20
  UPDATE = 'zone_update_asset'
21
}
22

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

33
  @SubscribeMessage(ZoneAssetWsMessage.GET_ONE)
34
  public findOne(
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
          ZoneAssetWsMessage: ZoneAssetWsMessage.GET_ONE,
43
          id: id
44
        },
45
        null,
46
        2
47
      )}`,
48
      AssetGateway.name
49
    )
50

51
    if (userId) {
52
      return this.assetService.findOneWithRolesCheck(userId, id)
53
    }
54

55
    if (isAdmin) {
56
      return this.assetService.findOneAdmin(id)
57
    }
58
  }
59

60
  @SubscribeMessage(ZoneAssetWsMessage.UPDATE)
61
  public update(
62
    @UserTokenWS('user_id') userId: UserId,
63
    @AdminTokenWS() isAdmin: boolean,
64
    @MessageBody('id') id: string,
65
    @MessageBody('dto') updateAssetDto: UpsertAssetDto
66
  ) {
67
    if (userId) {
68
      return this.assetService.updateOneWithRolesCheck(
69
        userId,
70
        id,
71
        updateAssetDto
72
      )
73
    }
74
    if (isAdmin) {
75
      return this.assetService.updateOneAdmin(id, updateAssetDto)
76
    }
77
  }
78
}
79

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

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

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

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