Merge branch 'feat/inda-383-daily-stat' into 'main'
[ProtonMail-WebClient.git] / packages / docs-core / lib / Api / Requests / ApiGetThread.ts
blobcfe40c7b14de7fac3d02cc920479e0d0c3f125f3
1 import type { HttpHeaders } from '../Types/HttpHeaders'
2 import type { GetCommentThreadResponse } from '../Types/GetCommentThreadResponse'
3 import type { ApiResult } from '@proton/docs-shared'
4 import { DocsApiPrivateRouteBuilder } from '../Routes/DocsApiPrivateRouteBuilder'
5 import { DocsApiPublicRouteBuilder } from '../Routes/DocsApiPublicRouteBuilder'
6 import { isPublicNodeMeta, type NodeMeta, type PublicNodeMeta } from '@proton/drive-store/lib/interface'
7 import type { RouteExecutor } from '../RouteExecutor'
9 export class ApiGetThread {
10   constructor(
11     private readonly executor: RouteExecutor,
12     private publicContextHeaders: HttpHeaders | undefined,
13   ) {}
15   async execute(dto: {
16     nodeMeta: NodeMeta | PublicNodeMeta
17     threadId: string
18   }): Promise<ApiResult<GetCommentThreadResponse>> {
19     if (isPublicNodeMeta(dto.nodeMeta)) {
20       return this.executePublic(dto, dto.nodeMeta)
21     } else {
22       return this.executePrivate(dto, dto.nodeMeta)
23     }
24   }
26   private async executePrivate(
27     dto: {
28       threadId: string
29     },
30     nodeMeta: NodeMeta,
31   ): Promise<ApiResult<GetCommentThreadResponse>> {
32     const route = new DocsApiPrivateRouteBuilder({
33       volumeId: nodeMeta.volumeId,
34       linkId: nodeMeta.linkId,
35     }).getThread({
36       threadId: dto.threadId,
37     })
39     return this.executor.execute(route)
40   }
42   private async executePublic(
43     dto: {
44       threadId: string
45     },
46     nodeMeta: PublicNodeMeta,
47   ): Promise<ApiResult<GetCommentThreadResponse>> {
48     if (!this.publicContextHeaders) {
49       throw new Error('Public context headers not set')
50     }
52     const route = new DocsApiPublicRouteBuilder({
53       token: nodeMeta.token,
54       linkId: nodeMeta.linkId,
55       headers: this.publicContextHeaders,
56     }).getThread({
57       threadId: dto.threadId,
58     })
60     return this.executor.execute(route)
61   }