universo-platform-3d
78 строк · 2.0 Кб
1import {
2MessageBody,
3SubscribeMessage,
4WebSocketGateway
5} from '@nestjs/websockets'
6import { AssetService } from './asset.service'
7import { UpsertAssetDto } from './dto/upsert-asset.dto'
8import { Logger, UseFilters, UseGuards, UseInterceptors } from '@nestjs/common'
9import { GodotSocketInterceptor } from '../godot-server/godot-socket.interceptor'
10import { GodotSocketExceptionFilter } from '../godot-server/godot-socket-exception.filter'
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 ZoneAssetWsMessage {
19GET_ONE = 'zone_get_asset',
20UPDATE = 'zone_update_asset'
21}
22
23@WebSocketGateway()
24@UseGuards(WsAuthGuard)
25@UseInterceptors(GodotSocketInterceptor)
26@UseFilters(GodotSocketExceptionFilter)
27export class AssetGateway {
28public constructor(
29private readonly assetService: AssetService,
30private readonly logger: Logger
31) {}
32
33@SubscribeMessage(ZoneAssetWsMessage.GET_ONE)
34public findOne(
35@UserTokenWS('user_id') userId: UserId,
36@AdminTokenWS() isAdmin: boolean,
37@MessageBody('id') id: string
38) {
39this.logger.log(
40`${JSON.stringify(
41{
42ZoneAssetWsMessage: ZoneAssetWsMessage.GET_ONE,
43id: id
44},
45null,
462
47)}`,
48AssetGateway.name
49)
50
51if (userId) {
52return this.assetService.findOneWithRolesCheck(userId, id)
53}
54
55if (isAdmin) {
56return this.assetService.findOneAdmin(id)
57}
58}
59
60@SubscribeMessage(ZoneAssetWsMessage.UPDATE)
61public update(
62@UserTokenWS('user_id') userId: UserId,
63@AdminTokenWS() isAdmin: boolean,
64@MessageBody('id') id: string,
65@MessageBody('dto') updateAssetDto: UpsertAssetDto
66) {
67if (userId) {
68return this.assetService.updateOneWithRolesCheck(
69userId,
70id,
71updateAssetDto
72)
73}
74if (isAdmin) {
75return this.assetService.updateOneAdmin(id, updateAssetDto)
76}
77}
78}
79