Spaces:
Build error
Build error
File size: 4,473 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 | import { type MessageDescriptor } from '@lingui/core';
import { msg } from '@lingui/core/macro';
import { assertUnreachable } from 'twenty-shared/utils';
import { STANDARD_ERROR_MESSAGE } from 'src/engine/api/common/common-query-runners/errors/standard-error-message.constant';
import { CustomException } from 'src/utils/custom-exception';
export enum TwentyORMExceptionCode {
METADATA_VERSION_MISMATCH = 'METADATA_VERSION_MISMATCH',
WORKSPACE_SCHEMA_NOT_FOUND = 'WORKSPACE_SCHEMA_NOT_FOUND',
ROLES_PERMISSIONS_VERSION_NOT_FOUND = 'ROLES_PERMISSIONS_VERSION_NOT_FOUND',
FEATURE_FLAG_MAP_VERSION_NOT_FOUND = 'FEATURE_FLAG_MAP_VERSION_NOT_FOUND',
USER_WORKSPACE_ROLE_MAP_VERSION_NOT_FOUND = 'USER_WORKSPACE_ROLE_MAP_VERSION_NOT_FOUND',
API_KEY_ROLE_MAP_VERSION_NOT_FOUND = 'API_KEY_ROLE_MAP_VERSION_NOT_FOUND',
MALFORMED_METADATA = 'MALFORMED_METADATA',
WORKSPACE_NOT_FOUND = 'WORKSPACE_NOT_FOUND',
CONNECT_RECORD_NOT_FOUND = 'CONNECT_RECORD_NOT_FOUND',
CONNECT_NOT_ALLOWED = 'CONNECT_NOT_ALLOWED',
CONNECT_UNIQUE_CONSTRAINT_ERROR = 'CONNECT_UNIQUE_CONSTRAINT_ERROR',
MISSING_MAIN_ALIAS_TARGET = 'MISSING_MAIN_ALIAS_TARGET',
METHOD_NOT_ALLOWED = 'METHOD_NOT_ALLOWED',
ENUM_TYPE_NAME_NOT_FOUND = 'ENUM_TYPE_NAME_NOT_FOUND',
QUERY_READ_TIMEOUT = 'QUERY_READ_TIMEOUT',
DUPLICATE_ENTRY_DETECTED = 'DUPLICATE_ENTRY_DETECTED',
TOO_MANY_RECORDS_TO_UPDATE = 'TOO_MANY_RECORDS_TO_UPDATE',
INVALID_INPUT = 'INVALID_INPUT',
ORM_EVENT_DATA_CORRUPTED = 'ORM_EVENT_DATA_CORRUPTED',
RLS_VALIDATION_FAILED = 'RLS_VALIDATION_FAILED',
NO_ROLE_FOUND_FOR_USER_WORKSPACE = 'NO_ROLE_FOUND_FOR_USER_WORKSPACE',
}
const getTwentyORMExceptionUserFriendlyMessage = (
code: TwentyORMExceptionCode,
) => {
switch (code) {
case TwentyORMExceptionCode.METADATA_VERSION_MISMATCH:
return msg`Data version mismatch. Please refresh and try again.`;
case TwentyORMExceptionCode.WORKSPACE_SCHEMA_NOT_FOUND:
return msg`Workspace schema not found.`;
case TwentyORMExceptionCode.ROLES_PERMISSIONS_VERSION_NOT_FOUND:
return msg`Roles and permissions configuration not found.`;
case TwentyORMExceptionCode.FEATURE_FLAG_MAP_VERSION_NOT_FOUND:
return msg`Feature configuration not found.`;
case TwentyORMExceptionCode.USER_WORKSPACE_ROLE_MAP_VERSION_NOT_FOUND:
return msg`User workspace role configuration not found.`;
case TwentyORMExceptionCode.API_KEY_ROLE_MAP_VERSION_NOT_FOUND:
return msg`API key role configuration not found.`;
case TwentyORMExceptionCode.MALFORMED_METADATA:
return msg`Data structure is invalid.`;
case TwentyORMExceptionCode.WORKSPACE_NOT_FOUND:
return msg`Workspace not found.`;
case TwentyORMExceptionCode.CONNECT_RECORD_NOT_FOUND:
return msg`Related record not found.`;
case TwentyORMExceptionCode.CONNECT_NOT_ALLOWED:
return msg`This connection is not allowed.`;
case TwentyORMExceptionCode.CONNECT_UNIQUE_CONSTRAINT_ERROR:
return msg`A record with this relationship already exists.`;
case TwentyORMExceptionCode.MISSING_MAIN_ALIAS_TARGET:
return msg`Missing main alias target.`;
case TwentyORMExceptionCode.METHOD_NOT_ALLOWED:
return msg`This operation is not allowed.`;
case TwentyORMExceptionCode.QUERY_READ_TIMEOUT:
return msg`Query timed out. Please try again.`;
case TwentyORMExceptionCode.DUPLICATE_ENTRY_DETECTED:
return msg`A duplicate entry was detected.`;
case TwentyORMExceptionCode.TOO_MANY_RECORDS_TO_UPDATE:
return msg`Too many records to update at once.`;
case TwentyORMExceptionCode.INVALID_INPUT:
return msg`Invalid input provided.`;
case TwentyORMExceptionCode.RLS_VALIDATION_FAILED:
return msg`Record does not satisfy security constraints.`;
case TwentyORMExceptionCode.ENUM_TYPE_NAME_NOT_FOUND:
case TwentyORMExceptionCode.ORM_EVENT_DATA_CORRUPTED:
return STANDARD_ERROR_MESSAGE;
case TwentyORMExceptionCode.NO_ROLE_FOUND_FOR_USER_WORKSPACE:
return msg`No role found for user.`;
default:
assertUnreachable(code);
}
};
export class TwentyORMException extends CustomException<TwentyORMExceptionCode> {
constructor(
message: string,
code: TwentyORMExceptionCode,
{ userFriendlyMessage }: { userFriendlyMessage?: MessageDescriptor } = {},
) {
super(message, code, {
userFriendlyMessage:
userFriendlyMessage ?? getTwentyORMExceptionUserFriendlyMessage(code),
});
}
}
|