File size: 3,523 Bytes
d9494a5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
import { UseGuards, UseInterceptors } from '@nestjs/common';
import { Args, Mutation, Query } from '@nestjs/graphql';

import { UUIDScalarType } from 'src/engine/api/graphql/workspace-schema-builder/graphql-types/scalars';
import { MetadataResolver } from 'src/engine/api/graphql/graphql-config/decorators/metadata-resolver.decorator';
import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity';
import { AuthUserWorkspaceId } from 'src/engine/decorators/auth/auth-user-workspace-id.decorator';
import { AuthWorkspace } from 'src/engine/decorators/auth/auth-workspace.decorator';
import { NoPermissionGuard } from 'src/engine/guards/no-permission.guard';
import { WorkspaceAuthGuard } from 'src/engine/guards/workspace-auth.guard';
import { MessageFolderDTO } from 'src/engine/metadata-modules/message-folder/dtos/message-folder.dto';
import {
  UpdateMessageFolderInput,
  UpdateMessageFoldersInput,
} from 'src/engine/metadata-modules/message-folder/dtos/update-message-folder.input';
import { MessageFolderGraphqlApiExceptionInterceptor } from 'src/engine/metadata-modules/message-folder/interceptors/message-folder-graphql-api-exception.interceptor';
import { MessageFolderMetadataService } from 'src/engine/metadata-modules/message-folder/message-folder-metadata.service';

@UseGuards(WorkspaceAuthGuard)
@UseInterceptors(MessageFolderGraphqlApiExceptionInterceptor)
@MetadataResolver(() => MessageFolderDTO)
export class MessageFolderResolver {
  constructor(
    private readonly messageFolderMetadataService: MessageFolderMetadataService,
  ) {}

  @Query(() => [MessageFolderDTO])
  @UseGuards(NoPermissionGuard)
  async myMessageFolders(
    @AuthWorkspace() workspace: WorkspaceEntity,
    @AuthUserWorkspaceId() userWorkspaceId: string,
    @Args('messageChannelId', {
      type: () => UUIDScalarType,
      nullable: true,
    })
    messageChannelId?: string,
  ): Promise<MessageFolderDTO[]> {
    if (messageChannelId) {
      return this.messageFolderMetadataService.findByMessageChannelIdForUser({
        messageChannelId,
        userWorkspaceId,
        workspaceId: workspace.id,
      });
    }

    return this.messageFolderMetadataService.findByUserWorkspaceId({
      userWorkspaceId,
      workspaceId: workspace.id,
    });
  }

  @Mutation(() => MessageFolderDTO)
  @UseGuards(NoPermissionGuard)
  async updateMessageFolder(
    @Args('input') input: UpdateMessageFolderInput,
    @AuthWorkspace() workspace: WorkspaceEntity,
    @AuthUserWorkspaceId() userWorkspaceId: string,
  ): Promise<MessageFolderDTO> {
    await this.messageFolderMetadataService.verifyOwnership({
      id: input.id,
      userWorkspaceId,
      workspaceId: workspace.id,
    });

    return this.messageFolderMetadataService.update({
      id: input.id,
      workspaceId: workspace.id,
      data: input.update,
    });
  }

  @Mutation(() => [MessageFolderDTO])
  @UseGuards(NoPermissionGuard)
  async updateMessageFolders(
    @Args('input') input: UpdateMessageFoldersInput,
    @AuthWorkspace() workspace: WorkspaceEntity,
    @AuthUserWorkspaceId() userWorkspaceId: string,
  ): Promise<MessageFolderDTO[]> {
    await Promise.all(
      input.ids.map((id) =>
        this.messageFolderMetadataService.verifyOwnership({
          id,
          userWorkspaceId,
          workspaceId: workspace.id,
        }),
      ),
    );

    return this.messageFolderMetadataService.setSyncStatus({
      ids: input.ids,
      workspaceId: workspace.id,
      data: input.update,
    });
  }
}