File size: 1,109 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
import { type MessageDescriptor } from '@lingui/core';
import { msg } from '@lingui/core/macro';
import { assertUnreachable, CustomError } from 'twenty-shared/utils';

export const WorkspaceDataSourceExceptionCode = {
  DDL_LOCKED: 'DDL_LOCKED',
} as const;

const getWorkspaceDataSourceExceptionUserFriendlyMessage = (
  code: keyof typeof WorkspaceDataSourceExceptionCode,
) => {
  switch (code) {
    case WorkspaceDataSourceExceptionCode.DDL_LOCKED:
      return msg`Workspace schema changes are temporarily locked.`;
    default:
      assertUnreachable(code);
  }
};

export class WorkspaceDataSourceException extends CustomError {
  code: keyof typeof WorkspaceDataSourceExceptionCode;
  userFriendlyMessage: MessageDescriptor;

  constructor({
    message,
    code,
    userFriendlyMessage,
  }: {
    message: string;
    code: keyof typeof WorkspaceDataSourceExceptionCode;
    userFriendlyMessage?: MessageDescriptor;
  }) {
    super(message);
    this.code = code;
    this.userFriendlyMessage =
      userFriendlyMessage ??
      getWorkspaceDataSourceExceptionUserFriendlyMessage(code);
  }
}