diff --git a/packages/twenty-front/src/generated-metadata/graphql.ts b/packages/twenty-front/src/generated-metadata/graphql.ts index 7d9f284adb8..6e5b545591d 100644 --- a/packages/twenty-front/src/generated-metadata/graphql.ts +++ b/packages/twenty-front/src/generated-metadata/graphql.ts @@ -256,8 +256,8 @@ export type AuthTokens = { tokens: AuthTokenPair; }; -export type AuthorizeApp = { - __typename?: 'AuthorizeApp'; +export type AuthorizeAppOutput = { + __typename?: 'AuthorizeAppOutput'; redirectUrl: Scalars['String']; }; @@ -750,7 +750,7 @@ export type CreateAgentInput = { roleId?: InputMaybe; }; -export type CreateApiKeyDto = { +export type CreateApiKeyInput = { expiresAt: Scalars['String']; name: Scalars['String']; revokedAt?: InputMaybe; @@ -955,7 +955,7 @@ export type CreateViewSortInput = { viewId: Scalars['UUID']; }; -export type CreateWebhookDto = { +export type CreateWebhookInput = { description?: InputMaybe; operations: Array; secret?: InputMaybe; @@ -1096,7 +1096,7 @@ export type DeleteViewGroupInput = { id: Scalars['UUID']; }; -export type DeleteWebhookDto = { +export type DeleteWebhookInput = { id: Scalars['UUID']; }; @@ -1180,8 +1180,8 @@ export type EmailAccountConnectionParameters = { SMTP?: InputMaybe; }; -export type EmailPasswordResetLink = { - __typename?: 'EmailPasswordResetLink'; +export type EmailPasswordResetLinkOutput = { + __typename?: 'EmailPasswordResetLinkOutput'; /** Boolean that confirms query was dispatched */ success: Scalars['Boolean']; }; @@ -1432,7 +1432,7 @@ export type GaugeChartConfiguration = { graphType: GraphType; }; -export type GetApiKeyDto = { +export type GetApiKeyInput = { id: Scalars['UUID']; }; @@ -1461,7 +1461,7 @@ export type GetServerlessFunctionSourceCodeInput = { version?: Scalars['String']; }; -export type GetWebhookDto = { +export type GetWebhookInput = { id: Scalars['UUID']; }; @@ -1644,8 +1644,8 @@ export type InitiateTwoFactorAuthenticationProvisioningOutput = { uri: Scalars['String']; }; -export type InvalidatePassword = { - __typename?: 'InvalidatePassword'; +export type InvalidatePasswordOutput = { + __typename?: 'InvalidatePasswordOutput'; /** Boolean that confirms query was dispatched */ success: Scalars['Boolean']; }; @@ -1708,8 +1708,8 @@ export type Location = { lng?: Maybe; }; -export type LoginToken = { - __typename?: 'LoginToken'; +export type LoginTokenOutput = { + __typename?: 'LoginTokenOutput'; loginToken: AuthToken; }; @@ -1733,7 +1733,7 @@ export type Mutation = { activateWorkspace: Workspace; assignRoleToAgent: Scalars['Boolean']; assignRoleToApiKey: Scalars['Boolean']; - authorizeApp: AuthorizeApp; + authorizeApp: AuthorizeAppOutput; cancelSwitchBillingInterval: BillingUpdateOutput; cancelSwitchBillingPlan: BillingUpdateOutput; cancelSwitchMeteredPrice: BillingUpdateOutput; @@ -1822,16 +1822,16 @@ export type Mutation = { disablePostgresProxy: PostgresCredentials; duplicateWorkflowVersionStep: WorkflowVersionStepChanges; editSSOIdentityProvider: EditSsoOutput; - emailPasswordResetLink: EmailPasswordResetLink; + emailPasswordResetLink: EmailPasswordResetLinkOutput; enablePostgresProxy: PostgresCredentials; endSubscriptionTrialPeriod: BillingEndTrialPeriodOutput; executeOneServerlessFunction: ServerlessFunctionExecutionResult; generateApiKeyToken: ApiKeyToken; - generateTransientToken: TransientToken; + generateTransientToken: TransientTokenOutput; getAuthTokensFromLoginToken: AuthTokens; getAuthTokensFromOTP: AuthTokens; getAuthorizationUrlForSSO: GetAuthorizationUrlForSsoOutput; - getLoginTokenFromCredentials: LoginToken; + getLoginTokenFromCredentials: LoginTokenOutput; getLoginTokenFromEmailVerificationToken: GetLoginTokenFromEmailVerificationTokenOutput; getWorkspaceAgnosticTokenFromEmailVerificationToken: AvailableWorkspacesAndAccessTokensOutput; impersonate: ImpersonateOutput; @@ -1890,7 +1890,7 @@ export type Mutation = { updatePageLayoutTab: PageLayoutTab; updatePageLayoutWidget: PageLayoutWidget; updatePageLayoutWithTabsAndWidgets: PageLayout; - updatePasswordViaResetToken: InvalidatePassword; + updatePasswordViaResetToken: InvalidatePasswordOutput; updateWebhook?: Maybe; updateWorkflowRunStep: WorkflowAction; updateWorkflowVersionPositions: Scalars['Boolean']; @@ -1970,7 +1970,7 @@ export type MutationCreateAgentHandoffArgs = { export type MutationCreateApiKeyArgs = { - input: CreateApiKeyDto; + input: CreateApiKeyInput; }; @@ -2126,7 +2126,7 @@ export type MutationCreateSamlIdentityProviderArgs = { export type MutationCreateWebhookArgs = { - input: CreateWebhookDto; + input: CreateWebhookInput; }; @@ -2282,7 +2282,7 @@ export type MutationDeleteTwoFactorAuthenticationMethodArgs = { export type MutationDeleteWebhookArgs = { - input: DeleteWebhookDto; + input: DeleteWebhookInput; }; @@ -2482,7 +2482,7 @@ export type MutationRetryJobsArgs = { export type MutationRevokeApiKeyArgs = { - input: RevokeApiKeyDto; + input: RevokeApiKeyInput; }; @@ -2580,7 +2580,7 @@ export type MutationUnsyncRemoteTableArgs = { export type MutationUpdateApiKeyArgs = { - input: UpdateApiKeyDto; + input: UpdateApiKeyInput; }; @@ -2711,7 +2711,7 @@ export type MutationUpdatePasswordViaResetTokenArgs = { export type MutationUpdateWebhookArgs = { - input: UpdateWebhookDto; + input: UpdateWebhookInput; }; @@ -3130,7 +3130,7 @@ export type Query = { apiKeys: Array; billingPortalSession: BillingSessionOutput; checkUserExists: CheckUserExistOutput; - checkWorkspaceInviteHashIsValid: WorkspaceInviteHashValid; + checkWorkspaceInviteHashIsValid: WorkspaceInviteHashValidOutput; currentUser: User; currentWorkspace: Workspace; field: Field; @@ -3203,7 +3203,7 @@ export type Query = { object: Object; objects: ObjectConnection; search: SearchResultConnection; - validatePasswordResetToken: ValidatePasswordResetToken; + validatePasswordResetToken: ValidatePasswordResetTokenOutput; versionInfo: VersionInfo; webhook?: Maybe; webhooks: Array; @@ -3226,7 +3226,7 @@ export type QueryAgentChatThreadsArgs = { export type QueryApiKeyArgs = { - input: GetApiKeyDto; + input: GetApiKeyInput; }; @@ -3545,7 +3545,7 @@ export type QueryValidatePasswordResetTokenArgs = { export type QueryWebhookArgs = { - input: GetWebhookDto; + input: GetWebhookInput; }; export type QueueJob = { @@ -3683,7 +3683,7 @@ export type RetryJobsResponse = { retriedCount: Scalars['Int']; }; -export type RevokeApiKeyDto = { +export type RevokeApiKeyInput = { id: Scalars['UUID']; }; @@ -4019,8 +4019,8 @@ export type TimelineThreadsWithTotal = { totalNumberOfThreads: Scalars['Int']; }; -export type TransientToken = { - __typename?: 'TransientToken'; +export type TransientTokenOutput = { + __typename?: 'TransientTokenOutput'; transientToken: AuthToken; }; @@ -4072,7 +4072,7 @@ export type UpdateAgentInput = { roleId?: InputMaybe; }; -export type UpdateApiKeyDto = { +export type UpdateApiKeyInput = { expiresAt?: InputMaybe; id: Scalars['UUID']; name?: InputMaybe; @@ -4322,7 +4322,7 @@ export type UpdateViewSortInput = { viewId?: InputMaybe; }; -export type UpdateWebhookDto = { +export type UpdateWebhookInput = { description?: InputMaybe; id: Scalars['UUID']; operations?: InputMaybe>; @@ -4470,8 +4470,8 @@ export type ValidateApprovedAccessDomainInput = { validationToken: Scalars['String']; }; -export type ValidatePasswordResetToken = { - __typename?: 'ValidatePasswordResetToken'; +export type ValidatePasswordResetTokenOutput = { + __typename?: 'ValidatePasswordResetTokenOutput'; email: Scalars['String']; id: Scalars['UUID']; }; @@ -4731,8 +4731,8 @@ export type WorkspaceInvitation = { id: Scalars['UUID']; }; -export type WorkspaceInviteHashValid = { - __typename?: 'WorkspaceInviteHashValid'; +export type WorkspaceInviteHashValidOutput = { + __typename?: 'WorkspaceInviteHashValidOutput'; isValid: Scalars['Boolean']; }; @@ -4960,7 +4960,7 @@ export type AuthorizeAppMutationVariables = Exact<{ }>; -export type AuthorizeAppMutation = { __typename?: 'Mutation', authorizeApp: { __typename?: 'AuthorizeApp', redirectUrl: string } }; +export type AuthorizeAppMutation = { __typename?: 'Mutation', authorizeApp: { __typename?: 'AuthorizeAppOutput', redirectUrl: string } }; export type EmailPasswordResetLinkMutationVariables = Exact<{ email: Scalars['String']; @@ -4968,7 +4968,7 @@ export type EmailPasswordResetLinkMutationVariables = Exact<{ }>; -export type EmailPasswordResetLinkMutation = { __typename?: 'Mutation', emailPasswordResetLink: { __typename?: 'EmailPasswordResetLink', success: boolean } }; +export type EmailPasswordResetLinkMutation = { __typename?: 'Mutation', emailPasswordResetLink: { __typename?: 'EmailPasswordResetLinkOutput', success: boolean } }; export type GenerateApiKeyTokenMutationVariables = Exact<{ apiKeyId: Scalars['UUID']; @@ -4981,7 +4981,7 @@ export type GenerateApiKeyTokenMutation = { __typename?: 'Mutation', generateApi export type GenerateTransientTokenMutationVariables = Exact<{ [key: string]: never; }>; -export type GenerateTransientTokenMutation = { __typename?: 'Mutation', generateTransientToken: { __typename?: 'TransientToken', transientToken: { __typename?: 'AuthToken', token: string } } }; +export type GenerateTransientTokenMutation = { __typename?: 'Mutation', generateTransientToken: { __typename?: 'TransientTokenOutput', transientToken: { __typename?: 'AuthToken', token: string } } }; export type GetAuthTokensFromLoginTokenMutationVariables = Exact<{ loginToken: Scalars['String']; @@ -5016,7 +5016,7 @@ export type GetLoginTokenFromCredentialsMutationVariables = Exact<{ }>; -export type GetLoginTokenFromCredentialsMutation = { __typename?: 'Mutation', getLoginTokenFromCredentials: { __typename?: 'LoginToken', loginToken: { __typename?: 'AuthToken', token: string, expiresAt: string } } }; +export type GetLoginTokenFromCredentialsMutation = { __typename?: 'Mutation', getLoginTokenFromCredentials: { __typename?: 'LoginTokenOutput', loginToken: { __typename?: 'AuthToken', token: string, expiresAt: string } } }; export type GetLoginTokenFromEmailVerificationTokenMutationVariables = Exact<{ emailVerificationToken: Scalars['String']; @@ -5125,7 +5125,7 @@ export type UpdatePasswordViaResetTokenMutationVariables = Exact<{ }>; -export type UpdatePasswordViaResetTokenMutation = { __typename?: 'Mutation', updatePasswordViaResetToken: { __typename?: 'InvalidatePassword', success: boolean } }; +export type UpdatePasswordViaResetTokenMutation = { __typename?: 'Mutation', updatePasswordViaResetToken: { __typename?: 'InvalidatePasswordOutput', success: boolean } }; export type CheckUserExistsQueryVariables = Exact<{ email: Scalars['String']; @@ -5147,7 +5147,7 @@ export type ValidatePasswordResetTokenQueryVariables = Exact<{ }>; -export type ValidatePasswordResetTokenQuery = { __typename?: 'Query', validatePasswordResetToken: { __typename?: 'ValidatePasswordResetToken', id: string, email: string } }; +export type ValidatePasswordResetTokenQuery = { __typename?: 'Query', validatePasswordResetToken: { __typename?: 'ValidatePasswordResetTokenOutput', id: string, email: string } }; export type BillingPriceLicensedFragmentFragment = { __typename?: 'BillingPriceLicensed', stripePriceId: string, unitAmount: number, recurringInterval: SubscriptionInterval, priceUsageType: BillingUsageType }; @@ -5502,49 +5502,49 @@ export type AssignRoleToApiKeyMutationVariables = Exact<{ export type AssignRoleToApiKeyMutation = { __typename?: 'Mutation', assignRoleToApiKey: boolean }; export type CreateApiKeyMutationVariables = Exact<{ - input: CreateApiKeyDto; + input: CreateApiKeyInput; }>; export type CreateApiKeyMutation = { __typename?: 'Mutation', createApiKey: { __typename?: 'ApiKey', id: string, name: string, expiresAt: string, revokedAt?: string | null, role: { __typename?: 'Role', id: string, label: string, icon?: string | null } } }; export type CreateWebhookMutationVariables = Exact<{ - input: CreateWebhookDto; + input: CreateWebhookInput; }>; export type CreateWebhookMutation = { __typename?: 'Mutation', createWebhook: { __typename?: 'Webhook', id: string, targetUrl: string, operations: Array, description?: string | null, secret: string } }; export type DeleteWebhookMutationVariables = Exact<{ - input: DeleteWebhookDto; + input: DeleteWebhookInput; }>; export type DeleteWebhookMutation = { __typename?: 'Mutation', deleteWebhook: boolean }; export type RevokeApiKeyMutationVariables = Exact<{ - input: RevokeApiKeyDto; + input: RevokeApiKeyInput; }>; export type RevokeApiKeyMutation = { __typename?: 'Mutation', revokeApiKey?: { __typename?: 'ApiKey', id: string } | null }; export type UpdateApiKeyMutationVariables = Exact<{ - input: UpdateApiKeyDto; + input: UpdateApiKeyInput; }>; export type UpdateApiKeyMutation = { __typename?: 'Mutation', updateApiKey?: { __typename?: 'ApiKey', id: string, name: string, expiresAt: string, revokedAt?: string | null, role: { __typename?: 'Role', id: string, label: string, icon?: string | null } } | null }; export type UpdateWebhookMutationVariables = Exact<{ - input: UpdateWebhookDto; + input: UpdateWebhookInput; }>; export type UpdateWebhookMutation = { __typename?: 'Mutation', updateWebhook?: { __typename?: 'Webhook', id: string, targetUrl: string, operations: Array, description?: string | null, secret: string } | null }; export type GetApiKeyQueryVariables = Exact<{ - input: GetApiKeyDto; + input: GetApiKeyInput; }>; @@ -5556,7 +5556,7 @@ export type GetApiKeysQueryVariables = Exact<{ [key: string]: never; }>; export type GetApiKeysQuery = { __typename?: 'Query', apiKeys: Array<{ __typename?: 'ApiKey', id: string, name: string, expiresAt: string, revokedAt?: string | null, role: { __typename?: 'Role', id: string, label: string, icon?: string | null } }> }; export type GetWebhookQueryVariables = Exact<{ - input: GetWebhookDto; + input: GetWebhookInput; }>; @@ -10607,7 +10607,7 @@ export type AssignRoleToApiKeyMutationHookResult = ReturnType; export type AssignRoleToApiKeyMutationOptions = Apollo.BaseMutationOptions; export const CreateApiKeyDocument = gql` - mutation CreateApiKey($input: CreateApiKeyDTO!) { + mutation CreateApiKey($input: CreateApiKeyInput!) { createApiKey(input: $input) { ...ApiKeyFragment } @@ -10640,7 +10640,7 @@ export type CreateApiKeyMutationHookResult = ReturnType; export type CreateApiKeyMutationOptions = Apollo.BaseMutationOptions; export const CreateWebhookDocument = gql` - mutation CreateWebhook($input: CreateWebhookDTO!) { + mutation CreateWebhook($input: CreateWebhookInput!) { createWebhook(input: $input) { ...WebhookFragment } @@ -10673,7 +10673,7 @@ export type CreateWebhookMutationHookResult = ReturnType; export type CreateWebhookMutationOptions = Apollo.BaseMutationOptions; export const DeleteWebhookDocument = gql` - mutation DeleteWebhook($input: DeleteWebhookDTO!) { + mutation DeleteWebhook($input: DeleteWebhookInput!) { deleteWebhook(input: $input) } `; @@ -10704,7 +10704,7 @@ export type DeleteWebhookMutationHookResult = ReturnType; export type DeleteWebhookMutationOptions = Apollo.BaseMutationOptions; export const RevokeApiKeyDocument = gql` - mutation RevokeApiKey($input: RevokeApiKeyDTO!) { + mutation RevokeApiKey($input: RevokeApiKeyInput!) { revokeApiKey(input: $input) { id } @@ -10737,7 +10737,7 @@ export type RevokeApiKeyMutationHookResult = ReturnType; export type RevokeApiKeyMutationOptions = Apollo.BaseMutationOptions; export const UpdateApiKeyDocument = gql` - mutation UpdateApiKey($input: UpdateApiKeyDTO!) { + mutation UpdateApiKey($input: UpdateApiKeyInput!) { updateApiKey(input: $input) { ...ApiKeyFragment } @@ -10770,7 +10770,7 @@ export type UpdateApiKeyMutationHookResult = ReturnType; export type UpdateApiKeyMutationOptions = Apollo.BaseMutationOptions; export const UpdateWebhookDocument = gql` - mutation UpdateWebhook($input: UpdateWebhookDTO!) { + mutation UpdateWebhook($input: UpdateWebhookInput!) { updateWebhook(input: $input) { ...WebhookFragment } @@ -10803,7 +10803,7 @@ export type UpdateWebhookMutationHookResult = ReturnType; export type UpdateWebhookMutationOptions = Apollo.BaseMutationOptions; export const GetApiKeyDocument = gql` - query GetApiKey($input: GetApiKeyDTO!) { + query GetApiKey($input: GetApiKeyInput!) { apiKey(input: $input) { ...ApiKeyFragment createdAt @@ -10873,7 +10873,7 @@ export type GetApiKeysQueryHookResult = ReturnType; export type GetApiKeysLazyQueryHookResult = ReturnType; export type GetApiKeysQueryResult = Apollo.QueryResult; export const GetWebhookDocument = gql` - query GetWebhook($input: GetWebhookDTO!) { + query GetWebhook($input: GetWebhookInput!) { webhook(input: $input) { ...WebhookFragment } diff --git a/packages/twenty-front/src/generated/graphql.ts b/packages/twenty-front/src/generated/graphql.ts index 0cd5591a018..8b7231f5c57 100644 --- a/packages/twenty-front/src/generated/graphql.ts +++ b/packages/twenty-front/src/generated/graphql.ts @@ -256,8 +256,8 @@ export type AuthTokens = { tokens: AuthTokenPair; }; -export type AuthorizeApp = { - __typename?: 'AuthorizeApp'; +export type AuthorizeAppOutput = { + __typename?: 'AuthorizeAppOutput'; redirectUrl: Scalars['String']; }; @@ -750,7 +750,7 @@ export type CreateAgentInput = { roleId?: InputMaybe; }; -export type CreateApiKeyDto = { +export type CreateApiKeyInput = { expiresAt: Scalars['String']; name: Scalars['String']; revokedAt?: InputMaybe; @@ -919,7 +919,7 @@ export type CreateViewSortInput = { viewId: Scalars['UUID']; }; -export type CreateWebhookDto = { +export type CreateWebhookInput = { description?: InputMaybe; operations: Array; secret?: InputMaybe; @@ -1060,7 +1060,7 @@ export type DeleteViewGroupInput = { id: Scalars['UUID']; }; -export type DeleteWebhookDto = { +export type DeleteWebhookInput = { id: Scalars['UUID']; }; @@ -1144,8 +1144,8 @@ export type EmailAccountConnectionParameters = { SMTP?: InputMaybe; }; -export type EmailPasswordResetLink = { - __typename?: 'EmailPasswordResetLink'; +export type EmailPasswordResetLinkOutput = { + __typename?: 'EmailPasswordResetLinkOutput'; /** Boolean that confirms query was dispatched */ success: Scalars['Boolean']; }; @@ -1389,7 +1389,7 @@ export type GaugeChartConfiguration = { graphType: GraphType; }; -export type GetApiKeyDto = { +export type GetApiKeyInput = { id: Scalars['UUID']; }; @@ -1418,7 +1418,7 @@ export type GetServerlessFunctionSourceCodeInput = { version?: Scalars['String']; }; -export type GetWebhookDto = { +export type GetWebhookInput = { id: Scalars['UUID']; }; @@ -1601,8 +1601,8 @@ export type InitiateTwoFactorAuthenticationProvisioningOutput = { uri: Scalars['String']; }; -export type InvalidatePassword = { - __typename?: 'InvalidatePassword'; +export type InvalidatePasswordOutput = { + __typename?: 'InvalidatePasswordOutput'; /** Boolean that confirms query was dispatched */ success: Scalars['Boolean']; }; @@ -1665,8 +1665,8 @@ export type Location = { lng?: Maybe; }; -export type LoginToken = { - __typename?: 'LoginToken'; +export type LoginTokenOutput = { + __typename?: 'LoginTokenOutput'; loginToken: AuthToken; }; @@ -1690,7 +1690,7 @@ export type Mutation = { activateWorkspace: Workspace; assignRoleToAgent: Scalars['Boolean']; assignRoleToApiKey: Scalars['Boolean']; - authorizeApp: AuthorizeApp; + authorizeApp: AuthorizeAppOutput; cancelSwitchBillingInterval: BillingUpdateOutput; cancelSwitchBillingPlan: BillingUpdateOutput; cancelSwitchMeteredPrice: BillingUpdateOutput; @@ -1777,16 +1777,16 @@ export type Mutation = { disablePostgresProxy: PostgresCredentials; duplicateWorkflowVersionStep: WorkflowVersionStepChanges; editSSOIdentityProvider: EditSsoOutput; - emailPasswordResetLink: EmailPasswordResetLink; + emailPasswordResetLink: EmailPasswordResetLinkOutput; enablePostgresProxy: PostgresCredentials; endSubscriptionTrialPeriod: BillingEndTrialPeriodOutput; executeOneServerlessFunction: ServerlessFunctionExecutionResult; generateApiKeyToken: ApiKeyToken; - generateTransientToken: TransientToken; + generateTransientToken: TransientTokenOutput; getAuthTokensFromLoginToken: AuthTokens; getAuthTokensFromOTP: AuthTokens; getAuthorizationUrlForSSO: GetAuthorizationUrlForSsoOutput; - getLoginTokenFromCredentials: LoginToken; + getLoginTokenFromCredentials: LoginTokenOutput; getLoginTokenFromEmailVerificationToken: GetLoginTokenFromEmailVerificationTokenOutput; getWorkspaceAgnosticTokenFromEmailVerificationToken: AvailableWorkspacesAndAccessTokensOutput; impersonate: ImpersonateOutput; @@ -1841,7 +1841,7 @@ export type Mutation = { updatePageLayoutTab: PageLayoutTab; updatePageLayoutWidget: PageLayoutWidget; updatePageLayoutWithTabsAndWidgets: PageLayout; - updatePasswordViaResetToken: InvalidatePassword; + updatePasswordViaResetToken: InvalidatePasswordOutput; updateWebhook?: Maybe; updateWorkflowRunStep: WorkflowAction; updateWorkflowVersionPositions: Scalars['Boolean']; @@ -1921,7 +1921,7 @@ export type MutationCreateAgentHandoffArgs = { export type MutationCreateApiKeyArgs = { - input: CreateApiKeyDto; + input: CreateApiKeyInput; }; @@ -2062,7 +2062,7 @@ export type MutationCreateSamlIdentityProviderArgs = { export type MutationCreateWebhookArgs = { - input: CreateWebhookDto; + input: CreateWebhookInput; }; @@ -2213,7 +2213,7 @@ export type MutationDeleteTwoFactorAuthenticationMethodArgs = { export type MutationDeleteWebhookArgs = { - input: DeleteWebhookDto; + input: DeleteWebhookInput; }; @@ -2413,7 +2413,7 @@ export type MutationRetryJobsArgs = { export type MutationRevokeApiKeyArgs = { - input: RevokeApiKeyDto; + input: RevokeApiKeyInput; }; @@ -2496,7 +2496,7 @@ export type MutationTrackAnalyticsArgs = { export type MutationUpdateApiKeyArgs = { - input: UpdateApiKeyDto; + input: UpdateApiKeyInput; }; @@ -2622,7 +2622,7 @@ export type MutationUpdatePasswordViaResetTokenArgs = { export type MutationUpdateWebhookArgs = { - input: UpdateWebhookDto; + input: UpdateWebhookInput; }; @@ -3041,7 +3041,7 @@ export type Query = { apiKeys: Array; billingPortalSession: BillingSessionOutput; checkUserExists: CheckUserExistOutput; - checkWorkspaceInviteHashIsValid: WorkspaceInviteHashValid; + checkWorkspaceInviteHashIsValid: WorkspaceInviteHashValidOutput; currentUser: User; currentWorkspace: Workspace; field: Field; @@ -3111,7 +3111,7 @@ export type Query = { object: Object; objects: ObjectConnection; search: SearchResultConnection; - validatePasswordResetToken: ValidatePasswordResetToken; + validatePasswordResetToken: ValidatePasswordResetTokenOutput; versionInfo: VersionInfo; webhook?: Maybe; webhooks: Array; @@ -3134,7 +3134,7 @@ export type QueryAgentChatThreadsArgs = { export type QueryApiKeyArgs = { - input: GetApiKeyDto; + input: GetApiKeyInput; }; @@ -3405,7 +3405,7 @@ export type QueryValidatePasswordResetTokenArgs = { export type QueryWebhookArgs = { - input: GetWebhookDto; + input: GetWebhookInput; }; export type QueueJob = { @@ -3529,7 +3529,7 @@ export type RetryJobsResponse = { retriedCount: Scalars['Int']; }; -export type RevokeApiKeyDto = { +export type RevokeApiKeyInput = { id: Scalars['UUID']; }; @@ -3865,8 +3865,8 @@ export type TimelineThreadsWithTotal = { totalNumberOfThreads: Scalars['Int']; }; -export type TransientToken = { - __typename?: 'TransientToken'; +export type TransientTokenOutput = { + __typename?: 'TransientTokenOutput'; transientToken: AuthToken; }; @@ -3918,7 +3918,7 @@ export type UpdateAgentInput = { roleId?: InputMaybe; }; -export type UpdateApiKeyDto = { +export type UpdateApiKeyInput = { expiresAt?: InputMaybe; id: Scalars['UUID']; name?: InputMaybe; @@ -4160,7 +4160,7 @@ export type UpdateViewSortInput = { viewId?: InputMaybe; }; -export type UpdateWebhookDto = { +export type UpdateWebhookInput = { description?: InputMaybe; id: Scalars['UUID']; operations?: InputMaybe>; @@ -4298,8 +4298,8 @@ export type ValidateApprovedAccessDomainInput = { validationToken: Scalars['String']; }; -export type ValidatePasswordResetToken = { - __typename?: 'ValidatePasswordResetToken'; +export type ValidatePasswordResetTokenOutput = { + __typename?: 'ValidatePasswordResetTokenOutput'; email: Scalars['String']; id: Scalars['UUID']; }; @@ -4559,8 +4559,8 @@ export type WorkspaceInvitation = { id: Scalars['UUID']; }; -export type WorkspaceInviteHashValid = { - __typename?: 'WorkspaceInviteHashValid'; +export type WorkspaceInviteHashValidOutput = { + __typename?: 'WorkspaceInviteHashValidOutput'; isValid: Scalars['Boolean']; }; diff --git a/packages/twenty-front/src/modules/settings/developers/graphql/mutations/createApiKey.ts b/packages/twenty-front/src/modules/settings/developers/graphql/mutations/createApiKey.ts index 9bb53917662..8055029050f 100644 --- a/packages/twenty-front/src/modules/settings/developers/graphql/mutations/createApiKey.ts +++ b/packages/twenty-front/src/modules/settings/developers/graphql/mutations/createApiKey.ts @@ -2,7 +2,7 @@ import gql from 'graphql-tag'; import { API_KEY_FRAGMENT } from '../fragments/apiKeyFragment'; export const CREATE_API_KEY = gql` - mutation CreateApiKey($input: CreateApiKeyDTO!) { + mutation CreateApiKey($input: CreateApiKeyInput!) { createApiKey(input: $input) { ...ApiKeyFragment } diff --git a/packages/twenty-front/src/modules/settings/developers/graphql/mutations/createWebhook.ts b/packages/twenty-front/src/modules/settings/developers/graphql/mutations/createWebhook.ts index 718a167c6f3..0783fad16fe 100644 --- a/packages/twenty-front/src/modules/settings/developers/graphql/mutations/createWebhook.ts +++ b/packages/twenty-front/src/modules/settings/developers/graphql/mutations/createWebhook.ts @@ -2,7 +2,7 @@ import gql from 'graphql-tag'; import { WEBHOOK_FRAGMENT } from '../fragments/webhookFragment'; export const CREATE_WEBHOOK = gql` - mutation CreateWebhook($input: CreateWebhookDTO!) { + mutation CreateWebhook($input: CreateWebhookInput!) { createWebhook(input: $input) { ...WebhookFragment } diff --git a/packages/twenty-front/src/modules/settings/developers/graphql/mutations/deleteWebhook.ts b/packages/twenty-front/src/modules/settings/developers/graphql/mutations/deleteWebhook.ts index 094f69a095a..e7714a82dd1 100644 --- a/packages/twenty-front/src/modules/settings/developers/graphql/mutations/deleteWebhook.ts +++ b/packages/twenty-front/src/modules/settings/developers/graphql/mutations/deleteWebhook.ts @@ -1,7 +1,7 @@ import gql from 'graphql-tag'; export const DELETE_WEBHOOK = gql` - mutation DeleteWebhook($input: DeleteWebhookDTO!) { + mutation DeleteWebhook($input: DeleteWebhookInput!) { deleteWebhook(input: $input) } `; diff --git a/packages/twenty-front/src/modules/settings/developers/graphql/mutations/revokeApiKey.ts b/packages/twenty-front/src/modules/settings/developers/graphql/mutations/revokeApiKey.ts index 8c3c6cc11e6..f705b992828 100644 --- a/packages/twenty-front/src/modules/settings/developers/graphql/mutations/revokeApiKey.ts +++ b/packages/twenty-front/src/modules/settings/developers/graphql/mutations/revokeApiKey.ts @@ -1,7 +1,7 @@ import gql from 'graphql-tag'; export const REVOKE_API_KEY = gql` - mutation RevokeApiKey($input: RevokeApiKeyDTO!) { + mutation RevokeApiKey($input: RevokeApiKeyInput!) { revokeApiKey(input: $input) { id } diff --git a/packages/twenty-front/src/modules/settings/developers/graphql/mutations/updateApiKey.ts b/packages/twenty-front/src/modules/settings/developers/graphql/mutations/updateApiKey.ts index 94dd73bd7ad..e9a20efe356 100644 --- a/packages/twenty-front/src/modules/settings/developers/graphql/mutations/updateApiKey.ts +++ b/packages/twenty-front/src/modules/settings/developers/graphql/mutations/updateApiKey.ts @@ -2,7 +2,7 @@ import gql from 'graphql-tag'; import { API_KEY_FRAGMENT } from '../fragments/apiKeyFragment'; export const UPDATE_API_KEY = gql` - mutation UpdateApiKey($input: UpdateApiKeyDTO!) { + mutation UpdateApiKey($input: UpdateApiKeyInput!) { updateApiKey(input: $input) { ...ApiKeyFragment } diff --git a/packages/twenty-front/src/modules/settings/developers/graphql/mutations/updateWebhook.ts b/packages/twenty-front/src/modules/settings/developers/graphql/mutations/updateWebhook.ts index fa0ece3b04e..5beb68f5e24 100644 --- a/packages/twenty-front/src/modules/settings/developers/graphql/mutations/updateWebhook.ts +++ b/packages/twenty-front/src/modules/settings/developers/graphql/mutations/updateWebhook.ts @@ -2,7 +2,7 @@ import gql from 'graphql-tag'; import { WEBHOOK_FRAGMENT } from '../fragments/webhookFragment'; export const UPDATE_WEBHOOK = gql` - mutation UpdateWebhook($input: UpdateWebhookDTO!) { + mutation UpdateWebhook($input: UpdateWebhookInput!) { updateWebhook(input: $input) { ...WebhookFragment } diff --git a/packages/twenty-front/src/modules/settings/developers/graphql/queries/getApiKey.ts b/packages/twenty-front/src/modules/settings/developers/graphql/queries/getApiKey.ts index 14b8a5b5945..ac4693db978 100644 --- a/packages/twenty-front/src/modules/settings/developers/graphql/queries/getApiKey.ts +++ b/packages/twenty-front/src/modules/settings/developers/graphql/queries/getApiKey.ts @@ -2,7 +2,7 @@ import gql from 'graphql-tag'; import { API_KEY_FRAGMENT } from '../fragments/apiKeyFragment'; export const GET_API_KEY = gql` - query GetApiKey($input: GetApiKeyDTO!) { + query GetApiKey($input: GetApiKeyInput!) { apiKey(input: $input) { ...ApiKeyFragment createdAt diff --git a/packages/twenty-front/src/modules/settings/developers/graphql/queries/getWebhook.ts b/packages/twenty-front/src/modules/settings/developers/graphql/queries/getWebhook.ts index 92b0587710a..91eb4343589 100644 --- a/packages/twenty-front/src/modules/settings/developers/graphql/queries/getWebhook.ts +++ b/packages/twenty-front/src/modules/settings/developers/graphql/queries/getWebhook.ts @@ -2,7 +2,7 @@ import gql from 'graphql-tag'; import { WEBHOOK_FRAGMENT } from '../fragments/webhookFragment'; export const GET_WEBHOOK = gql` - query GetWebhook($input: GetWebhookDTO!) { + query GetWebhook($input: GetWebhookInput!) { webhook(input: $input) { ...WebhookFragment } diff --git a/packages/twenty-server/src/database/commands/command-runners/__tests__/upgrade.command-runner.spec.ts b/packages/twenty-server/src/database/commands/command-runners/__tests__/upgrade.command-runner.spec.ts index 30f671c3f24..076e7efd401 100644 --- a/packages/twenty-server/src/database/commands/command-runners/__tests__/upgrade.command-runner.spec.ts +++ b/packages/twenty-server/src/database/commands/command-runners/__tests__/upgrade.command-runner.spec.ts @@ -10,7 +10,7 @@ import { type Repository } from 'typeorm'; import { UpgradeCommandRunner } from 'src/database/commands/command-runners/upgrade.command-runner'; import { type ConfigVariables } from 'src/engine/core-modules/twenty-config/config-variables'; import { TwentyConfigService } from 'src/engine/core-modules/twenty-config/twenty-config.service'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { TwentyORMGlobalManager } from 'src/engine/twenty-orm/twenty-orm-global.manager'; import { SyncWorkspaceMetadataCommand } from 'src/engine/workspace-manager/workspace-sync-metadata/commands/sync-workspace-metadata.command'; @@ -44,7 +44,7 @@ type CommandRunnerValues = | typeof BasicUpgradeCommandRunner | typeof InvalidUpgradeCommandRunner; -const generateMockWorkspace = (overrides?: Partial) => +const generateMockWorkspace = (overrides?: Partial) => ({ id: 'workspace-id', version: '1.0.0', @@ -60,10 +60,10 @@ const generateMockWorkspace = (overrides?: Partial) => activationStatus: 'active', workspaceMembersCount: 1, ...overrides, - }) as Workspace; + }) as WorkspaceEntity; type BuildUpgradeCommandModuleArgs = { - workspaces: Workspace[]; + workspaces: WorkspaceEntity[]; appVersion: string | null; commandRunner: CommandRunnerValues; }; @@ -76,7 +76,7 @@ const buildUpgradeCommandModule = async ({ providers: [ commandRunner, { - provide: getRepositoryToken(Workspace), + provide: getRepositoryToken(WorkspaceEntity), useValue: { findOneByOrFail: jest .fn() @@ -124,7 +124,7 @@ const buildUpgradeCommandModule = async ({ describe('UpgradeCommandRunner', () => { let upgradeCommandRunner: BasicUpgradeCommandRunner; - let workspaceRepository: Repository; + let workspaceRepository: Repository; let syncWorkspaceMetadataCommand: jest.Mocked; let runAfterSyncMetadataSpy: jest.SpyInstance; let runBeforeSyncMetadataSpy: jest.SpyInstance; @@ -133,8 +133,8 @@ describe('UpgradeCommandRunner', () => { type BuildModuleAndSetupSpiesArgs = { numberOfWorkspace?: number; - workspaceOverride?: Partial; - workspaces?: Workspace[]; + workspaceOverride?: Partial; + workspaces?: WorkspaceEntity[]; appVersion?: string | null; commandRunner?: CommandRunnerValues; }; @@ -178,8 +178,8 @@ describe('UpgradeCommandRunner', () => { .spyOn(upgradeCommandRunner, 'runCoreMigrations') .mockImplementation(() => Promise.resolve()); - workspaceRepository = module.get>( - getRepositoryToken(Workspace), + workspaceRepository = module.get>( + getRepositoryToken(WorkspaceEntity), ); syncWorkspaceMetadataCommand = module.get(SyncWorkspaceMetadataCommand); twentyORMGlobalManagerSpy = module.get( diff --git a/packages/twenty-server/src/database/commands/command-runners/active-or-suspended-workspaces-migration.command-runner.ts b/packages/twenty-server/src/database/commands/command-runners/active-or-suspended-workspaces-migration.command-runner.ts index 4ea27d2b6ae..fd99acb38ee 100644 --- a/packages/twenty-server/src/database/commands/command-runners/active-or-suspended-workspaces-migration.command-runner.ts +++ b/packages/twenty-server/src/database/commands/command-runners/active-or-suspended-workspaces-migration.command-runner.ts @@ -4,7 +4,7 @@ import { WorkspaceActivationStatus } from 'twenty-shared/workspace'; import { In, MoreThanOrEqual, type Repository } from 'typeorm'; import { MigrationCommandRunner } from 'src/database/commands/command-runners/migration.command-runner'; -import { type Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { type WorkspaceDataSource } from 'src/engine/twenty-orm/datasource/workspace.datasource'; import { type TwentyORMGlobalManager } from 'src/engine/twenty-orm/twenty-orm-global.manager'; @@ -47,7 +47,7 @@ export abstract class ActiveOrSuspendedWorkspacesMigrationCommandRunner< }; constructor( - protected readonly workspaceRepository: Repository, + protected readonly workspaceRepository: Repository, protected readonly twentyORMGlobalManager: TwentyORMGlobalManager, ) { super(); diff --git a/packages/twenty-server/src/database/commands/command-runners/upgrade.command-runner.ts b/packages/twenty-server/src/database/commands/command-runners/upgrade.command-runner.ts index c7132a32d66..06c739dd954 100644 --- a/packages/twenty-server/src/database/commands/command-runners/upgrade.command-runner.ts +++ b/packages/twenty-server/src/database/commands/command-runners/upgrade.command-runner.ts @@ -15,7 +15,7 @@ import { type RunOnWorkspaceArgs, } from 'src/database/commands/command-runners/active-or-suspended-workspaces-migration.command-runner'; import { TwentyConfigService } from 'src/engine/core-modules/twenty-config/twenty-config.service'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { TwentyORMGlobalManager } from 'src/engine/twenty-orm/twenty-orm-global.manager'; import { SyncWorkspaceMetadataCommand } from 'src/engine/workspace-manager/workspace-sync-metadata/commands/sync-workspace-metadata.command'; import { @@ -39,8 +39,8 @@ export abstract class UpgradeCommandRunner extends ActiveOrSuspendedWorkspacesMi public readonly VALIDATE_WORKSPACE_VERSION_FEATURE_FLAG?: true; constructor( - @InjectRepository(Workspace) - protected readonly workspaceRepository: Repository, + @InjectRepository(WorkspaceEntity) + protected readonly workspaceRepository: Repository, protected readonly twentyConfigService: TwentyConfigService, protected readonly twentyORMGlobalManager: TwentyORMGlobalManager, protected readonly syncWorkspaceMetadataCommand: SyncWorkspaceMetadataCommand, @@ -90,7 +90,7 @@ export abstract class UpgradeCommandRunner extends ActiveOrSuspendedWorkspacesMi private async workspacesThatAreBelowFromWorkspaceVersion( fromWorkspaceVersion: SemVer, - ): Promise[]> { + ): Promise[]> { try { const allActiveOrSuspendedWorkspaces = await this.loadActiveOrSuspendedWorkspace(); diff --git a/packages/twenty-server/src/database/commands/database-command.module.ts b/packages/twenty-server/src/database/commands/database-command.module.ts index 9207f9fab88..6deb321f2d8 100644 --- a/packages/twenty-server/src/database/commands/database-command.module.ts +++ b/packages/twenty-server/src/database/commands/database-command.module.ts @@ -10,7 +10,7 @@ import { ApiKeyModule } from 'src/engine/core-modules/api-key/api-key.module'; import { FeatureFlagModule } from 'src/engine/core-modules/feature-flag/feature-flag.module'; import { FileModule } from 'src/engine/core-modules/file/file.module'; import { PublicDomainModule } from 'src/engine/core-modules/public-domain/public-domain.module'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { WorkspaceModule } from 'src/engine/core-modules/workspace/workspace.module'; import { CronTriggerModule } from 'src/engine/metadata-modules/cron-trigger/cron-trigger.module'; import { DataSourceModule } from 'src/engine/metadata-modules/data-source/data-source.module'; @@ -30,7 +30,7 @@ import { AutomatedTriggerModule } from 'src/modules/workflow/workflow-trigger/au @Module({ imports: [ UpgradeVersionCommandModule, - TypeOrmModule.forFeature([Workspace]), + TypeOrmModule.forFeature([WorkspaceEntity]), // Cron command dependencies MessagingImportManagerModule, CalendarEventImportManagerModule, diff --git a/packages/twenty-server/src/database/commands/upgrade-version-command/0-54/0-54-clean-not-found-files.command.ts b/packages/twenty-server/src/database/commands/upgrade-version-command/0-54/0-54-clean-not-found-files.command.ts index 01b76553b66..e85a2556204 100644 --- a/packages/twenty-server/src/database/commands/upgrade-version-command/0-54/0-54-clean-not-found-files.command.ts +++ b/packages/twenty-server/src/database/commands/upgrade-version-command/0-54/0-54-clean-not-found-files.command.ts @@ -9,11 +9,11 @@ import { type RunOnWorkspaceArgs, } from 'src/database/commands/command-runners/active-or-suspended-workspaces-migration.command-runner'; import { FileStorageService } from 'src/engine/core-modules/file-storage/file-storage.service'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { TwentyORMGlobalManager } from 'src/engine/twenty-orm/twenty-orm-global.manager'; import { type AttachmentWorkspaceEntity } from 'src/modules/attachment/standard-objects/attachment.workspace-entity'; import { type PersonWorkspaceEntity } from 'src/modules/person/standard-objects/person.workspace-entity'; -import { type WorkspaceMemberWorkspaceEntity } from 'src/modules/workspace-member/standard-objects/workspace-member.workspace-entity'; +import { WorkspaceMemberWorkspaceEntity } from 'src/modules/workspace-member/standard-objects/workspace-member.workspace-entity'; @Command({ name: 'upgrade:0-54:clean-not-found-files', @@ -21,8 +21,8 @@ import { type WorkspaceMemberWorkspaceEntity } from 'src/modules/workspace-membe }) export class CleanNotFoundFilesCommand extends ActiveOrSuspendedWorkspacesMigrationCommandRunner { constructor( - @InjectRepository(Workspace) - protected readonly workspaceRepository: Repository, + @InjectRepository(WorkspaceEntity) + protected readonly workspaceRepository: Repository, protected readonly twentyORMGlobalManager: TwentyORMGlobalManager, private readonly fileStorageService: FileStorageService, ) { diff --git a/packages/twenty-server/src/database/commands/upgrade-version-command/0-54/0-54-created-by-default-value.command.ts b/packages/twenty-server/src/database/commands/upgrade-version-command/0-54/0-54-created-by-default-value.command.ts index b9fd2f95f33..b63daaaeaed 100644 --- a/packages/twenty-server/src/database/commands/upgrade-version-command/0-54/0-54-created-by-default-value.command.ts +++ b/packages/twenty-server/src/database/commands/upgrade-version-command/0-54/0-54-created-by-default-value.command.ts @@ -8,7 +8,7 @@ import { ActiveOrSuspendedWorkspacesMigrationCommandRunner, type RunOnWorkspaceArgs, } from 'src/database/commands/command-runners/active-or-suspended-workspaces-migration.command-runner'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { type ActorMetadata } from 'src/engine/metadata-modules/field-metadata/composite-types/actor.composite-type'; import { generateDefaultValue } from 'src/engine/metadata-modules/field-metadata/utils/generate-default-value'; import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity'; @@ -22,8 +22,8 @@ import { getWorkspaceSchemaName } from 'src/engine/workspace-datasource/utils/ge }) export class FixCreatedByDefaultValueCommand extends ActiveOrSuspendedWorkspacesMigrationCommandRunner { constructor( - @InjectRepository(Workspace) - protected readonly workspaceRepository: Repository, + @InjectRepository(WorkspaceEntity) + protected readonly workspaceRepository: Repository, protected readonly twentyORMGlobalManager: TwentyORMGlobalManager, @InjectRepository(ObjectMetadataEntity) private readonly objectMetadataRepository: Repository, diff --git a/packages/twenty-server/src/database/commands/upgrade-version-command/0-54/0-54-fix-standard-select-fields-position.command.ts b/packages/twenty-server/src/database/commands/upgrade-version-command/0-54/0-54-fix-standard-select-fields-position.command.ts index ac1542751fe..e745965656f 100644 --- a/packages/twenty-server/src/database/commands/upgrade-version-command/0-54/0-54-fix-standard-select-fields-position.command.ts +++ b/packages/twenty-server/src/database/commands/upgrade-version-command/0-54/0-54-fix-standard-select-fields-position.command.ts @@ -7,7 +7,7 @@ import { ActiveOrSuspendedWorkspacesMigrationCommandRunner, type RunOnWorkspaceArgs, } from 'src/database/commands/command-runners/active-or-suspended-workspaces-migration.command-runner'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity'; import { WorkspaceMetadataVersionService } from 'src/engine/metadata-modules/workspace-metadata-version/services/workspace-metadata-version.service'; import { TwentyORMGlobalManager } from 'src/engine/twenty-orm/twenty-orm-global.manager'; @@ -19,8 +19,8 @@ import { TASK_STANDARD_FIELD_IDS } from 'src/engine/workspace-manager/workspace- }) export class FixStandardSelectFieldsPositionCommand extends ActiveOrSuspendedWorkspacesMigrationCommandRunner { constructor( - @InjectRepository(Workspace) - protected readonly workspaceRepository: Repository, + @InjectRepository(WorkspaceEntity) + protected readonly workspaceRepository: Repository, protected readonly twentyORMGlobalManager: TwentyORMGlobalManager, @InjectRepository(FieldMetadataEntity) private readonly fieldMetadataRepository: Repository, diff --git a/packages/twenty-server/src/database/commands/upgrade-version-command/0-54/0-54-lowercase-user-and-invitation-emails.command.ts b/packages/twenty-server/src/database/commands/upgrade-version-command/0-54/0-54-lowercase-user-and-invitation-emails.command.ts index 1f7986cf702..901fb3031fe 100644 --- a/packages/twenty-server/src/database/commands/upgrade-version-command/0-54/0-54-lowercase-user-and-invitation-emails.command.ts +++ b/packages/twenty-server/src/database/commands/upgrade-version-command/0-54/0-54-lowercase-user-and-invitation-emails.command.ts @@ -8,11 +8,11 @@ import { type RunOnWorkspaceArgs, } from 'src/database/commands/command-runners/active-or-suspended-workspaces-migration.command-runner'; import { - AppToken, + AppTokenEntity, AppTokenType, } from 'src/engine/core-modules/app-token/app-token.entity'; -import { User } from 'src/engine/core-modules/user/user.entity'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { UserEntity } from 'src/engine/core-modules/user/user.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { TwentyORMGlobalManager } from 'src/engine/twenty-orm/twenty-orm-global.manager'; @Command({ @@ -21,12 +21,12 @@ import { TwentyORMGlobalManager } from 'src/engine/twenty-orm/twenty-orm-global. }) export class LowercaseUserAndInvitationEmailsCommand extends ActiveOrSuspendedWorkspacesMigrationCommandRunner { constructor( - @InjectRepository(User) - protected readonly userRepository: Repository, - @InjectRepository(AppToken) - protected readonly appTokenRepository: Repository, - @InjectRepository(Workspace) - protected readonly workspaceRepository: Repository, + @InjectRepository(UserEntity) + protected readonly userRepository: Repository, + @InjectRepository(AppTokenEntity) + protected readonly appTokenRepository: Repository, + @InjectRepository(WorkspaceEntity) + protected readonly workspaceRepository: Repository, protected readonly twentyORMGlobalManager: TwentyORMGlobalManager, ) { super(workspaceRepository, twentyORMGlobalManager); diff --git a/packages/twenty-server/src/database/commands/upgrade-version-command/0-54/0-54-migrate-default-avatar-url-to-user-workspace.command.ts b/packages/twenty-server/src/database/commands/upgrade-version-command/0-54/0-54-migrate-default-avatar-url-to-user-workspace.command.ts index 46f8c9ce7e4..238566ccf99 100644 --- a/packages/twenty-server/src/database/commands/upgrade-version-command/0-54/0-54-migrate-default-avatar-url-to-user-workspace.command.ts +++ b/packages/twenty-server/src/database/commands/upgrade-version-command/0-54/0-54-migrate-default-avatar-url-to-user-workspace.command.ts @@ -8,8 +8,8 @@ import { ActiveOrSuspendedWorkspacesMigrationCommandRunner, type RunOnWorkspaceArgs, } from 'src/database/commands/command-runners/active-or-suspended-workspaces-migration.command-runner'; -import { UserWorkspace } from 'src/engine/core-modules/user-workspace/user-workspace.entity'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { UserWorkspaceEntity } from 'src/engine/core-modules/user-workspace/user-workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { TwentyORMGlobalManager } from 'src/engine/twenty-orm/twenty-orm-global.manager'; @Command({ @@ -18,10 +18,10 @@ import { TwentyORMGlobalManager } from 'src/engine/twenty-orm/twenty-orm-global. }) export class MigrateDefaultAvatarUrlToUserWorkspaceCommand extends ActiveOrSuspendedWorkspacesMigrationCommandRunner { constructor( - @InjectRepository(Workspace) - protected readonly workspaceRepository: Repository, - @InjectRepository(UserWorkspace) - protected readonly userWorkspaceRepository: Repository, + @InjectRepository(WorkspaceEntity) + protected readonly workspaceRepository: Repository, + @InjectRepository(UserWorkspaceEntity) + protected readonly userWorkspaceRepository: Repository, protected readonly twentyORMGlobalManager: TwentyORMGlobalManager, ) { super(workspaceRepository, twentyORMGlobalManager); diff --git a/packages/twenty-server/src/database/commands/upgrade-version-command/0-54/0-54-upgrade-version-command.module.ts b/packages/twenty-server/src/database/commands/upgrade-version-command/0-54/0-54-upgrade-version-command.module.ts index 824b2fcb11b..ae5562f4fc2 100644 --- a/packages/twenty-server/src/database/commands/upgrade-version-command/0-54/0-54-upgrade-version-command.module.ts +++ b/packages/twenty-server/src/database/commands/upgrade-version-command/0-54/0-54-upgrade-version-command.module.ts @@ -6,12 +6,12 @@ import { FixCreatedByDefaultValueCommand } from 'src/database/commands/upgrade-v import { FixStandardSelectFieldsPositionCommand } from 'src/database/commands/upgrade-version-command/0-54/0-54-fix-standard-select-fields-position.command'; import { LowercaseUserAndInvitationEmailsCommand } from 'src/database/commands/upgrade-version-command/0-54/0-54-lowercase-user-and-invitation-emails.command'; import { MigrateDefaultAvatarUrlToUserWorkspaceCommand } from 'src/database/commands/upgrade-version-command/0-54/0-54-migrate-default-avatar-url-to-user-workspace.command'; -import { AppToken } from 'src/engine/core-modules/app-token/app-token.entity'; +import { AppTokenEntity } from 'src/engine/core-modules/app-token/app-token.entity'; import { FileStorageModule } from 'src/engine/core-modules/file-storage/file-storage.module'; import { FileModule } from 'src/engine/core-modules/file/file.module'; -import { UserWorkspace } from 'src/engine/core-modules/user-workspace/user-workspace.entity'; -import { User } from 'src/engine/core-modules/user/user.entity'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { UserWorkspaceEntity } from 'src/engine/core-modules/user-workspace/user-workspace.entity'; +import { UserEntity } from 'src/engine/core-modules/user/user.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity'; import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity'; import { WorkspaceMetadataVersionModule } from 'src/engine/metadata-modules/workspace-metadata-version/workspace-metadata-version.module'; @@ -20,7 +20,12 @@ import { WorkspaceMigrationRunnerModule } from 'src/engine/workspace-manager/wor @Module({ imports: [ - TypeOrmModule.forFeature([Workspace, AppToken, User, UserWorkspace]), + TypeOrmModule.forFeature([ + WorkspaceEntity, + AppTokenEntity, + UserEntity, + UserWorkspaceEntity, + ]), TypeOrmModule.forFeature([FieldMetadataEntity, ObjectMetadataEntity]), WorkspaceDataSourceModule, WorkspaceMigrationRunnerModule, diff --git a/packages/twenty-server/src/database/commands/upgrade-version-command/0-55/0-55-deduplicate-indexed-fields.command.ts b/packages/twenty-server/src/database/commands/upgrade-version-command/0-55/0-55-deduplicate-indexed-fields.command.ts index a9fac414d26..b225bf6366f 100644 --- a/packages/twenty-server/src/database/commands/upgrade-version-command/0-55/0-55-deduplicate-indexed-fields.command.ts +++ b/packages/twenty-server/src/database/commands/upgrade-version-command/0-55/0-55-deduplicate-indexed-fields.command.ts @@ -7,7 +7,7 @@ import { ActiveOrSuspendedWorkspacesMigrationCommandRunner, type RunOnWorkspaceArgs, } from 'src/database/commands/command-runners/active-or-suspended-workspaces-migration.command-runner'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { TwentyORMGlobalManager } from 'src/engine/twenty-orm/twenty-orm-global.manager'; @Command({ @@ -16,8 +16,8 @@ import { TwentyORMGlobalManager } from 'src/engine/twenty-orm/twenty-orm-global. }) export class DeduplicateIndexedFieldsCommand extends ActiveOrSuspendedWorkspacesMigrationCommandRunner { constructor( - @InjectRepository(Workspace) - protected readonly workspaceRepository: Repository, + @InjectRepository(WorkspaceEntity) + protected readonly workspaceRepository: Repository, protected readonly twentyORMGlobalManager: TwentyORMGlobalManager, ) { super(workspaceRepository, twentyORMGlobalManager); diff --git a/packages/twenty-server/src/database/commands/upgrade-version-command/0-55/0-55-upgrade-version-command.module.ts b/packages/twenty-server/src/database/commands/upgrade-version-command/0-55/0-55-upgrade-version-command.module.ts index 5654eeebe66..b4a3c3f89bd 100644 --- a/packages/twenty-server/src/database/commands/upgrade-version-command/0-55/0-55-upgrade-version-command.module.ts +++ b/packages/twenty-server/src/database/commands/upgrade-version-command/0-55/0-55-upgrade-version-command.module.ts @@ -2,10 +2,10 @@ import { Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; import { DeduplicateIndexedFieldsCommand } from 'src/database/commands/upgrade-version-command/0-55/0-55-deduplicate-indexed-fields.command'; -import { AppToken } from 'src/engine/core-modules/app-token/app-token.entity'; -import { UserWorkspace } from 'src/engine/core-modules/user-workspace/user-workspace.entity'; -import { User } from 'src/engine/core-modules/user/user.entity'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { AppTokenEntity } from 'src/engine/core-modules/app-token/app-token.entity'; +import { UserWorkspaceEntity } from 'src/engine/core-modules/user-workspace/user-workspace.entity'; +import { UserEntity } from 'src/engine/core-modules/user/user.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity'; import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity'; import { WorkspaceMetadataVersionModule } from 'src/engine/metadata-modules/workspace-metadata-version/workspace-metadata-version.module'; @@ -15,10 +15,10 @@ import { WorkspaceMigrationRunnerModule } from 'src/engine/workspace-manager/wor @Module({ imports: [ TypeOrmModule.forFeature([ - Workspace, - AppToken, - User, - UserWorkspace, + WorkspaceEntity, + AppTokenEntity, + UserEntity, + UserWorkspaceEntity, FieldMetadataEntity, ObjectMetadataEntity, ]), diff --git a/packages/twenty-server/src/database/commands/upgrade-version-command/1-1/1-1-add-enqueued-status-to-workflow-run.command.ts b/packages/twenty-server/src/database/commands/upgrade-version-command/1-1/1-1-add-enqueued-status-to-workflow-run.command.ts index 8f45e03ebbd..eb72911e10e 100644 --- a/packages/twenty-server/src/database/commands/upgrade-version-command/1-1/1-1-add-enqueued-status-to-workflow-run.command.ts +++ b/packages/twenty-server/src/database/commands/upgrade-version-command/1-1/1-1-add-enqueued-status-to-workflow-run.command.ts @@ -7,7 +7,7 @@ import { ActiveOrSuspendedWorkspacesMigrationCommandRunner, type RunOnWorkspaceArgs, } from 'src/database/commands/command-runners/active-or-suspended-workspaces-migration.command-runner'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity'; import { TwentyORMGlobalManager } from 'src/engine/twenty-orm/twenty-orm-global.manager'; import { getWorkspaceSchemaName } from 'src/engine/workspace-datasource/utils/get-workspace-schema-name.util'; @@ -20,8 +20,8 @@ import { WorkflowRunStatus } from 'src/modules/workflow/common/standard-objects/ }) export class AddEnqueuedStatusToWorkflowRunCommand extends ActiveOrSuspendedWorkspacesMigrationCommandRunner { constructor( - @InjectRepository(Workspace) - protected readonly workspaceRepository: Repository, + @InjectRepository(WorkspaceEntity) + protected readonly workspaceRepository: Repository, protected readonly twentyORMGlobalManager: TwentyORMGlobalManager, @InjectRepository(FieldMetadataEntity) private readonly fieldMetadataRepository: Repository, diff --git a/packages/twenty-server/src/database/commands/upgrade-version-command/1-1/1-1-fix-schema-array-type.command.ts b/packages/twenty-server/src/database/commands/upgrade-version-command/1-1/1-1-fix-schema-array-type.command.ts index 98496dcfc4e..a78e704b3c9 100644 --- a/packages/twenty-server/src/database/commands/upgrade-version-command/1-1/1-1-fix-schema-array-type.command.ts +++ b/packages/twenty-server/src/database/commands/upgrade-version-command/1-1/1-1-fix-schema-array-type.command.ts @@ -8,7 +8,7 @@ import { ActiveOrSuspendedWorkspacesMigrationCommandRunner, type RunOnWorkspaceArgs, } from 'src/database/commands/command-runners/active-or-suspended-workspaces-migration.command-runner'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity'; import { computeColumnName } from 'src/engine/metadata-modules/field-metadata/utils/compute-column-name.util'; import { TwentyORMGlobalManager } from 'src/engine/twenty-orm/twenty-orm-global.manager'; @@ -22,8 +22,8 @@ import { DatabaseStructureService } from 'src/engine/workspace-manager/workspace }) export class FixSchemaArrayTypeCommand extends ActiveOrSuspendedWorkspacesMigrationCommandRunner { constructor( - @InjectRepository(Workspace) - protected readonly workspaceRepository: Repository, + @InjectRepository(WorkspaceEntity) + protected readonly workspaceRepository: Repository, protected readonly twentyORMGlobalManager: TwentyORMGlobalManager, private readonly databaseStructureService: DatabaseStructureService, @InjectDataSource() diff --git a/packages/twenty-server/src/database/commands/upgrade-version-command/1-1/1-1-fix-update-standard-field-is-label-synced-with-name.command.ts b/packages/twenty-server/src/database/commands/upgrade-version-command/1-1/1-1-fix-update-standard-field-is-label-synced-with-name.command.ts index dbea633413f..f654d4c5a32 100644 --- a/packages/twenty-server/src/database/commands/upgrade-version-command/1-1/1-1-fix-update-standard-field-is-label-synced-with-name.command.ts +++ b/packages/twenty-server/src/database/commands/upgrade-version-command/1-1/1-1-fix-update-standard-field-is-label-synced-with-name.command.ts @@ -7,7 +7,7 @@ import { ActiveOrSuspendedWorkspacesMigrationCommandRunner, type RunOnWorkspaceArgs, } from 'src/database/commands/command-runners/active-or-suspended-workspaces-migration.command-runner'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity'; import { computeMetadataNameFromLabel } from 'src/engine/metadata-modules/utils/validate-name-and-label-are-sync-or-throw.util'; import { WorkspaceMetadataVersionService } from 'src/engine/metadata-modules/workspace-metadata-version/services/workspace-metadata-version.service'; @@ -20,8 +20,8 @@ import { TwentyORMGlobalManager } from 'src/engine/twenty-orm/twenty-orm-global. }) export class FixUpdateStandardFieldsIsLabelSyncedWithName extends ActiveOrSuspendedWorkspacesMigrationCommandRunner { constructor( - @InjectRepository(Workspace) - protected readonly workspaceRepository: Repository, + @InjectRepository(WorkspaceEntity) + protected readonly workspaceRepository: Repository, protected readonly twentyORMGlobalManager: TwentyORMGlobalManager, @InjectRepository(FieldMetadataEntity) private readonly fieldMetadataRepository: Repository, diff --git a/packages/twenty-server/src/database/commands/upgrade-version-command/1-1/1-1-migrate-workflow-run-state.command.ts b/packages/twenty-server/src/database/commands/upgrade-version-command/1-1/1-1-migrate-workflow-run-state.command.ts index 47a40b3e981..056b629a583 100644 --- a/packages/twenty-server/src/database/commands/upgrade-version-command/1-1/1-1-migrate-workflow-run-state.command.ts +++ b/packages/twenty-server/src/database/commands/upgrade-version-command/1-1/1-1-migrate-workflow-run-state.command.ts @@ -9,7 +9,7 @@ import { ActiveOrSuspendedWorkspacesMigrationCommandRunner, type RunOnWorkspaceArgs, } from 'src/database/commands/command-runners/active-or-suspended-workspaces-migration.command-runner'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { TwentyORMGlobalManager } from 'src/engine/twenty-orm/twenty-orm-global.manager'; import { type WorkflowRunState, @@ -28,8 +28,8 @@ export class MigrateWorkflowRunStatesCommand extends ActiveOrSuspendedWorkspaces private chunkSize = DEFAULT_CHUNK_SIZE; constructor( - @InjectRepository(Workspace) - protected readonly workspaceRepository: Repository, + @InjectRepository(WorkspaceEntity) + protected readonly workspaceRepository: Repository, protected readonly twentyORMGlobalManager: TwentyORMGlobalManager, ) { super(workspaceRepository, twentyORMGlobalManager); diff --git a/packages/twenty-server/src/database/commands/upgrade-version-command/1-1/1-1-upgrade-version-command.module.ts b/packages/twenty-server/src/database/commands/upgrade-version-command/1-1/1-1-upgrade-version-command.module.ts index cd917409937..20f289893f3 100644 --- a/packages/twenty-server/src/database/commands/upgrade-version-command/1-1/1-1-upgrade-version-command.module.ts +++ b/packages/twenty-server/src/database/commands/upgrade-version-command/1-1/1-1-upgrade-version-command.module.ts @@ -6,14 +6,14 @@ import { FixSchemaArrayTypeCommand } from 'src/database/commands/upgrade-version import { FixUpdateStandardFieldsIsLabelSyncedWithName } from 'src/database/commands/upgrade-version-command/1-1/1-1-fix-update-standard-field-is-label-synced-with-name.command'; import { MigrateWorkflowRunStatesCommand } from 'src/database/commands/upgrade-version-command/1-1/1-1-migrate-workflow-run-state.command'; import { TypeORMModule } from 'src/database/typeorm/typeorm.module'; -import { ApiKey } from 'src/engine/core-modules/api-key/api-key.entity'; +import { ApiKeyEntity } from 'src/engine/core-modules/api-key/api-key.entity'; import { ApiKeyModule } from 'src/engine/core-modules/api-key/api-key.module'; -import { AppToken } from 'src/engine/core-modules/app-token/app-token.entity'; -import { UserWorkspace } from 'src/engine/core-modules/user-workspace/user-workspace.entity'; -import { User } from 'src/engine/core-modules/user/user.entity'; -import { Webhook } from 'src/engine/core-modules/webhook/webhook.entity'; +import { AppTokenEntity } from 'src/engine/core-modules/app-token/app-token.entity'; +import { UserWorkspaceEntity } from 'src/engine/core-modules/user-workspace/user-workspace.entity'; +import { UserEntity } from 'src/engine/core-modules/user/user.entity'; +import { WebhookEntity } from 'src/engine/core-modules/webhook/webhook.entity'; import { WebhookModule } from 'src/engine/core-modules/webhook/webhook.module'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity'; import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity'; import { WorkspaceMetadataVersionModule } from 'src/engine/metadata-modules/workspace-metadata-version/workspace-metadata-version.module'; @@ -24,14 +24,14 @@ import { WorkspaceMigrationRunnerModule } from 'src/engine/workspace-manager/wor @Module({ imports: [ TypeOrmModule.forFeature([ - Workspace, - AppToken, - User, - UserWorkspace, + WorkspaceEntity, + AppTokenEntity, + UserEntity, + UserWorkspaceEntity, FieldMetadataEntity, ObjectMetadataEntity, - ApiKey, - Webhook, + ApiKeyEntity, + WebhookEntity, ]), WorkspaceDataSourceModule, WorkspaceMigrationRunnerModule, diff --git a/packages/twenty-server/src/database/commands/upgrade-version-command/1-10/1-10-migrate-attachment-author-to-created-by.command.ts b/packages/twenty-server/src/database/commands/upgrade-version-command/1-10/1-10-migrate-attachment-author-to-created-by.command.ts index 9db3d6b3622..757e5e7d81b 100644 --- a/packages/twenty-server/src/database/commands/upgrade-version-command/1-10/1-10-migrate-attachment-author-to-created-by.command.ts +++ b/packages/twenty-server/src/database/commands/upgrade-version-command/1-10/1-10-migrate-attachment-author-to-created-by.command.ts @@ -8,11 +8,11 @@ import { ActiveOrSuspendedWorkspacesMigrationCommandRunner, type RunOnWorkspaceArgs, } from 'src/database/commands/command-runners/active-or-suspended-workspaces-migration.command-runner'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { FieldActorSource } from 'src/engine/metadata-modules/field-metadata/composite-types/actor.composite-type'; import { TwentyORMGlobalManager } from 'src/engine/twenty-orm/twenty-orm-global.manager'; import { type AttachmentWorkspaceEntity } from 'src/modules/attachment/standard-objects/attachment.workspace-entity'; -import { type WorkspaceMemberWorkspaceEntity } from 'src/modules/workspace-member/standard-objects/workspace-member.workspace-entity'; +import { WorkspaceMemberWorkspaceEntity } from 'src/modules/workspace-member/standard-objects/workspace-member.workspace-entity'; @Command({ name: 'upgrade:1-10:migrate-attachment-author-to-created-by', @@ -21,8 +21,8 @@ import { type WorkspaceMemberWorkspaceEntity } from 'src/modules/workspace-membe }) export class MigrateAttachmentAuthorToCreatedByCommand extends ActiveOrSuspendedWorkspacesMigrationCommandRunner { constructor( - @InjectRepository(Workspace) - protected readonly workspaceRepository: Repository, + @InjectRepository(WorkspaceEntity) + protected readonly workspaceRepository: Repository, protected readonly twentyORMGlobalManager: TwentyORMGlobalManager, ) { super(workspaceRepository, twentyORMGlobalManager); diff --git a/packages/twenty-server/src/database/commands/upgrade-version-command/1-10/1-10-migrate-attachment-type-to-file-category.command.ts b/packages/twenty-server/src/database/commands/upgrade-version-command/1-10/1-10-migrate-attachment-type-to-file-category.command.ts index 3f714866f51..5f0c2701d14 100644 --- a/packages/twenty-server/src/database/commands/upgrade-version-command/1-10/1-10-migrate-attachment-type-to-file-category.command.ts +++ b/packages/twenty-server/src/database/commands/upgrade-version-command/1-10/1-10-migrate-attachment-type-to-file-category.command.ts @@ -7,7 +7,7 @@ import { ActiveOrSuspendedWorkspacesMigrationCommandRunner, type RunOnWorkspaceArgs, } from 'src/database/commands/command-runners/active-or-suspended-workspaces-migration.command-runner'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { TwentyORMGlobalManager } from 'src/engine/twenty-orm/twenty-orm-global.manager'; import { type AttachmentWorkspaceEntity } from 'src/modules/attachment/standard-objects/attachment.workspace-entity'; @@ -29,8 +29,8 @@ const TYPE_TO_FILE_CATEGORY_MAPPING: Record = { }) export class MigrateAttachmentTypeToFileCategoryCommand extends ActiveOrSuspendedWorkspacesMigrationCommandRunner { constructor( - @InjectRepository(Workspace) - protected readonly workspaceRepository: Repository, + @InjectRepository(WorkspaceEntity) + protected readonly workspaceRepository: Repository, protected readonly twentyORMGlobalManager: TwentyORMGlobalManager, ) { super(workspaceRepository, twentyORMGlobalManager); diff --git a/packages/twenty-server/src/database/commands/upgrade-version-command/1-10/1-10-upgrade-version-command.module.ts b/packages/twenty-server/src/database/commands/upgrade-version-command/1-10/1-10-upgrade-version-command.module.ts index 067b39e118b..72d2236be04 100644 --- a/packages/twenty-server/src/database/commands/upgrade-version-command/1-10/1-10-upgrade-version-command.module.ts +++ b/packages/twenty-server/src/database/commands/upgrade-version-command/1-10/1-10-upgrade-version-command.module.ts @@ -3,12 +3,12 @@ import { TypeOrmModule } from '@nestjs/typeorm'; import { MigrateAttachmentAuthorToCreatedByCommand } from 'src/database/commands/upgrade-version-command/1-10/1-10-migrate-attachment-author-to-created-by.command'; import { MigrateAttachmentTypeToFileCategoryCommand } from 'src/database/commands/upgrade-version-command/1-10/1-10-migrate-attachment-type-to-file-category.command'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { WorkspaceSchemaManagerModule } from 'src/engine/twenty-orm/workspace-schema-manager/workspace-schema-manager.module'; @Module({ imports: [ - TypeOrmModule.forFeature([Workspace]), + TypeOrmModule.forFeature([WorkspaceEntity]), WorkspaceSchemaManagerModule, ], providers: [ diff --git a/packages/twenty-server/src/database/commands/upgrade-version-command/1-2/1-2-add-enqueued-status-to-workflow-run-v2.command.ts b/packages/twenty-server/src/database/commands/upgrade-version-command/1-2/1-2-add-enqueued-status-to-workflow-run-v2.command.ts index c4958f66c96..3ce5ae42145 100644 --- a/packages/twenty-server/src/database/commands/upgrade-version-command/1-2/1-2-add-enqueued-status-to-workflow-run-v2.command.ts +++ b/packages/twenty-server/src/database/commands/upgrade-version-command/1-2/1-2-add-enqueued-status-to-workflow-run-v2.command.ts @@ -7,7 +7,7 @@ import { ActiveOrSuspendedWorkspacesMigrationCommandRunner, type RunOnWorkspaceArgs, } from 'src/database/commands/command-runners/active-or-suspended-workspaces-migration.command-runner'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity'; import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity'; import { TwentyORMGlobalManager } from 'src/engine/twenty-orm/twenty-orm-global.manager'; @@ -22,8 +22,8 @@ import { WorkflowRunStatus } from 'src/modules/workflow/common/standard-objects/ }) export class AddEnqueuedStatusToWorkflowRunV2Command extends ActiveOrSuspendedWorkspacesMigrationCommandRunner { constructor( - @InjectRepository(Workspace) - protected readonly workspaceRepository: Repository, + @InjectRepository(WorkspaceEntity) + protected readonly workspaceRepository: Repository, protected readonly twentyORMGlobalManager: TwentyORMGlobalManager, @InjectRepository(ObjectMetadataEntity) private readonly objectMetadataRepository: Repository, diff --git a/packages/twenty-server/src/database/commands/upgrade-version-command/1-2/1-2-add-next-step-ids-to-workflow-version-triggers.command.ts b/packages/twenty-server/src/database/commands/upgrade-version-command/1-2/1-2-add-next-step-ids-to-workflow-version-triggers.command.ts index 595ac763b9e..1d741d6b95d 100644 --- a/packages/twenty-server/src/database/commands/upgrade-version-command/1-2/1-2-add-next-step-ids-to-workflow-version-triggers.command.ts +++ b/packages/twenty-server/src/database/commands/upgrade-version-command/1-2/1-2-add-next-step-ids-to-workflow-version-triggers.command.ts @@ -8,7 +8,7 @@ import { ActiveOrSuspendedWorkspacesMigrationCommandRunner, type RunOnWorkspaceArgs, } from 'src/database/commands/command-runners/active-or-suspended-workspaces-migration.command-runner'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { TwentyORMGlobalManager } from 'src/engine/twenty-orm/twenty-orm-global.manager'; import { type WorkflowVersionWorkspaceEntity } from 'src/modules/workflow/common/standard-objects/workflow-version.workspace-entity'; import { type WorkflowAction } from 'src/modules/workflow/workflow-executor/workflow-actions/types/workflow-action.type'; @@ -19,8 +19,8 @@ import { type WorkflowAction } from 'src/modules/workflow/workflow-executor/work }) export class AddNextStepIdsToWorkflowVersionTriggers extends ActiveOrSuspendedWorkspacesMigrationCommandRunner { constructor( - @InjectRepository(Workspace) - protected readonly workspaceRepository: Repository, + @InjectRepository(WorkspaceEntity) + protected readonly workspaceRepository: Repository, protected readonly twentyORMGlobalManager: TwentyORMGlobalManager, ) { super(workspaceRepository, twentyORMGlobalManager); diff --git a/packages/twenty-server/src/database/commands/upgrade-version-command/1-2/1-2-remove-workflow-runs-without-state.command.ts b/packages/twenty-server/src/database/commands/upgrade-version-command/1-2/1-2-remove-workflow-runs-without-state.command.ts index 3cb789ddac4..faefc6fd856 100644 --- a/packages/twenty-server/src/database/commands/upgrade-version-command/1-2/1-2-remove-workflow-runs-without-state.command.ts +++ b/packages/twenty-server/src/database/commands/upgrade-version-command/1-2/1-2-remove-workflow-runs-without-state.command.ts @@ -7,7 +7,7 @@ import { ActiveOrSuspendedWorkspacesMigrationCommandRunner, type RunOnWorkspaceArgs, } from 'src/database/commands/command-runners/active-or-suspended-workspaces-migration.command-runner'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { TwentyORMGlobalManager } from 'src/engine/twenty-orm/twenty-orm-global.manager'; import { type WorkflowRunWorkspaceEntity } from 'src/modules/workflow/common/standard-objects/workflow-run.workspace-entity'; @@ -17,8 +17,8 @@ import { type WorkflowRunWorkspaceEntity } from 'src/modules/workflow/common/sta }) export class RemoveWorkflowRunsWithoutState extends ActiveOrSuspendedWorkspacesMigrationCommandRunner { constructor( - @InjectRepository(Workspace) - protected readonly workspaceRepository: Repository, + @InjectRepository(WorkspaceEntity) + protected readonly workspaceRepository: Repository, protected readonly twentyORMGlobalManager: TwentyORMGlobalManager, ) { super(workspaceRepository, twentyORMGlobalManager); diff --git a/packages/twenty-server/src/database/commands/upgrade-version-command/1-2/1-2-upgrade-version-command.module.ts b/packages/twenty-server/src/database/commands/upgrade-version-command/1-2/1-2-upgrade-version-command.module.ts index c7a9884d679..d76abdf884b 100644 --- a/packages/twenty-server/src/database/commands/upgrade-version-command/1-2/1-2-upgrade-version-command.module.ts +++ b/packages/twenty-server/src/database/commands/upgrade-version-command/1-2/1-2-upgrade-version-command.module.ts @@ -4,7 +4,7 @@ import { TypeOrmModule } from '@nestjs/typeorm'; import { AddEnqueuedStatusToWorkflowRunV2Command } from 'src/database/commands/upgrade-version-command/1-2/1-2-add-enqueued-status-to-workflow-run-v2.command'; import { AddNextStepIdsToWorkflowVersionTriggers } from 'src/database/commands/upgrade-version-command/1-2/1-2-add-next-step-ids-to-workflow-version-triggers.command'; import { RemoveWorkflowRunsWithoutState } from 'src/database/commands/upgrade-version-command/1-2/1-2-remove-workflow-runs-without-state.command'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity'; import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity'; import { WorkspaceDataSourceModule } from 'src/engine/workspace-datasource/workspace-datasource.module'; @@ -12,7 +12,7 @@ import { WorkspaceDataSourceModule } from 'src/engine/workspace-datasource/works @Module({ imports: [ TypeOrmModule.forFeature([ - Workspace, + WorkspaceEntity, FieldMetadataEntity, ObjectMetadataEntity, ]), diff --git a/packages/twenty-server/src/database/commands/upgrade-version-command/1-3/1-3-add-next-step-ids-to-workflow-runs-trigger.command.ts b/packages/twenty-server/src/database/commands/upgrade-version-command/1-3/1-3-add-next-step-ids-to-workflow-runs-trigger.command.ts index 5583926f4e6..9c0a30ecf94 100644 --- a/packages/twenty-server/src/database/commands/upgrade-version-command/1-3/1-3-add-next-step-ids-to-workflow-runs-trigger.command.ts +++ b/packages/twenty-server/src/database/commands/upgrade-version-command/1-3/1-3-add-next-step-ids-to-workflow-runs-trigger.command.ts @@ -8,7 +8,7 @@ import { ActiveOrSuspendedWorkspacesMigrationCommandRunner, type RunOnWorkspaceArgs, } from 'src/database/commands/command-runners/active-or-suspended-workspaces-migration.command-runner'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { TwentyORMGlobalManager } from 'src/engine/twenty-orm/twenty-orm-global.manager'; import { getWorkspaceSchemaName } from 'src/engine/workspace-datasource/utils/get-workspace-schema-name.util'; import { type WorkflowAction } from 'src/modules/workflow/workflow-executor/workflow-actions/types/workflow-action.type'; @@ -19,8 +19,8 @@ import { type WorkflowAction } from 'src/modules/workflow/workflow-executor/work }) export class AddNextStepIdsToWorkflowRunsTrigger extends ActiveOrSuspendedWorkspacesMigrationCommandRunner { constructor( - @InjectRepository(Workspace) - protected readonly workspaceRepository: Repository, + @InjectRepository(WorkspaceEntity) + protected readonly workspaceRepository: Repository, @InjectDataSource() private readonly coreDataSource: DataSource, protected readonly twentyORMGlobalManager: TwentyORMGlobalManager, diff --git a/packages/twenty-server/src/database/commands/upgrade-version-command/1-3/1-3-update-timestamp-column-type-in-workspace-schema.command.ts b/packages/twenty-server/src/database/commands/upgrade-version-command/1-3/1-3-update-timestamp-column-type-in-workspace-schema.command.ts index c289d6d6dfb..e8f2ce6dfef 100644 --- a/packages/twenty-server/src/database/commands/upgrade-version-command/1-3/1-3-update-timestamp-column-type-in-workspace-schema.command.ts +++ b/packages/twenty-server/src/database/commands/upgrade-version-command/1-3/1-3-update-timestamp-column-type-in-workspace-schema.command.ts @@ -8,7 +8,7 @@ import { ActiveOrSuspendedWorkspacesMigrationCommandRunner, type RunOnWorkspaceArgs, } from 'src/database/commands/command-runners/active-or-suspended-workspaces-migration.command-runner'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity'; import { TwentyORMGlobalManager } from 'src/engine/twenty-orm/twenty-orm-global.manager'; import { computeObjectTargetTable } from 'src/engine/utils/compute-object-target-table.util'; @@ -21,8 +21,8 @@ import { getWorkspaceSchemaName } from 'src/engine/workspace-datasource/utils/ge }) export class UpdateTimestampColumnTypeInWorkspaceSchemaCommand extends ActiveOrSuspendedWorkspacesMigrationCommandRunner { constructor( - @InjectRepository(Workspace) - protected readonly workspaceRepository: Repository, + @InjectRepository(WorkspaceEntity) + protected readonly workspaceRepository: Repository, @InjectDataSource() private readonly coreDataSource: DataSource, protected readonly twentyORMGlobalManager: TwentyORMGlobalManager, diff --git a/packages/twenty-server/src/database/commands/upgrade-version-command/1-3/1-3-upgrade-version-command.module.ts b/packages/twenty-server/src/database/commands/upgrade-version-command/1-3/1-3-upgrade-version-command.module.ts index daf8cd49ddf..c8e589ab9c6 100644 --- a/packages/twenty-server/src/database/commands/upgrade-version-command/1-3/1-3-upgrade-version-command.module.ts +++ b/packages/twenty-server/src/database/commands/upgrade-version-command/1-3/1-3-upgrade-version-command.module.ts @@ -3,10 +3,10 @@ import { TypeOrmModule } from '@nestjs/typeorm'; import { AddNextStepIdsToWorkflowRunsTrigger } from 'src/database/commands/upgrade-version-command/1-3/1-3-add-next-step-ids-to-workflow-runs-trigger.command'; import { UpdateTimestampColumnTypeInWorkspaceSchemaCommand } from 'src/database/commands/upgrade-version-command/1-3/1-3-update-timestamp-column-type-in-workspace-schema.command'; -import { ApiKey } from 'src/engine/core-modules/api-key/api-key.entity'; +import { ApiKeyEntity } from 'src/engine/core-modules/api-key/api-key.entity'; import { ApiKeyModule } from 'src/engine/core-modules/api-key/api-key.module'; import { FeatureFlagModule } from 'src/engine/core-modules/feature-flag/feature-flag.module'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity'; import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity'; import { RoleTargetsEntity } from 'src/engine/metadata-modules/role/role-targets.entity'; @@ -20,8 +20,8 @@ import { WorkspaceDataSourceModule } from 'src/engine/workspace-datasource/works @Module({ imports: [ TypeOrmModule.forFeature([ - Workspace, - ApiKey, + WorkspaceEntity, + ApiKeyEntity, FieldMetadataEntity, ObjectMetadataEntity, RoleEntity, diff --git a/packages/twenty-server/src/database/commands/upgrade-version-command/1-5/1-5-add-positions-to-workflow-versions-and-workflow-runs.command.ts b/packages/twenty-server/src/database/commands/upgrade-version-command/1-5/1-5-add-positions-to-workflow-versions-and-workflow-runs.command.ts index 94fae41a329..1f5a6392f90 100644 --- a/packages/twenty-server/src/database/commands/upgrade-version-command/1-5/1-5-add-positions-to-workflow-versions-and-workflow-runs.command.ts +++ b/packages/twenty-server/src/database/commands/upgrade-version-command/1-5/1-5-add-positions-to-workflow-versions-and-workflow-runs.command.ts @@ -11,7 +11,7 @@ import { ActiveOrSuspendedWorkspacesMigrationCommandRunner, type RunOnWorkspaceArgs, } from 'src/database/commands/command-runners/active-or-suspended-workspaces-migration.command-runner'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { TwentyORMGlobalManager } from 'src/engine/twenty-orm/twenty-orm-global.manager'; import { getWorkspaceSchemaName } from 'src/engine/workspace-datasource/utils/get-workspace-schema-name.util'; import { type WorkflowVersionWorkspaceEntity } from 'src/modules/workflow/common/standard-objects/workflow-version.workspace-entity'; @@ -43,8 +43,8 @@ export type AddPositionsToWorkflowVersionsAndWorkflowRunsOptions = }) export class AddPositionsToWorkflowVersionsAndWorkflowRunsCommand extends ActiveOrSuspendedWorkspacesMigrationCommandRunner { constructor( - @InjectRepository(Workspace) - protected readonly workspaceRepository: Repository, + @InjectRepository(WorkspaceEntity) + protected readonly workspaceRepository: Repository, @InjectDataSource() private readonly coreDataSource: DataSource, protected readonly twentyORMGlobalManager: TwentyORMGlobalManager, diff --git a/packages/twenty-server/src/database/commands/upgrade-version-command/1-5/1-5-migrate-views-to-core.command.ts b/packages/twenty-server/src/database/commands/upgrade-version-command/1-5/1-5-migrate-views-to-core.command.ts index 3e6d83b362b..f46f4beaa0e 100644 --- a/packages/twenty-server/src/database/commands/upgrade-version-command/1-5/1-5-migrate-views-to-core.command.ts +++ b/packages/twenty-server/src/database/commands/upgrade-version-command/1-5/1-5-migrate-views-to-core.command.ts @@ -10,7 +10,7 @@ import { ActiveOrSuspendedWorkspacesMigrationCommandRunner, type RunOnWorkspaceArgs, } from 'src/database/commands/command-runners/active-or-suspended-workspaces-migration.command-runner'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity'; import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity'; import { ViewFieldEntity } from 'src/engine/metadata-modules/view-field/entities/view-field.entity'; @@ -39,8 +39,8 @@ import { convertViewFilterWorkspaceValueToCoreValue } from 'src/modules/view/uti }) export class MigrateViewsToCoreCommand extends ActiveOrSuspendedWorkspacesMigrationCommandRunner { constructor( - @InjectRepository(Workspace) - protected readonly workspaceRepository: Repository, + @InjectRepository(WorkspaceEntity) + protected readonly workspaceRepository: Repository, protected readonly twentyORMGlobalManager: TwentyORMGlobalManager, @InjectDataSource() private readonly coreDataSource: DataSource, diff --git a/packages/twenty-server/src/database/commands/upgrade-version-command/1-5/1-5-remove-favorite-view-relation.command.ts b/packages/twenty-server/src/database/commands/upgrade-version-command/1-5/1-5-remove-favorite-view-relation.command.ts index b9ac9468ecc..03d388634a6 100644 --- a/packages/twenty-server/src/database/commands/upgrade-version-command/1-5/1-5-remove-favorite-view-relation.command.ts +++ b/packages/twenty-server/src/database/commands/upgrade-version-command/1-5/1-5-remove-favorite-view-relation.command.ts @@ -8,7 +8,7 @@ import { ActiveOrSuspendedWorkspacesMigrationCommandRunner, type RunOnWorkspaceArgs, } from 'src/database/commands/command-runners/active-or-suspended-workspaces-migration.command-runner'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity'; import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity'; import { WorkspaceMetadataVersionService } from 'src/engine/metadata-modules/workspace-metadata-version/services/workspace-metadata-version.service'; @@ -27,8 +27,8 @@ import { STANDARD_OBJECT_IDS } from 'src/engine/workspace-manager/workspace-sync }) export class RemoveFavoriteViewRelationCommand extends ActiveOrSuspendedWorkspacesMigrationCommandRunner { constructor( - @InjectRepository(Workspace) - protected readonly workspaceRepository: Repository, + @InjectRepository(WorkspaceEntity) + protected readonly workspaceRepository: Repository, protected readonly twentyORMGlobalManager: TwentyORMGlobalManager, protected readonly workspaceSchemaManager: WorkspaceSchemaManagerService, @InjectDataSource() diff --git a/packages/twenty-server/src/database/commands/upgrade-version-command/1-5/1-5-upgrade-version-command.module.ts b/packages/twenty-server/src/database/commands/upgrade-version-command/1-5/1-5-upgrade-version-command.module.ts index 9041bc4159d..203c7c33149 100644 --- a/packages/twenty-server/src/database/commands/upgrade-version-command/1-5/1-5-upgrade-version-command.module.ts +++ b/packages/twenty-server/src/database/commands/upgrade-version-command/1-5/1-5-upgrade-version-command.module.ts @@ -4,7 +4,7 @@ import { TypeOrmModule } from '@nestjs/typeorm'; import { AddPositionsToWorkflowVersionsAndWorkflowRunsCommand } from 'src/database/commands/upgrade-version-command/1-5/1-5-add-positions-to-workflow-versions-and-workflow-runs.command'; import { MigrateViewsToCoreCommand } from 'src/database/commands/upgrade-version-command/1-5/1-5-migrate-views-to-core.command'; import { RemoveFavoriteViewRelationCommand } from 'src/database/commands/upgrade-version-command/1-5/1-5-remove-favorite-view-relation.command'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity'; import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity'; import { WorkspaceMetadataVersionModule } from 'src/engine/metadata-modules/workspace-metadata-version/workspace-metadata-version.module'; @@ -14,7 +14,7 @@ import { WorkspaceDataSourceModule } from 'src/engine/workspace-datasource/works @Module({ imports: [ TypeOrmModule.forFeature([ - Workspace, + WorkspaceEntity, FieldMetadataEntity, ObjectMetadataEntity, ]), diff --git a/packages/twenty-server/src/database/commands/upgrade-version-command/1-6/1-6-fix-label-identifier-position-and-visibility.command.ts b/packages/twenty-server/src/database/commands/upgrade-version-command/1-6/1-6-fix-label-identifier-position-and-visibility.command.ts index ab46fea726e..cf04ad18b27 100644 --- a/packages/twenty-server/src/database/commands/upgrade-version-command/1-6/1-6-fix-label-identifier-position-and-visibility.command.ts +++ b/packages/twenty-server/src/database/commands/upgrade-version-command/1-6/1-6-fix-label-identifier-position-and-visibility.command.ts @@ -7,7 +7,7 @@ import { ActiveOrSuspendedWorkspacesMigrationCommandRunner, type RunOnWorkspaceArgs, } from 'src/database/commands/command-runners/active-or-suspended-workspaces-migration.command-runner'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { ViewFieldEntity } from 'src/engine/metadata-modules/view-field/entities/view-field.entity'; import { ViewEntity } from 'src/engine/metadata-modules/view/entities/view.entity'; import { TwentyORMGlobalManager } from 'src/engine/twenty-orm/twenty-orm-global.manager'; @@ -19,8 +19,8 @@ import { TwentyORMGlobalManager } from 'src/engine/twenty-orm/twenty-orm-global. }) export class FixLabelIdentifierPositionAndVisibilityCommand extends ActiveOrSuspendedWorkspacesMigrationCommandRunner { constructor( - @InjectRepository(Workspace) - protected readonly workspaceRepository: Repository, + @InjectRepository(WorkspaceEntity) + protected readonly workspaceRepository: Repository, protected readonly twentyORMGlobalManager: TwentyORMGlobalManager, @InjectRepository(ViewEntity) private readonly viewRepository: Repository, diff --git a/packages/twenty-server/src/database/commands/upgrade-version-command/1-6/1-6-upgrade-version-command.module.ts b/packages/twenty-server/src/database/commands/upgrade-version-command/1-6/1-6-upgrade-version-command.module.ts index 32b05e21a63..1bc57316b28 100644 --- a/packages/twenty-server/src/database/commands/upgrade-version-command/1-6/1-6-upgrade-version-command.module.ts +++ b/packages/twenty-server/src/database/commands/upgrade-version-command/1-6/1-6-upgrade-version-command.module.ts @@ -2,7 +2,7 @@ import { Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; import { FixLabelIdentifierPositionAndVisibilityCommand } from 'src/database/commands/upgrade-version-command/1-6/1-6-fix-label-identifier-position-and-visibility.command'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity'; import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity'; import { ViewFieldEntity } from 'src/engine/metadata-modules/view-field/entities/view-field.entity'; @@ -14,7 +14,7 @@ import { WorkspaceDataSourceModule } from 'src/engine/workspace-datasource/works @Module({ imports: [ TypeOrmModule.forFeature([ - Workspace, + WorkspaceEntity, FieldMetadataEntity, ObjectMetadataEntity, ViewEntity, diff --git a/packages/twenty-server/src/database/commands/upgrade-version-command/1-7/1-7-backfill-workflow-manual-trigger-availability.command.ts b/packages/twenty-server/src/database/commands/upgrade-version-command/1-7/1-7-backfill-workflow-manual-trigger-availability.command.ts index a890fc8922d..0f22aa2db6b 100644 --- a/packages/twenty-server/src/database/commands/upgrade-version-command/1-7/1-7-backfill-workflow-manual-trigger-availability.command.ts +++ b/packages/twenty-server/src/database/commands/upgrade-version-command/1-7/1-7-backfill-workflow-manual-trigger-availability.command.ts @@ -8,7 +8,7 @@ import { ActiveOrSuspendedWorkspacesMigrationCommandRunner, type RunOnWorkspaceArgs, } from 'src/database/commands/command-runners/active-or-suspended-workspaces-migration.command-runner'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { TwentyORMGlobalManager } from 'src/engine/twenty-orm/twenty-orm-global.manager'; import { getWorkspaceSchemaName } from 'src/engine/workspace-datasource/utils/get-workspace-schema-name.util'; import { WorkflowTriggerType } from 'src/modules/workflow/workflow-trigger/types/workflow-trigger.type'; @@ -20,8 +20,8 @@ import { WorkflowTriggerType } from 'src/modules/workflow/workflow-trigger/types }) export class BackfillWorkflowManualTriggerAvailabilityCommand extends ActiveOrSuspendedWorkspacesMigrationCommandRunner { constructor( - @InjectRepository(Workspace) - protected readonly workspaceRepository: Repository, + @InjectRepository(WorkspaceEntity) + protected readonly workspaceRepository: Repository, protected readonly twentyORMGlobalManager: TwentyORMGlobalManager, @InjectDataSource() private readonly coreDataSource: DataSource, diff --git a/packages/twenty-server/src/database/commands/upgrade-version-command/1-7/1-7-upgrade-version-command.module.ts b/packages/twenty-server/src/database/commands/upgrade-version-command/1-7/1-7-upgrade-version-command.module.ts index 5fcd03dffea..f5eae5cb3ff 100644 --- a/packages/twenty-server/src/database/commands/upgrade-version-command/1-7/1-7-upgrade-version-command.module.ts +++ b/packages/twenty-server/src/database/commands/upgrade-version-command/1-7/1-7-upgrade-version-command.module.ts @@ -2,10 +2,10 @@ import { Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; import { BackfillWorkflowManualTriggerAvailabilityCommand } from 'src/database/commands/upgrade-version-command/1-7/1-7-backfill-workflow-manual-trigger-availability.command'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; @Module({ - imports: [TypeOrmModule.forFeature([Workspace])], + imports: [TypeOrmModule.forFeature([WorkspaceEntity])], providers: [BackfillWorkflowManualTriggerAvailabilityCommand], exports: [BackfillWorkflowManualTriggerAvailabilityCommand], }) diff --git a/packages/twenty-server/src/database/commands/upgrade-version-command/1-8/1-8-deduplicate-unique-fields.command.ts b/packages/twenty-server/src/database/commands/upgrade-version-command/1-8/1-8-deduplicate-unique-fields.command.ts index 6891847354f..9e0916f555a 100644 --- a/packages/twenty-server/src/database/commands/upgrade-version-command/1-8/1-8-deduplicate-unique-fields.command.ts +++ b/packages/twenty-server/src/database/commands/upgrade-version-command/1-8/1-8-deduplicate-unique-fields.command.ts @@ -8,7 +8,7 @@ import { ActiveOrSuspendedWorkspacesMigrationCommandRunner, type RunOnWorkspaceArgs, } from 'src/database/commands/command-runners/active-or-suspended-workspaces-migration.command-runner'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity'; import { IndexMetadataEntity } from 'src/engine/metadata-modules/index-metadata/index-metadata.entity'; import { IndexMetadataService } from 'src/engine/metadata-modules/index-metadata/index-metadata.service'; @@ -35,8 +35,8 @@ import { WorkspaceMigrationRunnerService } from 'src/engine/workspace-manager/wo export class DeduplicateUniqueFieldsCommand extends ActiveOrSuspendedWorkspacesMigrationCommandRunner { protected readonly logger = new Logger(DeduplicateUniqueFieldsCommand.name); constructor( - @InjectRepository(Workspace) - protected readonly workspaceRepository: Repository, + @InjectRepository(WorkspaceEntity) + protected readonly workspaceRepository: Repository, protected readonly twentyORMGlobalManager: TwentyORMGlobalManager, protected readonly indexMetadataService: IndexMetadataService, protected readonly workspaceMigrationRunnerService: WorkspaceMigrationRunnerService, diff --git a/packages/twenty-server/src/database/commands/upgrade-version-command/1-8/1-8-fill-null-serverless-function-layer-id.command.ts b/packages/twenty-server/src/database/commands/upgrade-version-command/1-8/1-8-fill-null-serverless-function-layer-id.command.ts index 5dcb71a4919..dd9191f8d54 100644 --- a/packages/twenty-server/src/database/commands/upgrade-version-command/1-8/1-8-fill-null-serverless-function-layer-id.command.ts +++ b/packages/twenty-server/src/database/commands/upgrade-version-command/1-8/1-8-fill-null-serverless-function-layer-id.command.ts @@ -8,7 +8,7 @@ import { ActiveOrSuspendedWorkspacesMigrationCommandRunner, type RunOnWorkspaceArgs, } from 'src/database/commands/command-runners/active-or-suspended-workspaces-migration.command-runner'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { TwentyORMGlobalManager } from 'src/engine/twenty-orm/twenty-orm-global.manager'; import { ServerlessFunctionEntity } from 'src/engine/metadata-modules/serverless-function/serverless-function.entity'; import { ServerlessFunctionLayerEntity } from 'src/engine/metadata-modules/serverless-function-layer/serverless-function-layer.entity'; @@ -23,8 +23,8 @@ export class FillNullServerlessFunctionLayerIdCommand extends ActiveOrSuspendedW FillNullServerlessFunctionLayerIdCommand.name, ); constructor( - @InjectRepository(Workspace) - protected readonly workspaceRepository: Repository, + @InjectRepository(WorkspaceEntity) + protected readonly workspaceRepository: Repository, protected readonly twentyORMGlobalManager: TwentyORMGlobalManager, @InjectRepository(ServerlessFunctionEntity) protected readonly serverlessFunctionRepository: Repository, diff --git a/packages/twenty-server/src/database/commands/upgrade-version-command/1-8/1-8-migrate-channel-sync-stages.command.ts b/packages/twenty-server/src/database/commands/upgrade-version-command/1-8/1-8-migrate-channel-sync-stages.command.ts index 2154cf798b5..1b45da4d69a 100644 --- a/packages/twenty-server/src/database/commands/upgrade-version-command/1-8/1-8-migrate-channel-sync-stages.command.ts +++ b/packages/twenty-server/src/database/commands/upgrade-version-command/1-8/1-8-migrate-channel-sync-stages.command.ts @@ -7,7 +7,7 @@ import { ActiveOrSuspendedWorkspacesMigrationCommandRunner, type RunOnWorkspaceArgs, } from 'src/database/commands/command-runners/active-or-suspended-workspaces-migration.command-runner'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { type FieldMetadataComplexOption } from 'src/engine/metadata-modules/field-metadata/dtos/options.input'; import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity'; import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity'; @@ -29,8 +29,8 @@ import { MessageChannelSyncStage } from 'src/modules/messaging/common/standard-o }) export class MigrateChannelSyncStagesCommand extends ActiveOrSuspendedWorkspacesMigrationCommandRunner { constructor( - @InjectRepository(Workspace) - protected readonly workspaceRepository: Repository, + @InjectRepository(WorkspaceEntity) + protected readonly workspaceRepository: Repository, protected readonly twentyORMGlobalManager: TwentyORMGlobalManager, @InjectRepository(ObjectMetadataEntity) private readonly objectMetadataRepository: Repository, diff --git a/packages/twenty-server/src/database/commands/upgrade-version-command/1-8/1-8-migrate-workflow-step-filter-operand-value.ts b/packages/twenty-server/src/database/commands/upgrade-version-command/1-8/1-8-migrate-workflow-step-filter-operand-value.ts index cdede0d9afa..b59b0b450ee 100644 --- a/packages/twenty-server/src/database/commands/upgrade-version-command/1-8/1-8-migrate-workflow-step-filter-operand-value.ts +++ b/packages/twenty-server/src/database/commands/upgrade-version-command/1-8/1-8-migrate-workflow-step-filter-operand-value.ts @@ -12,7 +12,7 @@ import { ActiveOrSuspendedWorkspacesMigrationCommandRunner, type RunOnWorkspaceArgs, } from 'src/database/commands/command-runners/active-or-suspended-workspaces-migration.command-runner'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { TwentyORMGlobalManager } from 'src/engine/twenty-orm/twenty-orm-global.manager'; import { WorkflowVersionWorkspaceEntity } from 'src/modules/workflow/common/standard-objects/workflow-version.workspace-entity'; import { isWorkflowFilterAction } from 'src/modules/workflow/workflow-executor/workflow-actions/filter/guards/is-workflow-filter-action.guard'; @@ -25,8 +25,8 @@ import { type WorkflowAction } from 'src/modules/workflow/workflow-executor/work }) export class MigrateWorkflowStepFilterOperandValueCommand extends ActiveOrSuspendedWorkspacesMigrationCommandRunner { constructor( - @InjectRepository(Workspace) - protected readonly workspaceRepository: Repository, + @InjectRepository(WorkspaceEntity) + protected readonly workspaceRepository: Repository, protected readonly twentyORMGlobalManager: TwentyORMGlobalManager, ) { super(workspaceRepository, twentyORMGlobalManager); diff --git a/packages/twenty-server/src/database/commands/upgrade-version-command/1-8/1-8-regenerate-person-search-vector-with-phones.command.ts b/packages/twenty-server/src/database/commands/upgrade-version-command/1-8/1-8-regenerate-person-search-vector-with-phones.command.ts index 5e8af603297..a6f59212332 100644 --- a/packages/twenty-server/src/database/commands/upgrade-version-command/1-8/1-8-regenerate-person-search-vector-with-phones.command.ts +++ b/packages/twenty-server/src/database/commands/upgrade-version-command/1-8/1-8-regenerate-person-search-vector-with-phones.command.ts @@ -7,7 +7,7 @@ import { ActiveOrSuspendedWorkspacesMigrationCommandRunner, type RunOnWorkspaceArgs, } from 'src/database/commands/command-runners/active-or-suspended-workspaces-migration.command-runner'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { TwentyORMGlobalManager } from 'src/engine/twenty-orm/twenty-orm-global.manager'; import { WorkspaceSchemaManagerService } from 'src/engine/twenty-orm/workspace-schema-manager/workspace-schema-manager.service'; import { getWorkspaceSchemaName } from 'src/engine/workspace-datasource/utils/get-workspace-schema-name.util'; @@ -21,8 +21,8 @@ import { SEARCH_FIELDS_FOR_PERSON } from 'src/modules/person/standard-objects/pe }) export class RegeneratePersonSearchVectorWithPhonesCommand extends ActiveOrSuspendedWorkspacesMigrationCommandRunner { constructor( - @InjectRepository(Workspace) - protected readonly workspaceRepository: Repository, + @InjectRepository(WorkspaceEntity) + protected readonly workspaceRepository: Repository, @InjectDataSource() private readonly coreDataSource: DataSource, protected readonly twentyORMGlobalManager: TwentyORMGlobalManager, diff --git a/packages/twenty-server/src/database/commands/upgrade-version-command/1-8/1-8-upgrade-version-command.module.ts b/packages/twenty-server/src/database/commands/upgrade-version-command/1-8/1-8-upgrade-version-command.module.ts index 10cd5524a0d..4adea7bf235 100644 --- a/packages/twenty-server/src/database/commands/upgrade-version-command/1-8/1-8-upgrade-version-command.module.ts +++ b/packages/twenty-server/src/database/commands/upgrade-version-command/1-8/1-8-upgrade-version-command.module.ts @@ -6,7 +6,7 @@ import { FillNullServerlessFunctionLayerIdCommand } from 'src/database/commands/ import { MigrateChannelSyncStagesCommand } from 'src/database/commands/upgrade-version-command/1-8/1-8-migrate-channel-sync-stages.command'; import { MigrateWorkflowStepFilterOperandValueCommand } from 'src/database/commands/upgrade-version-command/1-8/1-8-migrate-workflow-step-filter-operand-value'; import { RegeneratePersonSearchVectorWithPhonesCommand } from 'src/database/commands/upgrade-version-command/1-8/1-8-regenerate-person-search-vector-with-phones.command'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity'; import { IndexMetadataEntity } from 'src/engine/metadata-modules/index-metadata/index-metadata.entity'; import { IndexMetadataModule } from 'src/engine/metadata-modules/index-metadata/index-metadata.module'; @@ -20,7 +20,7 @@ import { WorkspaceMigrationRunnerModule } from 'src/engine/workspace-manager/wor @Module({ imports: [ TypeOrmModule.forFeature([ - Workspace, + WorkspaceEntity, FieldMetadataEntity, ObjectMetadataEntity, IndexMetadataEntity, diff --git a/packages/twenty-server/src/database/commands/upgrade-version-command/upgrade-version-command.module.ts b/packages/twenty-server/src/database/commands/upgrade-version-command/upgrade-version-command.module.ts index 62967c8181d..82eea6a5acf 100644 --- a/packages/twenty-server/src/database/commands/upgrade-version-command/upgrade-version-command.module.ts +++ b/packages/twenty-server/src/database/commands/upgrade-version-command/upgrade-version-command.module.ts @@ -12,12 +12,12 @@ import { V1_7_UpgradeVersionCommandModule } from 'src/database/commands/upgrade- import { V1_8_UpgradeVersionCommandModule } from 'src/database/commands/upgrade-version-command/1-8/1-8-upgrade-version-command.module'; import { V1_10_UpgradeVersionCommandModule } from 'src/database/commands/upgrade-version-command/1-10/1-10-upgrade-version-command.module'; import { UpgradeCommand } from 'src/database/commands/upgrade-version-command/upgrade.command'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { WorkspaceSyncMetadataModule } from 'src/engine/workspace-manager/workspace-sync-metadata/workspace-sync-metadata.module'; @Module({ imports: [ - TypeOrmModule.forFeature([Workspace]), + TypeOrmModule.forFeature([WorkspaceEntity]), V0_54_UpgradeVersionCommandModule, V0_55_UpgradeVersionCommandModule, V1_1_UpgradeVersionCommandModule, diff --git a/packages/twenty-server/src/database/commands/upgrade-version-command/upgrade.command.ts b/packages/twenty-server/src/database/commands/upgrade-version-command/upgrade.command.ts index 231c8f79e5c..1dd25e832ab 100644 --- a/packages/twenty-server/src/database/commands/upgrade-version-command/upgrade.command.ts +++ b/packages/twenty-server/src/database/commands/upgrade-version-command/upgrade.command.ts @@ -37,7 +37,7 @@ import { MigrateChannelSyncStagesCommand } from 'src/database/commands/upgrade-v import { MigrateWorkflowStepFilterOperandValueCommand } from 'src/database/commands/upgrade-version-command/1-8/1-8-migrate-workflow-step-filter-operand-value'; import { RegeneratePersonSearchVectorWithPhonesCommand } from 'src/database/commands/upgrade-version-command/1-8/1-8-regenerate-person-search-vector-with-phones.command'; import { TwentyConfigService } from 'src/engine/core-modules/twenty-config/twenty-config.service'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { TwentyORMGlobalManager } from 'src/engine/twenty-orm/twenty-orm-global.manager'; import { SyncWorkspaceMetadataCommand } from 'src/engine/workspace-manager/workspace-sync-metadata/commands/sync-workspace-metadata.command'; @@ -49,8 +49,8 @@ export class UpgradeCommand extends UpgradeCommandRunner { override allCommands: AllCommands; constructor( - @InjectRepository(Workspace) - protected readonly workspaceRepository: Repository, + @InjectRepository(WorkspaceEntity) + protected readonly workspaceRepository: Repository, protected readonly twentyConfigService: TwentyConfigService, protected readonly twentyORMGlobalManager: TwentyORMGlobalManager, protected readonly syncWorkspaceMetadataCommand: SyncWorkspaceMetadataCommand, diff --git a/packages/twenty-server/src/database/typeorm/core/migrations/common/1760640844181-addApplicationVariableCoreEntity.ts b/packages/twenty-server/src/database/typeorm/core/migrations/common/1760640844181-addApplicationVariableCoreEntity.ts index f622bb9034a..6e25b847892 100644 --- a/packages/twenty-server/src/database/typeorm/core/migrations/common/1760640844181-addApplicationVariableCoreEntity.ts +++ b/packages/twenty-server/src/database/typeorm/core/migrations/common/1760640844181-addApplicationVariableCoreEntity.ts @@ -1,9 +1,9 @@ import { type MigrationInterface, type QueryRunner } from 'typeorm'; -export class AddApplicationVariableCoreEntity1760640844181 +export class AddApplicationVariableEntityCoreEntity1760640844181 implements MigrationInterface { - name = 'AddApplicationVariableCoreEntity1760640844181'; + name = 'AddApplicationVariableEntityCoreEntity1760640844181'; public async up(queryRunner: QueryRunner): Promise { await queryRunner.query( diff --git a/packages/twenty-server/src/engine/api/graphql/graphql-config/graphql-config.service.ts b/packages/twenty-server/src/engine/api/graphql/graphql-config/graphql-config.service.ts index a2f455011f5..ab0cc0fd9f4 100644 --- a/packages/twenty-server/src/engine/api/graphql/graphql-config/graphql-config.service.ts +++ b/packages/twenty-server/src/engine/api/graphql/graphql-config/graphql-config.service.ts @@ -27,15 +27,15 @@ import { useGraphQLErrorHandlerHook } from 'src/engine/core-modules/graphql/hook import { I18nService } from 'src/engine/core-modules/i18n/i18n.service'; import { MetricsService } from 'src/engine/core-modules/metrics/metrics.service'; import { TwentyConfigService } from 'src/engine/core-modules/twenty-config/twenty-config.service'; -import { type User } from 'src/engine/core-modules/user/user.entity'; -import { type Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { UserEntity } from 'src/engine/core-modules/user/user.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { DataloaderService } from 'src/engine/dataloaders/dataloader.service'; import { handleExceptionAndConvertToGraphQLError } from 'src/engine/utils/global-exception-handler.util'; import { renderApolloPlayground } from 'src/engine/utils/render-apollo-playground.util'; export interface GraphQLContext extends YogaDriverServerContext<'express'> { - user?: User; - workspace?: Workspace; + user?: UserEntity; + workspace?: WorkspaceEntity; } @Injectable() @@ -78,8 +78,8 @@ export class GraphQLConfigService autoSchemaFile: true, include: [CoreEngineModule], conditionalSchema: async (context) => { - let user: User | null | undefined; - let workspace: Workspace | undefined; + let user: UserEntity | null | undefined; + let workspace: WorkspaceEntity | undefined; try { const { diff --git a/packages/twenty-server/src/engine/api/graphql/graphql-config/interfaces/graphql-context.interface.ts b/packages/twenty-server/src/engine/api/graphql/graphql-config/interfaces/graphql-context.interface.ts index af7a239f3d7..a460c826467 100644 --- a/packages/twenty-server/src/engine/api/graphql/graphql-config/interfaces/graphql-context.interface.ts +++ b/packages/twenty-server/src/engine/api/graphql/graphql-config/interfaces/graphql-context.interface.ts @@ -1,9 +1,9 @@ import { type YogaDriverServerContext } from '@graphql-yoga/nestjs'; -import { type User } from 'src/engine/core-modules/user/user.entity'; -import { type Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { type UserEntity } from 'src/engine/core-modules/user/user.entity'; +import { type WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; export interface GraphQLContext extends YogaDriverServerContext<'express'> { - user?: User; - workspace?: Workspace; + user?: UserEntity; + workspace?: WorkspaceEntity; } diff --git a/packages/twenty-server/src/engine/api/graphql/workspace-query-runner/workspace-query-runner.module.ts b/packages/twenty-server/src/engine/api/graphql/workspace-query-runner/workspace-query-runner.module.ts index 921fbf01f0c..aacccc3418b 100644 --- a/packages/twenty-server/src/engine/api/graphql/workspace-query-runner/workspace-query-runner.module.ts +++ b/packages/twenty-server/src/engine/api/graphql/workspace-query-runner/workspace-query-runner.module.ts @@ -7,7 +7,7 @@ import { TelemetryListener } from 'src/engine/api/graphql/workspace-query-runner import { WorkspaceQueryHookModule } from 'src/engine/api/graphql/workspace-query-runner/workspace-query-hook/workspace-query-hook.module'; import { AuditModule } from 'src/engine/core-modules/audit/audit.module'; import { AuthModule } from 'src/engine/core-modules/auth/auth.module'; -import { FeatureFlag } from 'src/engine/core-modules/feature-flag/feature-flag.entity'; +import { FeatureFlagEntity } from 'src/engine/core-modules/feature-flag/feature-flag.entity'; import { FileModule } from 'src/engine/core-modules/file/file.module'; import { RecordPositionModule } from 'src/engine/core-modules/record-position/record-position.module'; import { RecordTransformerModule } from 'src/engine/core-modules/record-transformer/record-transformer.module'; @@ -23,7 +23,7 @@ import { EntityEventsToDbListener } from './listeners/entity-events-to-db.listen WorkspaceQueryBuilderModule, WorkspaceDataSourceModule, WorkspaceQueryHookModule, - TypeOrmModule.forFeature([FeatureFlag]), + TypeOrmModule.forFeature([FeatureFlagEntity]), AuditModule, TelemetryModule, FileModule, diff --git a/packages/twenty-server/src/engine/api/mcp/controllers/mcp-metadata.controller.ts b/packages/twenty-server/src/engine/api/mcp/controllers/mcp-metadata.controller.ts index d3f7ce06df1..a8770e3fb4b 100644 --- a/packages/twenty-server/src/engine/api/mcp/controllers/mcp-metadata.controller.ts +++ b/packages/twenty-server/src/engine/api/mcp/controllers/mcp-metadata.controller.ts @@ -5,7 +5,7 @@ import { Request } from 'express'; import { JwtAuthGuard } from 'src/engine/guards/jwt-auth.guard'; import { WorkspaceAuthGuard } from 'src/engine/guards/workspace-auth.guard'; import { AuthWorkspace } from 'src/engine/decorators/auth/auth-workspace.decorator'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { MCPMetadataService } from 'src/engine/api/mcp/services/mcp-metadata.service'; @Controller('mcp/metadata') @@ -15,7 +15,7 @@ export class McpMetadataController { @Post() async handleMcpMetadata( - @AuthWorkspace() workspace: Workspace, + @AuthWorkspace() workspace: WorkspaceEntity, @Req() request: Request, ) { return await this.mCPMetadataService.handleMCPMetadataQuery(request, { diff --git a/packages/twenty-server/src/engine/api/mcp/services/mcp-metadata.service.ts b/packages/twenty-server/src/engine/api/mcp/services/mcp-metadata.service.ts index f04a68dffa9..1788981a737 100644 --- a/packages/twenty-server/src/engine/api/mcp/services/mcp-metadata.service.ts +++ b/packages/twenty-server/src/engine/api/mcp/services/mcp-metadata.service.ts @@ -13,7 +13,7 @@ import { FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/featu import { FeatureFlagService } from 'src/engine/core-modules/feature-flag/services/feature-flag.service'; import { MetricsService } from 'src/engine/core-modules/metrics/metrics.service'; import { MetricsKeys } from 'src/engine/core-modules/metrics/types/metrics-keys.type'; -import { type Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; @Injectable() export class MCPMetadataService { @@ -128,7 +128,11 @@ export class MCPMetadataService { request: Request, { workspace, - }: { workspace: Workspace; userWorkspaceId?: string; apiKey?: string }, + }: { + workspace: WorkspaceEntity; + userWorkspaceId?: string; + apiKey?: string; + }, ): Promise> { try { await this.checkAiEnabled(workspace.id); diff --git a/packages/twenty-server/src/engine/core-modules/actor/services/__tests__/created-by-from-auth-context.service.spec.ts b/packages/twenty-server/src/engine/core-modules/actor/services/__tests__/created-by-from-auth-context.service.spec.ts index 2e443c6a207..99f60e7e3b2 100644 --- a/packages/twenty-server/src/engine/core-modules/actor/services/__tests__/created-by-from-auth-context.service.spec.ts +++ b/packages/twenty-server/src/engine/core-modules/actor/services/__tests__/created-by-from-auth-context.service.spec.ts @@ -2,10 +2,10 @@ import { Test, type TestingModule } from '@nestjs/testing'; import { getRepositoryToken } from '@nestjs/typeorm'; import { CreatedByFromAuthContextService } from 'src/engine/core-modules/actor/services/created-by-from-auth-context.service'; -import { type ApiKey } from 'src/engine/core-modules/api-key/api-key.entity'; +import { type ApiKeyEntity } from 'src/engine/core-modules/api-key/api-key.entity'; import { type AuthContext } from 'src/engine/core-modules/auth/types/auth-context.type'; -import { type User } from 'src/engine/core-modules/user/user.entity'; -import { type Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { type UserEntity } from 'src/engine/core-modules/user/user.entity'; +import { type WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { type ActorMetadata, FieldActorSource, @@ -17,9 +17,9 @@ import { TwentyORMGlobalManager } from 'src/engine/twenty-orm/twenty-orm-global. import { type WorkspaceMemberWorkspaceEntity } from 'src/modules/workspace-member/standard-objects/workspace-member.workspace-entity'; type TestingAuthContext = Omit & { - workspace: Partial; - apiKey?: Partial; - user?: Partial; + workspace: Partial; + apiKey?: Partial; + user?: Partial; }; type ExpectedResult = { createdBy: ActorMetadata }[]; diff --git a/packages/twenty-server/src/engine/core-modules/actor/services/created-by-from-auth-context.service.ts b/packages/twenty-server/src/engine/core-modules/actor/services/created-by-from-auth-context.service.ts index 373221ea798..523b8d48c77 100644 --- a/packages/twenty-server/src/engine/core-modules/actor/services/created-by-from-auth-context.service.ts +++ b/packages/twenty-server/src/engine/core-modules/actor/services/created-by-from-auth-context.service.ts @@ -12,7 +12,7 @@ import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/ import { getObjectMetadataMapItemByNameSingular } from 'src/engine/metadata-modules/utils/get-object-metadata-map-item-by-name-singular.util'; import { WorkspaceMetadataCacheService } from 'src/engine/metadata-modules/workspace-metadata-cache/services/workspace-metadata-cache.service'; import { TwentyORMGlobalManager } from 'src/engine/twenty-orm/twenty-orm-global.manager'; -import { type WorkspaceMemberWorkspaceEntity } from 'src/modules/workspace-member/standard-objects/workspace-member.workspace-entity'; +import { WorkspaceMemberWorkspaceEntity } from 'src/modules/workspace-member/standard-objects/workspace-member.workspace-entity'; import { WorkspaceNotFoundDefaultError } from 'src/engine/core-modules/workspace/workspace.exception'; // eslint-disable-next-line @typescript-eslint/no-explicit-any diff --git a/packages/twenty-server/src/engine/core-modules/actor/utils/build-created-by-from-api-key.util.ts b/packages/twenty-server/src/engine/core-modules/actor/utils/build-created-by-from-api-key.util.ts index cb8c9d53968..df93b5600f2 100644 --- a/packages/twenty-server/src/engine/core-modules/actor/utils/build-created-by-from-api-key.util.ts +++ b/packages/twenty-server/src/engine/core-modules/actor/utils/build-created-by-from-api-key.util.ts @@ -1,11 +1,11 @@ -import { type ApiKey } from 'src/engine/core-modules/api-key/api-key.entity'; +import { type ApiKeyEntity } from 'src/engine/core-modules/api-key/api-key.entity'; import { type ActorMetadata, FieldActorSource, } from 'src/engine/metadata-modules/field-metadata/composite-types/actor.composite-type'; type BuildCreatedByFromApiKeyArgs = { - apiKey: ApiKey; + apiKey: ApiKeyEntity; }; export const buildCreatedByFromApiKey = ({ apiKey, diff --git a/packages/twenty-server/src/engine/core-modules/admin-panel/__tests__/admin-panel.service.spec.ts b/packages/twenty-server/src/engine/core-modules/admin-panel/__tests__/admin-panel.service.spec.ts index bb550cc01c1..e03f16ee737 100644 --- a/packages/twenty-server/src/engine/core-modules/admin-panel/__tests__/admin-panel.service.spec.ts +++ b/packages/twenty-server/src/engine/core-modules/admin-panel/__tests__/admin-panel.service.spec.ts @@ -9,7 +9,7 @@ import { LoginTokenService } from 'src/engine/core-modules/auth/token/services/l import { WorkspaceDomainsService } from 'src/engine/core-modules/domain/workspace-domains/services/workspace-domains.service'; import { FileService } from 'src/engine/core-modules/file/services/file.service'; import { TwentyConfigService } from 'src/engine/core-modules/twenty-config/twenty-config.service'; -import { User } from 'src/engine/core-modules/user/user.entity'; +import { UserEntity } from 'src/engine/core-modules/user/user.entity'; const UserFindOneMock = jest.fn(); const LoginTokenServiceGenerateLoginTokenMock = jest.fn(); @@ -47,7 +47,7 @@ describe('AdminPanelService', () => { providers: [ AdminPanelService, { - provide: getRepositoryToken(User), + provide: getRepositoryToken(UserEntity), useValue: { findOne: UserFindOneMock, }, diff --git a/packages/twenty-server/src/engine/core-modules/admin-panel/admin-panel.module.ts b/packages/twenty-server/src/engine/core-modules/admin-panel/admin-panel.module.ts index 85d61ef100b..5505fa21145 100644 --- a/packages/twenty-server/src/engine/core-modules/admin-panel/admin-panel.module.ts +++ b/packages/twenty-server/src/engine/core-modules/admin-panel/admin-panel.module.ts @@ -15,12 +15,12 @@ import { HealthModule } from 'src/engine/core-modules/health/health.module'; import { ImpersonationModule } from 'src/engine/core-modules/impersonation/impersonation.module'; import { RedisClientModule } from 'src/engine/core-modules/redis-client/redis-client.module'; import { TelemetryModule } from 'src/engine/core-modules/telemetry/telemetry.module'; -import { User } from 'src/engine/core-modules/user/user.entity'; +import { UserEntity } from 'src/engine/core-modules/user/user.entity'; import { PermissionsModule } from 'src/engine/metadata-modules/permissions/permissions.module'; @Module({ imports: [ - TypeOrmModule.forFeature([User]), + TypeOrmModule.forFeature([UserEntity]), AuthModule, FileModule, WorkspaceDomainsModule, diff --git a/packages/twenty-server/src/engine/core-modules/admin-panel/admin-panel.resolver.ts b/packages/twenty-server/src/engine/core-modules/admin-panel/admin-panel.resolver.ts index 440e7e1f634..ec2103d0740 100644 --- a/packages/twenty-server/src/engine/core-modules/admin-panel/admin-panel.resolver.ts +++ b/packages/twenty-server/src/engine/core-modules/admin-panel/admin-panel.resolver.ts @@ -13,7 +13,7 @@ import { QueueJobsResponseDTO } from 'src/engine/core-modules/admin-panel/dtos/q import { RetryJobsResponseDTO } from 'src/engine/core-modules/admin-panel/dtos/retry-jobs-response.dto'; import { SystemHealthDTO } from 'src/engine/core-modules/admin-panel/dtos/system-health.dto'; import { UpdateWorkspaceFeatureFlagInput } from 'src/engine/core-modules/admin-panel/dtos/update-workspace-feature-flag.input'; -import { UserLookup } from 'src/engine/core-modules/admin-panel/dtos/user-lookup.entity'; +import { UserLookup } from 'src/engine/core-modules/admin-panel/dtos/user-lookup.dto'; import { UserLookupInput } from 'src/engine/core-modules/admin-panel/dtos/user-lookup.input'; import { VersionInfoDTO } from 'src/engine/core-modules/admin-panel/dtos/version-info.dto'; import { JobStateEnum } from 'src/engine/core-modules/admin-panel/enums/job-state.enum'; diff --git a/packages/twenty-server/src/engine/core-modules/admin-panel/admin-panel.service.ts b/packages/twenty-server/src/engine/core-modules/admin-panel/admin-panel.service.ts index b0c7632b3e6..079e3dbb3e4 100644 --- a/packages/twenty-server/src/engine/core-modules/admin-panel/admin-panel.service.ts +++ b/packages/twenty-server/src/engine/core-modules/admin-panel/admin-panel.service.ts @@ -10,7 +10,7 @@ import * as z from 'zod'; import { type ConfigVariableDTO } from 'src/engine/core-modules/admin-panel/dtos/config-variable.dto'; import { type ConfigVariablesGroupDataDTO } from 'src/engine/core-modules/admin-panel/dtos/config-variables-group.dto'; import { type ConfigVariablesOutput } from 'src/engine/core-modules/admin-panel/dtos/config-variables.output'; -import { type UserLookup } from 'src/engine/core-modules/admin-panel/dtos/user-lookup.entity'; +import { type UserLookup } from 'src/engine/core-modules/admin-panel/dtos/user-lookup.dto'; import { type VersionInfoDTO } from 'src/engine/core-modules/admin-panel/dtos/version-info.dto'; import { AuthException, @@ -18,13 +18,13 @@ import { } from 'src/engine/core-modules/auth/auth.exception'; import { WorkspaceDomainsService } from 'src/engine/core-modules/domain/workspace-domains/services/workspace-domains.service'; import { FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum'; -import { type FeatureFlag } from 'src/engine/core-modules/feature-flag/feature-flag.entity'; +import { type FeatureFlagEntity } from 'src/engine/core-modules/feature-flag/feature-flag.entity'; import { FileService } from 'src/engine/core-modules/file/services/file.service'; import { type ConfigVariables } from 'src/engine/core-modules/twenty-config/config-variables'; import { CONFIG_VARIABLES_GROUP_METADATA } from 'src/engine/core-modules/twenty-config/constants/config-variables-group-metadata'; import { type ConfigVariablesGroup } from 'src/engine/core-modules/twenty-config/enums/config-variables-group.enum'; import { TwentyConfigService } from 'src/engine/core-modules/twenty-config/twenty-config.service'; -import { User } from 'src/engine/core-modules/user/user.entity'; +import { UserEntity } from 'src/engine/core-modules/user/user.entity'; import { userValidator } from 'src/engine/core-modules/user/user.validate'; @Injectable() @@ -33,8 +33,8 @@ export class AdminPanelService { private readonly twentyConfigService: TwentyConfigService, private readonly workspaceDomainsService: WorkspaceDomainsService, private readonly fileService: FileService, - @InjectRepository(User) - private readonly userRepository: Repository, + @InjectRepository(UserEntity) + private readonly userRepository: Repository, ) {} async userLookup(userIdentifier: string): Promise { @@ -103,7 +103,7 @@ export class AdminPanelService { userWorkspace.workspace.featureFlags?.find( (flag) => flag.key === key, )?.value ?? false, - })) as FeatureFlag[], + })) as FeatureFlagEntity[], })), }; } diff --git a/packages/twenty-server/src/engine/core-modules/admin-panel/dtos/impersonate.output.ts b/packages/twenty-server/src/engine/core-modules/admin-panel/dtos/impersonate.output.ts index a42cfafe688..9076513934e 100644 --- a/packages/twenty-server/src/engine/core-modules/admin-panel/dtos/impersonate.output.ts +++ b/packages/twenty-server/src/engine/core-modules/admin-panel/dtos/impersonate.output.ts @@ -1,6 +1,6 @@ import { Field, ObjectType } from '@nestjs/graphql'; -import { AuthToken } from 'src/engine/core-modules/auth/dto/token.entity'; +import { AuthToken } from 'src/engine/core-modules/auth/dto/auth-token.dto'; import { WorkspaceUrlsAndIdDTO } from 'src/engine/core-modules/workspace/dtos/workspace-subdomain-id.dto'; @ObjectType('ImpersonateOutput') diff --git a/packages/twenty-server/src/engine/core-modules/admin-panel/dtos/user-lookup.entity.ts b/packages/twenty-server/src/engine/core-modules/admin-panel/dtos/user-lookup.dto.ts similarity index 87% rename from packages/twenty-server/src/engine/core-modules/admin-panel/dtos/user-lookup.entity.ts rename to packages/twenty-server/src/engine/core-modules/admin-panel/dtos/user-lookup.dto.ts index 85ca1f579e2..45a4f46fbf4 100644 --- a/packages/twenty-server/src/engine/core-modules/admin-panel/dtos/user-lookup.entity.ts +++ b/packages/twenty-server/src/engine/core-modules/admin-panel/dtos/user-lookup.dto.ts @@ -1,7 +1,7 @@ import { Field, ObjectType } from '@nestjs/graphql'; import { UUIDScalarType } from 'src/engine/api/graphql/workspace-schema-builder/graphql-types/scalars'; -import { FeatureFlag } from 'src/engine/core-modules/feature-flag/feature-flag.entity'; +import { FeatureFlagEntity } from 'src/engine/core-modules/feature-flag/feature-flag.entity'; import { WorkspaceUrlsDTO } from 'src/engine/core-modules/workspace/dtos/workspace-urls.dto'; @ObjectType('UserInfo') @@ -42,8 +42,8 @@ class WorkspaceInfoDTO { @Field(() => [UserInfoDTO]) users: UserInfoDTO[]; - @Field(() => [FeatureFlag]) - featureFlags: FeatureFlag[]; + @Field(() => [FeatureFlagEntity]) + featureFlags: FeatureFlagEntity[]; } @ObjectType('UserLookup') diff --git a/packages/twenty-server/src/engine/core-modules/ai/controllers/ai.controller.ts b/packages/twenty-server/src/engine/core-modules/ai/controllers/ai.controller.ts index a0efc1f629f..e01fefa4288 100644 --- a/packages/twenty-server/src/engine/core-modules/ai/controllers/ai.controller.ts +++ b/packages/twenty-server/src/engine/core-modules/ai/controllers/ai.controller.ts @@ -16,7 +16,7 @@ import { AiModelRegistryService } from 'src/engine/core-modules/ai/services/ai-m import { AiService } from 'src/engine/core-modules/ai/services/ai.service'; import { FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum'; import { FeatureFlagService } from 'src/engine/core-modules/feature-flag/services/feature-flag.service'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { AuthWorkspace } from 'src/engine/decorators/auth/auth-workspace.decorator'; import { WorkspaceAuthGuard } from 'src/engine/guards/workspace-auth.guard'; @@ -39,7 +39,7 @@ export class AiController { @Post() async chat( @Body() request: ChatRequest, - @AuthWorkspace() workspace: Workspace, + @AuthWorkspace() workspace: WorkspaceEntity, @Res() res: Response, ) { const isAiEnabled = await this.featureFlagService.isFeatureEnabled( diff --git a/packages/twenty-server/src/engine/core-modules/ai/controllers/mcp.controller.spec.ts b/packages/twenty-server/src/engine/core-modules/ai/controllers/mcp.controller.spec.ts index 89d3a7881b2..5db8cca9365 100644 --- a/packages/twenty-server/src/engine/core-modules/ai/controllers/mcp.controller.spec.ts +++ b/packages/twenty-server/src/engine/core-modules/ai/controllers/mcp.controller.spec.ts @@ -2,7 +2,7 @@ import { Test, type TestingModule } from '@nestjs/testing'; import { McpService } from 'src/engine/core-modules/ai/services/mcp.service'; import { type JsonRpc } from 'src/engine/core-modules/ai/dtos/json-rpc'; -import { type Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { type WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { MCP_SERVER_METADATA } from 'src/engine/core-modules/ai/constants/mcp.const'; import { AccessTokenService } from 'src/engine/core-modules/auth/token/services/access-token.service'; import { WorkspaceCacheStorageService } from 'src/engine/workspace-cache-storage/workspace-cache-storage.service'; @@ -52,7 +52,7 @@ describe('McpController', () => { }); describe('handleMcpCore', () => { - const mockWorkspace = { id: 'workspace-1' } as Workspace; + const mockWorkspace = { id: 'workspace-1' } as WorkspaceEntity; const mockUserWorkspaceId = 'user-workspace-1'; const mockApiKey = 'api-key-1'; diff --git a/packages/twenty-server/src/engine/core-modules/ai/controllers/mcp.controller.ts b/packages/twenty-server/src/engine/core-modules/ai/controllers/mcp.controller.ts index b5ea7533722..479393e2845 100644 --- a/packages/twenty-server/src/engine/core-modules/ai/controllers/mcp.controller.ts +++ b/packages/twenty-server/src/engine/core-modules/ai/controllers/mcp.controller.ts @@ -8,7 +8,7 @@ import { ValidationPipe, } from '@nestjs/common'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { AuthWorkspace } from 'src/engine/decorators/auth/auth-workspace.decorator'; import { WorkspaceAuthGuard } from 'src/engine/guards/workspace-auth.guard'; import { AuthApiKey } from 'src/engine/decorators/auth/auth-api-key.decorator'; @@ -34,7 +34,7 @@ export class McpController { ) async handleMcpCore( @Body() body: JsonRpc, - @AuthWorkspace() workspace: Workspace, + @AuthWorkspace() workspace: WorkspaceEntity, @AuthApiKey() apiKey: string | undefined, @AuthUserWorkspaceId() userWorkspaceId: string | undefined, ) { diff --git a/packages/twenty-server/src/engine/core-modules/ai/services/__tests__/mcp.service.spec.ts b/packages/twenty-server/src/engine/core-modules/ai/services/__tests__/mcp.service.spec.ts index bc07ae76623..482457d7678 100644 --- a/packages/twenty-server/src/engine/core-modules/ai/services/__tests__/mcp.service.spec.ts +++ b/packages/twenty-server/src/engine/core-modules/ai/services/__tests__/mcp.service.spec.ts @@ -10,7 +10,7 @@ import { McpService } from 'src/engine/core-modules/ai/services/mcp.service'; import { ToolService } from 'src/engine/core-modules/ai/services/tool.service'; import { FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum'; import { FeatureFlagService } from 'src/engine/core-modules/feature-flag/services/feature-flag.service'; -import { type Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { type WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { ADMIN_ROLE_LABEL } from 'src/engine/metadata-modules/permissions/constants/admin-role-label.constants'; import { RoleEntity } from 'src/engine/metadata-modules/role/role.entity'; import { UserRoleService } from 'src/engine/metadata-modules/user-role/user-role.service'; @@ -21,7 +21,7 @@ describe('McpService', () => { let toolService: jest.Mocked; let userRoleService: jest.Mocked; - const mockWorkspace = { id: 'workspace-1' } as Workspace; + const mockWorkspace = { id: 'workspace-1' } as WorkspaceEntity; const mockUserWorkspaceId = 'user-workspace-1'; const mockRoleId = 'role-1'; const mockAdminRoleId = 'admin-role-1'; diff --git a/packages/twenty-server/src/engine/core-modules/ai/services/mcp.service.ts b/packages/twenty-server/src/engine/core-modules/ai/services/mcp.service.ts index 2fa9272f5e4..44644228489 100644 --- a/packages/twenty-server/src/engine/core-modules/ai/services/mcp.service.ts +++ b/packages/twenty-server/src/engine/core-modules/ai/services/mcp.service.ts @@ -10,7 +10,7 @@ import { ToolService } from 'src/engine/core-modules/ai/services/tool.service'; import { wrapJsonRpcResponse } from 'src/engine/core-modules/ai/utils/wrap-jsonrpc-response.util'; import { FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum'; import { FeatureFlagService } from 'src/engine/core-modules/feature-flag/services/feature-flag.service'; -import { type Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { RoleEntity } from 'src/engine/metadata-modules/role/role.entity'; import { UserRoleService } from 'src/engine/metadata-modules/user-role/user-role.service'; import { ADMIN_ROLE } from 'src/engine/workspace-manager/workspace-sync-metadata/standard-roles/roles/admin-role'; @@ -99,7 +99,11 @@ export class McpService { workspace, userWorkspaceId, apiKey, - }: { workspace: Workspace; userWorkspaceId?: string; apiKey?: string }, + }: { + workspace: WorkspaceEntity; + userWorkspaceId?: string; + apiKey?: string; + }, ): Promise> { try { await this.checkAiEnabled(workspace.id); diff --git a/packages/twenty-server/src/engine/core-modules/api-key/api-key-role.service.spec.ts b/packages/twenty-server/src/engine/core-modules/api-key/api-key-role.service.spec.ts index 1dcd2f6b42d..15418f067f3 100644 --- a/packages/twenty-server/src/engine/core-modules/api-key/api-key-role.service.spec.ts +++ b/packages/twenty-server/src/engine/core-modules/api-key/api-key-role.service.spec.ts @@ -3,12 +3,12 @@ import { getDataSourceToken, getRepositoryToken } from '@nestjs/typeorm'; import { In } from 'typeorm'; -import { ApiKey } from 'src/engine/core-modules/api-key/api-key.entity'; +import { ApiKeyEntity } from 'src/engine/core-modules/api-key/api-key.entity'; import { ApiKeyException, ApiKeyExceptionCode, } from 'src/engine/core-modules/api-key/api-key.exception'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { RoleTargetsEntity } from 'src/engine/metadata-modules/role/role-targets.entity'; import { RoleEntity } from 'src/engine/metadata-modules/role/role.entity'; import { WorkspacePermissionsCacheService } from 'src/engine/metadata-modules/workspace-permissions-cache/workspace-permissions-cache.service'; @@ -29,7 +29,7 @@ describe('ApiKeyRoleService', () => { const mockRoleId = 'role-789'; const mockNewRoleId = 'role-999'; - const mockApiKey: ApiKey = { + const mockApiKey: ApiKeyEntity = { id: mockApiKeyId, name: 'Test API Key', expiresAt: new Date('2025-12-31'), @@ -124,11 +124,11 @@ describe('ApiKeyRoleService', () => { useValue: mockRoleRepository, }, { - provide: getRepositoryToken(Workspace), + provide: getRepositoryToken(WorkspaceEntity), useValue: mockWorkspaceRepository, }, { - provide: getRepositoryToken(ApiKey), + provide: getRepositoryToken(ApiKeyEntity), useValue: mockApiKeyRepository, }, { diff --git a/packages/twenty-server/src/engine/core-modules/api-key/api-key-role.service.ts b/packages/twenty-server/src/engine/core-modules/api-key/api-key-role.service.ts index c06bb730333..e6c10a18221 100644 --- a/packages/twenty-server/src/engine/core-modules/api-key/api-key-role.service.ts +++ b/packages/twenty-server/src/engine/core-modules/api-key/api-key-role.service.ts @@ -10,7 +10,7 @@ import { Repository, } from 'typeorm'; -import { ApiKey } from 'src/engine/core-modules/api-key/api-key.entity'; +import { ApiKeyEntity } from 'src/engine/core-modules/api-key/api-key.entity'; import { ApiKeyException, ApiKeyExceptionCode, @@ -29,8 +29,8 @@ export class ApiKeyRoleService { @InjectRepository(RoleEntity) private readonly roleRepository: Repository, - @InjectRepository(ApiKey) - private readonly apiKeyRepository: Repository, + @InjectRepository(ApiKeyEntity) + private readonly apiKeyRepository: Repository, private readonly workspacePermissionsCacheService: WorkspacePermissionsCacheService, @InjectDataSource() private readonly dataSource: DataSource, @@ -208,7 +208,7 @@ export class ApiKeyRoleService { public async getApiKeysAssignedToRole( roleId: string, workspaceId: string, - ): Promise { + ): Promise { const roleTargets = await this.roleTargetsRepository.find({ where: { roleId, diff --git a/packages/twenty-server/src/engine/core-modules/api-key/api-key.entity.ts b/packages/twenty-server/src/engine/core-modules/api-key/api-key.entity.ts index b8dba2e521a..24c30620ac3 100644 --- a/packages/twenty-server/src/engine/core-modules/api-key/api-key.entity.ts +++ b/packages/twenty-server/src/engine/core-modules/api-key/api-key.entity.ts @@ -14,12 +14,12 @@ import { } from 'typeorm'; import { UUIDScalarType } from 'src/engine/api/graphql/workspace-schema-builder/graphql-types/scalars'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; @Index('IDX_API_KEY_WORKSPACE_ID', ['workspaceId']) @Entity({ name: 'apiKey', schema: 'core' }) @ObjectType('ApiKey') -export class ApiKey { +export class ApiKeyEntity { @IDField(() => UUIDScalarType) @PrimaryGeneratedColumn('uuid') id: string; @@ -48,10 +48,10 @@ export class ApiKey { @UpdateDateColumn({ type: 'timestamptz' }) updatedAt: Date; - @Field(() => Workspace) - @ManyToOne(() => Workspace, (workspace) => workspace.apiKeys, { + @Field(() => WorkspaceEntity) + @ManyToOne(() => WorkspaceEntity, (workspace) => workspace.apiKeys, { onDelete: 'CASCADE', }) @JoinColumn({ name: 'workspaceId' }) - workspace: Relation; + workspace: Relation; } diff --git a/packages/twenty-server/src/engine/core-modules/api-key/api-key.module.ts b/packages/twenty-server/src/engine/core-modules/api-key/api-key.module.ts index c81e72e5da0..4d1cc054c2e 100644 --- a/packages/twenty-server/src/engine/core-modules/api-key/api-key.module.ts +++ b/packages/twenty-server/src/engine/core-modules/api-key/api-key.module.ts @@ -2,13 +2,13 @@ import { Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; import { ApiKeyRoleService } from 'src/engine/core-modules/api-key/api-key-role.service'; -import { ApiKey } from 'src/engine/core-modules/api-key/api-key.entity'; +import { ApiKeyEntity } from 'src/engine/core-modules/api-key/api-key.entity'; import { ApiKeyResolver } from 'src/engine/core-modules/api-key/api-key.resolver'; import { ApiKeyService } from 'src/engine/core-modules/api-key/api-key.service'; import { TokenModule } from 'src/engine/core-modules/auth/token/token.module'; import { FeatureFlagModule } from 'src/engine/core-modules/feature-flag/feature-flag.module'; import { JwtModule } from 'src/engine/core-modules/jwt/jwt.module'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { PermissionsModule } from 'src/engine/metadata-modules/permissions/permissions.module'; import { RoleTargetsEntity } from 'src/engine/metadata-modules/role/role-targets.entity'; import { RoleEntity } from 'src/engine/metadata-modules/role/role.entity'; @@ -20,10 +20,10 @@ import { ApiKeyController } from './controllers/api-key.controller'; @Module({ imports: [ TypeOrmModule.forFeature([ - ApiKey, + ApiKeyEntity, RoleTargetsEntity, RoleEntity, - Workspace, + WorkspaceEntity, ]), JwtModule, TokenModule, diff --git a/packages/twenty-server/src/engine/core-modules/api-key/api-key.resolver.ts b/packages/twenty-server/src/engine/core-modules/api-key/api-key.resolver.ts index 359a4a2567f..6badc71d15c 100644 --- a/packages/twenty-server/src/engine/core-modules/api-key/api-key.resolver.ts +++ b/packages/twenty-server/src/engine/core-modules/api-key/api-key.resolver.ts @@ -15,12 +15,12 @@ import { ApiKeyException, ApiKeyExceptionCode, } from 'src/engine/core-modules/api-key/api-key.exception'; -import { CreateApiKeyDTO } from 'src/engine/core-modules/api-key/dtos/create-api-key.dto'; -import { GetApiKeyDTO } from 'src/engine/core-modules/api-key/dtos/get-api-key.dto'; -import { RevokeApiKeyDTO } from 'src/engine/core-modules/api-key/dtos/revoke-api-key.dto'; -import { UpdateApiKeyDTO } from 'src/engine/core-modules/api-key/dtos/update-api-key.dto'; +import { CreateApiKeyInput } from 'src/engine/core-modules/api-key/dtos/create-api-key.dto'; +import { GetApiKeyInput } from 'src/engine/core-modules/api-key/dtos/get-api-key.dto'; +import { RevokeApiKeyInput } from 'src/engine/core-modules/api-key/dtos/revoke-api-key.dto'; +import { UpdateApiKeyInput } from 'src/engine/core-modules/api-key/dtos/update-api-key.dto'; import { apiKeyGraphqlApiExceptionHandler } from 'src/engine/core-modules/api-key/utils/api-key-graphql-api-exception-handler.util'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { AuthWorkspace } from 'src/engine/decorators/auth/auth-workspace.decorator'; import { SettingsPermissionsGuard } from 'src/engine/guards/settings-permissions.guard'; import { WorkspaceAuthGuard } from 'src/engine/guards/workspace-auth.guard'; @@ -28,10 +28,10 @@ import { PermissionFlagType } from 'src/engine/metadata-modules/permissions/cons import { RoleDTO } from 'src/engine/metadata-modules/role/dtos/role.dto'; import { ApiKeyRoleService } from './api-key-role.service'; -import { ApiKey } from './api-key.entity'; +import { ApiKeyEntity } from './api-key.entity'; import { ApiKeyService } from './api-key.service'; -@Resolver(() => ApiKey) +@Resolver(() => ApiKeyEntity) @UseGuards( WorkspaceAuthGuard, SettingsPermissionsGuard(PermissionFlagType.API_KEYS_AND_WEBHOOKS), @@ -42,16 +42,18 @@ export class ApiKeyResolver { private readonly apiKeyRoleService: ApiKeyRoleService, ) {} - @Query(() => [ApiKey]) - async apiKeys(@AuthWorkspace() workspace: Workspace): Promise { + @Query(() => [ApiKeyEntity]) + async apiKeys( + @AuthWorkspace() workspace: WorkspaceEntity, + ): Promise { return this.apiKeyService.findActiveByWorkspaceId(workspace.id); } - @Query(() => ApiKey, { nullable: true }) + @Query(() => ApiKeyEntity, { nullable: true }) async apiKey( - @Args('input') input: GetApiKeyDTO, - @AuthWorkspace() workspace: Workspace, - ): Promise { + @Args('input') input: GetApiKeyInput, + @AuthWorkspace() workspace: WorkspaceEntity, + ): Promise { try { const apiKey = await this.apiKeyService.findById(input.id, workspace.id); @@ -66,11 +68,11 @@ export class ApiKeyResolver { } } - @Mutation(() => ApiKey) + @Mutation(() => ApiKeyEntity) async createApiKey( - @AuthWorkspace() workspace: Workspace, - @Args('input') input: CreateApiKeyDTO, - ): Promise { + @AuthWorkspace() workspace: WorkspaceEntity, + @Args('input') input: CreateApiKeyInput, + ): Promise { return this.apiKeyService.create({ name: input.name, expiresAt: new Date(input.expiresAt), @@ -80,12 +82,12 @@ export class ApiKeyResolver { }); } - @Mutation(() => ApiKey, { nullable: true }) + @Mutation(() => ApiKeyEntity, { nullable: true }) async updateApiKey( - @AuthWorkspace() workspace: Workspace, - @Args('input') input: UpdateApiKeyDTO, - ): Promise { - const updateData: QueryDeepPartialEntity = {}; + @AuthWorkspace() workspace: WorkspaceEntity, + @Args('input') input: UpdateApiKeyInput, + ): Promise { + const updateData: QueryDeepPartialEntity = {}; if (input.name !== undefined) updateData.name = input.name; if (input.expiresAt !== undefined) @@ -97,17 +99,17 @@ export class ApiKeyResolver { return this.apiKeyService.update(input.id, workspace.id, updateData); } - @Mutation(() => ApiKey, { nullable: true }) + @Mutation(() => ApiKeyEntity, { nullable: true }) async revokeApiKey( - @AuthWorkspace() workspace: Workspace, - @Args('input') input: RevokeApiKeyDTO, - ): Promise { + @AuthWorkspace() workspace: WorkspaceEntity, + @Args('input') input: RevokeApiKeyInput, + ): Promise { return this.apiKeyService.revoke(input.id, workspace.id); } @Mutation(() => Boolean) async assignRoleToApiKey( - @AuthWorkspace() workspace: Workspace, + @AuthWorkspace() workspace: WorkspaceEntity, @Args('apiKeyId', { type: () => UUIDScalarType }) apiKeyId: string, @Args('roleId', { type: () => UUIDScalarType }) roleId: string, ): Promise { @@ -127,8 +129,8 @@ export class ApiKeyResolver { @ResolveField(() => RoleDTO) async role( - @Parent() apiKey: ApiKey, - @AuthWorkspace() workspace: Workspace, + @Parent() apiKey: ApiKeyEntity, + @AuthWorkspace() workspace: WorkspaceEntity, ): Promise { const rolesMap = await this.apiKeyRoleService.getRolesByApiKeys({ apiKeyIds: [apiKey.id], diff --git a/packages/twenty-server/src/engine/core-modules/api-key/api-key.service.spec.ts b/packages/twenty-server/src/engine/core-modules/api-key/api-key.service.spec.ts index a331ca2a181..6da0d4d7c50 100644 --- a/packages/twenty-server/src/engine/core-modules/api-key/api-key.service.spec.ts +++ b/packages/twenty-server/src/engine/core-modules/api-key/api-key.service.spec.ts @@ -12,7 +12,7 @@ import { JwtTokenTypeEnum } from 'src/engine/core-modules/auth/types/auth-contex import { JwtWrapperService } from 'src/engine/core-modules/jwt/services/jwt-wrapper.service'; import { RoleTargetsEntity } from 'src/engine/metadata-modules/role/role-targets.entity'; -import { ApiKey } from './api-key.entity'; +import { ApiKeyEntity } from './api-key.entity'; import { ApiKeyService } from './api-key.service'; describe('ApiKeyService', () => { @@ -26,7 +26,7 @@ describe('ApiKeyService', () => { const mockWorkspaceId = 'workspace-123'; const mockApiKeyId = 'api-key-456'; - const mockApiKey: ApiKey = { + const mockApiKey: ApiKeyEntity = { id: mockApiKeyId, name: 'Test API Key', expiresAt: new Date('2025-12-31'), @@ -37,13 +37,13 @@ describe('ApiKeyService', () => { workspace: {} as any, }; - const mockRevokedApiKey: ApiKey = { + const mockRevokedApiKey: ApiKeyEntity = { ...mockApiKey, id: 'revoked-api-key', revokedAt: new Date('2024-06-01'), }; - const mockExpiredApiKey: ApiKey = { + const mockExpiredApiKey: ApiKeyEntity = { ...mockApiKey, id: 'expired-api-key', expiresAt: new Date('2024-01-01'), @@ -83,7 +83,7 @@ describe('ApiKeyService', () => { providers: [ ApiKeyService, { - provide: getRepositoryToken(ApiKey), + provide: getRepositoryToken(ApiKeyEntity), useValue: mockApiKeyRepository, }, { @@ -154,7 +154,7 @@ describe('ApiKeyService', () => { expect(mockDataSource.transaction).toHaveBeenCalled(); expect(mockManagerCreate).toHaveBeenCalledWith( - ApiKey, + ApiKeyEntity, expectedApiKeyFields, ); expect(mockManagerSave).toHaveBeenCalledWith(mockApiKey); diff --git a/packages/twenty-server/src/engine/core-modules/api-key/api-key.service.ts b/packages/twenty-server/src/engine/core-modules/api-key/api-key.service.ts index af0014db510..683cc7ec49a 100644 --- a/packages/twenty-server/src/engine/core-modules/api-key/api-key.service.ts +++ b/packages/twenty-server/src/engine/core-modules/api-key/api-key.service.ts @@ -6,20 +6,20 @@ import { DataSource, IsNull, Repository } from 'typeorm'; import { type QueryDeepPartialEntity } from 'typeorm/query-builder/QueryPartialEntity'; import { ApiKeyRoleService } from 'src/engine/core-modules/api-key/api-key-role.service'; -import { ApiKey } from 'src/engine/core-modules/api-key/api-key.entity'; +import { ApiKeyEntity } from 'src/engine/core-modules/api-key/api-key.entity'; import { ApiKeyException, ApiKeyExceptionCode, } from 'src/engine/core-modules/api-key/api-key.exception'; -import { type ApiKeyToken } from 'src/engine/core-modules/auth/dto/token.entity'; +import { type ApiKeyToken } from 'src/engine/core-modules/auth/dto/api-key-token.dto'; import { JwtTokenTypeEnum } from 'src/engine/core-modules/auth/types/auth-context.type'; import { JwtWrapperService } from 'src/engine/core-modules/jwt/services/jwt-wrapper.service'; @Injectable() export class ApiKeyService { constructor( - @InjectRepository(ApiKey) - private readonly apiKeyRepository: Repository, + @InjectRepository(ApiKeyEntity) + private readonly apiKeyRepository: Repository, private readonly jwtWrapperService: JwtWrapperService, private readonly apiKeyRoleService: ApiKeyRoleService, @InjectDataSource() @@ -27,13 +27,13 @@ export class ApiKeyService { ) {} async create( - apiKeyData: Partial & { roleId: string }, - ): Promise { + apiKeyData: Partial & { roleId: string }, + ): Promise { const { roleId, ...apiKeyFields } = apiKeyData; return await this.dataSource .transaction(async (manager) => { - const apiKey = manager.create(ApiKey, apiKeyFields); + const apiKey = manager.create(ApiKeyEntity, apiKeyFields); const savedApiKey = await manager.save(apiKey); await this.apiKeyRoleService.assignRoleToApiKeyWithManager(manager, { @@ -51,7 +51,10 @@ export class ApiKeyService { }); } - async findById(id: string, workspaceId: string): Promise { + async findById( + id: string, + workspaceId: string, + ): Promise { return await this.apiKeyRepository.findOne({ where: { id, @@ -60,7 +63,7 @@ export class ApiKeyService { }); } - async findByWorkspaceId(workspaceId: string): Promise { + async findByWorkspaceId(workspaceId: string): Promise { return await this.apiKeyRepository.find({ where: { workspaceId, @@ -68,7 +71,7 @@ export class ApiKeyService { }); } - async findActiveByWorkspaceId(workspaceId: string): Promise { + async findActiveByWorkspaceId(workspaceId: string): Promise { return await this.apiKeyRepository.find({ where: { workspaceId, @@ -80,8 +83,8 @@ export class ApiKeyService { async update( id: string, workspaceId: string, - updateData: QueryDeepPartialEntity, - ): Promise { + updateData: QueryDeepPartialEntity, + ): Promise { const apiKey = await this.findById(id, workspaceId); if (!apiKey) { @@ -93,13 +96,13 @@ export class ApiKeyService { return this.findById(id, workspaceId); } - async revoke(id: string, workspaceId: string): Promise { + async revoke(id: string, workspaceId: string): Promise { return await this.update(id, workspaceId, { revokedAt: new Date(), }); } - async validateApiKey(id: string, workspaceId: string): Promise { + async validateApiKey(id: string, workspaceId: string): Promise { const apiKey = await this.findById(id, workspaceId); if (!apiKey) { @@ -174,15 +177,15 @@ export class ApiKeyService { return { token }; } - isExpired(apiKey: ApiKey): boolean { + isExpired(apiKey: ApiKeyEntity): boolean { return new Date() > apiKey.expiresAt; } - isRevoked(apiKey: ApiKey): boolean { + isRevoked(apiKey: ApiKeyEntity): boolean { return !!apiKey.revokedAt; } - isActive(apiKey: ApiKey): boolean { + isActive(apiKey: ApiKeyEntity): boolean { return !this.isRevoked(apiKey) && !this.isExpired(apiKey); } } diff --git a/packages/twenty-server/src/engine/core-modules/api-key/controllers/api-key.controller.ts b/packages/twenty-server/src/engine/core-modules/api-key/controllers/api-key.controller.ts index 41fef912e0d..af51187d96b 100644 --- a/packages/twenty-server/src/engine/core-modules/api-key/controllers/api-key.controller.ts +++ b/packages/twenty-server/src/engine/core-modules/api-key/controllers/api-key.controller.ts @@ -13,11 +13,11 @@ import { import { type QueryDeepPartialEntity } from 'typeorm/query-builder/QueryPartialEntity'; import { RestApiExceptionFilter } from 'src/engine/api/rest/rest-api-exception.filter'; -import { type ApiKey } from 'src/engine/core-modules/api-key/api-key.entity'; +import { type ApiKeyEntity } from 'src/engine/core-modules/api-key/api-key.entity'; import { ApiKeyService } from 'src/engine/core-modules/api-key/api-key.service'; -import { CreateApiKeyDTO } from 'src/engine/core-modules/api-key/dtos/create-api-key.dto'; -import { UpdateApiKeyDTO } from 'src/engine/core-modules/api-key/dtos/update-api-key.dto'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { CreateApiKeyInput } from 'src/engine/core-modules/api-key/dtos/create-api-key.dto'; +import { UpdateApiKeyInput } from 'src/engine/core-modules/api-key/dtos/update-api-key.dto'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { AuthWorkspace } from 'src/engine/decorators/auth/auth-workspace.decorator'; import { JwtAuthGuard } from 'src/engine/guards/jwt-auth.guard'; import { WorkspaceAuthGuard } from 'src/engine/guards/workspace-auth.guard'; @@ -33,23 +33,25 @@ export class ApiKeyController { constructor(private readonly apiKeyService: ApiKeyService) {} @Get() - async findAll(@AuthWorkspace() workspace: Workspace): Promise { + async findAll( + @AuthWorkspace() workspace: WorkspaceEntity, + ): Promise { return this.apiKeyService.findActiveByWorkspaceId(workspace.id); } @Get(':id') async findOne( @Param('id') id: string, - @AuthWorkspace() workspace: Workspace, - ): Promise { + @AuthWorkspace() workspace: WorkspaceEntity, + ): Promise { return this.apiKeyService.findById(id, workspace.id); } @Post() async create( - @Body() createApiKeyDto: CreateApiKeyDTO, - @AuthWorkspace() workspace: Workspace, - ): Promise { + @Body() createApiKeyDto: CreateApiKeyInput, + @AuthWorkspace() workspace: WorkspaceEntity, + ): Promise { return this.apiKeyService.create({ name: createApiKeyDto.name, expiresAt: new Date(createApiKeyDto.expiresAt), @@ -64,10 +66,10 @@ export class ApiKeyController { @Patch(':id') async update( @Param('id') id: string, - @Body() updateApiKeyDto: UpdateApiKeyDTO, - @AuthWorkspace() workspace: Workspace, - ): Promise { - const updateData: QueryDeepPartialEntity = {}; + @Body() updateApiKeyDto: UpdateApiKeyInput, + @AuthWorkspace() workspace: WorkspaceEntity, + ): Promise { + const updateData: QueryDeepPartialEntity = {}; if (updateApiKeyDto.name !== undefined) updateData.name = updateApiKeyDto.name; @@ -85,8 +87,8 @@ export class ApiKeyController { @Delete(':id') async remove( @Param('id') id: string, - @AuthWorkspace() workspace: Workspace, - ): Promise { + @AuthWorkspace() workspace: WorkspaceEntity, + ): Promise { return this.apiKeyService.revoke(id, workspace.id); } } diff --git a/packages/twenty-server/src/engine/core-modules/api-key/dtos/create-api-key.dto.ts b/packages/twenty-server/src/engine/core-modules/api-key/dtos/create-api-key.dto.ts index 6fd960b4d59..4715f40c47f 100644 --- a/packages/twenty-server/src/engine/core-modules/api-key/dtos/create-api-key.dto.ts +++ b/packages/twenty-server/src/engine/core-modules/api-key/dtos/create-api-key.dto.ts @@ -11,7 +11,7 @@ import { import { UUIDScalarType } from 'src/engine/api/graphql/workspace-schema-builder/graphql-types/scalars'; @InputType() -export class CreateApiKeyDTO { +export class CreateApiKeyInput { @Field() @IsNotEmpty() @IsString() diff --git a/packages/twenty-server/src/engine/core-modules/api-key/dtos/get-api-key.dto.ts b/packages/twenty-server/src/engine/core-modules/api-key/dtos/get-api-key.dto.ts index 5fe6e942bec..54fa219c424 100644 --- a/packages/twenty-server/src/engine/core-modules/api-key/dtos/get-api-key.dto.ts +++ b/packages/twenty-server/src/engine/core-modules/api-key/dtos/get-api-key.dto.ts @@ -5,7 +5,7 @@ import { IsNotEmpty, IsUUID } from 'class-validator'; import { UUIDScalarType } from 'src/engine/api/graphql/workspace-schema-builder/graphql-types/scalars'; @InputType() -export class GetApiKeyDTO { +export class GetApiKeyInput { @Field(() => UUIDScalarType) @IsNotEmpty() @IsUUID() diff --git a/packages/twenty-server/src/engine/core-modules/api-key/dtos/revoke-api-key.dto.ts b/packages/twenty-server/src/engine/core-modules/api-key/dtos/revoke-api-key.dto.ts index bf2acd16500..13f763135ae 100644 --- a/packages/twenty-server/src/engine/core-modules/api-key/dtos/revoke-api-key.dto.ts +++ b/packages/twenty-server/src/engine/core-modules/api-key/dtos/revoke-api-key.dto.ts @@ -5,7 +5,7 @@ import { IsNotEmpty, IsUUID } from 'class-validator'; import { UUIDScalarType } from 'src/engine/api/graphql/workspace-schema-builder/graphql-types/scalars'; @InputType() -export class RevokeApiKeyDTO { +export class RevokeApiKeyInput { @Field(() => UUIDScalarType) @IsNotEmpty() @IsUUID() diff --git a/packages/twenty-server/src/engine/core-modules/api-key/dtos/update-api-key.dto.ts b/packages/twenty-server/src/engine/core-modules/api-key/dtos/update-api-key.dto.ts index af479bb5344..be6f0b0d789 100644 --- a/packages/twenty-server/src/engine/core-modules/api-key/dtos/update-api-key.dto.ts +++ b/packages/twenty-server/src/engine/core-modules/api-key/dtos/update-api-key.dto.ts @@ -11,7 +11,7 @@ import { import { UUIDScalarType } from 'src/engine/api/graphql/workspace-schema-builder/graphql-types/scalars'; @InputType() -export class UpdateApiKeyDTO { +export class UpdateApiKeyInput { @Field(() => UUIDScalarType) @IsNotEmpty() @IsUUID() diff --git a/packages/twenty-server/src/engine/core-modules/app-token/app-token.auto-resolver-opts.ts b/packages/twenty-server/src/engine/core-modules/app-token/app-token.auto-resolver-opts.ts index f0c38a19845..2bb422f43ab 100644 --- a/packages/twenty-server/src/engine/core-modules/app-token/app-token.auto-resolver-opts.ts +++ b/packages/twenty-server/src/engine/core-modules/app-token/app-token.auto-resolver-opts.ts @@ -4,7 +4,7 @@ import { type ReadResolverOpts, } from '@ptc-org/nestjs-query-graphql'; -import { AppToken } from 'src/engine/core-modules/app-token/app-token.entity'; +import { AppTokenEntity } from 'src/engine/core-modules/app-token/app-token.entity'; import { CreateAppTokenInput } from 'src/engine/core-modules/app-token/dtos/create-app-token.input'; import { WorkspaceAuthGuard } from 'src/engine/guards/workspace-auth.guard'; @@ -20,8 +20,8 @@ export const appTokenAutoResolverOpts: AutoResolverOpts< PagingStrategies >[] = [ { - EntityClass: AppToken, - DTOClass: AppToken, + EntityClass: AppTokenEntity, + DTOClass: AppTokenEntity, CreateDTOClass: CreateAppTokenInput, enableTotalCount: true, pagingStrategy: PagingStrategies.CURSOR, diff --git a/packages/twenty-server/src/engine/core-modules/app-token/app-token.entity.ts b/packages/twenty-server/src/engine/core-modules/app-token/app-token.entity.ts index 3bf5590aa4c..8cbca7b3ecf 100644 --- a/packages/twenty-server/src/engine/core-modules/app-token/app-token.entity.ts +++ b/packages/twenty-server/src/engine/core-modules/app-token/app-token.entity.ts @@ -17,8 +17,8 @@ import { import { UUIDScalarType } from 'src/engine/api/graphql/workspace-schema-builder/graphql-types/scalars'; import { BeforeCreateOneAppToken } from 'src/engine/core-modules/app-token/hooks/before-create-one-app-token.hook'; -import { User } from 'src/engine/core-modules/user/user.entity'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { UserEntity } from 'src/engine/core-modules/user/user.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; export enum AppTokenType { RefreshToken = 'REFRESH_TOKEN', @@ -30,27 +30,27 @@ export enum AppTokenType { } @Entity({ name: 'appToken', schema: 'core' }) -@ObjectType() +@ObjectType('AppToken') @BeforeCreateOne(BeforeCreateOneAppToken) -export class AppToken { +export class AppTokenEntity { @IDField(() => UUIDScalarType) @PrimaryGeneratedColumn('uuid') id: string; - @ManyToOne(() => User, (user) => user.appTokens, { + @ManyToOne(() => UserEntity, (user) => user.appTokens, { onDelete: 'CASCADE', }) @JoinColumn({ name: 'userId' }) - user: Relation; + user: Relation; @Column({ nullable: true }) userId: string | null; - @ManyToOne(() => Workspace, (workspace) => workspace.appTokens, { + @ManyToOne(() => WorkspaceEntity, (workspace) => workspace.appTokens, { onDelete: 'CASCADE', }) @JoinColumn({ name: 'workspaceId' }) - workspace: Relation; + workspace: Relation; @Column({ nullable: true }) workspaceId: string; diff --git a/packages/twenty-server/src/engine/core-modules/app-token/app-token.module.ts b/packages/twenty-server/src/engine/core-modules/app-token/app-token.module.ts index 04ce163588c..3a3508af2e0 100644 --- a/packages/twenty-server/src/engine/core-modules/app-token/app-token.module.ts +++ b/packages/twenty-server/src/engine/core-modules/app-token/app-token.module.ts @@ -3,14 +3,14 @@ import { Module } from '@nestjs/common'; import { NestjsQueryGraphQLModule } from '@ptc-org/nestjs-query-graphql'; import { NestjsQueryTypeOrmModule } from '@ptc-org/nestjs-query-typeorm'; -import { AppToken } from 'src/engine/core-modules/app-token/app-token.entity'; +import { AppTokenEntity } from 'src/engine/core-modules/app-token/app-token.entity'; import { appTokenAutoResolverOpts } from 'src/engine/core-modules/app-token/app-token.auto-resolver-opts'; import { AppTokenService } from 'src/engine/core-modules/app-token/services/app-token.service'; @Module({ imports: [ NestjsQueryGraphQLModule.forFeature({ - imports: [NestjsQueryTypeOrmModule.forFeature([AppToken])], + imports: [NestjsQueryTypeOrmModule.forFeature([AppTokenEntity])], services: [AppTokenService], resolvers: appTokenAutoResolverOpts, }), diff --git a/packages/twenty-server/src/engine/core-modules/app-token/hooks/before-create-one-app-token.hook.ts b/packages/twenty-server/src/engine/core-modules/app-token/hooks/before-create-one-app-token.hook.ts index 34c6a6bc56b..7c8a6b7b8be 100644 --- a/packages/twenty-server/src/engine/core-modules/app-token/hooks/before-create-one-app-token.hook.ts +++ b/packages/twenty-server/src/engine/core-modules/app-token/hooks/before-create-one-app-token.hook.ts @@ -4,9 +4,9 @@ import { } from '@ptc-org/nestjs-query-graphql'; import { v4 as uuidv4 } from 'uuid'; -import { type AppToken } from 'src/engine/core-modules/app-token/app-token.entity'; +import { type AppTokenEntity } from 'src/engine/core-modules/app-token/app-token.entity'; -export class BeforeCreateOneAppToken +export class BeforeCreateOneAppToken implements BeforeCreateOneHook { async run( diff --git a/packages/twenty-server/src/engine/core-modules/app-token/services/app-token.service.spec.ts b/packages/twenty-server/src/engine/core-modules/app-token/services/app-token.service.spec.ts index c6285823b8e..46aa43cdda7 100644 --- a/packages/twenty-server/src/engine/core-modules/app-token/services/app-token.service.spec.ts +++ b/packages/twenty-server/src/engine/core-modules/app-token/services/app-token.service.spec.ts @@ -2,7 +2,7 @@ import { Test, type TestingModule } from '@nestjs/testing'; import { getRepositoryToken } from '@nestjs/typeorm'; import { AppTokenService } from 'src/engine/core-modules/app-token/services/app-token.service'; -import { AppToken } from 'src/engine/core-modules/app-token/app-token.entity'; +import { AppTokenEntity } from 'src/engine/core-modules/app-token/app-token.entity'; describe('AppTokenService', () => { let service: AppTokenService; @@ -12,7 +12,7 @@ describe('AppTokenService', () => { providers: [ AppTokenService, { - provide: getRepositoryToken(AppToken), + provide: getRepositoryToken(AppTokenEntity), useValue: {}, }, ], diff --git a/packages/twenty-server/src/engine/core-modules/app-token/services/app-token.service.ts b/packages/twenty-server/src/engine/core-modules/app-token/services/app-token.service.ts index 6325d21db90..71d28fe8833 100644 --- a/packages/twenty-server/src/engine/core-modules/app-token/services/app-token.service.ts +++ b/packages/twenty-server/src/engine/core-modules/app-token/services/app-token.service.ts @@ -1,5 +1,5 @@ import { TypeOrmQueryService } from '@ptc-org/nestjs-query-typeorm'; -import { type AppToken } from 'src/engine/core-modules/app-token/app-token.entity'; +import { type AppTokenEntity } from 'src/engine/core-modules/app-token/app-token.entity'; -export class AppTokenService extends TypeOrmQueryService {} +export class AppTokenService extends TypeOrmQueryService {} diff --git a/packages/twenty-server/src/engine/core-modules/application/application-sync.service.ts b/packages/twenty-server/src/engine/core-modules/application/application-sync.service.ts index 29155652a7d..5769405898c 100644 --- a/packages/twenty-server/src/engine/core-modules/application/application-sync.service.ts +++ b/packages/twenty-server/src/engine/core-modules/application/application-sync.service.ts @@ -15,7 +15,7 @@ import { ServerlessFunctionManifest, ServerlessFunctionTriggerManifest, } from 'src/engine/core-modules/application/types/application.types'; -import { ApplicationVariableService } from 'src/engine/core-modules/applicationVariable/application-variable.service'; +import { ApplicationVariableEntityService } from 'src/engine/core-modules/applicationVariable/application-variable.service'; import { AgentService } from 'src/engine/metadata-modules/agent/agent.service'; import { CronTriggerV2Service } from 'src/engine/metadata-modules/cron-trigger/services/cron-trigger-v2.service'; import { FlatCronTrigger } from 'src/engine/metadata-modules/cron-trigger/types/flat-cron-trigger.type'; @@ -42,7 +42,7 @@ export class ApplicationSyncService { constructor( private readonly applicationService: ApplicationService, - private readonly applicationVariableService: ApplicationVariableService, + private readonly applicationVariableService: ApplicationVariableEntityService, private readonly serverlessFunctionLayerService: ServerlessFunctionLayerService, private readonly objectMetadataServiceV2: ObjectMetadataServiceV2, private readonly serverlessFunctionV2Service: ServerlessFunctionV2Service, @@ -125,10 +125,12 @@ export class ApplicationSyncService { workspaceId, }); - await this.applicationVariableService.upsertManyApplicationVariables({ - env: manifest.env, - applicationId: application.id, - }); + await this.applicationVariableService.upsertManyApplicationVariableEntitys( + { + env: manifest.env, + applicationId: application.id, + }, + ); return application; } @@ -147,7 +149,7 @@ export class ApplicationSyncService { version: manifest.version, }); - await this.applicationVariableService.upsertManyApplicationVariables({ + await this.applicationVariableService.upsertManyApplicationVariableEntitys({ env: manifest.env, applicationId: application.id, }); diff --git a/packages/twenty-server/src/engine/core-modules/application/application.entity.ts b/packages/twenty-server/src/engine/core-modules/application/application.entity.ts index da49bcd2692..15eb6341e00 100644 --- a/packages/twenty-server/src/engine/core-modules/application/application.entity.ts +++ b/packages/twenty-server/src/engine/core-modules/application/application.entity.ts @@ -1,3 +1,5 @@ +import { ObjectType } from '@nestjs/graphql'; + import { Column, CreateDateColumn, @@ -12,13 +14,14 @@ import { UpdateDateColumn, } from 'typeorm'; -import { ApplicationVariable } from 'src/engine/core-modules/applicationVariable/application-variable.entity'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { ApplicationVariableEntity } from 'src/engine/core-modules/applicationVariable/application-variable.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { AgentEntity } from 'src/engine/metadata-modules/agent/agent.entity'; import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity'; import { ServerlessFunctionEntity } from 'src/engine/metadata-modules/serverless-function/serverless-function.entity'; @Entity({ name: 'application', schema: 'core' }) +@ObjectType('Application') @Index('IDX_APPLICATION_WORKSPACE_ID', ['workspaceId']) @Index( 'IDX_APPLICATION_UNIVERSAL_IDENTIFIER_WORKSPACE_ID_UNIQUE', @@ -56,11 +59,11 @@ export class ApplicationEntity { @Column({ nullable: false, type: 'uuid' }) serverlessFunctionLayerId: string; - @ManyToOne(() => Workspace, { + @ManyToOne(() => WorkspaceEntity, { onDelete: 'CASCADE', }) @JoinColumn({ name: 'workspaceId' }) - workspace: Relation; + workspace: Relation; @OneToMany(() => AgentEntity, (agent) => agent.application, { onDelete: 'CASCADE', @@ -82,13 +85,13 @@ export class ApplicationEntity { objects: Relation; @OneToMany( - () => ApplicationVariable, + () => ApplicationVariableEntity, (applicationVariable) => applicationVariable.application, { onDelete: 'CASCADE', }, ) - applicationVariables: Relation; + applicationVariables: Relation; @CreateDateColumn({ type: 'timestamptz' }) createdAt: Date; diff --git a/packages/twenty-server/src/engine/core-modules/application/application.module.ts b/packages/twenty-server/src/engine/core-modules/application/application.module.ts index 125a14c5e24..1f6f5ee7076 100644 --- a/packages/twenty-server/src/engine/core-modules/application/application.module.ts +++ b/packages/twenty-server/src/engine/core-modules/application/application.module.ts @@ -5,8 +5,8 @@ import { ApplicationSyncService } from 'src/engine/core-modules/application/appl import { ApplicationEntity } from 'src/engine/core-modules/application/application.entity'; import { ApplicationResolver } from 'src/engine/core-modules/application/application.resolver'; import { ApplicationService } from 'src/engine/core-modules/application/application.service'; -import { ApplicationVariableModule } from 'src/engine/core-modules/applicationVariable/application-variable.module'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { ApplicationVariableEntityModule } from 'src/engine/core-modules/applicationVariable/application-variable.module'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { AgentEntity } from 'src/engine/metadata-modules/agent/agent.entity'; import { AgentModule } from 'src/engine/metadata-modules/agent/agent.module'; import { CronTriggerModule } from 'src/engine/metadata-modules/cron-trigger/cron-trigger.module'; @@ -21,12 +21,12 @@ import { WorkspaceMigrationV2Module } from 'src/engine/workspace-manager/workspa @Module({ imports: [ - TypeOrmModule.forFeature([ApplicationEntity, AgentEntity, Workspace]), + TypeOrmModule.forFeature([ApplicationEntity, AgentEntity, WorkspaceEntity]), WorkspaceManyOrAllFlatEntityMapsCacheModule, ObjectMetadataModule, DataSourceModule, AgentModule, - ApplicationVariableModule, + ApplicationVariableEntityModule, ServerlessFunctionLayerModule, ServerlessFunctionModule, DatabaseEventTriggerModule, diff --git a/packages/twenty-server/src/engine/core-modules/application/application.resolver.ts b/packages/twenty-server/src/engine/core-modules/application/application.resolver.ts index a3b614c1ac4..d2f37b238a0 100644 --- a/packages/twenty-server/src/engine/core-modules/application/application.resolver.ts +++ b/packages/twenty-server/src/engine/core-modules/application/application.resolver.ts @@ -9,7 +9,7 @@ import { ApplicationDTO } from 'src/engine/core-modules/application/dtos/applica import { ApplicationInput } from 'src/engine/core-modules/application/dtos/application.input'; import { DeleteApplicationInput } from 'src/engine/core-modules/application/dtos/deleteApplication.input'; import { FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { AuthWorkspace } from 'src/engine/decorators/auth/auth-workspace.decorator'; import { RequireFeatureFlag } from 'src/engine/guards/feature-flag.guard'; import { WorkspaceAuthGuard } from 'src/engine/guards/workspace-auth.guard'; @@ -25,7 +25,9 @@ export class ApplicationResolver { @Query(() => [ApplicationDTO]) @RequireFeatureFlag(FeatureFlagKey.IS_APPLICATION_ENABLED) - async findManyApplications(@AuthWorkspace() { id: workspaceId }: Workspace) { + async findManyApplications( + @AuthWorkspace() { id: workspaceId }: WorkspaceEntity, + ) { return this.applicationService.findManyApplications(workspaceId); } @@ -33,7 +35,7 @@ export class ApplicationResolver { @RequireFeatureFlag(FeatureFlagKey.IS_APPLICATION_ENABLED) async findOneApplication( @Args('id', { type: () => UUIDScalarType }) id: string, - @AuthWorkspace() { id: workspaceId }: Workspace, + @AuthWorkspace() { id: workspaceId }: WorkspaceEntity, ) { return await this.applicationService.findOneApplication(id, workspaceId); } @@ -41,7 +43,7 @@ export class ApplicationResolver { @Mutation(() => Boolean) async syncApplication( @Args() { manifest, packageJson, yarnLock }: ApplicationInput, - @AuthWorkspace() { id: workspaceId }: Workspace, + @AuthWorkspace() { id: workspaceId }: WorkspaceEntity, ) { await this.applicationSyncService.synchronizeFromManifest({ workspaceId, @@ -56,7 +58,7 @@ export class ApplicationResolver { @Mutation(() => Boolean) async deleteApplication( @Args() { packageJson }: DeleteApplicationInput, - @AuthWorkspace() { id: workspaceId }: Workspace, + @AuthWorkspace() { id: workspaceId }: WorkspaceEntity, ) { await this.applicationSyncService.deleteApplication({ applicationUniversalIdentifier: packageJson.universalIdentifier, diff --git a/packages/twenty-server/src/engine/core-modules/application/dtos/application.dto.ts b/packages/twenty-server/src/engine/core-modules/application/dtos/application.dto.ts index 2f569c8587f..72c2add1e57 100644 --- a/packages/twenty-server/src/engine/core-modules/application/dtos/application.dto.ts +++ b/packages/twenty-server/src/engine/core-modules/application/dtos/application.dto.ts @@ -6,7 +6,7 @@ import { UUIDScalarType } from 'src/engine/api/graphql/workspace-schema-builder/ import { ServerlessFunctionDTO } from 'src/engine/metadata-modules/serverless-function/dtos/serverless-function.dto'; import { AgentDTO } from 'src/engine/metadata-modules/agent/dtos/agent.dto'; import { ObjectMetadataDTO } from 'src/engine/metadata-modules/object-metadata/dtos/object-metadata.dto'; -import { ApplicationVariableDTO } from 'src/engine/core-modules/applicationVariable/dtos/application-variable.dto'; +import { ApplicationVariableEntityDTO } from 'src/engine/core-modules/applicationVariable/dtos/application-variable.dto'; @ObjectType('Application') export class ApplicationDTO { @@ -36,6 +36,6 @@ export class ApplicationDTO { @Field(() => [ObjectMetadataDTO]) objects: ObjectMetadataDTO[]; - @Field(() => [ApplicationVariableDTO]) - applicationVariables: ApplicationVariableDTO[]; + @Field(() => [ApplicationVariableEntityDTO]) + applicationVariables: ApplicationVariableEntityDTO[]; } diff --git a/packages/twenty-server/src/engine/core-modules/applicationVariable/application-variable-exception-filter.ts b/packages/twenty-server/src/engine/core-modules/applicationVariable/application-variable-exception-filter.ts index 46caa0532b9..4d52e37850f 100644 --- a/packages/twenty-server/src/engine/core-modules/applicationVariable/application-variable-exception-filter.ts +++ b/packages/twenty-server/src/engine/core-modules/applicationVariable/application-variable-exception-filter.ts @@ -3,16 +3,18 @@ import { Catch, ExceptionFilter } from '@nestjs/common'; import { assertUnreachable } from 'twenty-shared/utils'; import { - ApplicationVariableException, - ApplicationVariableExceptionCode, + ApplicationVariableEntityException, + ApplicationVariableEntityExceptionCode, } from 'src/engine/core-modules/applicationVariable/application-variable.exception'; import { NotFoundError } from 'src/engine/core-modules/graphql/utils/graphql-errors.util'; -@Catch(ApplicationVariableException) -export class ApplicationVariableExceptionFilter implements ExceptionFilter { - catch(exception: ApplicationVariableException) { +@Catch(ApplicationVariableEntityException) +export class ApplicationVariableEntityExceptionFilter + implements ExceptionFilter +{ + catch(exception: ApplicationVariableEntityException) { switch (exception.code) { - case ApplicationVariableExceptionCode.APPLICATION_VARIABLE_NOT_FOUND: + case ApplicationVariableEntityExceptionCode.APPLICATION_VARIABLE_NOT_FOUND: throw new NotFoundError(exception); default: assertUnreachable(exception.code); diff --git a/packages/twenty-server/src/engine/core-modules/applicationVariable/application-variable.entity.ts b/packages/twenty-server/src/engine/core-modules/applicationVariable/application-variable.entity.ts index f01a0ed3867..1842b07e425 100644 --- a/packages/twenty-server/src/engine/core-modules/applicationVariable/application-variable.entity.ts +++ b/packages/twenty-server/src/engine/core-modules/applicationVariable/application-variable.entity.ts @@ -21,12 +21,12 @@ import { ApplicationEntity } from 'src/engine/core-modules/application/applicati name: 'applicationVariable', schema: 'core', }) -@ObjectType() +@ObjectType('ApplicationVariable') @Unique('IDX_APPLICATION_VARIABLE_KEY_APPLICATION_ID_UNIQUE', [ 'key', 'applicationId', ]) -export class ApplicationVariable { +export class ApplicationVariableEntity { @IDField(() => UUIDScalarType) @PrimaryGeneratedColumn('uuid') id: string; diff --git a/packages/twenty-server/src/engine/core-modules/applicationVariable/application-variable.exception.ts b/packages/twenty-server/src/engine/core-modules/applicationVariable/application-variable.exception.ts index 56acf524029..eee6d2d5395 100644 --- a/packages/twenty-server/src/engine/core-modules/applicationVariable/application-variable.exception.ts +++ b/packages/twenty-server/src/engine/core-modules/applicationVariable/application-variable.exception.ts @@ -1,7 +1,7 @@ import { CustomException } from 'src/utils/custom-exception'; -export class ApplicationVariableException extends CustomException {} +export class ApplicationVariableEntityException extends CustomException {} -export enum ApplicationVariableExceptionCode { +export enum ApplicationVariableEntityExceptionCode { APPLICATION_VARIABLE_NOT_FOUND = 'APPLICATION_VARIABLE_NOT_FOUND', } diff --git a/packages/twenty-server/src/engine/core-modules/applicationVariable/application-variable.module.ts b/packages/twenty-server/src/engine/core-modules/applicationVariable/application-variable.module.ts index abdf78695e0..8b2de2750bc 100644 --- a/packages/twenty-server/src/engine/core-modules/applicationVariable/application-variable.module.ts +++ b/packages/twenty-server/src/engine/core-modules/applicationVariable/application-variable.module.ts @@ -2,13 +2,16 @@ import { Module } from '@nestjs/common'; import { NestjsQueryTypeOrmModule } from '@ptc-org/nestjs-query-typeorm'; -import { ApplicationVariable } from 'src/engine/core-modules/applicationVariable/application-variable.entity'; -import { ApplicationVariableService } from 'src/engine/core-modules/applicationVariable/application-variable.service'; -import { ApplicationVariableResolver } from 'src/engine/core-modules/applicationVariable/application-variable.resolver'; +import { ApplicationVariableEntity } from 'src/engine/core-modules/applicationVariable/application-variable.entity'; +import { ApplicationVariableEntityService } from 'src/engine/core-modules/applicationVariable/application-variable.service'; +import { ApplicationVariableEntityResolver } from 'src/engine/core-modules/applicationVariable/application-variable.resolver'; @Module({ - imports: [NestjsQueryTypeOrmModule.forFeature([ApplicationVariable])], - providers: [ApplicationVariableService, ApplicationVariableResolver], - exports: [ApplicationVariableService], + imports: [NestjsQueryTypeOrmModule.forFeature([ApplicationVariableEntity])], + providers: [ + ApplicationVariableEntityService, + ApplicationVariableEntityResolver, + ], + exports: [ApplicationVariableEntityService], }) -export class ApplicationVariableModule {} +export class ApplicationVariableEntityModule {} diff --git a/packages/twenty-server/src/engine/core-modules/applicationVariable/application-variable.resolver.ts b/packages/twenty-server/src/engine/core-modules/applicationVariable/application-variable.resolver.ts index 8f9a761bbf4..47a37235de1 100644 --- a/packages/twenty-server/src/engine/core-modules/applicationVariable/application-variable.resolver.ts +++ b/packages/twenty-server/src/engine/core-modules/applicationVariable/application-variable.resolver.ts @@ -2,21 +2,21 @@ import { UseFilters, UseGuards } from '@nestjs/common'; import { Args, Mutation, Resolver } from '@nestjs/graphql'; import { WorkspaceAuthGuard } from 'src/engine/guards/workspace-auth.guard'; -import { ApplicationVariableService } from 'src/engine/core-modules/applicationVariable/application-variable.service'; -import { UpdateApplicationVariableInput } from 'src/engine/core-modules/applicationVariable/dtos/update-application-variable.input'; -import { ApplicationVariableExceptionFilter } from 'src/engine/core-modules/applicationVariable/application-variable-exception-filter'; +import { ApplicationVariableEntityService } from 'src/engine/core-modules/applicationVariable/application-variable.service'; +import { UpdateApplicationVariableEntityInput } from 'src/engine/core-modules/applicationVariable/dtos/update-application-variable.input'; +import { ApplicationVariableEntityExceptionFilter } from 'src/engine/core-modules/applicationVariable/application-variable-exception-filter'; @UseGuards(WorkspaceAuthGuard) @Resolver() -@UseFilters(ApplicationVariableExceptionFilter) -export class ApplicationVariableResolver { +@UseFilters(ApplicationVariableEntityExceptionFilter) +export class ApplicationVariableEntityResolver { constructor( - private readonly applicationVariableService: ApplicationVariableService, + private readonly applicationVariableService: ApplicationVariableEntityService, ) {} @Mutation(() => Boolean) async updateOneApplicationVariable( - @Args() { key, value, applicationId }: UpdateApplicationVariableInput, + @Args() { key, value, applicationId }: UpdateApplicationVariableEntityInput, ) { await this.applicationVariableService.update({ key, value, applicationId }); diff --git a/packages/twenty-server/src/engine/core-modules/applicationVariable/application-variable.service.ts b/packages/twenty-server/src/engine/core-modules/applicationVariable/application-variable.service.ts index fad36cbf32e..b7d69dc10e0 100644 --- a/packages/twenty-server/src/engine/core-modules/applicationVariable/application-variable.service.ts +++ b/packages/twenty-server/src/engine/core-modules/applicationVariable/application-variable.service.ts @@ -3,20 +3,22 @@ import { InjectRepository } from '@nestjs/typeorm'; import { isDefined } from 'twenty-shared/utils'; import { In, Not, Repository } from 'typeorm'; -import { ApplicationVariable } from 'src/engine/core-modules/applicationVariable/application-variable.entity'; +import { ApplicationVariableEntity } from 'src/engine/core-modules/applicationVariable/application-variable.entity'; import { EnvManifest } from 'src/engine/core-modules/application/types/application.types'; -export class ApplicationVariableService { +export class ApplicationVariableEntityService { constructor( - @InjectRepository(ApplicationVariable) - private readonly applicationVariableRepository: Repository, + @InjectRepository(ApplicationVariableEntity) + private readonly applicationVariableRepository: Repository, ) {} async update({ key, value, applicationId, - }: Pick & { applicationId: string }) { + }: Pick & { + applicationId: string; + }) { await this.applicationVariableRepository.update( { key, applicationId }, { @@ -25,7 +27,7 @@ export class ApplicationVariableService { ); } - async upsertManyApplicationVariables({ + async upsertManyApplicationVariableEntitys({ env, applicationId, }: { diff --git a/packages/twenty-server/src/engine/core-modules/applicationVariable/dtos/application-variable.dto.ts b/packages/twenty-server/src/engine/core-modules/applicationVariable/dtos/application-variable.dto.ts index b6c3906730c..82e2ba30f8a 100644 --- a/packages/twenty-server/src/engine/core-modules/applicationVariable/dtos/application-variable.dto.ts +++ b/packages/twenty-server/src/engine/core-modules/applicationVariable/dtos/application-variable.dto.ts @@ -6,7 +6,7 @@ import { IDField } from '@ptc-org/nestjs-query-graphql'; import { UUIDScalarType } from 'src/engine/api/graphql/workspace-schema-builder/graphql-types/scalars'; @ObjectType('ApplicationVariable') -export class ApplicationVariableDTO { +export class ApplicationVariableEntityDTO { @IDField(() => UUIDScalarType) id: string; diff --git a/packages/twenty-server/src/engine/core-modules/applicationVariable/dtos/update-application-variable.input.ts b/packages/twenty-server/src/engine/core-modules/applicationVariable/dtos/update-application-variable.input.ts index be3edaa0c24..85f9bf220e4 100644 --- a/packages/twenty-server/src/engine/core-modules/applicationVariable/dtos/update-application-variable.input.ts +++ b/packages/twenty-server/src/engine/core-modules/applicationVariable/dtos/update-application-variable.input.ts @@ -3,7 +3,7 @@ import { ArgsType, Field } from '@nestjs/graphql'; import { UUIDScalarType } from 'src/engine/api/graphql/workspace-schema-builder/graphql-types/scalars'; @ArgsType() -export class UpdateApplicationVariableInput { +export class UpdateApplicationVariableEntityInput { @Field(() => String, { nullable: false }) key: string; diff --git a/packages/twenty-server/src/engine/core-modules/approved-access-domain/approved-access-domain.entity.ts b/packages/twenty-server/src/engine/core-modules/approved-access-domain/approved-access-domain.entity.ts index c8d73fef2e1..9b88a8b21df 100644 --- a/packages/twenty-server/src/engine/core-modules/approved-access-domain/approved-access-domain.entity.ts +++ b/packages/twenty-server/src/engine/core-modules/approved-access-domain/approved-access-domain.entity.ts @@ -13,15 +13,15 @@ import { import { Relation } from 'src/engine/workspace-manager/workspace-sync-metadata/interfaces/relation.interface'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; @Entity({ name: 'approvedAccessDomain', schema: 'core' }) -@ObjectType() +@ObjectType('ApprovedAccessDomain') @Unique('IDX_APPROVED_ACCESS_DOMAIN_DOMAIN_WORKSPACE_ID_UNIQUE', [ 'domain', 'workspaceId', ]) -export class ApprovedAccessDomain { +export class ApprovedAccessDomainEntity { @PrimaryGeneratedColumn('uuid') id: string; @@ -40,9 +40,13 @@ export class ApprovedAccessDomain { @Column() workspaceId: string; - @ManyToOne(() => Workspace, (workspace) => workspace.approvedAccessDomains, { - onDelete: 'CASCADE', - }) + @ManyToOne( + () => WorkspaceEntity, + (workspace) => workspace.approvedAccessDomains, + { + onDelete: 'CASCADE', + }, + ) @JoinColumn({ name: 'workspaceId' }) - workspace: Relation; + workspace: Relation; } diff --git a/packages/twenty-server/src/engine/core-modules/approved-access-domain/approved-access-domain.module.ts b/packages/twenty-server/src/engine/core-modules/approved-access-domain/approved-access-domain.module.ts index 2e97bbd1046..50a4b8cc25d 100644 --- a/packages/twenty-server/src/engine/core-modules/approved-access-domain/approved-access-domain.module.ts +++ b/packages/twenty-server/src/engine/core-modules/approved-access-domain/approved-access-domain.module.ts @@ -2,7 +2,7 @@ import { Module } from '@nestjs/common'; import { NestjsQueryTypeOrmModule } from '@ptc-org/nestjs-query-typeorm'; -import { ApprovedAccessDomain } from 'src/engine/core-modules/approved-access-domain/approved-access-domain.entity'; +import { ApprovedAccessDomainEntity } from 'src/engine/core-modules/approved-access-domain/approved-access-domain.entity'; import { ApprovedAccessDomainResolver } from 'src/engine/core-modules/approved-access-domain/approved-access-domain.resolver'; import { ApprovedAccessDomainService } from 'src/engine/core-modules/approved-access-domain/services/approved-access-domain.service'; import { WorkspaceDomainsModule } from 'src/engine/core-modules/domain/workspace-domains/workspace-domains.module'; @@ -12,7 +12,7 @@ import { FileModule } from 'src/engine/core-modules/file/file.module'; imports: [ WorkspaceDomainsModule, FileModule, - NestjsQueryTypeOrmModule.forFeature([ApprovedAccessDomain]), + NestjsQueryTypeOrmModule.forFeature([ApprovedAccessDomainEntity]), ], exports: [ApprovedAccessDomainService], providers: [ApprovedAccessDomainService, ApprovedAccessDomainResolver], diff --git a/packages/twenty-server/src/engine/core-modules/approved-access-domain/approved-access-domain.resolver.ts b/packages/twenty-server/src/engine/core-modules/approved-access-domain/approved-access-domain.resolver.ts index 8bc967d67d6..410cc98ccfb 100644 --- a/packages/twenty-server/src/engine/core-modules/approved-access-domain/approved-access-domain.resolver.ts +++ b/packages/twenty-server/src/engine/core-modules/approved-access-domain/approved-access-domain.resolver.ts @@ -2,20 +2,20 @@ import { UseFilters, UseGuards, UsePipes } from '@nestjs/common'; import { Args, Mutation, Query, Resolver } from '@nestjs/graphql'; import { ApprovedAccessDomainExceptionFilter } from 'src/engine/core-modules/approved-access-domain/approved-access-domain-exception-filter'; -import { ApprovedAccessDomain } from 'src/engine/core-modules/approved-access-domain/dtos/approved-access-domain.dto'; +import { ApprovedAccessDomainDTO } from 'src/engine/core-modules/approved-access-domain/dtos/approved-access-domain.dto'; import { CreateApprovedAccessDomainInput } from 'src/engine/core-modules/approved-access-domain/dtos/create-approved-access.domain.input'; import { DeleteApprovedAccessDomainInput } from 'src/engine/core-modules/approved-access-domain/dtos/delete-approved-access-domain.input'; import { ValidateApprovedAccessDomainInput } from 'src/engine/core-modules/approved-access-domain/dtos/validate-approved-access-domain.input'; import { ApprovedAccessDomainService } from 'src/engine/core-modules/approved-access-domain/services/approved-access-domain.service'; import { PreventNestToAutoLogGraphqlErrorsFilter } from 'src/engine/core-modules/graphql/filters/prevent-nest-to-auto-log-graphql-errors.filter'; import { ResolverValidationPipe } from 'src/engine/core-modules/graphql/pipes/resolver-validation.pipe'; -import { User } from 'src/engine/core-modules/user/user.entity'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { UserEntity } from 'src/engine/core-modules/user/user.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { AuthUser } from 'src/engine/decorators/auth/auth-user.decorator'; import { AuthWorkspace } from 'src/engine/decorators/auth/auth-workspace.decorator'; import { WorkspaceAuthGuard } from 'src/engine/guards/workspace-auth.guard'; import { TwentyORMGlobalManager } from 'src/engine/twenty-orm/twenty-orm-global.manager'; -import { type WorkspaceMemberWorkspaceEntity } from 'src/modules/workspace-member/standard-objects/workspace-member.workspace-entity'; +import { WorkspaceMemberWorkspaceEntity } from 'src/modules/workspace-member/standard-objects/workspace-member.workspace-entity'; @UseGuards(WorkspaceAuthGuard) @UsePipes(ResolverValidationPipe) @@ -30,12 +30,12 @@ export class ApprovedAccessDomainResolver { private readonly approvedAccessDomainService: ApprovedAccessDomainService, ) {} - @Mutation(() => ApprovedAccessDomain) + @Mutation(() => ApprovedAccessDomainDTO) async createApprovedAccessDomain( @Args('input') { domain, email }: CreateApprovedAccessDomainInput, - @AuthWorkspace() currentWorkspace: Workspace, - @AuthUser() currentUser: User, - ): Promise { + @AuthWorkspace() currentWorkspace: WorkspaceEntity, + @AuthUser() currentUser: UserEntity, + ): Promise { const workspaceMemberRepository = await this.twentyORMGlobalManager.getRepositoryForWorkspace( currentWorkspace.id, @@ -59,7 +59,7 @@ export class ApprovedAccessDomainResolver { @Mutation(() => Boolean) async deleteApprovedAccessDomain( @Args('input') { id }: DeleteApprovedAccessDomainInput, - @AuthWorkspace() currentWorkspace: Workspace, + @AuthWorkspace() currentWorkspace: WorkspaceEntity, ): Promise { await this.approvedAccessDomainService.deleteApprovedAccessDomain( currentWorkspace, @@ -69,24 +69,24 @@ export class ApprovedAccessDomainResolver { return true; } - @Mutation(() => ApprovedAccessDomain) + @Mutation(() => ApprovedAccessDomainDTO) async validateApprovedAccessDomain( @Args('input') { validationToken, approvedAccessDomainId, }: ValidateApprovedAccessDomainInput, - ): Promise { + ): Promise { return await this.approvedAccessDomainService.validateApprovedAccessDomain({ validationToken, approvedAccessDomainId, }); } - @Query(() => [ApprovedAccessDomain]) + @Query(() => [ApprovedAccessDomainDTO]) async getApprovedAccessDomains( - @AuthWorkspace() currentWorkspace: Workspace, - ): Promise> { + @AuthWorkspace() currentWorkspace: WorkspaceEntity, + ): Promise> { return await this.approvedAccessDomainService.getApprovedAccessDomains( currentWorkspace, ); diff --git a/packages/twenty-server/src/engine/core-modules/approved-access-domain/approved-access-domain.validate.ts b/packages/twenty-server/src/engine/core-modules/approved-access-domain/approved-access-domain.validate.ts index 7ec7b48dda3..33b0b97729f 100644 --- a/packages/twenty-server/src/engine/core-modules/approved-access-domain/approved-access-domain.validate.ts +++ b/packages/twenty-server/src/engine/core-modules/approved-access-domain/approved-access-domain.validate.ts @@ -1,19 +1,19 @@ import { isDefined } from 'twenty-shared/utils'; import { type CustomException } from 'src/utils/custom-exception'; -import { type ApprovedAccessDomain } from 'src/engine/core-modules/approved-access-domain/approved-access-domain.entity'; +import { type ApprovedAccessDomainEntity } from 'src/engine/core-modules/approved-access-domain/approved-access-domain.entity'; import { ApprovedAccessDomainException, ApprovedAccessDomainExceptionCode, } from 'src/engine/core-modules/approved-access-domain/approved-access-domain.exception'; const assertIsDefinedOrThrow = ( - approvedAccessDomain: ApprovedAccessDomain | undefined | null, + approvedAccessDomain: ApprovedAccessDomainEntity | undefined | null, exceptionToThrow: CustomException = new ApprovedAccessDomainException( 'Approved access domain not found', ApprovedAccessDomainExceptionCode.APPROVED_ACCESS_DOMAIN_NOT_FOUND, ), -): asserts approvedAccessDomain is ApprovedAccessDomain => { +): asserts approvedAccessDomain is ApprovedAccessDomainEntity => { if (!isDefined(approvedAccessDomain)) { throw exceptionToThrow; } diff --git a/packages/twenty-server/src/engine/core-modules/approved-access-domain/dtos/approved-access-domain.dto.ts b/packages/twenty-server/src/engine/core-modules/approved-access-domain/dtos/approved-access-domain.dto.ts index 3ac69836962..42aed394167 100644 --- a/packages/twenty-server/src/engine/core-modules/approved-access-domain/dtos/approved-access-domain.dto.ts +++ b/packages/twenty-server/src/engine/core-modules/approved-access-domain/dtos/approved-access-domain.dto.ts @@ -5,7 +5,7 @@ import { IDField } from '@ptc-org/nestjs-query-graphql'; import { UUIDScalarType } from 'src/engine/api/graphql/workspace-schema-builder/graphql-types/scalars'; @ObjectType('ApprovedAccessDomain') -export class ApprovedAccessDomain { +export class ApprovedAccessDomainDTO { @IDField(() => UUIDScalarType) id: string; diff --git a/packages/twenty-server/src/engine/core-modules/approved-access-domain/services/approved-access-domain.service.ts b/packages/twenty-server/src/engine/core-modules/approved-access-domain/services/approved-access-domain.service.ts index 6986f063bb0..83d2185b254 100644 --- a/packages/twenty-server/src/engine/core-modules/approved-access-domain/services/approved-access-domain.service.ts +++ b/packages/twenty-server/src/engine/core-modules/approved-access-domain/services/approved-access-domain.service.ts @@ -10,7 +10,7 @@ import { SettingsPath } from 'twenty-shared/types'; import { getSettingsPath } from 'twenty-shared/utils'; import { Repository } from 'typeorm'; -import { ApprovedAccessDomain as ApprovedAccessDomainEntity } from 'src/engine/core-modules/approved-access-domain/approved-access-domain.entity'; +import { ApprovedAccessDomainEntity as ApprovedAccessDomainEntity } from 'src/engine/core-modules/approved-access-domain/approved-access-domain.entity'; import { ApprovedAccessDomainException, ApprovedAccessDomainExceptionCode, @@ -20,8 +20,8 @@ import { WorkspaceDomainsService } from 'src/engine/core-modules/domain/workspac import { EmailService } from 'src/engine/core-modules/email/email.service'; import { FileService } from 'src/engine/core-modules/file/services/file.service'; import { TwentyConfigService } from 'src/engine/core-modules/twenty-config/twenty-config.service'; -import { type Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; -import { type WorkspaceMemberWorkspaceEntity } from 'src/modules/workspace-member/standard-objects/workspace-member.workspace-entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceMemberWorkspaceEntity } from 'src/modules/workspace-member/standard-objects/workspace-member.workspace-entity'; import { isWorkDomain } from 'src/utils/is-work-email'; @Injectable() @@ -38,7 +38,7 @@ export class ApprovedAccessDomainService { async sendApprovedAccessDomainValidationEmail( sender: WorkspaceMemberWorkspaceEntity, to: string, - workspace: Workspace, + workspace: WorkspaceEntity, approvedAccessDomain: ApprovedAccessDomainEntity, ) { if (approvedAccessDomain.isValidated) { @@ -104,7 +104,9 @@ export class ApprovedAccessDomainService { }); } - private generateUniqueHash(approvedAccessDomain: ApprovedAccessDomainEntity) { + private generateUniqueHash( + approvedAccessDomain: ApprovedAccessDomainEntity, + ): string { return crypto .createHash('sha256') .update( @@ -159,7 +161,7 @@ export class ApprovedAccessDomainService { async createApprovedAccessDomain( domain: string, - inWorkspace: Workspace, + inWorkspace: WorkspaceEntity, fromWorkspaceMember: WorkspaceMemberWorkspaceEntity, emailToValidateDomain: string, ): Promise { @@ -203,7 +205,7 @@ export class ApprovedAccessDomainService { } async deleteApprovedAccessDomain( - workspace: Workspace, + workspace: WorkspaceEntity, approvedAccessDomainId: string, ) { const approvedAccessDomain = @@ -219,7 +221,7 @@ export class ApprovedAccessDomainService { }); } - async getApprovedAccessDomains(workspace: Workspace) { + async getApprovedAccessDomains(workspace: WorkspaceEntity) { return await this.approvedAccessDomainRepository.find({ where: { workspaceId: workspace.id, diff --git a/packages/twenty-server/src/engine/core-modules/approved-access-domain/services/approved-access-domain.spec.ts b/packages/twenty-server/src/engine/core-modules/approved-access-domain/services/approved-access-domain.spec.ts index b544701ccbb..6d2489258f5 100644 --- a/packages/twenty-server/src/engine/core-modules/approved-access-domain/services/approved-access-domain.spec.ts +++ b/packages/twenty-server/src/engine/core-modules/approved-access-domain/services/approved-access-domain.spec.ts @@ -5,7 +5,7 @@ import { SettingsPath } from 'twenty-shared/types'; import { getSettingsPath } from 'twenty-shared/utils'; import { type DeleteResult, type Repository } from 'typeorm'; -import { ApprovedAccessDomain } from 'src/engine/core-modules/approved-access-domain/approved-access-domain.entity'; +import { ApprovedAccessDomainEntity } from 'src/engine/core-modules/approved-access-domain/approved-access-domain.entity'; import { ApprovedAccessDomainException, ApprovedAccessDomainExceptionCode, @@ -14,7 +14,7 @@ import { WorkspaceDomainsService } from 'src/engine/core-modules/domain/workspac import { EmailService } from 'src/engine/core-modules/email/email.service'; import { FileService } from 'src/engine/core-modules/file/services/file.service'; import { TwentyConfigService } from 'src/engine/core-modules/twenty-config/twenty-config.service'; -import { type Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { type WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { type WorkspaceMemberWorkspaceEntity } from 'src/modules/workspace-member/standard-objects/workspace-member.workspace-entity'; import { ApprovedAccessDomainService } from './approved-access-domain.service'; @@ -32,7 +32,7 @@ jest.mock('@react-email/render', () => ({ describe('ApprovedAccessDomainService', () => { let service: ApprovedAccessDomainService; - let approvedAccessDomainRepository: Repository; + let approvedAccessDomainRepository: Repository; let emailService: EmailService; let twentyConfigService: TwentyConfigService; let workspaceDomainsService: WorkspaceDomainsService; @@ -42,7 +42,7 @@ describe('ApprovedAccessDomainService', () => { providers: [ ApprovedAccessDomainService, { - provide: getRepositoryToken(ApprovedAccessDomain), + provide: getRepositoryToken(ApprovedAccessDomainEntity), useValue: { delete: jest.fn(), findOneBy: jest.fn(), @@ -83,7 +83,7 @@ describe('ApprovedAccessDomainService', () => { ApprovedAccessDomainService, ); approvedAccessDomainRepository = module.get( - getRepositoryToken(ApprovedAccessDomain), + getRepositoryToken(ApprovedAccessDomainEntity), ); emailService = module.get(EmailService); twentyConfigService = module.get(TwentyConfigService); @@ -99,7 +99,7 @@ describe('ApprovedAccessDomainService', () => { id: 'workspace-id', customDomain: null, isCustomDomainEnabled: false, - } as Workspace; + } as WorkspaceEntity; const fromUser = { userEmail: 'user@custom-domain.com', } as WorkspaceMemberWorkspaceEntity; @@ -113,7 +113,7 @@ describe('ApprovedAccessDomainService', () => { jest .spyOn(approvedAccessDomainRepository, 'save') .mockResolvedValue( - expectedApprovedAccessDomain as unknown as ApprovedAccessDomain, + expectedApprovedAccessDomain as unknown as ApprovedAccessDomainEntity, ); jest @@ -139,7 +139,7 @@ describe('ApprovedAccessDomainService', () => { await expect( service.createApprovedAccessDomain( 'gmail.com', - { id: 'workspace-id' } as Workspace, + { id: 'workspace-id' } as WorkspaceEntity, { userEmail: 'user@gmail.com', } as WorkspaceMemberWorkspaceEntity, @@ -157,12 +157,14 @@ describe('ApprovedAccessDomainService', () => { describe('deleteApprovedAccessDomain', () => { it('should delete an approved access domain successfully', async () => { - const workspace: Workspace = { id: 'workspace-id' } as Workspace; + const workspace: WorkspaceEntity = { + id: 'workspace-id', + } as WorkspaceEntity; const approvedAccessDomainId = 'approved-access-domain-id'; const approvedAccessDomainEntity = { id: approvedAccessDomainId, workspaceId: workspace.id, - } as ApprovedAccessDomain; + } as ApprovedAccessDomainEntity; jest .spyOn(approvedAccessDomainRepository, 'findOneBy') @@ -186,7 +188,9 @@ describe('ApprovedAccessDomainService', () => { }); it('should throw an error if the approved access domain does not exist', async () => { - const workspace: Workspace = { id: 'workspace-id' } as Workspace; + const workspace: WorkspaceEntity = { + id: 'workspace-id', + } as WorkspaceEntity; const approvedAccessDomainId = 'approved-access-domain-id'; jest @@ -209,13 +213,13 @@ describe('ApprovedAccessDomainService', () => { it('should throw an exception if the approved access domain is already validated', async () => { const approvedAccessDomainId = 'approved-access-domain-id'; const sender = {} as WorkspaceMemberWorkspaceEntity; - const workspace = {} as Workspace; + const workspace = {} as WorkspaceEntity; const email = 'validator@example.com'; const approvedAccessDomain = { id: approvedAccessDomainId, isValidated: true, - } as ApprovedAccessDomain; + } as ApprovedAccessDomainEntity; jest .spyOn(approvedAccessDomainRepository, 'findOneBy') @@ -239,13 +243,13 @@ describe('ApprovedAccessDomainService', () => { it('should throw an exception if the email does not match the approved access domain', async () => { const approvedAccessDomainId = 'approved-access-domain-id'; const sender = {} as WorkspaceMemberWorkspaceEntity; - const workspace = {} as Workspace; + const workspace = {} as WorkspaceEntity; const email = 'validator@different.com'; const approvedAccessDomain = { id: approvedAccessDomainId, isValidated: false, domain: 'example.com', - } as ApprovedAccessDomain; + } as ApprovedAccessDomainEntity; jest .spyOn(approvedAccessDomainRepository, 'findOneBy') @@ -275,12 +279,12 @@ describe('ApprovedAccessDomainService', () => { const workspace = { displayName: 'Test Workspace', logo: '/logo.png', - } as Workspace; + } as WorkspaceEntity; const email = 'validator@custom-domain.com'; const approvedAccessDomain = { isValidated: false, domain: 'custom-domain.com', - } as ApprovedAccessDomain; + } as ApprovedAccessDomainEntity; jest .spyOn(approvedAccessDomainRepository, 'findOneBy') @@ -328,7 +332,7 @@ describe('ApprovedAccessDomainService', () => { id: approvedAccessDomainId, domain: 'example.com', isValidated: false, - } as ApprovedAccessDomain; + } as ApprovedAccessDomainEntity; jest .spyOn(approvedAccessDomainRepository, 'findOneBy') @@ -379,7 +383,7 @@ describe('ApprovedAccessDomainService', () => { id: approvedAccessDomainId, domain: 'example.com', isValidated: false, - } as ApprovedAccessDomain; + } as ApprovedAccessDomainEntity; jest .spyOn(approvedAccessDomainRepository, 'findOneBy') @@ -408,7 +412,7 @@ describe('ApprovedAccessDomainService', () => { id: approvedAccessDomainId, domain: 'example.com', isValidated: true, - } as ApprovedAccessDomain; + } as ApprovedAccessDomainEntity; jest .spyOn(approvedAccessDomainRepository, 'findOneBy') diff --git a/packages/twenty-server/src/engine/core-modules/audit/audit.resolver.spec.ts b/packages/twenty-server/src/engine/core-modules/audit/audit.resolver.spec.ts index 72130954536..1fef575dffd 100644 --- a/packages/twenty-server/src/engine/core-modules/audit/audit.resolver.spec.ts +++ b/packages/twenty-server/src/engine/core-modules/audit/audit.resolver.spec.ts @@ -4,8 +4,8 @@ import { AuditException, AuditExceptionCode, } from 'src/engine/core-modules/audit/audit.exception'; -import { type User } from 'src/engine/core-modules/user/user.entity'; -import { type Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { type UserEntity } from 'src/engine/core-modules/user/user.entity'; +import { type WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { AuditResolver } from './audit.resolver'; @@ -55,8 +55,8 @@ describe('AuditResolver', () => { }; const result = await resolver.trackAnalytics( input, - { id: 'workspace-1' } as Workspace, - { id: 'user-1' } as User, + { id: 'workspace-1' } as WorkspaceEntity, + { id: 'user-1' } as UserEntity, ); expect(auditService.createContext).toHaveBeenCalledWith({ @@ -85,8 +85,8 @@ describe('AuditResolver', () => { }; const result = await resolver.trackAnalytics( input, - { id: 'workspace-2' } as Workspace, - { id: 'user-2' } as User, + { id: 'workspace-2' } as WorkspaceEntity, + { id: 'user-2' } as UserEntity, ); expect(auditService.createContext).toHaveBeenCalledWith({ @@ -120,8 +120,8 @@ describe('AuditResolver', () => { const result = await resolver.createObjectEvent( input, - { id: 'workspace-3' } as Workspace, - { id: 'user-3' } as User, + { id: 'workspace-3' } as WorkspaceEntity, + { id: 'user-3' } as UserEntity, ); expect(auditService.createContext).toHaveBeenCalledWith({ diff --git a/packages/twenty-server/src/engine/core-modules/audit/audit.resolver.ts b/packages/twenty-server/src/engine/core-modules/audit/audit.resolver.ts index 45b617be9c0..dd42328faae 100644 --- a/packages/twenty-server/src/engine/core-modules/audit/audit.resolver.ts +++ b/packages/twenty-server/src/engine/core-modules/audit/audit.resolver.ts @@ -9,8 +9,8 @@ import { import { CreateObjectEventInput } from 'src/engine/core-modules/audit/dtos/create-object-event.input'; import { PreventNestToAutoLogGraphqlErrorsFilter } from 'src/engine/core-modules/graphql/filters/prevent-nest-to-auto-log-graphql-errors.filter'; import { ResolverValidationPipe } from 'src/engine/core-modules/graphql/pipes/resolver-validation.pipe'; -import { type User } from 'src/engine/core-modules/user/user.entity'; -import { type Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { UserEntity } from 'src/engine/core-modules/user/user.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { AuthUser } from 'src/engine/decorators/auth/auth-user.decorator'; import { AuthWorkspace } from 'src/engine/decorators/auth/auth-workspace.decorator'; import { PublicEndpointGuard } from 'src/engine/guards/public-endpoint.guard'; @@ -21,7 +21,7 @@ import { isPageviewAnalyticsInput, isTrackAnalyticsInput, } from './dtos/create-analytics.input'; -import { Analytics } from './entities/analytics.entity'; +import { Analytics } from './dtos/analytics.dto'; import { AuditService } from './services/audit.service'; @Resolver(() => Analytics) @@ -34,8 +34,9 @@ export class AuditResolver { async createPageview( @Args() createAnalyticsInput: CreateAnalyticsInputV2, - @AuthWorkspace({ allowUndefined: true }) workspace: Workspace | undefined, - @AuthUser({ allowUndefined: true }) user: User | undefined, + @AuthWorkspace({ allowUndefined: true }) + workspace: WorkspaceEntity | undefined, + @AuthUser({ allowUndefined: true }) user: UserEntity | undefined, ) { return this.trackAnalytics(createAnalyticsInput, workspace, user); } @@ -45,8 +46,8 @@ export class AuditResolver { async createObjectEvent( @Args() createObjectEventInput: CreateObjectEventInput, - @AuthWorkspace() workspace: Workspace | undefined, - @AuthUser({ allowUndefined: true }) user: User | undefined, + @AuthWorkspace() workspace: WorkspaceEntity | undefined, + @AuthUser({ allowUndefined: true }) user: UserEntity | undefined, ) { if (!workspace) { throw new AuditException( @@ -73,8 +74,9 @@ export class AuditResolver { async trackAnalytics( @Args() createAnalyticsInput: CreateAnalyticsInputV2, - @AuthWorkspace({ allowUndefined: true }) workspace: Workspace | undefined, - @AuthUser({ allowUndefined: true }) user: User | undefined, + @AuthWorkspace({ allowUndefined: true }) + workspace: WorkspaceEntity | undefined, + @AuthUser({ allowUndefined: true }) user: UserEntity | undefined, ) { const analyticsContext = this.auditService.createContext({ workspaceId: workspace?.id, diff --git a/packages/twenty-server/src/engine/core-modules/audit/entities/analytics.entity.ts b/packages/twenty-server/src/engine/core-modules/audit/dtos/analytics.dto.ts similarity index 100% rename from packages/twenty-server/src/engine/core-modules/audit/entities/analytics.entity.ts rename to packages/twenty-server/src/engine/core-modules/audit/dtos/analytics.dto.ts diff --git a/packages/twenty-server/src/engine/core-modules/auth/auth.module.ts b/packages/twenty-server/src/engine/core-modules/auth/auth.module.ts index 4978cf713da..7517c4935ff 100644 --- a/packages/twenty-server/src/engine/core-modules/auth/auth.module.ts +++ b/packages/twenty-server/src/engine/core-modules/auth/auth.module.ts @@ -4,9 +4,9 @@ import { Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; import { TypeORMModule } from 'src/database/typeorm/typeorm.module'; -import { ApiKey } from 'src/engine/core-modules/api-key/api-key.entity'; +import { ApiKeyEntity } from 'src/engine/core-modules/api-key/api-key.entity'; import { ApiKeyModule } from 'src/engine/core-modules/api-key/api-key.module'; -import { AppToken } from 'src/engine/core-modules/app-token/app-token.entity'; +import { AppTokenEntity } from 'src/engine/core-modules/app-token/app-token.entity'; import { AppTokenService } from 'src/engine/core-modules/app-token/services/app-token.service'; import { AuditModule } from 'src/engine/core-modules/audit/audit.module'; import { GoogleAPIsAuthController } from 'src/engine/core-modules/auth/controllers/google-apis-auth.controller'; @@ -37,22 +37,22 @@ import { DomainServerConfigModule } from 'src/engine/core-modules/domain/domain- import { SubdomainManagerModule } from 'src/engine/core-modules/domain/subdomain-manager/subdomain-manager.module'; import { WorkspaceDomainsModule } from 'src/engine/core-modules/domain/workspace-domains/workspace-domains.module'; import { EmailVerificationModule } from 'src/engine/core-modules/email-verification/email-verification.module'; -import { FeatureFlag } from 'src/engine/core-modules/feature-flag/feature-flag.entity'; +import { FeatureFlagEntity } from 'src/engine/core-modules/feature-flag/feature-flag.entity'; import { FeatureFlagModule } from 'src/engine/core-modules/feature-flag/feature-flag.module'; import { FileUploadModule } from 'src/engine/core-modules/file/file-upload/file-upload.module'; import { GuardRedirectModule } from 'src/engine/core-modules/guard-redirect/guard-redirect.module'; import { JwtModule } from 'src/engine/core-modules/jwt/jwt.module'; -import { KeyValuePair } from 'src/engine/core-modules/key-value-pair/key-value-pair.entity'; +import { KeyValuePairEntity } from 'src/engine/core-modules/key-value-pair/key-value-pair.entity'; import { MetricsModule } from 'src/engine/core-modules/metrics/metrics.module'; import { OnboardingModule } from 'src/engine/core-modules/onboarding/onboarding.module'; import { WorkspaceSSOModule } from 'src/engine/core-modules/sso/sso.module'; -import { WorkspaceSSOIdentityProvider } from 'src/engine/core-modules/sso/workspace-sso-identity-provider.entity'; -import { UserWorkspace } from 'src/engine/core-modules/user-workspace/user-workspace.entity'; +import { WorkspaceSSOIdentityProviderEntity } from 'src/engine/core-modules/sso/workspace-sso-identity-provider.entity'; +import { UserWorkspaceEntity } from 'src/engine/core-modules/user-workspace/user-workspace.entity'; import { UserWorkspaceModule } from 'src/engine/core-modules/user-workspace/user-workspace.module'; -import { User } from 'src/engine/core-modules/user/user.entity'; +import { UserEntity } from 'src/engine/core-modules/user/user.entity'; import { UserModule } from 'src/engine/core-modules/user/user.module'; import { WorkspaceInvitationModule } from 'src/engine/core-modules/workspace-invitation/workspace-invitation.module'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { WorkspaceModule } from 'src/engine/core-modules/workspace/workspace.module'; import { DataSourceModule } from 'src/engine/metadata-modules/data-source/data-source.module'; import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity'; @@ -63,7 +63,7 @@ import { WorkspaceManagerModule } from 'src/engine/workspace-manager/workspace-m import { ConnectedAccountModule } from 'src/modules/connected-account/connected-account.module'; import { MessagingFolderSyncManagerModule } from 'src/modules/messaging/message-folder-manager/messaging-folder-sync-manager.module'; -import { TwoFactorAuthenticationMethod } from '../two-factor-authentication/entities/two-factor-authentication-method.entity'; +import { TwoFactorAuthenticationMethodEntity } from '../two-factor-authentication/entities/two-factor-authentication-method.entity'; import { TwoFactorAuthenticationModule } from '../two-factor-authentication/two-factor-authentication.module'; import { AuthResolver } from './auth.resolver'; @@ -82,15 +82,15 @@ import { JwtAuthStrategy } from './strategies/jwt.auth.strategy'; WorkspaceManagerModule, TypeORMModule, TypeOrmModule.forFeature([ - Workspace, - User, - AppToken, - ApiKey, - FeatureFlag, - WorkspaceSSOIdentityProvider, - KeyValuePair, - UserWorkspace, - TwoFactorAuthenticationMethod, + WorkspaceEntity, + UserEntity, + AppTokenEntity, + ApiKeyEntity, + FeatureFlagEntity, + WorkspaceSSOIdentityProviderEntity, + KeyValuePairEntity, + UserWorkspaceEntity, + TwoFactorAuthenticationMethodEntity, ]), TypeOrmModule.forFeature([ObjectMetadataEntity]), HttpModule, diff --git a/packages/twenty-server/src/engine/core-modules/auth/auth.resolver.spec.ts b/packages/twenty-server/src/engine/core-modules/auth/auth.resolver.spec.ts index 954548308c0..a34858bf9b0 100644 --- a/packages/twenty-server/src/engine/core-modules/auth/auth.resolver.spec.ts +++ b/packages/twenty-server/src/engine/core-modules/auth/auth.resolver.spec.ts @@ -3,7 +3,7 @@ import { Test, type TestingModule } from '@nestjs/testing'; import { getRepositoryToken } from '@nestjs/typeorm'; import { ApiKeyService } from 'src/engine/core-modules/api-key/api-key.service'; -import { AppToken } from 'src/engine/core-modules/app-token/app-token.entity'; +import { AppTokenEntity } from 'src/engine/core-modules/app-token/app-token.entity'; import { AuditService } from 'src/engine/core-modules/audit/services/audit.service'; import { SignInUpService } from 'src/engine/core-modules/auth/services/sign-in-up.service'; import { RefreshTokenService } from 'src/engine/core-modules/auth/token/services/refresh-token.service'; @@ -15,10 +15,10 @@ import { FeatureFlagService } from 'src/engine/core-modules/feature-flag/service import { SSOService } from 'src/engine/core-modules/sso/services/sso.service'; import { TwentyConfigService } from 'src/engine/core-modules/twenty-config/twenty-config.service'; import { TwoFactorAuthenticationService } from 'src/engine/core-modules/two-factor-authentication/two-factor-authentication.service'; -import { UserWorkspace } from 'src/engine/core-modules/user-workspace/user-workspace.entity'; +import { UserWorkspaceEntity } from 'src/engine/core-modules/user-workspace/user-workspace.entity'; import { UserWorkspaceService } from 'src/engine/core-modules/user-workspace/user-workspace.service'; import { UserService } from 'src/engine/core-modules/user/services/user.service'; -import { User } from 'src/engine/core-modules/user/user.entity'; +import { UserEntity } from 'src/engine/core-modules/user/user.entity'; import { PermissionsService } from 'src/engine/metadata-modules/permissions/permissions.service'; import { AuthResolver } from './auth.resolver'; @@ -40,15 +40,15 @@ describe('AuthResolver', () => { providers: [ AuthResolver, { - provide: getRepositoryToken(AppToken), + provide: getRepositoryToken(AppTokenEntity), useValue: {}, }, { - provide: getRepositoryToken(User), + provide: getRepositoryToken(UserEntity), useValue: {}, }, { - provide: getRepositoryToken(UserWorkspace), + provide: getRepositoryToken(UserWorkspaceEntity), useValue: {}, }, { diff --git a/packages/twenty-server/src/engine/core-modules/auth/auth.resolver.ts b/packages/twenty-server/src/engine/core-modules/auth/auth.resolver.ts index d41a16daff2..d84f983c0aa 100644 --- a/packages/twenty-server/src/engine/core-modules/auth/auth.resolver.ts +++ b/packages/twenty-server/src/engine/core-modules/auth/auth.resolver.ts @@ -10,19 +10,19 @@ import { Repository } from 'typeorm'; import { ApiKeyTokenInput } from 'src/engine/core-modules/auth/dto/api-key-token.input'; import { AppTokenInput } from 'src/engine/core-modules/auth/dto/app-token.input'; -import { AuthorizeApp } from 'src/engine/core-modules/auth/dto/authorize-app.entity'; +import { AuthorizeAppOutput } from 'src/engine/core-modules/auth/dto/authorize-app.dto'; import { AuthorizeAppInput } from 'src/engine/core-modules/auth/dto/authorize-app.input'; -import { EmailPasswordResetLink } from 'src/engine/core-modules/auth/dto/email-password-reset-link.entity'; +import { EmailPasswordResetLinkOutput } from 'src/engine/core-modules/auth/dto/email-password-reset-link.dto'; import { EmailPasswordResetLinkInput } from 'src/engine/core-modules/auth/dto/email-password-reset-link.input'; -import { InvalidatePassword } from 'src/engine/core-modules/auth/dto/invalidate-password.entity'; -import { TransientToken } from 'src/engine/core-modules/auth/dto/transient-token.entity'; +import { InvalidatePasswordOutput } from 'src/engine/core-modules/auth/dto/invalidate-password.dto'; +import { TransientTokenOutput } from 'src/engine/core-modules/auth/dto/transient-token.dto'; import { UpdatePasswordViaResetTokenInput } from 'src/engine/core-modules/auth/dto/update-password-via-reset-token.input'; -import { ValidatePasswordResetToken } from 'src/engine/core-modules/auth/dto/validate-password-reset-token.entity'; +import { ValidatePasswordResetTokenOutput } from 'src/engine/core-modules/auth/dto/validate-password-reset-token.dto'; import { ValidatePasswordResetTokenInput } from 'src/engine/core-modules/auth/dto/validate-password-reset-token.input'; import { AuthGraphqlApiExceptionFilter } from 'src/engine/core-modules/auth/filters/auth-graphql-api-exception.filter'; // import { OAuthService } from 'src/engine/core-modules/auth/services/oauth.service'; import { ApiKeyService } from 'src/engine/core-modules/api-key/api-key.service'; -import { AppToken } from 'src/engine/core-modules/app-token/app-token.entity'; +import { AppTokenEntity } from 'src/engine/core-modules/app-token/app-token.entity'; import { AuditService } from 'src/engine/core-modules/audit/services/audit.service'; import { MONITORING_EVENT } from 'src/engine/core-modules/audit/utils/events/workspace-event/monitoring/monitoring'; import { @@ -59,12 +59,12 @@ import { SSOService } from 'src/engine/core-modules/sso/services/sso.service'; import { TwoFactorAuthenticationVerificationInput } from 'src/engine/core-modules/two-factor-authentication/dto/two-factor-authentication-verification.input'; import { TwoFactorAuthenticationExceptionFilter } from 'src/engine/core-modules/two-factor-authentication/two-factor-authentication-exception.filter'; import { TwoFactorAuthenticationService } from 'src/engine/core-modules/two-factor-authentication/two-factor-authentication.service'; -import { UserWorkspace } from 'src/engine/core-modules/user-workspace/user-workspace.entity'; +import { UserWorkspaceEntity } from 'src/engine/core-modules/user-workspace/user-workspace.entity'; import { UserWorkspaceService } from 'src/engine/core-modules/user-workspace/user-workspace.service'; import { UserService } from 'src/engine/core-modules/user/services/user.service'; -import { User } from 'src/engine/core-modules/user/user.entity'; +import { UserEntity } from 'src/engine/core-modules/user/user.entity'; import { AuthProviderEnum } from 'src/engine/core-modules/workspace/types/workspace.type'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { AuthProvider } from 'src/engine/decorators/auth/auth-provider.decorator'; import { AuthUser } from 'src/engine/decorators/auth/auth-user.decorator'; import { AuthWorkspace } from 'src/engine/decorators/auth/auth-workspace.decorator'; @@ -77,13 +77,14 @@ import { PermissionsService } from 'src/engine/metadata-modules/permissions/perm import { PermissionsGraphqlApiExceptionFilter } from 'src/engine/metadata-modules/permissions/utils/permissions-graphql-api-exception.filter'; import { GetAuthTokensFromLoginTokenInput } from './dto/get-auth-tokens-from-login-token.input'; -import { LoginToken } from './dto/login-token.entity'; +import { LoginTokenOutput } from './dto/login-token.dto'; import { SignUpInput } from './dto/sign-up.input'; -import { ApiKeyToken, AuthTokens } from './dto/token.entity'; +import { ApiKeyToken } from './dto/api-key-token.dto'; +import { AuthTokens } from './dto/auth-tokens.dto'; import { UserCredentialsInput } from './dto/user-credentials.input'; -import { CheckUserExistOutput } from './dto/user-exists.entity'; +import { CheckUserExistOutput } from './dto/user-exists.dto'; import { EmailAndCaptchaInput } from './dto/user-exists.input'; -import { WorkspaceInviteHashValid } from './dto/workspace-invite-hash-valid.entity'; +import { WorkspaceInviteHashValidOutput } from './dto/workspace-invite-hash-valid.dto'; import { WorkspaceInviteHashValidInput } from './dto/workspace-invite-hash.input'; import { AuthService } from './services/auth.service'; @@ -99,10 +100,10 @@ import { AuthService } from './services/auth.service'; ) export class AuthResolver { constructor( - @InjectRepository(UserWorkspace) - private readonly userWorkspaceRepository: Repository, - @InjectRepository(AppToken) - private readonly appTokenRepository: Repository, + @InjectRepository(UserWorkspaceEntity) + private readonly userWorkspaceRepository: Repository, + @InjectRepository(AppTokenEntity) + private readonly appTokenRepository: Repository, private readonly twoFactorAuthenticationService: TwoFactorAuthenticationService, private authService: AuthService, private renewTokenService: RenewTokenService, @@ -144,33 +145,33 @@ export class AuthResolver { ); } - @Query(() => WorkspaceInviteHashValid) + @Query(() => WorkspaceInviteHashValidOutput) @UseGuards(PublicEndpointGuard) async checkWorkspaceInviteHashIsValid( @Args() workspaceInviteHashValidInput: WorkspaceInviteHashValidInput, - ): Promise { + ): Promise { return await this.authService.checkWorkspaceInviteHashIsValid( workspaceInviteHashValidInput.inviteHash, ); } - @Query(() => Workspace) + @Query(() => WorkspaceEntity) @UseGuards(PublicEndpointGuard) async findWorkspaceFromInviteHash( @Args() workspaceInviteHashValidInput: WorkspaceInviteHashValidInput, - ): Promise { + ): Promise { return await this.authService.findWorkspaceFromInviteHashOrFail( workspaceInviteHashValidInput.inviteHash, ); } - @Mutation(() => LoginToken) + @Mutation(() => LoginTokenOutput) @UseGuards(CaptchaGuard, PublicEndpointGuard) async getLoginTokenFromCredentials( @Args() getLoginTokenFromCredentialsInput: UserCredentialsInput, @Args('origin') origin: string, - ): Promise { + ): Promise { const workspace = await this.workspaceDomainsService.getWorkspaceByOriginOrDefaultWorkspace( origin, @@ -483,7 +484,7 @@ export class AuthResolver { @Mutation(() => SignUpOutput) @UseGuards(UserAuthGuard) async signUpInNewWorkspace( - @AuthUser() currentUser: User, + @AuthUser() currentUser: UserEntity, @AuthProvider() authProvider: AuthProviderEnum, ): Promise { await this.signInUpService.checkWorkspaceCreationIsAllowedOrThrow( @@ -509,12 +510,12 @@ export class AuthResolver { }; } - @Mutation(() => TransientToken) + @Mutation(() => TransientTokenOutput) @UseGuards(UserAuthGuard) async generateTransientToken( - @AuthUser() user: User, - @AuthWorkspace() workspace: Workspace, - ): Promise { + @AuthUser() user: UserEntity, + @AuthWorkspace() workspace: WorkspaceEntity, + ): Promise { const workspaceMember = await this.userService.loadWorkspaceMember( user, workspace, @@ -595,7 +596,7 @@ export class AuthResolver { private async validateWorkspaceAccess( origin: string, tokenWorkspaceId: string, - ): Promise { + ): Promise { const workspace = await this.workspaceDomainsService.getWorkspaceByOriginOrDefaultWorkspace( origin, @@ -622,7 +623,7 @@ export class AuthResolver { private async validateUserAccess( email: string, workspaceId: string, - ): Promise<{ user: User; userWorkspace: UserWorkspace }> { + ): Promise<{ user: UserEntity; userWorkspace: UserWorkspaceEntity }> { const user = await this.userService.findUserByEmailOrThrow(email); await this.authService.checkIsEmailVerified(user.isEmailVerified); @@ -637,8 +638,8 @@ export class AuthResolver { } private async validateRegularAuthentication( - workspace: Workspace, - userWorkspace: UserWorkspace, + workspace: WorkspaceEntity, + userWorkspace: UserWorkspaceEntity, ): Promise { await this.twoFactorAuthenticationService.validateTwoFactorAuthenticationRequirement( workspace, @@ -648,7 +649,7 @@ export class AuthResolver { private async validateAndLogImpersonation( tokenPayload: LoginTokenJwtPayload, - workspace: Workspace, + workspace: WorkspaceEntity, targetUserEmail: string, ) { const { impersonatorUserWorkspaceId } = tokenPayload; @@ -755,13 +756,13 @@ export class AuthResolver { }; } - @Mutation(() => AuthorizeApp) + @Mutation(() => AuthorizeAppOutput) @UseGuards(UserAuthGuard) async authorizeApp( @Args() authorizeAppInput: AuthorizeAppInput, - @AuthUser() user: User, - @AuthWorkspace() workspace: Workspace, - ): Promise { + @AuthUser() user: UserEntity, + @AuthWorkspace() workspace: WorkspaceEntity, + ): Promise { return await this.authService.generateAuthorizationCode( authorizeAppInput, user, @@ -786,7 +787,7 @@ export class AuthResolver { @Mutation(() => ApiKeyToken) async generateApiKeyToken( @Args() args: ApiKeyTokenInput, - @AuthWorkspace() { id: workspaceId }: Workspace, + @AuthWorkspace() { id: workspaceId }: WorkspaceEntity, ): Promise { return await this.apiKeyService.generateApiKeyToken( workspaceId, @@ -795,12 +796,12 @@ export class AuthResolver { ); } - @Mutation(() => EmailPasswordResetLink) + @Mutation(() => EmailPasswordResetLinkOutput) @UseGuards(PublicEndpointGuard) async emailPasswordResetLink( @Args() emailPasswordResetInput: EmailPasswordResetLinkInput, @Context() context: I18nContext, - ): Promise { + ): Promise { const resetToken = await this.resetPasswordService.generatePasswordResetToken( emailPasswordResetInput.email, @@ -814,12 +815,12 @@ export class AuthResolver { ); } - @Mutation(() => InvalidatePassword) + @Mutation(() => InvalidatePasswordOutput) @UseGuards(PublicEndpointGuard) async updatePasswordViaResetToken( @Args() { passwordResetToken, newPassword }: UpdatePasswordViaResetTokenInput, - ): Promise { + ): Promise { const { id } = await this.resetPasswordService.validatePasswordResetToken( passwordResetToken, @@ -830,11 +831,11 @@ export class AuthResolver { return await this.resetPasswordService.invalidatePasswordResetToken(id); } - @Query(() => ValidatePasswordResetToken) + @Query(() => ValidatePasswordResetTokenOutput) @UseGuards(PublicEndpointGuard) async validatePasswordResetToken( @Args() args: ValidatePasswordResetTokenInput, - ): Promise { + ): Promise { return this.resetPasswordService.validatePasswordResetToken( args.passwordResetToken, ); diff --git a/packages/twenty-server/src/engine/core-modules/auth/controllers/google-apis-auth.controller.ts b/packages/twenty-server/src/engine/core-modules/auth/controllers/google-apis-auth.controller.ts index 56fa13099d8..ea69b98e983 100644 --- a/packages/twenty-server/src/engine/core-modules/auth/controllers/google-apis-auth.controller.ts +++ b/packages/twenty-server/src/engine/core-modules/auth/controllers/google-apis-auth.controller.ts @@ -26,7 +26,7 @@ import { GoogleAPIsRequest } from 'src/engine/core-modules/auth/types/google-api import { GuardRedirectService } from 'src/engine/core-modules/guard-redirect/services/guard-redirect.service'; import { OnboardingService } from 'src/engine/core-modules/onboarding/onboarding.service'; import { TwentyConfigService } from 'src/engine/core-modules/twenty-config/twenty-config.service'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { PublicEndpointGuard } from 'src/engine/guards/public-endpoint.guard'; import { WorkspaceDomainsService } from 'src/engine/core-modules/domain/workspace-domains/services/workspace-domains.service'; @@ -40,8 +40,8 @@ export class GoogleAPIsAuthController { private readonly onboardingService: OnboardingService, private readonly workspaceDomainsService: WorkspaceDomainsService, private readonly guardRedirectService: GuardRedirectService, - @InjectRepository(Workspace) - private readonly workspaceRepository: Repository, + @InjectRepository(WorkspaceEntity) + private readonly workspaceRepository: Repository, ) {} @Get() @@ -57,7 +57,7 @@ export class GoogleAPIsAuthController { @Req() req: GoogleAPIsRequest, @Res() res: Response, ) { - let workspace: Workspace | null = null; + let workspace: WorkspaceEntity | null = null; try { const { user } = req; diff --git a/packages/twenty-server/src/engine/core-modules/auth/controllers/microsoft-apis-auth.controller.ts b/packages/twenty-server/src/engine/core-modules/auth/controllers/microsoft-apis-auth.controller.ts index 45b50feba33..f6a7c94ec96 100644 --- a/packages/twenty-server/src/engine/core-modules/auth/controllers/microsoft-apis-auth.controller.ts +++ b/packages/twenty-server/src/engine/core-modules/auth/controllers/microsoft-apis-auth.controller.ts @@ -27,7 +27,7 @@ import { WorkspaceDomainsService } from 'src/engine/core-modules/domain/workspac import { GuardRedirectService } from 'src/engine/core-modules/guard-redirect/services/guard-redirect.service'; import { OnboardingService } from 'src/engine/core-modules/onboarding/onboarding.service'; import { TwentyConfigService } from 'src/engine/core-modules/twenty-config/twenty-config.service'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { PublicEndpointGuard } from 'src/engine/guards/public-endpoint.guard'; @Controller('auth/microsoft-apis') @@ -40,8 +40,8 @@ export class MicrosoftAPIsAuthController { private readonly workspaceDomainsService: WorkspaceDomainsService, private readonly onboardingService: OnboardingService, private readonly guardRedirectService: GuardRedirectService, - @InjectRepository(Workspace) - private readonly workspaceRepository: Repository, + @InjectRepository(WorkspaceEntity) + private readonly workspaceRepository: Repository, ) {} @Get() @@ -57,7 +57,7 @@ export class MicrosoftAPIsAuthController { @Req() req: MicrosoftAPIsRequest, @Res() res: Response, ) { - let workspace: Workspace | null = null; + let workspace: WorkspaceEntity | null = null; try { const { user } = req; diff --git a/packages/twenty-server/src/engine/core-modules/auth/controllers/sso-auth.controller.ts b/packages/twenty-server/src/engine/core-modules/auth/controllers/sso-auth.controller.ts index b7448360881..bd2794a02b9 100644 --- a/packages/twenty-server/src/engine/core-modules/auth/controllers/sso-auth.controller.ts +++ b/packages/twenty-server/src/engine/core-modules/auth/controllers/sso-auth.controller.ts @@ -21,6 +21,10 @@ import { AuthException, AuthExceptionCode, } from 'src/engine/core-modules/auth/auth.exception'; +import { + WorkspaceSSOIdentityProviderEntity, + IdentityProviderType, +} from 'src/engine/core-modules/sso/workspace-sso-identity-provider.entity'; import { AuthRestApiExceptionFilter } from 'src/engine/core-modules/auth/filters/auth-rest-api-exception.filter'; import { EnterpriseFeaturesEnabledGuard } from 'src/engine/core-modules/auth/guards/enterprise-features-enabled.guard'; import { OIDCAuthGuard } from 'src/engine/core-modules/auth/guards/oidc-auth.guard'; @@ -32,13 +36,9 @@ import { LoginTokenService } from 'src/engine/core-modules/auth/token/services/l import { WorkspaceDomainsService } from 'src/engine/core-modules/domain/workspace-domains/services/workspace-domains.service'; import { GuardRedirectService } from 'src/engine/core-modules/guard-redirect/services/guard-redirect.service'; import { SSOService } from 'src/engine/core-modules/sso/services/sso.service'; -import { - IdentityProviderType, - WorkspaceSSOIdentityProvider, -} from 'src/engine/core-modules/sso/workspace-sso-identity-provider.entity'; import { UserService } from 'src/engine/core-modules/user/services/user.service'; import { AuthProviderEnum } from 'src/engine/core-modules/workspace/types/workspace.type'; -import { type Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { PublicEndpointGuard } from 'src/engine/guards/public-endpoint.guard'; @Controller('auth') @@ -51,8 +51,8 @@ export class SSOAuthController { private readonly workspaceDomainsService: WorkspaceDomainsService, private readonly userService: UserService, private readonly sSOService: SSOService, - @InjectRepository(WorkspaceSSOIdentityProvider) - private readonly workspaceSSOIdentityProviderRepository: Repository, + @InjectRepository(WorkspaceSSOIdentityProviderEntity) + private readonly workspaceSSOIdentityProviderRepository: Repository, ) {} @Get('saml/metadata/:identityProviderId') @@ -169,7 +169,7 @@ export class SSOAuthController { private async generateLoginToken( payload: { email: string; workspaceInviteHash?: string }, - currentWorkspace: Workspace, + currentWorkspace: WorkspaceEntity, ) { const invitation = payload.email ? await this.authService.findInvitationForSignInUp({ diff --git a/packages/twenty-server/src/engine/core-modules/auth/dto/api-key-token.dto.ts b/packages/twenty-server/src/engine/core-modules/auth/dto/api-key-token.dto.ts new file mode 100644 index 00000000000..a7174b35bf5 --- /dev/null +++ b/packages/twenty-server/src/engine/core-modules/auth/dto/api-key-token.dto.ts @@ -0,0 +1,7 @@ +import { Field, ObjectType } from '@nestjs/graphql'; + +@ObjectType() +export class ApiKeyToken { + @Field(() => String) + token: string; +} diff --git a/packages/twenty-server/src/engine/core-modules/auth/dto/auth-token-pair.dto.ts b/packages/twenty-server/src/engine/core-modules/auth/dto/auth-token-pair.dto.ts new file mode 100644 index 00000000000..1cba0ead770 --- /dev/null +++ b/packages/twenty-server/src/engine/core-modules/auth/dto/auth-token-pair.dto.ts @@ -0,0 +1,12 @@ +import { Field, ObjectType } from '@nestjs/graphql'; + +import { AuthToken } from 'src/engine/core-modules/auth/dto/auth-token.dto'; + +@ObjectType() +export class AuthTokenPair { + @Field(() => AuthToken) + accessOrWorkspaceAgnosticToken: AuthToken; + + @Field(() => AuthToken) + refreshToken: AuthToken; +} diff --git a/packages/twenty-server/src/engine/core-modules/auth/dto/auth-token.dto.ts b/packages/twenty-server/src/engine/core-modules/auth/dto/auth-token.dto.ts new file mode 100644 index 00000000000..f66a7a3617b --- /dev/null +++ b/packages/twenty-server/src/engine/core-modules/auth/dto/auth-token.dto.ts @@ -0,0 +1,10 @@ +import { Field, ObjectType } from '@nestjs/graphql'; + +@ObjectType() +export class AuthToken { + @Field(() => String) + token: string; + + @Field(() => Date) + expiresAt: Date; +} diff --git a/packages/twenty-server/src/engine/core-modules/auth/dto/auth-tokens.dto.ts b/packages/twenty-server/src/engine/core-modules/auth/dto/auth-tokens.dto.ts new file mode 100644 index 00000000000..dedfc01040f --- /dev/null +++ b/packages/twenty-server/src/engine/core-modules/auth/dto/auth-tokens.dto.ts @@ -0,0 +1,9 @@ +import { Field, ObjectType } from '@nestjs/graphql'; + +import { AuthTokenPair } from 'src/engine/core-modules/auth/dto/auth-token-pair.dto'; + +@ObjectType() +export class AuthTokens { + @Field(() => AuthTokenPair) + tokens: AuthTokenPair; +} diff --git a/packages/twenty-server/src/engine/core-modules/auth/dto/authorize-app.entity.ts b/packages/twenty-server/src/engine/core-modules/auth/dto/authorize-app.dto.ts similarity index 77% rename from packages/twenty-server/src/engine/core-modules/auth/dto/authorize-app.entity.ts rename to packages/twenty-server/src/engine/core-modules/auth/dto/authorize-app.dto.ts index 9407e77816f..1b0ac5a1762 100644 --- a/packages/twenty-server/src/engine/core-modules/auth/dto/authorize-app.entity.ts +++ b/packages/twenty-server/src/engine/core-modules/auth/dto/authorize-app.dto.ts @@ -1,7 +1,7 @@ import { Field, ObjectType } from '@nestjs/graphql'; @ObjectType() -export class AuthorizeApp { +export class AuthorizeAppOutput { @Field(() => String) redirectUrl: string; } diff --git a/packages/twenty-server/src/engine/core-modules/auth/dto/available-workspaces-and-access-tokens.output.ts b/packages/twenty-server/src/engine/core-modules/auth/dto/available-workspaces-and-access-tokens.output.ts index b8c6aa8546f..51f3ef0aef6 100644 --- a/packages/twenty-server/src/engine/core-modules/auth/dto/available-workspaces-and-access-tokens.output.ts +++ b/packages/twenty-server/src/engine/core-modules/auth/dto/available-workspaces-and-access-tokens.output.ts @@ -2,7 +2,7 @@ import { Field, ObjectType } from '@nestjs/graphql'; import { AvailableWorkspaces } from 'src/engine/core-modules/auth/dto/available-workspaces.output'; -import { AuthTokenPair } from './token.entity'; +import { AuthTokenPair } from './auth-token-pair.dto'; @ObjectType() export class AvailableWorkspacesAndAccessTokensOutput { diff --git a/packages/twenty-server/src/engine/core-modules/auth/dto/email-password-reset-link.entity.ts b/packages/twenty-server/src/engine/core-modules/auth/dto/email-password-reset-link.dto.ts similarity index 80% rename from packages/twenty-server/src/engine/core-modules/auth/dto/email-password-reset-link.entity.ts rename to packages/twenty-server/src/engine/core-modules/auth/dto/email-password-reset-link.dto.ts index b42baaa985d..fa305ec1cbb 100644 --- a/packages/twenty-server/src/engine/core-modules/auth/dto/email-password-reset-link.entity.ts +++ b/packages/twenty-server/src/engine/core-modules/auth/dto/email-password-reset-link.dto.ts @@ -1,7 +1,7 @@ import { Field, ObjectType } from '@nestjs/graphql'; @ObjectType() -export class EmailPasswordResetLink { +export class EmailPasswordResetLinkOutput { @Field(() => Boolean, { description: 'Boolean that confirms query was dispatched', }) diff --git a/packages/twenty-server/src/engine/core-modules/auth/dto/exchange-auth-code.dto.ts b/packages/twenty-server/src/engine/core-modules/auth/dto/exchange-auth-code.dto.ts new file mode 100644 index 00000000000..551dae92919 --- /dev/null +++ b/packages/twenty-server/src/engine/core-modules/auth/dto/exchange-auth-code.dto.ts @@ -0,0 +1,15 @@ +import { Field, ObjectType } from '@nestjs/graphql'; + +import { AuthToken } from 'src/engine/core-modules/auth/dto/auth-token.dto'; + +@ObjectType() +export class ExchangeAuthCodeOutput { + @Field(() => AuthToken) + accessOrWorkspaceAgnosticToken: AuthToken; + + @Field(() => AuthToken) + refreshToken: AuthToken; + + @Field(() => AuthToken) + loginToken: AuthToken; +} diff --git a/packages/twenty-server/src/engine/core-modules/auth/dto/exchange-auth-code.entity.ts b/packages/twenty-server/src/engine/core-modules/auth/dto/exchange-auth-code.entity.ts index 321f12144b7..1e80566a749 100644 --- a/packages/twenty-server/src/engine/core-modules/auth/dto/exchange-auth-code.entity.ts +++ b/packages/twenty-server/src/engine/core-modules/auth/dto/exchange-auth-code.entity.ts @@ -1,6 +1,6 @@ import { Field, ObjectType } from '@nestjs/graphql'; -import { AuthToken } from 'src/engine/core-modules/auth/dto/token.entity'; +import { AuthToken } from 'src/engine/core-modules/auth/dto/auth-token.dto'; @ObjectType() export class ExchangeAuthCode { diff --git a/packages/twenty-server/src/engine/core-modules/auth/dto/get-login-token-from-email-verification-token.output.ts b/packages/twenty-server/src/engine/core-modules/auth/dto/get-login-token-from-email-verification-token.output.ts index 5b0a9b5004c..8a0c1258602 100644 --- a/packages/twenty-server/src/engine/core-modules/auth/dto/get-login-token-from-email-verification-token.output.ts +++ b/packages/twenty-server/src/engine/core-modules/auth/dto/get-login-token-from-email-verification-token.output.ts @@ -2,7 +2,7 @@ import { Field, ObjectType } from '@nestjs/graphql'; import { WorkspaceUrlsDTO } from 'src/engine/core-modules/workspace/dtos/workspace-urls.dto'; -import { AuthToken } from './token.entity'; +import { AuthToken } from './auth-token.dto'; @ObjectType('GetLoginTokenFromEmailVerificationTokenOutput') export class GetLoginTokenFromEmailVerificationTokenOutput { diff --git a/packages/twenty-server/src/engine/core-modules/auth/dto/invalidate-password.entity.ts b/packages/twenty-server/src/engine/core-modules/auth/dto/invalidate-password.dto.ts similarity index 82% rename from packages/twenty-server/src/engine/core-modules/auth/dto/invalidate-password.entity.ts rename to packages/twenty-server/src/engine/core-modules/auth/dto/invalidate-password.dto.ts index 83d27bf0a64..57ab2018e35 100644 --- a/packages/twenty-server/src/engine/core-modules/auth/dto/invalidate-password.entity.ts +++ b/packages/twenty-server/src/engine/core-modules/auth/dto/invalidate-password.dto.ts @@ -1,7 +1,7 @@ import { ObjectType, Field } from '@nestjs/graphql'; @ObjectType() -export class InvalidatePassword { +export class InvalidatePasswordOutput { @Field(() => Boolean, { description: 'Boolean that confirms query was dispatched', }) diff --git a/packages/twenty-server/src/engine/core-modules/auth/dto/login-token.entity.ts b/packages/twenty-server/src/engine/core-modules/auth/dto/login-token.dto.ts similarity index 52% rename from packages/twenty-server/src/engine/core-modules/auth/dto/login-token.entity.ts rename to packages/twenty-server/src/engine/core-modules/auth/dto/login-token.dto.ts index 847043671cd..148ad88e266 100644 --- a/packages/twenty-server/src/engine/core-modules/auth/dto/login-token.entity.ts +++ b/packages/twenty-server/src/engine/core-modules/auth/dto/login-token.dto.ts @@ -1,9 +1,9 @@ import { Field, ObjectType } from '@nestjs/graphql'; -import { AuthToken } from './token.entity'; +import { AuthToken } from 'src/engine/core-modules/auth/dto/auth-token.dto'; @ObjectType() -export class LoginToken { +export class LoginTokenOutput { @Field(() => AuthToken) loginToken: AuthToken; } diff --git a/packages/twenty-server/src/engine/core-modules/auth/dto/password-reset-token.dto.ts b/packages/twenty-server/src/engine/core-modules/auth/dto/password-reset-token.dto.ts new file mode 100644 index 00000000000..95fb31738b7 --- /dev/null +++ b/packages/twenty-server/src/engine/core-modules/auth/dto/password-reset-token.dto.ts @@ -0,0 +1,15 @@ +import { Field, ObjectType } from '@nestjs/graphql'; + +import { UUIDScalarType } from 'src/engine/api/graphql/workspace-schema-builder/graphql-types/scalars'; + +@ObjectType() +export class PasswordResetToken { + @Field(() => String) + passwordResetToken: string; + + @Field(() => Date) + passwordResetTokenExpiresAt: Date; + + @Field(() => UUIDScalarType) + workspaceId: string; +} diff --git a/packages/twenty-server/src/engine/core-modules/auth/dto/sign-up.output.ts b/packages/twenty-server/src/engine/core-modules/auth/dto/sign-up.output.ts index 851f0d89257..be3b4567495 100644 --- a/packages/twenty-server/src/engine/core-modules/auth/dto/sign-up.output.ts +++ b/packages/twenty-server/src/engine/core-modules/auth/dto/sign-up.output.ts @@ -2,7 +2,7 @@ import { Field, ObjectType } from '@nestjs/graphql'; import { WorkspaceUrlsAndIdDTO } from 'src/engine/core-modules/workspace/dtos/workspace-subdomain-id.dto'; -import { AuthToken } from './token.entity'; +import { AuthToken } from './auth-token.dto'; @ObjectType('SignUpOutput') export class SignUpOutput { diff --git a/packages/twenty-server/src/engine/core-modules/auth/dto/token.entity.ts b/packages/twenty-server/src/engine/core-modules/auth/dto/token.entity.ts deleted file mode 100644 index 4b49a07f944..00000000000 --- a/packages/twenty-server/src/engine/core-modules/auth/dto/token.entity.ts +++ /dev/null @@ -1,51 +0,0 @@ -import { Field, ObjectType } from '@nestjs/graphql'; - -import { UUIDScalarType } from 'src/engine/api/graphql/workspace-schema-builder/graphql-types/scalars'; - -@ObjectType() -export class AuthToken { - @Field(() => String) - token: string; - - @Field(() => Date) - expiresAt: Date; -} - -@ObjectType() -export class ApiKeyToken { - @Field(() => String) - token: string; -} - -@ObjectType() -export class AuthTokenPair { - @Field(() => AuthToken) - accessOrWorkspaceAgnosticToken: AuthToken; - - @Field(() => AuthToken) - refreshToken: AuthToken; -} - -@ObjectType() -export class AuthTokens { - @Field(() => AuthTokenPair) - tokens: AuthTokenPair; -} - -@ObjectType() -export class PasswordResetToken { - @Field(() => String) - passwordResetToken: string; - - @Field(() => Date) - passwordResetTokenExpiresAt: Date; - - @Field(() => UUIDScalarType) - workspaceId: string; -} - -@ObjectType() -export class WorkspaceAgnosticToken { - @Field(() => AuthToken) - token: AuthToken; -} diff --git a/packages/twenty-server/src/engine/core-modules/auth/dto/transient-token.entity.ts b/packages/twenty-server/src/engine/core-modules/auth/dto/transient-token.dto.ts similarity index 52% rename from packages/twenty-server/src/engine/core-modules/auth/dto/transient-token.entity.ts rename to packages/twenty-server/src/engine/core-modules/auth/dto/transient-token.dto.ts index f2503a462b4..1584e465958 100644 --- a/packages/twenty-server/src/engine/core-modules/auth/dto/transient-token.entity.ts +++ b/packages/twenty-server/src/engine/core-modules/auth/dto/transient-token.dto.ts @@ -1,9 +1,9 @@ import { Field, ObjectType } from '@nestjs/graphql'; -import { AuthToken } from './token.entity'; +import { AuthToken } from 'src/engine/core-modules/auth/dto/auth-token.dto'; @ObjectType() -export class TransientToken { +export class TransientTokenOutput { @Field(() => AuthToken) transientToken: AuthToken; } diff --git a/packages/twenty-server/src/engine/core-modules/auth/dto/update-password.entity.ts b/packages/twenty-server/src/engine/core-modules/auth/dto/update-password.dto.ts similarity index 83% rename from packages/twenty-server/src/engine/core-modules/auth/dto/update-password.entity.ts rename to packages/twenty-server/src/engine/core-modules/auth/dto/update-password.dto.ts index 21c1b00ae0a..cc9c8325c2d 100644 --- a/packages/twenty-server/src/engine/core-modules/auth/dto/update-password.entity.ts +++ b/packages/twenty-server/src/engine/core-modules/auth/dto/update-password.dto.ts @@ -1,7 +1,7 @@ import { ObjectType, Field } from '@nestjs/graphql'; @ObjectType() -export class UpdatePassword { +export class UpdatePasswordOutput { @Field(() => Boolean, { description: 'Boolean that confirms query was dispatched', }) diff --git a/packages/twenty-server/src/engine/core-modules/auth/dto/user-exists.entity.ts b/packages/twenty-server/src/engine/core-modules/auth/dto/user-exists.dto.ts similarity index 100% rename from packages/twenty-server/src/engine/core-modules/auth/dto/user-exists.entity.ts rename to packages/twenty-server/src/engine/core-modules/auth/dto/user-exists.dto.ts diff --git a/packages/twenty-server/src/engine/core-modules/auth/dto/validate-password-reset-token.entity.ts b/packages/twenty-server/src/engine/core-modules/auth/dto/validate-password-reset-token.dto.ts similarity index 84% rename from packages/twenty-server/src/engine/core-modules/auth/dto/validate-password-reset-token.entity.ts rename to packages/twenty-server/src/engine/core-modules/auth/dto/validate-password-reset-token.dto.ts index 91fdd2805f4..a1dc9843cec 100644 --- a/packages/twenty-server/src/engine/core-modules/auth/dto/validate-password-reset-token.entity.ts +++ b/packages/twenty-server/src/engine/core-modules/auth/dto/validate-password-reset-token.dto.ts @@ -3,7 +3,7 @@ import { Field, ObjectType } from '@nestjs/graphql'; import { UUIDScalarType } from 'src/engine/api/graphql/workspace-schema-builder/graphql-types/scalars'; @ObjectType() -export class ValidatePasswordResetToken { +export class ValidatePasswordResetTokenOutput { @Field(() => UUIDScalarType) id: string; diff --git a/packages/twenty-server/src/engine/core-modules/auth/dto/workspace-agnostic-token.dto.ts b/packages/twenty-server/src/engine/core-modules/auth/dto/workspace-agnostic-token.dto.ts new file mode 100644 index 00000000000..a77cd2af6ed --- /dev/null +++ b/packages/twenty-server/src/engine/core-modules/auth/dto/workspace-agnostic-token.dto.ts @@ -0,0 +1,9 @@ +import { Field, ObjectType } from '@nestjs/graphql'; + +import { AuthToken } from 'src/engine/core-modules/auth/dto/auth-token.dto'; + +@ObjectType() +export class WorkspaceAgnosticToken { + @Field(() => AuthToken) + token: AuthToken; +} diff --git a/packages/twenty-server/src/engine/core-modules/auth/dto/workspace-invite-hash-valid.entity.ts b/packages/twenty-server/src/engine/core-modules/auth/dto/workspace-invite-hash-valid.dto.ts similarity index 71% rename from packages/twenty-server/src/engine/core-modules/auth/dto/workspace-invite-hash-valid.entity.ts rename to packages/twenty-server/src/engine/core-modules/auth/dto/workspace-invite-hash-valid.dto.ts index 4b83292f952..b2c88d05891 100644 --- a/packages/twenty-server/src/engine/core-modules/auth/dto/workspace-invite-hash-valid.entity.ts +++ b/packages/twenty-server/src/engine/core-modules/auth/dto/workspace-invite-hash-valid.dto.ts @@ -1,7 +1,7 @@ import { Field, ObjectType } from '@nestjs/graphql'; @ObjectType() -export class WorkspaceInviteHashValid { +export class WorkspaceInviteHashValidOutput { @Field(() => Boolean) isValid: boolean; } diff --git a/packages/twenty-server/src/engine/core-modules/auth/guards/google-apis-oauth-exchange-code-for-token.guard.ts b/packages/twenty-server/src/engine/core-modules/auth/guards/google-apis-oauth-exchange-code-for-token.guard.ts index 4a8aafac2a4..d6412345ca0 100644 --- a/packages/twenty-server/src/engine/core-modules/auth/guards/google-apis-oauth-exchange-code-for-token.guard.ts +++ b/packages/twenty-server/src/engine/core-modules/auth/guards/google-apis-oauth-exchange-code-for-token.guard.ts @@ -14,7 +14,7 @@ import { setRequestExtraParams } from 'src/engine/core-modules/auth/utils/google import { WorkspaceDomainsService } from 'src/engine/core-modules/domain/workspace-domains/services/workspace-domains.service'; import { GuardRedirectService } from 'src/engine/core-modules/guard-redirect/services/guard-redirect.service'; import { TwentyConfigService } from 'src/engine/core-modules/twenty-config/twenty-config.service'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; @Injectable() export class GoogleAPIsOauthExchangeCodeForTokenGuard extends AuthGuard( @@ -24,8 +24,8 @@ export class GoogleAPIsOauthExchangeCodeForTokenGuard extends AuthGuard( private readonly guardRedirectService: GuardRedirectService, private readonly twentyConfigService: TwentyConfigService, private readonly transientTokenService: TransientTokenService, - @InjectRepository(Workspace) - private readonly workspaceRepository: Repository, + @InjectRepository(WorkspaceEntity) + private readonly workspaceRepository: Repository, private readonly workspaceDomainsService: WorkspaceDomainsService, ) { super(); @@ -95,7 +95,7 @@ export class GoogleAPIsOauthExchangeCodeForTokenGuard extends AuthGuard( private async getWorkspaceFromTransientToken( transientToken: string, - ): Promise { + ): Promise { const { workspaceId } = await this.transientTokenService.verifyTransientToken(transientToken); diff --git a/packages/twenty-server/src/engine/core-modules/auth/guards/google-apis-oauth-request-code.guard.ts b/packages/twenty-server/src/engine/core-modules/auth/guards/google-apis-oauth-request-code.guard.ts index 2737b7a2b69..cce7b9f3d0f 100644 --- a/packages/twenty-server/src/engine/core-modules/auth/guards/google-apis-oauth-request-code.guard.ts +++ b/packages/twenty-server/src/engine/core-modules/auth/guards/google-apis-oauth-request-code.guard.ts @@ -14,7 +14,7 @@ import { setRequestExtraParams } from 'src/engine/core-modules/auth/utils/google import { WorkspaceDomainsService } from 'src/engine/core-modules/domain/workspace-domains/services/workspace-domains.service'; import { GuardRedirectService } from 'src/engine/core-modules/guard-redirect/services/guard-redirect.service'; import { TwentyConfigService } from 'src/engine/core-modules/twenty-config/twenty-config.service'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; @Injectable() export class GoogleAPIsOauthRequestCodeGuard extends AuthGuard('google-apis') { @@ -22,8 +22,8 @@ export class GoogleAPIsOauthRequestCodeGuard extends AuthGuard('google-apis') { private readonly twentyConfigService: TwentyConfigService, private readonly transientTokenService: TransientTokenService, private readonly guardRedirectService: GuardRedirectService, - @InjectRepository(Workspace) - private readonly workspaceRepository: Repository, + @InjectRepository(WorkspaceEntity) + private readonly workspaceRepository: Repository, private readonly workspaceDomainsService: WorkspaceDomainsService, ) { super({ @@ -32,7 +32,7 @@ export class GoogleAPIsOauthRequestCodeGuard extends AuthGuard('google-apis') { } async canActivate(context: ExecutionContext) { - let workspace: Workspace | null = null; + let workspace: WorkspaceEntity | null = null; try { const request = context.switchToHttp().getRequest(); diff --git a/packages/twenty-server/src/engine/core-modules/auth/guards/google-oauth.guard.ts b/packages/twenty-server/src/engine/core-modules/auth/guards/google-oauth.guard.ts index e497ae84baa..1f29a4a3c27 100644 --- a/packages/twenty-server/src/engine/core-modules/auth/guards/google-oauth.guard.ts +++ b/packages/twenty-server/src/engine/core-modules/auth/guards/google-oauth.guard.ts @@ -11,14 +11,14 @@ import { } from 'src/engine/core-modules/auth/auth.exception'; import { WorkspaceDomainsService } from 'src/engine/core-modules/domain/workspace-domains/services/workspace-domains.service'; import { GuardRedirectService } from 'src/engine/core-modules/guard-redirect/services/guard-redirect.service'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; @Injectable() export class GoogleOauthGuard extends AuthGuard('google') { constructor( private readonly guardRedirectService: GuardRedirectService, - @InjectRepository(Workspace) - private readonly workspaceRepository: Repository, + @InjectRepository(WorkspaceEntity) + private readonly workspaceRepository: Repository, private readonly workspaceDomainsService: WorkspaceDomainsService, ) { super({ @@ -28,7 +28,7 @@ export class GoogleOauthGuard extends AuthGuard('google') { async canActivate(context: ExecutionContext) { const request = context.switchToHttp().getRequest(); - let workspace: Workspace | null = null; + let workspace: WorkspaceEntity | null = null; try { if ( diff --git a/packages/twenty-server/src/engine/core-modules/auth/guards/microsoft-apis-oauth-request-code.guard.ts b/packages/twenty-server/src/engine/core-modules/auth/guards/microsoft-apis-oauth-request-code.guard.ts index b4dac7a0f39..b5c67ae3f17 100644 --- a/packages/twenty-server/src/engine/core-modules/auth/guards/microsoft-apis-oauth-request-code.guard.ts +++ b/packages/twenty-server/src/engine/core-modules/auth/guards/microsoft-apis-oauth-request-code.guard.ts @@ -13,7 +13,7 @@ import { TransientTokenService } from 'src/engine/core-modules/auth/token/servic import { setRequestExtraParams } from 'src/engine/core-modules/auth/utils/google-apis-set-request-extra-params.util'; import { GuardRedirectService } from 'src/engine/core-modules/guard-redirect/services/guard-redirect.service'; import { TwentyConfigService } from 'src/engine/core-modules/twenty-config/twenty-config.service'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { WorkspaceDomainsService } from 'src/engine/core-modules/domain/workspace-domains/services/workspace-domains.service'; @Injectable() @@ -24,8 +24,8 @@ export class MicrosoftAPIsOauthRequestCodeGuard extends AuthGuard( private readonly twentyConfigService: TwentyConfigService, private readonly transientTokenService: TransientTokenService, private readonly guardRedirectService: GuardRedirectService, - @InjectRepository(Workspace) - private readonly workspaceRepository: Repository, + @InjectRepository(WorkspaceEntity) + private readonly workspaceRepository: Repository, private readonly workspaceDomainsService: WorkspaceDomainsService, ) { super({ @@ -34,7 +34,7 @@ export class MicrosoftAPIsOauthRequestCodeGuard extends AuthGuard( } async canActivate(context: ExecutionContext) { - let workspace: Workspace | null = null; + let workspace: WorkspaceEntity | null = null; try { if ( diff --git a/packages/twenty-server/src/engine/core-modules/auth/guards/microsoft-oauth.guard.ts b/packages/twenty-server/src/engine/core-modules/auth/guards/microsoft-oauth.guard.ts index ce28f86773d..0e3f2d78cc8 100644 --- a/packages/twenty-server/src/engine/core-modules/auth/guards/microsoft-oauth.guard.ts +++ b/packages/twenty-server/src/engine/core-modules/auth/guards/microsoft-oauth.guard.ts @@ -6,14 +6,14 @@ import { Repository } from 'typeorm'; import { WorkspaceDomainsService } from 'src/engine/core-modules/domain/workspace-domains/services/workspace-domains.service'; import { GuardRedirectService } from 'src/engine/core-modules/guard-redirect/services/guard-redirect.service'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; @Injectable() export class MicrosoftOAuthGuard extends AuthGuard('microsoft') { constructor( private readonly guardRedirectService: GuardRedirectService, - @InjectRepository(Workspace) - private readonly workspaceRepository: Repository, + @InjectRepository(WorkspaceEntity) + private readonly workspaceRepository: Repository, private readonly workspaceDomainsService: WorkspaceDomainsService, ) { super({ @@ -23,7 +23,7 @@ export class MicrosoftOAuthGuard extends AuthGuard('microsoft') { async canActivate(context: ExecutionContext) { const request = context.switchToHttp().getRequest(); - let workspace: Workspace | null = null; + let workspace: WorkspaceEntity | null = null; try { if ( diff --git a/packages/twenty-server/src/engine/core-modules/auth/guards/oidc-auth.guard.ts b/packages/twenty-server/src/engine/core-modules/auth/guards/oidc-auth.guard.ts index b561aa4d341..4b486b7c3ab 100644 --- a/packages/twenty-server/src/engine/core-modules/auth/guards/oidc-auth.guard.ts +++ b/packages/twenty-server/src/engine/core-modules/auth/guards/oidc-auth.guard.ts @@ -14,7 +14,7 @@ import { WorkspaceDomainsService } from 'src/engine/core-modules/domain/workspac import { GuardRedirectService } from 'src/engine/core-modules/guard-redirect/services/guard-redirect.service'; import { SSOService } from 'src/engine/core-modules/sso/services/sso.service'; import { type SSOConfiguration } from 'src/engine/core-modules/sso/types/SSOConfigurations.type'; -import { type WorkspaceSSOIdentityProvider } from 'src/engine/core-modules/sso/workspace-sso-identity-provider.entity'; +import { type WorkspaceSSOIdentityProviderEntity } from 'src/engine/core-modules/sso/workspace-sso-identity-provider.entity'; @Injectable() export class OIDCAuthGuard extends AuthGuard('openidconnect') { @@ -56,7 +56,7 @@ export class OIDCAuthGuard extends AuthGuard('openidconnect') { const request = context.switchToHttp().getRequest(); let identityProvider: - | (SSOConfiguration & WorkspaceSSOIdentityProvider) + | (SSOConfiguration & WorkspaceSSOIdentityProviderEntity) | null = null; try { diff --git a/packages/twenty-server/src/engine/core-modules/auth/guards/oidc-auth.spec.ts b/packages/twenty-server/src/engine/core-modules/auth/guards/oidc-auth.spec.ts index 503718e8bd6..7d8e1af18f0 100644 --- a/packages/twenty-server/src/engine/core-modules/auth/guards/oidc-auth.spec.ts +++ b/packages/twenty-server/src/engine/core-modules/auth/guards/oidc-auth.spec.ts @@ -9,7 +9,7 @@ import { WorkspaceDomainsService } from 'src/engine/core-modules/domain/workspac import { GuardRedirectService } from 'src/engine/core-modules/guard-redirect/services/guard-redirect.service'; import { SSOService } from 'src/engine/core-modules/sso/services/sso.service'; import { type SSOConfiguration } from 'src/engine/core-modules/sso/types/SSOConfigurations.type'; -import { type WorkspaceSSOIdentityProvider } from 'src/engine/core-modules/sso/workspace-sso-identity-provider.entity'; +import { type WorkspaceSSOIdentityProviderEntity } from 'src/engine/core-modules/sso/workspace-sso-identity-provider.entity'; const createMockExecutionContext = (mockedRequest: any): ExecutionContext => { return { @@ -92,7 +92,7 @@ describe('OIDCAuthGuard', () => { id: 'test-id', issuer: 'https://issuer.example.com', workspace: {}, - } as SSOConfiguration & WorkspaceSSOIdentityProvider); + } as SSOConfiguration & WorkspaceSSOIdentityProviderEntity); const result = await guard.canActivate(mockExecutionContext); diff --git a/packages/twenty-server/src/engine/core-modules/auth/guards/saml-auth.guard.ts b/packages/twenty-server/src/engine/core-modules/auth/guards/saml-auth.guard.ts index b6af601a450..e931fbd7dd4 100644 --- a/packages/twenty-server/src/engine/core-modules/auth/guards/saml-auth.guard.ts +++ b/packages/twenty-server/src/engine/core-modules/auth/guards/saml-auth.guard.ts @@ -14,7 +14,7 @@ import { WorkspaceDomainsService } from 'src/engine/core-modules/domain/workspac import { GuardRedirectService } from 'src/engine/core-modules/guard-redirect/services/guard-redirect.service'; import { SSOService } from 'src/engine/core-modules/sso/services/sso.service'; import { type SSOConfiguration } from 'src/engine/core-modules/sso/types/SSOConfigurations.type'; -import { type WorkspaceSSOIdentityProvider } from 'src/engine/core-modules/sso/workspace-sso-identity-provider.entity'; +import { type WorkspaceSSOIdentityProviderEntity } from 'src/engine/core-modules/sso/workspace-sso-identity-provider.entity'; @Injectable() export class SAMLAuthGuard extends AuthGuard('saml') { @@ -30,7 +30,7 @@ export class SAMLAuthGuard extends AuthGuard('saml') { const request = context.switchToHttp().getRequest(); let identityProvider: - | (SSOConfiguration & WorkspaceSSOIdentityProvider) + | (SSOConfiguration & WorkspaceSSOIdentityProviderEntity) | null = null; try { diff --git a/packages/twenty-server/src/engine/core-modules/auth/services/auth-sso.service.ts b/packages/twenty-server/src/engine/core-modules/auth/services/auth-sso.service.ts index 3b2e74a2461..19b71470bca 100644 --- a/packages/twenty-server/src/engine/core-modules/auth/services/auth-sso.service.ts +++ b/packages/twenty-server/src/engine/core-modules/auth/services/auth-sso.service.ts @@ -5,13 +5,13 @@ import { Repository } from 'typeorm'; import { TwentyConfigService } from 'src/engine/core-modules/twenty-config/twenty-config.service'; import { AuthProviderEnum } from 'src/engine/core-modules/workspace/types/workspace.type'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; @Injectable() export class AuthSsoService { constructor( - @InjectRepository(Workspace) - private readonly workspaceRepository: Repository, + @InjectRepository(WorkspaceEntity) + private readonly workspaceRepository: Repository, private readonly twentyConfigService: TwentyConfigService, ) {} diff --git a/packages/twenty-server/src/engine/core-modules/auth/services/auth-sso.spec.ts b/packages/twenty-server/src/engine/core-modules/auth/services/auth-sso.spec.ts index 7f2826a515a..d38e161ad93 100644 --- a/packages/twenty-server/src/engine/core-modules/auth/services/auth-sso.spec.ts +++ b/packages/twenty-server/src/engine/core-modules/auth/services/auth-sso.spec.ts @@ -5,12 +5,12 @@ import { type Repository } from 'typeorm'; import { AuthSsoService } from 'src/engine/core-modules/auth/services/auth-sso.service'; import { TwentyConfigService } from 'src/engine/core-modules/twenty-config/twenty-config.service'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { AuthProviderEnum } from 'src/engine/core-modules/workspace/types/workspace.type'; describe('AuthSsoService', () => { let authSsoService: AuthSsoService; - let workspaceRepository: Repository; + let workspaceRepository: Repository; let twentyConfigService: TwentyConfigService; beforeEach(async () => { @@ -18,7 +18,7 @@ describe('AuthSsoService', () => { providers: [ AuthSsoService, { - provide: getRepositoryToken(Workspace), + provide: getRepositoryToken(WorkspaceEntity), useValue: { findOne: jest.fn(), }, @@ -33,8 +33,8 @@ describe('AuthSsoService', () => { }).compile(); authSsoService = module.get(AuthSsoService); - workspaceRepository = module.get>( - getRepositoryToken(Workspace), + workspaceRepository = module.get>( + getRepositoryToken(WorkspaceEntity), ); twentyConfigService = module.get(TwentyConfigService); }); @@ -42,7 +42,7 @@ describe('AuthSsoService', () => { describe('findWorkspaceFromWorkspaceIdOrAuthProvider', () => { it('should return a workspace by workspaceId', async () => { const workspaceId = 'workspace-id-123'; - const mockWorkspace = { id: workspaceId } as Workspace; + const mockWorkspace = { id: workspaceId } as WorkspaceEntity; jest .spyOn(workspaceRepository, 'findOne') @@ -66,7 +66,7 @@ describe('AuthSsoService', () => { it('should return a workspace from authProvider and email when multi-workspace mode is enabled', async () => { const authProvider = AuthProviderEnum.Google; const email = 'test@example.com'; - const mockWorkspace = { id: 'workspace-id-456' } as Workspace; + const mockWorkspace = { id: 'workspace-id-456' } as WorkspaceEntity; jest.spyOn(twentyConfigService, 'get').mockReturnValue(true); jest diff --git a/packages/twenty-server/src/engine/core-modules/auth/services/auth.service.spec.ts b/packages/twenty-server/src/engine/core-modules/auth/services/auth.service.spec.ts index c040e1baecf..b41401b3650 100644 --- a/packages/twenty-server/src/engine/core-modules/auth/services/auth.service.spec.ts +++ b/packages/twenty-server/src/engine/core-modules/auth/services/auth.service.spec.ts @@ -4,7 +4,7 @@ import { getRepositoryToken } from '@nestjs/typeorm'; import bcrypt from 'bcrypt'; import { type Repository } from 'typeorm'; -import { AppToken } from 'src/engine/core-modules/app-token/app-token.entity'; +import { AppTokenEntity } from 'src/engine/core-modules/app-token/app-token.entity'; import { AuditService } from 'src/engine/core-modules/audit/services/audit.service'; import { AuthException, @@ -25,10 +25,10 @@ import { I18nService } from 'src/engine/core-modules/i18n/i18n.service'; import { TwentyConfigService } from 'src/engine/core-modules/twenty-config/twenty-config.service'; import { UserWorkspaceService } from 'src/engine/core-modules/user-workspace/user-workspace.service'; import { UserService } from 'src/engine/core-modules/user/services/user.service'; -import { User } from 'src/engine/core-modules/user/user.entity'; +import { UserEntity } from 'src/engine/core-modules/user/user.entity'; import { WorkspaceInvitationService } from 'src/engine/core-modules/workspace-invitation/services/workspace-invitation.service'; import { AuthProviderEnum } from 'src/engine/core-modules/workspace/types/workspace.type'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { AuthService } from './auth.service'; @@ -39,8 +39,8 @@ const twentyConfigServiceGetMock = jest.fn(); describe('AuthService', () => { let service: AuthService; let userService: UserService; - let workspaceRepository: Repository; - let userRepository: Repository; + let workspaceRepository: Repository; + let userRepository: Repository; let authSsoService: AuthSsoService; let userWorkspaceService: UserWorkspaceService; let workspaceInvitationService: WorkspaceInvitationService; @@ -50,19 +50,19 @@ describe('AuthService', () => { providers: [ AuthService, { - provide: getRepositoryToken(Workspace), + provide: getRepositoryToken(WorkspaceEntity), useValue: { findOne: jest.fn(), }, }, { - provide: getRepositoryToken(User), + provide: getRepositoryToken(UserEntity), useValue: { findOne: jest.fn(), }, }, { - provide: getRepositoryToken(AppToken), + provide: getRepositoryToken(AppTokenEntity), useValue: { createQueryBuilder: jest.fn().mockReturnValue({ leftJoin: jest.fn().mockReturnThis(), @@ -164,10 +164,12 @@ describe('AuthService', () => { authSsoService = module.get(AuthSsoService); userWorkspaceService = module.get(UserWorkspaceService); - workspaceRepository = module.get>( - getRepositoryToken(Workspace), + workspaceRepository = module.get>( + getRepositoryToken(WorkspaceEntity), + ); + userRepository = module.get>( + getRepositoryToken(UserEntity), ); - userRepository = module.get>(getRepositoryToken(User)); }); beforeEach(() => { @@ -179,7 +181,7 @@ describe('AuthService', () => { }); it('challenge - user already member of workspace', async () => { - const workspace = { isPasswordAuthEnabled: true } as Workspace; + const workspace = { isPasswordAuthEnabled: true } as WorkspaceEntity; const user = { email: 'email', password: 'password', @@ -192,7 +194,7 @@ describe('AuthService', () => { email: user.email, passwordHash: 'passwordHash', captchaToken: user.captchaToken, - } as unknown as Promise); + } as unknown as Promise); jest .spyOn(userWorkspaceService, 'checkUserWorkspaceExists') @@ -227,7 +229,7 @@ describe('AuthService', () => { email: user.email, passwordHash: 'passwordHash', captchaToken: user.captchaToken, - } as unknown as Promise); + } as unknown as Promise); (bcrypt.compare as jest.Mock).mockReturnValueOnce(true); jest @@ -254,7 +256,7 @@ describe('AuthService', () => { }, { isPasswordAuthEnabled: true, - } as Workspace, + } as WorkspaceEntity, ); expect(response).toStrictEqual({ @@ -290,7 +292,7 @@ describe('AuthService', () => { id: 'workspace-id', isPublicInviteLinkEnabled: true, approvedAccessDomains: [], - } as unknown as Workspace, + } as unknown as WorkspaceEntity, }); expect(spy).toHaveBeenCalledTimes(1); @@ -315,7 +317,7 @@ describe('AuthService', () => { id: 'workspace-id', isPublicInviteLinkEnabled: true, approvedAccessDomains: [], - } as unknown as Workspace, + } as unknown as WorkspaceEntity, }), ).rejects.toThrow(new Error('Access denied')); @@ -339,7 +341,7 @@ describe('AuthService', () => { id: 'workspace-id', isPublicInviteLinkEnabled: false, approvedAccessDomains: [], - } as unknown as Workspace, + } as unknown as WorkspaceEntity, }), ).rejects.toThrow( new AuthException( @@ -401,9 +403,9 @@ describe('AuthService', () => { id: 'user-id', }, } as ExistingUserOrNewUser['userData'], - invitation: {} as AppToken, + invitation: {} as AppTokenEntity, workspaceInviteHash: undefined, - workspace: { approvedAccessDomains: [] } as unknown as Workspace, + workspace: { approvedAccessDomains: [] } as unknown as WorkspaceEntity, }); expect(spy).toHaveBeenCalledTimes(0); @@ -424,7 +426,7 @@ describe('AuthService', () => { workspace: { isPublicInviteLinkEnabled: true, approvedAccessDomains: [], - } as unknown as Workspace, + } as unknown as WorkspaceEntity, }); expect(spy).toHaveBeenCalledTimes(0); @@ -446,7 +448,7 @@ describe('AuthService', () => { approvedAccessDomains: [ { domain: 'domain.com', isValidated: true }, ], - } as unknown as Workspace, + } as unknown as WorkspaceEntity, }); }).not.toThrow(); }); @@ -474,7 +476,7 @@ describe('AuthService', () => { .spyOn(workspaceRepository, 'findOne') .mockResolvedValue({ approvedAccessDomains: [], - } as unknown as Workspace); + } as unknown as WorkspaceEntity); const spyAuthSsoService = jest.spyOn( authSsoService, 'findWorkspaceFromWorkspaceIdOrAuthProvider', @@ -495,7 +497,7 @@ describe('AuthService', () => { .spyOn(workspaceRepository, 'findOne') .mockResolvedValue({ approvedAccessDomains: [], - } as unknown as Workspace); + } as unknown as WorkspaceEntity); const spyAuthSsoService = jest.spyOn( authSsoService, 'findWorkspaceFromWorkspaceIdOrAuthProvider', @@ -516,7 +518,7 @@ describe('AuthService', () => { const spyAuthSsoService = jest .spyOn(authSsoService, 'findWorkspaceFromWorkspaceIdOrAuthProvider') - .mockResolvedValue({} as Workspace); + .mockResolvedValue({} as WorkspaceEntity); const result = await service.findWorkspaceForSignInUp({ authProvider: AuthProviderEnum.Google, @@ -533,7 +535,7 @@ describe('AuthService', () => { const spyAuthSsoService = jest .spyOn(authSsoService, 'findWorkspaceFromWorkspaceIdOrAuthProvider') - .mockResolvedValue({} as Workspace); + .mockResolvedValue({} as WorkspaceEntity); const result = await service.findWorkspaceForSignInUp({ authProvider: AuthProviderEnum.SSO, diff --git a/packages/twenty-server/src/engine/core-modules/auth/services/auth.service.ts b/packages/twenty-server/src/engine/core-modules/auth/services/auth.service.ts index 4a8232d370f..6716a0357ca 100644 --- a/packages/twenty-server/src/engine/core-modules/auth/services/auth.service.ts +++ b/packages/twenty-server/src/engine/core-modules/auth/services/auth.service.ts @@ -15,7 +15,7 @@ import { Repository } from 'typeorm'; import { NodeEnvironment } from 'src/engine/core-modules/twenty-config/interfaces/node-environment.interface'; import { - AppToken, + AppTokenEntity, AppTokenType, } from 'src/engine/core-modules/app-token/app-token.entity'; import { AuditService } from 'src/engine/core-modules/audit/services/audit.service'; @@ -28,13 +28,13 @@ import { compareHash, hashPassword, } from 'src/engine/core-modules/auth/auth.util'; -import { type AuthorizeApp } from 'src/engine/core-modules/auth/dto/authorize-app.entity'; +import { type AuthorizeAppOutput } from 'src/engine/core-modules/auth/dto/authorize-app.dto'; import { type AuthorizeAppInput } from 'src/engine/core-modules/auth/dto/authorize-app.input'; -import { type AuthTokens } from 'src/engine/core-modules/auth/dto/token.entity'; -import { type UpdatePassword } from 'src/engine/core-modules/auth/dto/update-password.entity'; +import { type AuthTokens } from 'src/engine/core-modules/auth/dto/auth-tokens.dto'; +import { type UpdatePasswordOutput } from 'src/engine/core-modules/auth/dto/update-password.dto'; import { type UserCredentialsInput } from 'src/engine/core-modules/auth/dto/user-credentials.input'; -import { type CheckUserExistOutput } from 'src/engine/core-modules/auth/dto/user-exists.entity'; -import { type WorkspaceInviteHashValid } from 'src/engine/core-modules/auth/dto/workspace-invite-hash-valid.entity'; +import { type CheckUserExistOutput } from 'src/engine/core-modules/auth/dto/user-exists.dto'; +import { type WorkspaceInviteHashValidOutput } from 'src/engine/core-modules/auth/dto/workspace-invite-hash-valid.dto'; import { AuthSsoService } from 'src/engine/core-modules/auth/services/auth-sso.service'; import { SignInUpService } from 'src/engine/core-modules/auth/services/sign-in-up.service'; import { type GoogleRequest } from 'src/engine/core-modules/auth/strategies/google.auth.strategy'; @@ -59,10 +59,10 @@ import { I18nService } from 'src/engine/core-modules/i18n/i18n.service'; import { TwentyConfigService } from 'src/engine/core-modules/twenty-config/twenty-config.service'; import { UserWorkspaceService } from 'src/engine/core-modules/user-workspace/user-workspace.service'; import { UserService } from 'src/engine/core-modules/user/services/user.service'; -import { User } from 'src/engine/core-modules/user/user.entity'; +import { UserEntity } from 'src/engine/core-modules/user/user.entity'; import { WorkspaceInvitationService } from 'src/engine/core-modules/workspace-invitation/services/workspace-invitation.service'; import { AuthProviderEnum } from 'src/engine/core-modules/workspace/types/workspace.type'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { workspaceValidator } from 'src/engine/core-modules/workspace/workspace.validate'; @Injectable() @@ -81,21 +81,21 @@ export class AuthService { private readonly authSsoService: AuthSsoService, private readonly userService: UserService, private readonly signInUpService: SignInUpService, - @InjectRepository(Workspace) - private readonly workspaceRepository: Repository, - @InjectRepository(User) - private readonly userRepository: Repository, + @InjectRepository(WorkspaceEntity) + private readonly workspaceRepository: Repository, + @InjectRepository(UserEntity) + private readonly userRepository: Repository, private readonly twentyConfigService: TwentyConfigService, private readonly emailService: EmailService, - @InjectRepository(AppToken) - private readonly appTokenRepository: Repository, + @InjectRepository(AppTokenEntity) + private readonly appTokenRepository: Repository, private readonly i18nService: I18nService, private readonly auditService: AuditService, ) {} private async checkAccessAndUseInvitationOrThrow( - workspace: Workspace, - user: User, + workspace: WorkspaceEntity, + user: UserEntity, ) { if ( await this.userWorkspaceService.checkUserWorkspaceExists( @@ -133,7 +133,7 @@ export class AuthService { async validateLoginWithPassword( input: UserCredentialsInput, - targetWorkspace?: Workspace, + targetWorkspace?: WorkspaceEntity, ) { if (targetWorkspace && !targetWorkspace.isPasswordAuthEnabled) { throw new AuthException( @@ -223,7 +223,7 @@ export class AuthService { private async isAuthProviderEnabledOrThrow( userData: ExistingUserOrNewUser['userData'], authParams: AuthProviderWithPasswordType['authParams'], - workspace: Workspace | undefined | null, + workspace: WorkspaceEntity | undefined | null, ) { if (authParams.provider === AuthProviderEnum.Password) { await this.validatePassword(userData, authParams); @@ -392,7 +392,7 @@ export class AuthService { async checkWorkspaceInviteHashIsValid( inviteHash: string, - ): Promise { + ): Promise { const workspace = await this.workspaceRepository.findOneBy({ inviteHash, }); @@ -402,9 +402,9 @@ export class AuthService { async generateAuthorizationCode( authorizeAppInput: AuthorizeAppInput, - user: User, - workspace: Workspace, - ): Promise { + user: UserEntity, + workspace: WorkspaceEntity, + ): Promise { // TODO: replace with db call to - third party app table const apps = [ { @@ -490,7 +490,7 @@ export class AuthService { async updatePassword( userId: string, newPassword: string, - ): Promise { + ): Promise { if (!userId) { throw new AuthException( 'User ID is required', @@ -563,7 +563,7 @@ export class AuthService { async findWorkspaceFromInviteHashOrFail( inviteHash: string, - ): Promise { + ): Promise { const workspace = await this.workspaceRepository.findOneBy({ inviteHash, }); @@ -601,7 +601,7 @@ export class AuthService { async findInvitationForSignInUp( params: { - currentWorkspace: Workspace; + currentWorkspace: WorkspaceEntity; } & ({ workspacePersonalInviteToken: string } | { email: string }), ) { const qr = this.appTokenRepository @@ -675,7 +675,7 @@ export class AuthService { formatUserDataPayload( newUserPayload: SignInUpNewUserPayload, - existingUser?: User | null, + existingUser?: UserEntity | null, ): ExistingUserOrNewUser { return { userData: existingUser diff --git a/packages/twenty-server/src/engine/core-modules/auth/services/google-apis.service.ts b/packages/twenty-server/src/engine/core-modules/auth/services/google-apis.service.ts index 34bcfd9d6be..d5845a50042 100644 --- a/packages/twenty-server/src/engine/core-modules/auth/services/google-apis.service.ts +++ b/packages/twenty-server/src/engine/core-modules/auth/services/google-apis.service.ts @@ -40,7 +40,7 @@ import { MessagingMessageListFetchJob, type MessagingMessageListFetchJobData, } from 'src/modules/messaging/message-import-manager/jobs/messaging-message-list-fetch.job'; -import { type WorkspaceMemberWorkspaceEntity } from 'src/modules/workspace-member/standard-objects/workspace-member.workspace-entity'; +import { WorkspaceMemberWorkspaceEntity } from 'src/modules/workspace-member/standard-objects/workspace-member.workspace-entity'; @Injectable() export class GoogleAPIsService { diff --git a/packages/twenty-server/src/engine/core-modules/auth/services/microsoft-apis.service.ts b/packages/twenty-server/src/engine/core-modules/auth/services/microsoft-apis.service.ts index 00e30e1b8f6..f1d7cf07373 100644 --- a/packages/twenty-server/src/engine/core-modules/auth/services/microsoft-apis.service.ts +++ b/packages/twenty-server/src/engine/core-modules/auth/services/microsoft-apis.service.ts @@ -37,7 +37,7 @@ import { MessagingMessageListFetchJob, type MessagingMessageListFetchJobData, } from 'src/modules/messaging/message-import-manager/jobs/messaging-message-list-fetch.job'; -import { type WorkspaceMemberWorkspaceEntity } from 'src/modules/workspace-member/standard-objects/workspace-member.workspace-entity'; +import { WorkspaceMemberWorkspaceEntity } from 'src/modules/workspace-member/standard-objects/workspace-member.workspace-entity'; @Injectable() export class MicrosoftAPIsService { diff --git a/packages/twenty-server/src/engine/core-modules/auth/services/oauth.service.ts b/packages/twenty-server/src/engine/core-modules/auth/services/oauth.service.ts index c9c0b338ce5..a76c40744d9 100644 --- a/packages/twenty-server/src/engine/core-modules/auth/services/oauth.service.ts +++ b/packages/twenty-server/src/engine/core-modules/auth/services/oauth.service.ts @@ -5,7 +5,7 @@ // // import { Repository } from 'typeorm'; // -// import { AppToken } from 'src/engine/core-modules/app-token/app-token.entity'; +// import { AppTokenEntity } from 'src/engine/core-modules/app-token/app-token.entity'; // import { // AuthException, // AuthExceptionCode, @@ -15,16 +15,16 @@ // import { AccessTokenService } from 'src/engine/core-modules/auth/token/services/access-token.service'; // import { LoginTokenService } from 'src/engine/core-modules/auth/token/services/login-token.service'; // import { RefreshTokenService } from 'src/engine/core-modules/auth/token/services/refresh-token.service'; -// import { User } from 'src/engine/core-modules/user/user.entity'; +// import { UserEntity } from 'src/engine/core-modules/user/user.entity'; // import { userValidator } from 'src/engine/core-modules/user/user.validate'; // // @Injectable() // export class OAuthService { // constructor( -// @InjectRepository(User) -// private readonly userRepository: Repository, -// @InjectRepository(AppToken) -// private readonly appTokenRepository: Repository, +// @InjectRepository(UserEntity) +// private readonly userRepository: Repository, +// @InjectRepository(AppTokenEntity) +// private readonly appTokenRepository: Repository, // private readonly accessTokenService: AccessTokenService, // private readonly refreshTokenService: RefreshTokenService, // private readonly loginTokenService: LoginTokenService, diff --git a/packages/twenty-server/src/engine/core-modules/auth/services/reset-password.service.spec.ts b/packages/twenty-server/src/engine/core-modules/auth/services/reset-password.service.spec.ts index 271c34909a6..cb56da4c38e 100644 --- a/packages/twenty-server/src/engine/core-modules/auth/services/reset-password.service.spec.ts +++ b/packages/twenty-server/src/engine/core-modules/auth/services/reset-password.service.spec.ts @@ -5,7 +5,7 @@ import { addMilliseconds } from 'date-fns'; import { Repository } from 'typeorm'; import { - AppToken, + AppTokenEntity, AppTokenType, } from 'src/engine/core-modules/app-token/app-token.entity'; import { @@ -18,8 +18,8 @@ import { EmailService } from 'src/engine/core-modules/email/email.service'; import { I18nService } from 'src/engine/core-modules/i18n/i18n.service'; import { TwentyConfigService } from 'src/engine/core-modules/twenty-config/twenty-config.service'; import { UserService } from 'src/engine/core-modules/user/services/user.service'; -import { type User } from 'src/engine/core-modules/user/user.entity'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { type UserEntity } from 'src/engine/core-modules/user/user.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { ResetPasswordService } from './reset-password.service'; @@ -37,8 +37,8 @@ jest.mock('@react-email/render', () => ({ describe('ResetPasswordService', () => { let service: ResetPasswordService; let userService: UserService; - let workspaceRepository: Repository; - let appTokenRepository: Repository; + let workspaceRepository: Repository; + let appTokenRepository: Repository; let emailService: EmailService; let twentyConfigService: TwentyConfigService; let workspaceDomainsService: WorkspaceDomainsService; @@ -55,15 +55,15 @@ describe('ResetPasswordService', () => { }, }, { - provide: getRepositoryToken(Workspace), + provide: getRepositoryToken(WorkspaceEntity), useClass: Repository, }, { - provide: getRepositoryToken(AppToken), + provide: getRepositoryToken(AppTokenEntity), useClass: Repository, }, { - provide: getRepositoryToken(Workspace), + provide: getRepositoryToken(WorkspaceEntity), useClass: Repository, }, { @@ -105,11 +105,11 @@ describe('ResetPasswordService', () => { service = module.get(ResetPasswordService); userService = module.get(UserService); - workspaceRepository = module.get>( - getRepositoryToken(Workspace), + workspaceRepository = module.get>( + getRepositoryToken(WorkspaceEntity), ); - appTokenRepository = module.get>( - getRepositoryToken(AppToken), + appTokenRepository = module.get>( + getRepositoryToken(AppTokenEntity), ); emailService = module.get(EmailService); twentyConfigService = module.get(TwentyConfigService); @@ -129,9 +129,11 @@ describe('ResetPasswordService', () => { jest .spyOn(userService, 'findUserByEmailOrThrow') - .mockResolvedValue(mockUser as User); + .mockResolvedValue(mockUser as UserEntity); jest.spyOn(appTokenRepository, 'findOne').mockResolvedValue(null); - jest.spyOn(appTokenRepository, 'save').mockResolvedValue({} as AppToken); + jest + .spyOn(appTokenRepository, 'save') + .mockResolvedValue({} as AppTokenEntity); jest.spyOn(twentyConfigService, 'get').mockReturnValue('1h'); const result = await service.generatePasswordResetToken( @@ -175,10 +177,10 @@ describe('ResetPasswordService', () => { jest .spyOn(userService, 'findUserByEmailOrThrow') - .mockResolvedValue(mockUser as User); + .mockResolvedValue(mockUser as UserEntity); jest .spyOn(appTokenRepository, 'findOne') - .mockResolvedValue(mockExistingToken as AppToken); + .mockResolvedValue(mockExistingToken as AppTokenEntity); await expect( service.generatePasswordResetToken('test@example.com', 'workspace-id'), @@ -197,10 +199,10 @@ describe('ResetPasswordService', () => { jest .spyOn(userService, 'findUserByEmailOrThrow') - .mockResolvedValue(mockUser as User); + .mockResolvedValue(mockUser as UserEntity); jest .spyOn(workspaceRepository, 'findOneBy') - .mockResolvedValue({ id: 'workspace-id' } as Workspace); + .mockResolvedValue({ id: 'workspace-id' } as WorkspaceEntity); jest .spyOn(twentyConfigService, 'get') .mockReturnValue('http://localhost:3000'); @@ -250,10 +252,10 @@ describe('ResetPasswordService', () => { jest .spyOn(appTokenRepository, 'findOne') - .mockResolvedValue(mockToken as AppToken); + .mockResolvedValue(mockToken as AppTokenEntity); jest .spyOn(userService, 'findUserByIdOrThrow') - .mockResolvedValue(mockUser as User); + .mockResolvedValue(mockUser as UserEntity); const result = await service.validatePasswordResetToken('validToken'); @@ -275,7 +277,7 @@ describe('ResetPasswordService', () => { jest .spyOn(userService, 'findUserByIdOrThrow') - .mockResolvedValue(mockUser as User); + .mockResolvedValue(mockUser as UserEntity); jest.spyOn(appTokenRepository, 'update').mockResolvedValue({} as any); const result = await service.invalidatePasswordResetToken('1'); diff --git a/packages/twenty-server/src/engine/core-modules/auth/services/reset-password.service.ts b/packages/twenty-server/src/engine/core-modules/auth/services/reset-password.service.ts index ad8c5e444c3..5a68f8c353f 100644 --- a/packages/twenty-server/src/engine/core-modules/auth/services/reset-password.service.ts +++ b/packages/twenty-server/src/engine/core-modules/auth/services/reset-password.service.ts @@ -14,22 +14,22 @@ import { assertIsDefinedOrThrow, getAppPath } from 'twenty-shared/utils'; import { IsNull, MoreThan, Repository } from 'typeorm'; import { - AppToken, + AppTokenEntity, AppTokenType, } from 'src/engine/core-modules/app-token/app-token.entity'; import { AuthException, AuthExceptionCode, } from 'src/engine/core-modules/auth/auth.exception'; -import { type EmailPasswordResetLink } from 'src/engine/core-modules/auth/dto/email-password-reset-link.entity'; -import { type InvalidatePassword } from 'src/engine/core-modules/auth/dto/invalidate-password.entity'; -import { type PasswordResetToken } from 'src/engine/core-modules/auth/dto/token.entity'; -import { type ValidatePasswordResetToken } from 'src/engine/core-modules/auth/dto/validate-password-reset-token.entity'; +import { type EmailPasswordResetLinkOutput } from 'src/engine/core-modules/auth/dto/email-password-reset-link.dto'; +import { type InvalidatePasswordOutput } from 'src/engine/core-modules/auth/dto/invalidate-password.dto'; +import { type PasswordResetToken } from 'src/engine/core-modules/auth/dto/password-reset-token.dto'; +import { type ValidatePasswordResetTokenOutput } from 'src/engine/core-modules/auth/dto/validate-password-reset-token.dto'; import { EmailService } from 'src/engine/core-modules/email/email.service'; import { I18nService } from 'src/engine/core-modules/i18n/i18n.service'; import { TwentyConfigService } from 'src/engine/core-modules/twenty-config/twenty-config.service'; import { UserService } from 'src/engine/core-modules/user/services/user.service'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { WorkspaceNotFoundDefaultError } from 'src/engine/core-modules/workspace/workspace.exception'; import { WorkspaceDomainsService } from 'src/engine/core-modules/domain/workspace-domains/services/workspace-domains.service'; @@ -38,10 +38,10 @@ export class ResetPasswordService { constructor( private readonly twentyConfigService: TwentyConfigService, private readonly workspaceDomainsService: WorkspaceDomainsService, - @InjectRepository(Workspace) - private readonly workspaceRepository: Repository, - @InjectRepository(AppToken) - private readonly appTokenRepository: Repository, + @InjectRepository(WorkspaceEntity) + private readonly workspaceRepository: Repository, + @InjectRepository(AppTokenEntity) + private readonly appTokenRepository: Repository, private readonly emailService: EmailService, private readonly i18nService: I18nService, private readonly userService: UserService, @@ -115,7 +115,7 @@ export class ResetPasswordService { resetToken: PasswordResetToken, email: string, locale: keyof typeof APP_LOCALES, - ): Promise { + ): Promise { const user = await this.userService.findUserByEmailOrThrow( email, new AuthException('User not found', AuthExceptionCode.INVALID_INPUT), @@ -172,7 +172,7 @@ export class ResetPasswordService { async validatePasswordResetToken( resetToken: string, - ): Promise { + ): Promise { const hashedResetToken = crypto .createHash('sha256') .update(resetToken) @@ -207,7 +207,7 @@ export class ResetPasswordService { async invalidatePasswordResetToken( userId: string, - ): Promise { + ): Promise { const user = await this.userService.findUserByIdOrThrow( userId, new AuthException('User not found', AuthExceptionCode.INVALID_INPUT), diff --git a/packages/twenty-server/src/engine/core-modules/auth/services/sign-in-up.service.spec.ts b/packages/twenty-server/src/engine/core-modules/auth/services/sign-in-up.service.spec.ts index 7ff20baa73d..ac38c1ea3da 100644 --- a/packages/twenty-server/src/engine/core-modules/auth/services/sign-in-up.service.spec.ts +++ b/packages/twenty-server/src/engine/core-modules/auth/services/sign-in-up.service.spec.ts @@ -5,7 +5,7 @@ import { getRepositoryToken } from '@nestjs/typeorm'; import { WorkspaceActivationStatus } from 'twenty-shared/workspace'; import { type Repository } from 'typeorm'; -import { type AppToken } from 'src/engine/core-modules/app-token/app-token.entity'; +import { type AppTokenEntity } from 'src/engine/core-modules/app-token/app-token.entity'; import { AuthException, AuthExceptionCode, @@ -22,13 +22,13 @@ import { FeatureFlagService } from 'src/engine/core-modules/feature-flag/service import { FileUploadService } from 'src/engine/core-modules/file/file-upload/services/file-upload.service'; import { OnboardingService } from 'src/engine/core-modules/onboarding/onboarding.service'; import { TwentyConfigService } from 'src/engine/core-modules/twenty-config/twenty-config.service'; -import { type UserWorkspace } from 'src/engine/core-modules/user-workspace/user-workspace.entity'; import { UserWorkspaceService } from 'src/engine/core-modules/user-workspace/user-workspace.service'; +import { type UserWorkspaceEntity } from 'src/engine/core-modules/user-workspace/user-workspace.entity'; import { UserService } from 'src/engine/core-modules/user/services/user.service'; -import { User } from 'src/engine/core-modules/user/user.entity'; +import { UserEntity } from 'src/engine/core-modules/user/user.entity'; import { WorkspaceInvitationService } from 'src/engine/core-modules/workspace-invitation/services/workspace-invitation.service'; import { AuthProviderEnum } from 'src/engine/core-modules/workspace/types/workspace.type'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { UserRoleService } from 'src/engine/metadata-modules/user-role/user-role.service'; import { WorkspaceEventEmitter } from 'src/engine/workspace-event-emitter/workspace-event-emitter'; @@ -40,8 +40,8 @@ jest.mock('src/utils/image', () => { describe('SignInUpService', () => { let service: SignInUpService; - let UserRepository: Repository; - let WorkspaceRepository: Repository; + let UserRepository: Repository; + let WorkspaceRepository: Repository; let workspaceInvitationService: WorkspaceInvitationService; let userWorkspaceService: UserWorkspaceService; let twentyConfigService: TwentyConfigService; @@ -52,14 +52,14 @@ describe('SignInUpService', () => { providers: [ SignInUpService, { - provide: getRepositoryToken(User), + provide: getRepositoryToken(UserEntity), useValue: { create: jest.fn(), save: jest.fn(), }, }, { - provide: getRepositoryToken(Workspace), + provide: getRepositoryToken(WorkspaceEntity), useValue: { save: jest.fn(), create: jest.fn(), @@ -116,7 +116,7 @@ describe('SignInUpService', () => { id: 'test-user-id', email: 'test@test.com', isEmailVerified: true, - } as User), + } as UserEntity), }, }, { @@ -147,8 +147,8 @@ describe('SignInUpService', () => { }).compile(); service = module.get(SignInUpService); - UserRepository = module.get(getRepositoryToken(User)); - WorkspaceRepository = module.get(getRepositoryToken(Workspace)); + UserRepository = module.get(getRepositoryToken(UserEntity)); + WorkspaceRepository = module.get(getRepositoryToken(WorkspaceEntity)); workspaceInvitationService = module.get( WorkspaceInvitationService, ); @@ -164,18 +164,18 @@ describe('SignInUpService', () => { const params: SignInUpBaseParams & ExistingUserOrPartialUserWithPicture & AuthProviderWithPasswordType = { - invitation: { value: 'invitationToken' } as AppToken, + invitation: { value: 'invitationToken' } as AppTokenEntity, workspace: { id: 'workspaceId', activationStatus: WorkspaceActivationStatus.ACTIVE, - } as Workspace, + } as WorkspaceEntity, authParams: { provider: AuthProviderEnum.Password, password: 'validPassword', }, userData: { type: 'existingUser', - existingUser: { email: 'test@example.com' } as User, + existingUser: { email: 'test@example.com' } as UserEntity, }, }; @@ -183,7 +183,7 @@ describe('SignInUpService', () => { .spyOn(workspaceInvitationService, 'validatePersonalInvitation') .mockResolvedValue({ isValid: true, - workspace: params.workspace as Workspace, + workspace: params.workspace as WorkspaceEntity, }); jest @@ -207,7 +207,7 @@ describe('SignInUpService', () => { expect( workspaceInvitationService.invalidateWorkspaceInvitation, ).toHaveBeenCalledWith( - (params.workspace as Workspace).id, + (params.workspace as WorkspaceEntity).id, 'test@example.com', ); expect( @@ -222,14 +222,14 @@ describe('SignInUpService', () => { workspace: { id: 'workspaceId', activationStatus: WorkspaceActivationStatus.ACTIVE, - } as Workspace, + } as WorkspaceEntity, authParams: { provider: AuthProviderEnum.Password, password: 'validPassword', }, userData: { type: 'existingUser', - existingUser: { email: 'test@example.com' } as User, + existingUser: { email: 'test@example.com' } as UserEntity, }, }; @@ -265,22 +265,24 @@ describe('SignInUpService', () => { jest.spyOn(twentyConfigService, 'get').mockReturnValue(false); jest.spyOn(WorkspaceRepository, 'count').mockResolvedValue(0); - jest.spyOn(WorkspaceRepository, 'create').mockReturnValue({} as Workspace); + jest + .spyOn(WorkspaceRepository, 'create') + .mockReturnValue({} as WorkspaceEntity); jest.spyOn(WorkspaceRepository, 'save').mockResolvedValue({ id: 'newWorkspaceId', activationStatus: WorkspaceActivationStatus.ACTIVE, - } as Workspace); - jest.spyOn(UserRepository, 'create').mockReturnValue({} as User); + } as WorkspaceEntity); + jest.spyOn(UserRepository, 'create').mockReturnValue({} as UserEntity); jest .spyOn(subdomainManagerService, 'generateSubdomain') .mockResolvedValue('a-subdomain'); jest .spyOn(UserRepository, 'save') - .mockResolvedValue({ id: 'newUserId' } as User); + .mockResolvedValue({ id: 'newUserId' } as UserEntity); jest .spyOn(userWorkspaceService, 'create') - .mockResolvedValue({} as UserWorkspace); + .mockResolvedValue({} as UserWorkspaceEntity); const result = await service.signInUp(params); @@ -305,14 +307,14 @@ describe('SignInUpService', () => { workspace: { id: 'workspaceId', activationStatus: WorkspaceActivationStatus.PENDING_CREATION, - } as Workspace, + } as WorkspaceEntity, authParams: { provider: AuthProviderEnum.Password, password: 'validPassword', }, userData: { type: 'existingUser', - existingUser: { email: 'test@example.com' } as User, + existingUser: { email: 'test@example.com' } as UserEntity, }, }; @@ -322,7 +324,7 @@ describe('SignInUpService', () => { .mockResolvedValue(undefined); jest .spyOn(userWorkspaceService, 'checkUserWorkspaceExists') - .mockResolvedValue({} as UserWorkspace); + .mockResolvedValue({} as UserWorkspaceEntity); const result = await service.signInUp(params); @@ -340,14 +342,14 @@ describe('SignInUpService', () => { workspace: { id: 'workspaceId', activationStatus: WorkspaceActivationStatus.PENDING_CREATION, - } as Workspace, + } as WorkspaceEntity, authParams: { provider: AuthProviderEnum.Password, password: 'validPassword', }, userData: { type: 'existingUser', - existingUser: { email: 'test@example.com' } as User, + existingUser: { email: 'test@example.com' } as UserEntity, }, }; @@ -375,17 +377,19 @@ describe('SignInUpService', () => { }, userData: { type: 'existingUser', - existingUser: { email: 'existinguser@example.com' } as User, + existingUser: { email: 'existinguser@example.com' } as UserEntity, }, }; jest.spyOn(twentyConfigService, 'get').mockReturnValue(false); jest.spyOn(WorkspaceRepository, 'count').mockResolvedValue(0); - jest.spyOn(WorkspaceRepository, 'create').mockReturnValue({} as Workspace); + jest + .spyOn(WorkspaceRepository, 'create') + .mockReturnValue({} as WorkspaceEntity); jest.spyOn(WorkspaceRepository, 'save').mockResolvedValue({ id: 'newWorkspaceId', activationStatus: WorkspaceActivationStatus.PENDING_CREATION, - } as Workspace); + } as WorkspaceEntity); jest.spyOn(userWorkspaceService, 'create').mockResolvedValue({} as any); const result = await service.signInUp(params); diff --git a/packages/twenty-server/src/engine/core-modules/auth/services/sign-in-up.service.ts b/packages/twenty-server/src/engine/core-modules/auth/services/sign-in-up.service.ts index 6ea595bc849..a4e59d834e2 100644 --- a/packages/twenty-server/src/engine/core-modules/auth/services/sign-in-up.service.ts +++ b/packages/twenty-server/src/engine/core-modules/auth/services/sign-in-up.service.ts @@ -9,7 +9,7 @@ import { Repository } from 'typeorm'; import { v4 } from 'uuid'; import { USER_SIGNUP_EVENT_NAME } from 'src/engine/api/graphql/workspace-query-runner/constants/user-signup-event-name.constants'; -import { type AppToken } from 'src/engine/core-modules/app-token/app-token.entity'; +import { type AppTokenEntity } from 'src/engine/core-modules/app-token/app-token.entity'; import { AuthException, AuthExceptionCode, @@ -31,10 +31,10 @@ import { OnboardingService } from 'src/engine/core-modules/onboarding/onboarding import { TwentyConfigService } from 'src/engine/core-modules/twenty-config/twenty-config.service'; import { UserWorkspaceService } from 'src/engine/core-modules/user-workspace/user-workspace.service'; import { UserService } from 'src/engine/core-modules/user/services/user.service'; -import { User } from 'src/engine/core-modules/user/user.entity'; +import { UserEntity } from 'src/engine/core-modules/user/user.entity'; import { WorkspaceInvitationService } from 'src/engine/core-modules/workspace-invitation/services/workspace-invitation.service'; import { AuthProviderEnum } from 'src/engine/core-modules/workspace/types/workspace.type'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { WorkspaceEventEmitter } from 'src/engine/workspace-event-emitter/workspace-event-emitter'; import { getDomainNameByEmail } from 'src/utils/get-domain-name-by-email'; import { isWorkEmail } from 'src/utils/is-work-email'; @@ -43,10 +43,10 @@ import { isWorkEmail } from 'src/utils/is-work-email'; // eslint-disable-next-line @nx/workspace-inject-workspace-repository export class SignInUpService { constructor( - @InjectRepository(User) - private readonly userRepository: Repository, - @InjectRepository(Workspace) - private readonly workspaceRepository: Repository, + @InjectRepository(UserEntity) + private readonly userRepository: Repository, + @InjectRepository(WorkspaceEntity) + private readonly workspaceRepository: Repository, private readonly workspaceInvitationService: WorkspaceInvitationService, private readonly userWorkspaceService: UserWorkspaceService, private readonly onboardingService: OnboardingService, @@ -153,7 +153,9 @@ export class SignInUpService { } private async signInUpWithPersonalInvitation( - params: { invitation: AppToken } & ExistingUserOrPartialUserWithPicture, + params: { + invitation: AppTokenEntity; + } & ExistingUserOrPartialUserWithPicture, ) { if (!params.invitation) { throw new AuthException( @@ -206,7 +208,7 @@ export class SignInUpService { } private async throwIfWorkspaceIsNotReadyForSignInUp( - workspace: Workspace, + workspace: WorkspaceEntity, user: ExistingUserOrPartialUserWithPicture, ) { if (workspace.activationStatus === WorkspaceActivationStatus.ACTIVE) return; @@ -240,7 +242,7 @@ export class SignInUpService { async signInUpOnExistingWorkspace( params: { - workspace: Workspace; + workspace: WorkspaceEntity; } & ExistingUserOrPartialUserWithPicture, ) { await this.throwIfWorkspaceIsNotReadyForSignInUp(params.workspace, params); @@ -270,7 +272,7 @@ export class SignInUpService { const userData = params.userData as { type: 'existingUser'; - existingUser: User; + existingUser: UserEntity; }; const user = userData.existingUser; @@ -283,7 +285,10 @@ export class SignInUpService { return user; } - private async activateOnboardingForUser(user: User, workspace: Workspace) { + private async activateOnboardingForUser( + user: UserEntity, + workspace: WorkspaceEntity, + ) { await this.onboardingService.setOnboardingConnectAccountPending({ userId: user.id, workspaceId: workspace.id, @@ -368,7 +373,7 @@ export class SignInUpService { } async checkWorkspaceCreationIsAllowedOrThrow( - currentUser: User, + currentUser: UserEntity, ): Promise { if (!this.isWorkspaceCreationLimitedToServerAdmins()) return; diff --git a/packages/twenty-server/src/engine/core-modules/auth/strategies/jwt.auth.strategy.spec.ts b/packages/twenty-server/src/engine/core-modules/auth/strategies/jwt.auth.strategy.spec.ts index 632071cc726..1dc74e48c6c 100644 --- a/packages/twenty-server/src/engine/core-modules/auth/strategies/jwt.auth.strategy.spec.ts +++ b/packages/twenty-server/src/engine/core-modules/auth/strategies/jwt.auth.strategy.spec.ts @@ -5,7 +5,7 @@ import { AuthExceptionCode, } from 'src/engine/core-modules/auth/auth.exception'; import { type JwtPayload } from 'src/engine/core-modules/auth/types/auth-context.type'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { JwtAuthStrategy } from './jwt.auth.strategy'; @@ -94,7 +94,7 @@ describe('JwtAuthStrategy', () => { type: 'API_KEY', }; - const mockWorkspace = new Workspace(); + const mockWorkspace = new WorkspaceEntity(); mockWorkspace.id = 'workspace-id'; workspaceRepository.findOneBy.mockResolvedValue(mockWorkspace); @@ -124,7 +124,7 @@ describe('JwtAuthStrategy', () => { type: 'API_KEY', }; - const mockWorkspace = new Workspace(); + const mockWorkspace = new WorkspaceEntity(); mockWorkspace.id = 'workspace-id'; workspaceRepository.findOneBy.mockResolvedValue(mockWorkspace); @@ -157,7 +157,7 @@ describe('JwtAuthStrategy', () => { type: 'API_KEY', }; - const mockWorkspace = new Workspace(); + const mockWorkspace = new WorkspaceEntity(); mockWorkspace.id = 'workspace-id'; workspaceRepository.findOneBy.mockResolvedValue(mockWorkspace); @@ -203,7 +203,7 @@ describe('JwtAuthStrategy', () => { workspaceId: validWorkspaceId, }; - workspaceRepository.findOneBy.mockResolvedValue(new Workspace()); + workspaceRepository.findOneBy.mockResolvedValue(new WorkspaceEntity()); userRepository.findOne.mockResolvedValue(null); @@ -217,7 +217,7 @@ describe('JwtAuthStrategy', () => { ); await expect(strategy.validate(payload as JwtPayload)).rejects.toThrow( - new AuthException('UserWorkspace not found', expect.any(String)), + new AuthException('UserWorkspaceEntity not found', expect.any(String)), ); try { @@ -239,7 +239,7 @@ describe('JwtAuthStrategy', () => { workspaceId: validWorkspaceId, }; - workspaceRepository.findOneBy.mockResolvedValue(new Workspace()); + workspaceRepository.findOneBy.mockResolvedValue(new WorkspaceEntity()); userRepository.findOne.mockResolvedValue({ lastName: 'lastNameDefault' }); @@ -255,7 +255,7 @@ describe('JwtAuthStrategy', () => { ); await expect(strategy.validate(payload as JwtPayload)).rejects.toThrow( - new AuthException('UserWorkspace not found', expect.any(String)), + new AuthException('UserWorkspaceEntity not found', expect.any(String)), ); try { @@ -277,7 +277,7 @@ describe('JwtAuthStrategy', () => { workspaceId: validWorkspaceId, }; - workspaceRepository.findOneBy.mockResolvedValue(new Workspace()); + workspaceRepository.findOneBy.mockResolvedValue(new WorkspaceEntity()); userRepository.findOne.mockResolvedValue({ lastName: 'lastNameDefault' }); @@ -325,7 +325,7 @@ describe('JwtAuthStrategy', () => { workspace: { id: validWorkspaceId }, }; - const mockWorkspace = new Workspace(); + const mockWorkspace = new WorkspaceEntity(); mockWorkspace.id = validWorkspaceId; workspaceRepository.findOneBy.mockResolvedValue(mockWorkspace); @@ -370,7 +370,7 @@ describe('JwtAuthStrategy', () => { user: { id: validUserId, lastName: 'lastNameDefault' }, workspace: { id: validWorkspaceId }, }; - const mockWorkspace = new Workspace(); + const mockWorkspace = new WorkspaceEntity(); mockWorkspace.id = validWorkspaceId; workspaceRepository.findOneBy.mockResolvedValue(mockWorkspace); @@ -415,7 +415,7 @@ describe('JwtAuthStrategy', () => { workspace: { id: validWorkspaceId }, }; - const mockWorkspace = new Workspace(); + const mockWorkspace = new WorkspaceEntity(); mockWorkspace.id = validWorkspaceId; workspaceRepository.findOneBy.mockResolvedValue(mockWorkspace); @@ -457,7 +457,7 @@ describe('JwtAuthStrategy', () => { impersonatedUserWorkspaceId: validUserWorkspaceId, }; - const mockWorkspace = new Workspace(); + const mockWorkspace = new WorkspaceEntity(); mockWorkspace.id = validWorkspaceId; mockWorkspace.allowImpersonation = true; @@ -515,7 +515,7 @@ describe('JwtAuthStrategy', () => { impersonatedUserWorkspaceId: validUserWorkspaceId, }; - const mockWorkspace = new Workspace(); + const mockWorkspace = new WorkspaceEntity(); mockWorkspace.id = validWorkspaceId; mockWorkspace.allowImpersonation = true; @@ -568,7 +568,7 @@ describe('JwtAuthStrategy', () => { impersonatedUserWorkspaceId: validUserWorkspaceId, }; - const mockWorkspace = new Workspace(); + const mockWorkspace = new WorkspaceEntity(); mockWorkspace.id = validWorkspaceId; mockWorkspace.allowImpersonation = false; // Disabled @@ -637,7 +637,7 @@ describe('JwtAuthStrategy', () => { impersonatedUserWorkspaceId: validUserWorkspaceId, }; - const mockWorkspace = new Workspace(); + const mockWorkspace = new WorkspaceEntity(); mockWorkspace.id = validWorkspaceId; mockWorkspace.allowImpersonation = false; @@ -707,7 +707,7 @@ describe('JwtAuthStrategy', () => { impersonatedUserWorkspaceId, // Different from userWorkspaceId }; - const mockWorkspace = new Workspace(); + const mockWorkspace = new WorkspaceEntity(); mockWorkspace.id = validWorkspaceId; mockWorkspace.allowImpersonation = true; @@ -776,7 +776,7 @@ describe('JwtAuthStrategy', () => { impersonatedUserWorkspaceId: validUserWorkspaceId, }; - const mockWorkspace = new Workspace(); + const mockWorkspace = new WorkspaceEntity(); mockWorkspace.id = validWorkspaceId; mockWorkspace.allowImpersonation = false; // Server level disabled @@ -845,7 +845,7 @@ describe('JwtAuthStrategy', () => { impersonatedUserWorkspaceId: validUserWorkspaceId, }; - const mockWorkspace = new Workspace(); + const mockWorkspace = new WorkspaceEntity(); mockWorkspace.id = validWorkspaceId; mockWorkspace.allowImpersonation = true; // Server level enabled diff --git a/packages/twenty-server/src/engine/core-modules/auth/strategies/jwt.auth.strategy.ts b/packages/twenty-server/src/engine/core-modules/auth/strategies/jwt.auth.strategy.ts index 907d794929f..6223a8e2647 100644 --- a/packages/twenty-server/src/engine/core-modules/auth/strategies/jwt.auth.strategy.ts +++ b/packages/twenty-server/src/engine/core-modules/auth/strategies/jwt.auth.strategy.ts @@ -7,7 +7,7 @@ import { Strategy } from 'passport-jwt'; import { assertIsDefinedOrThrow, isDefined } from 'twenty-shared/utils'; import { Repository } from 'typeorm'; -import { ApiKey } from 'src/engine/core-modules/api-key/api-key.entity'; +import { ApiKeyEntity } from 'src/engine/core-modules/api-key/api-key.entity'; import { AuthException, AuthExceptionCode, @@ -21,24 +21,24 @@ import { type WorkspaceAgnosticTokenJwtPayload, } from 'src/engine/core-modules/auth/types/auth-context.type'; import { JwtWrapperService } from 'src/engine/core-modules/jwt/services/jwt-wrapper.service'; -import { UserWorkspace } from 'src/engine/core-modules/user-workspace/user-workspace.entity'; -import { User } from 'src/engine/core-modules/user/user.entity'; +import { UserWorkspaceEntity } from 'src/engine/core-modules/user-workspace/user-workspace.entity'; +import { UserEntity } from 'src/engine/core-modules/user/user.entity'; import { userValidator } from 'src/engine/core-modules/user/user.validate'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { PermissionFlagType } from 'src/engine/metadata-modules/permissions/constants/permission-flag-type.constants'; import { PermissionsService } from 'src/engine/metadata-modules/permissions/permissions.service'; @Injectable() export class JwtAuthStrategy extends PassportStrategy(Strategy, 'jwt') { constructor( private readonly jwtWrapperService: JwtWrapperService, - @InjectRepository(Workspace) - private readonly workspaceRepository: Repository, - @InjectRepository(User) - private readonly userRepository: Repository, - @InjectRepository(UserWorkspace) - private readonly userWorkspaceRepository: Repository, - @InjectRepository(ApiKey) - private readonly apiKeyRepository: Repository, + @InjectRepository(WorkspaceEntity) + private readonly workspaceRepository: Repository, + @InjectRepository(UserEntity) + private readonly userRepository: Repository, + @InjectRepository(UserWorkspaceEntity) + private readonly userWorkspaceRepository: Repository, + @InjectRepository(ApiKeyEntity) + private readonly apiKeyRepository: Repository, private readonly permissionsService: PermissionsService, ) { const jwtFromRequestFunction = jwtWrapperService.extractJwtFromRequest(); @@ -109,7 +109,7 @@ export class JwtAuthStrategy extends PassportStrategy(Strategy, 'jwt') { private async validateAccessToken( payload: AccessTokenJwtPayload, ): Promise { - let user: User | null = null; + let user: UserEntity | null = null; let context: AuthContext = {}; const workspace = await this.workspaceRepository.findOneBy({ @@ -142,7 +142,7 @@ export class JwtAuthStrategy extends PassportStrategy(Strategy, 'jwt') { if (!payload.userWorkspaceId) { throw new AuthException( - 'UserWorkspace not found', + 'UserWorkspaceEntity not found', AuthExceptionCode.USER_WORKSPACE_NOT_FOUND, ); } @@ -155,7 +155,7 @@ export class JwtAuthStrategy extends PassportStrategy(Strategy, 'jwt') { assertIsDefinedOrThrow( userWorkspace, new AuthException( - 'UserWorkspace not found', + 'UserWorkspaceEntity not found', AuthExceptionCode.USER_WORKSPACE_NOT_FOUND, { userFriendlyMessage: msg`User does not have access to this workspace`, diff --git a/packages/twenty-server/src/engine/core-modules/auth/token/services/access-token.service.spec.ts b/packages/twenty-server/src/engine/core-modules/auth/token/services/access-token.service.spec.ts index 7373a408594..ee7eb8f2d7b 100644 --- a/packages/twenty-server/src/engine/core-modules/auth/token/services/access-token.service.spec.ts +++ b/packages/twenty-server/src/engine/core-modules/auth/token/services/access-token.service.spec.ts @@ -7,16 +7,16 @@ import { type Request } from 'express'; import { WorkspaceActivationStatus } from 'twenty-shared/workspace'; import { Repository } from 'typeorm'; -import { AppToken } from 'src/engine/core-modules/app-token/app-token.entity'; +import { AppTokenEntity } from 'src/engine/core-modules/app-token/app-token.entity'; import { AuthException } from 'src/engine/core-modules/auth/auth.exception'; import { JwtAuthStrategy } from 'src/engine/core-modules/auth/strategies/jwt.auth.strategy'; import { EmailService } from 'src/engine/core-modules/email/email.service'; import { JwtWrapperService } from 'src/engine/core-modules/jwt/services/jwt-wrapper.service'; import { TwentyConfigService } from 'src/engine/core-modules/twenty-config/twenty-config.service'; -import { UserWorkspace } from 'src/engine/core-modules/user-workspace/user-workspace.entity'; -import { User } from 'src/engine/core-modules/user/user.entity'; +import { UserWorkspaceEntity } from 'src/engine/core-modules/user-workspace/user-workspace.entity'; +import { UserEntity } from 'src/engine/core-modules/user/user.entity'; import { AuthProviderEnum } from 'src/engine/core-modules/workspace/types/workspace.type'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { TwentyORMGlobalManager } from 'src/engine/twenty-orm/twenty-orm-global.manager'; import { AccessTokenService } from './access-token.service'; @@ -25,10 +25,10 @@ describe('AccessTokenService', () => { let service: AccessTokenService; let jwtWrapperService: JwtWrapperService; let twentyConfigService: TwentyConfigService; - let userRepository: Repository; - let workspaceRepository: Repository; + let userRepository: Repository; + let workspaceRepository: Repository; let twentyORMGlobalManager: TwentyORMGlobalManager; - let userWorkspaceRepository: Repository; + let userWorkspaceRepository: Repository; beforeEach(async () => { const module: TestingModule = await Test.createTestingModule({ @@ -57,19 +57,19 @@ describe('AccessTokenService', () => { }, }, { - provide: getRepositoryToken(User), + provide: getRepositoryToken(UserEntity), useClass: Repository, }, { - provide: getRepositoryToken(AppToken), + provide: getRepositoryToken(AppTokenEntity), useClass: Repository, }, { - provide: getRepositoryToken(Workspace), + provide: getRepositoryToken(WorkspaceEntity), useClass: Repository, }, { - provide: getRepositoryToken(UserWorkspace), + provide: getRepositoryToken(UserWorkspaceEntity), useClass: Repository, }, { @@ -88,15 +88,17 @@ describe('AccessTokenService', () => { service = module.get(AccessTokenService); jwtWrapperService = module.get(JwtWrapperService); twentyConfigService = module.get(TwentyConfigService); - userRepository = module.get>(getRepositoryToken(User)); - workspaceRepository = module.get>( - getRepositoryToken(Workspace), + userRepository = module.get>( + getRepositoryToken(UserEntity), + ); + workspaceRepository = module.get>( + getRepositoryToken(WorkspaceEntity), ); twentyORMGlobalManager = module.get( TwentyORMGlobalManager, ); - userWorkspaceRepository = module.get>( - getRepositoryToken(UserWorkspace), + userWorkspaceRepository = module.get>( + getRepositoryToken(UserWorkspaceEntity), ); }); @@ -120,13 +122,15 @@ describe('AccessTokenService', () => { const mockToken = 'mock-token'; jest.spyOn(twentyConfigService, 'get').mockReturnValue('1h'); - jest.spyOn(userRepository, 'findOne').mockResolvedValue(mockUser as User); + jest + .spyOn(userRepository, 'findOne') + .mockResolvedValue(mockUser as UserEntity); jest .spyOn(workspaceRepository, 'findOne') - .mockResolvedValue(mockWorkspace as Workspace); + .mockResolvedValue(mockWorkspace as WorkspaceEntity); jest .spyOn(userWorkspaceRepository, 'findOne') - .mockResolvedValue(mockUserWorkspace as UserWorkspace); + .mockResolvedValue(mockUserWorkspace as UserWorkspaceEntity); jest .spyOn(twentyORMGlobalManager, 'getRepositoryForWorkspace') .mockResolvedValue({ @@ -159,33 +163,35 @@ describe('AccessTokenService', () => { const workspaceId = randomUUID(); const impersonatorUserWorkspaceId = randomUUID(); const impersonatedUserWorkspaceId = randomUUID(); - const mockUser = { id: userId } as User; + const mockUser = { id: userId } as UserEntity; const mockWorkspace = { activationStatus: WorkspaceActivationStatus.ACTIVE, id: workspaceId, - } as Workspace; + } as WorkspaceEntity; const mockUserWorkspace = { id: impersonatedUserWorkspaceId, - } as UserWorkspace; + } as UserWorkspaceEntity; const mockWorkspaceMember = { id: randomUUID() }; const mockToken = 'mock-token'; jest.spyOn(twentyConfigService, 'get').mockReturnValue('1h'); - jest.spyOn(userRepository, 'findOne').mockResolvedValue(mockUser as User); + jest + .spyOn(userRepository, 'findOne') + .mockResolvedValue(mockUser as UserEntity); jest .spyOn(workspaceRepository, 'findOne') - .mockResolvedValue(mockWorkspace as Workspace); + .mockResolvedValue(mockWorkspace as WorkspaceEntity); jest .spyOn(userWorkspaceRepository, 'findOne') - .mockResolvedValueOnce(mockUserWorkspace as UserWorkspace) + .mockResolvedValueOnce(mockUserWorkspace as UserWorkspaceEntity) .mockResolvedValueOnce({ id: impersonatorUserWorkspaceId, workspaceId, - } as UserWorkspace) + } as UserWorkspaceEntity) .mockResolvedValueOnce({ id: impersonatedUserWorkspaceId, workspaceId, - } as UserWorkspace); + } as UserWorkspaceEntity); jest .spyOn(twentyORMGlobalManager, 'getRepositoryForWorkspace') .mockResolvedValue({ diff --git a/packages/twenty-server/src/engine/core-modules/auth/token/services/access-token.service.ts b/packages/twenty-server/src/engine/core-modules/auth/token/services/access-token.service.ts index a0c23441c4c..e706e4f1594 100644 --- a/packages/twenty-server/src/engine/core-modules/auth/token/services/access-token.service.ts +++ b/packages/twenty-server/src/engine/core-modules/auth/token/services/access-token.service.ts @@ -12,7 +12,7 @@ import { AuthException, AuthExceptionCode, } from 'src/engine/core-modules/auth/auth.exception'; -import { type AuthToken } from 'src/engine/core-modules/auth/dto/token.entity'; +import { type AuthToken } from 'src/engine/core-modules/auth/dto/auth-token.dto'; import { JwtAuthStrategy } from 'src/engine/core-modules/auth/strategies/jwt.auth.strategy'; import { type AccessTokenJwtPayload, @@ -21,14 +21,14 @@ import { } from 'src/engine/core-modules/auth/types/auth-context.type'; import { JwtWrapperService } from 'src/engine/core-modules/jwt/services/jwt-wrapper.service'; import { TwentyConfigService } from 'src/engine/core-modules/twenty-config/twenty-config.service'; -import { UserWorkspace } from 'src/engine/core-modules/user-workspace/user-workspace.entity'; +import { UserWorkspaceEntity } from 'src/engine/core-modules/user-workspace/user-workspace.entity'; import { UserWorkspaceNotFoundDefaultError } from 'src/engine/core-modules/user-workspace/user-workspace.exception'; -import { User } from 'src/engine/core-modules/user/user.entity'; +import { UserEntity } from 'src/engine/core-modules/user/user.entity'; import { userValidator } from 'src/engine/core-modules/user/user.validate'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { WorkspaceNotFoundDefaultError } from 'src/engine/core-modules/workspace/workspace.exception'; import { TwentyORMGlobalManager } from 'src/engine/twenty-orm/twenty-orm-global.manager'; -import { type WorkspaceMemberWorkspaceEntity } from 'src/modules/workspace-member/standard-objects/workspace-member.workspace-entity'; +import { WorkspaceMemberWorkspaceEntity } from 'src/modules/workspace-member/standard-objects/workspace-member.workspace-entity'; @Injectable() export class AccessTokenService { @@ -36,13 +36,13 @@ export class AccessTokenService { private readonly jwtWrapperService: JwtWrapperService, private readonly jwtStrategy: JwtAuthStrategy, private readonly twentyConfigService: TwentyConfigService, - @InjectRepository(User) - private readonly userRepository: Repository, - @InjectRepository(Workspace) - private readonly workspaceRepository: Repository, + @InjectRepository(UserEntity) + private readonly userRepository: Repository, + @InjectRepository(WorkspaceEntity) + private readonly workspaceRepository: Repository, private readonly twentyORMGlobalManager: TwentyORMGlobalManager, - @InjectRepository(UserWorkspace) - private readonly userWorkspaceRepository: Repository, + @InjectRepository(UserWorkspaceEntity) + private readonly userWorkspaceRepository: Repository, ) {} async generateAccessToken({ diff --git a/packages/twenty-server/src/engine/core-modules/auth/token/services/email-verification-token.service.spec.ts b/packages/twenty-server/src/engine/core-modules/auth/token/services/email-verification-token.service.spec.ts index f305432dc24..2c5a361c10f 100644 --- a/packages/twenty-server/src/engine/core-modules/auth/token/services/email-verification-token.service.spec.ts +++ b/packages/twenty-server/src/engine/core-modules/auth/token/services/email-verification-token.service.spec.ts @@ -6,7 +6,7 @@ import crypto from 'crypto'; import { Repository } from 'typeorm'; import { - AppToken, + AppTokenEntity, AppTokenType, } from 'src/engine/core-modules/app-token/app-token.entity'; import { @@ -14,14 +14,14 @@ import { EmailVerificationExceptionCode, } from 'src/engine/core-modules/email-verification/email-verification.exception'; import { TwentyConfigService } from 'src/engine/core-modules/twenty-config/twenty-config.service'; -import { User } from 'src/engine/core-modules/user/user.entity'; +import { UserEntity } from 'src/engine/core-modules/user/user.entity'; import { EmailVerificationTokenService } from './email-verification-token.service'; describe('EmailVerificationTokenService', () => { let service: EmailVerificationTokenService; - let appTokenRepository: Repository; - let userRepository: Repository; + let appTokenRepository: Repository; + let userRepository: Repository; let twentyConfigService: TwentyConfigService; beforeEach(async () => { @@ -29,11 +29,11 @@ describe('EmailVerificationTokenService', () => { providers: [ EmailVerificationTokenService, { - provide: getRepositoryToken(AppToken), + provide: getRepositoryToken(AppTokenEntity), useClass: Repository, }, { - provide: getRepositoryToken(User), + provide: getRepositoryToken(UserEntity), useValue: { findOne: jest.fn(), }, @@ -50,10 +50,12 @@ describe('EmailVerificationTokenService', () => { service = module.get( EmailVerificationTokenService, ); - appTokenRepository = module.get>( - getRepositoryToken(AppToken), + appTokenRepository = module.get>( + getRepositoryToken(AppTokenEntity), + ); + userRepository = module.get>( + getRepositoryToken(UserEntity), ); - userRepository = module.get>(getRepositoryToken(User)); twentyConfigService = module.get(TwentyConfigService); }); @@ -64,8 +66,12 @@ describe('EmailVerificationTokenService', () => { const mockExpiresIn = '24h'; jest.spyOn(twentyConfigService, 'get').mockReturnValue(mockExpiresIn); - jest.spyOn(appTokenRepository, 'create').mockReturnValue({} as AppToken); - jest.spyOn(appTokenRepository, 'save').mockResolvedValue({} as AppToken); + jest + .spyOn(appTokenRepository, 'create') + .mockReturnValue({} as AppTokenEntity); + jest + .spyOn(appTokenRepository, 'save') + .mockResolvedValue({} as AppTokenEntity); const result = await service.generateToken(userId, email); @@ -100,7 +106,7 @@ describe('EmailVerificationTokenService', () => { jest .spyOn(appTokenRepository, 'findOne') - .mockResolvedValue(mockAppToken as AppToken); + .mockResolvedValue(mockAppToken as AppTokenEntity); jest.spyOn(userRepository, 'findOne').mockResolvedValue(null); const result = await service.validateEmailVerificationTokenOrThrow({ @@ -143,7 +149,9 @@ describe('EmailVerificationTokenService', () => { }; jest.spyOn(appTokenRepository, 'findOne').mockResolvedValue(null); - jest.spyOn(userRepository, 'findOne').mockResolvedValue(mockUser as User); + jest + .spyOn(userRepository, 'findOne') + .mockResolvedValue(mockUser as UserEntity); await expect( service.validateEmailVerificationTokenOrThrow({ @@ -176,7 +184,7 @@ describe('EmailVerificationTokenService', () => { jest .spyOn(appTokenRepository, 'findOne') - .mockResolvedValue(mockAppToken as AppToken); + .mockResolvedValue(mockAppToken as AppTokenEntity); jest.spyOn(userRepository, 'findOne').mockResolvedValue(null); await expect( @@ -200,7 +208,7 @@ describe('EmailVerificationTokenService', () => { jest .spyOn(appTokenRepository, 'findOne') - .mockResolvedValue(mockAppToken as AppToken); + .mockResolvedValue(mockAppToken as AppTokenEntity); jest.spyOn(userRepository, 'findOne').mockResolvedValue(null); await expect( @@ -224,7 +232,7 @@ describe('EmailVerificationTokenService', () => { jest .spyOn(appTokenRepository, 'findOne') - .mockResolvedValue(mockAppToken as AppToken); + .mockResolvedValue(mockAppToken as AppTokenEntity); jest.spyOn(userRepository, 'findOne').mockResolvedValue(null); await expect( @@ -249,7 +257,7 @@ describe('EmailVerificationTokenService', () => { jest .spyOn(appTokenRepository, 'findOne') - .mockResolvedValue(mockAppToken as AppToken); + .mockResolvedValue(mockAppToken as AppTokenEntity); jest.spyOn(userRepository, 'findOne').mockResolvedValue(null); await expect( diff --git a/packages/twenty-server/src/engine/core-modules/auth/token/services/email-verification-token.service.ts b/packages/twenty-server/src/engine/core-modules/auth/token/services/email-verification-token.service.ts index 469406ee1f8..870b575308a 100644 --- a/packages/twenty-server/src/engine/core-modules/auth/token/services/email-verification-token.service.ts +++ b/packages/twenty-server/src/engine/core-modules/auth/token/services/email-verification-token.service.ts @@ -9,24 +9,24 @@ import ms from 'ms'; import { Repository } from 'typeorm'; import { - AppToken, + AppTokenEntity, AppTokenType, } from 'src/engine/core-modules/app-token/app-token.entity'; -import { type AuthToken } from 'src/engine/core-modules/auth/dto/token.entity'; +import { type AuthToken } from 'src/engine/core-modules/auth/dto/auth-token.dto'; import { EmailVerificationException, EmailVerificationExceptionCode, } from 'src/engine/core-modules/email-verification/email-verification.exception'; import { TwentyConfigService } from 'src/engine/core-modules/twenty-config/twenty-config.service'; -import { User } from 'src/engine/core-modules/user/user.entity'; +import { UserEntity } from 'src/engine/core-modules/user/user.entity'; @Injectable() export class EmailVerificationTokenService { constructor( - @InjectRepository(AppToken) - private readonly appTokenRepository: Repository, - @InjectRepository(User) - private readonly userRepository: Repository, + @InjectRepository(AppTokenEntity) + private readonly appTokenRepository: Repository, + @InjectRepository(UserEntity) + private readonly userRepository: Repository, private readonly twentyConfigService: TwentyConfigService, ) {} diff --git a/packages/twenty-server/src/engine/core-modules/auth/token/services/login-token.service.ts b/packages/twenty-server/src/engine/core-modules/auth/token/services/login-token.service.ts index 0025b34ce3f..92a9434875c 100644 --- a/packages/twenty-server/src/engine/core-modules/auth/token/services/login-token.service.ts +++ b/packages/twenty-server/src/engine/core-modules/auth/token/services/login-token.service.ts @@ -3,7 +3,7 @@ import { Injectable } from '@nestjs/common'; import { addMilliseconds } from 'date-fns'; import ms from 'ms'; -import { type AuthToken } from 'src/engine/core-modules/auth/dto/token.entity'; +import { type AuthToken } from 'src/engine/core-modules/auth/dto/auth-token.dto'; import { type LoginTokenJwtPayload, JwtTokenTypeEnum, diff --git a/packages/twenty-server/src/engine/core-modules/auth/token/services/refresh-token.service.spec.ts b/packages/twenty-server/src/engine/core-modules/auth/token/services/refresh-token.service.spec.ts index 09faaedaa01..746ce0a9c71 100644 --- a/packages/twenty-server/src/engine/core-modules/auth/token/services/refresh-token.service.spec.ts +++ b/packages/twenty-server/src/engine/core-modules/auth/token/services/refresh-token.service.spec.ts @@ -4,14 +4,14 @@ import { getRepositoryToken } from '@nestjs/typeorm'; import { Repository } from 'typeorm'; import { - AppToken, + AppTokenEntity, AppTokenType, } from 'src/engine/core-modules/app-token/app-token.entity'; import { AuthException } from 'src/engine/core-modules/auth/auth.exception'; import { JwtTokenTypeEnum } from 'src/engine/core-modules/auth/types/auth-context.type'; import { JwtWrapperService } from 'src/engine/core-modules/jwt/services/jwt-wrapper.service'; import { TwentyConfigService } from 'src/engine/core-modules/twenty-config/twenty-config.service'; -import { User } from 'src/engine/core-modules/user/user.entity'; +import { UserEntity } from 'src/engine/core-modules/user/user.entity'; import { RefreshTokenService } from './refresh-token.service'; @@ -19,8 +19,8 @@ describe('RefreshTokenService', () => { let service: RefreshTokenService; let jwtWrapperService: JwtWrapperService; let twentyConfigService: TwentyConfigService; - let appTokenRepository: Repository; - let userRepository: Repository; + let appTokenRepository: Repository; + let userRepository: Repository; beforeEach(async () => { const module: TestingModule = await Test.createTestingModule({ @@ -42,11 +42,11 @@ describe('RefreshTokenService', () => { }, }, { - provide: getRepositoryToken(AppToken), + provide: getRepositoryToken(AppTokenEntity), useClass: Repository, }, { - provide: getRepositoryToken(User), + provide: getRepositoryToken(UserEntity), useClass: Repository, }, ], @@ -55,10 +55,12 @@ describe('RefreshTokenService', () => { service = module.get(RefreshTokenService); jwtWrapperService = module.get(JwtWrapperService); twentyConfigService = module.get(TwentyConfigService); - appTokenRepository = module.get>( - getRepositoryToken(AppToken), + appTokenRepository = module.get>( + getRepositoryToken(AppTokenEntity), + ); + userRepository = module.get>( + getRepositoryToken(UserEntity), ); - userRepository = module.get>(getRepositoryToken(User)); }); it('should be defined', () => { @@ -76,14 +78,14 @@ describe('RefreshTokenService', () => { id: 'token-id', workspaceId: 'workspace-id', revokedAt: null, - } as AppToken; + } as AppTokenEntity; const mockUser = { id: 'some-id', firstName: 'John', lastName: 'Doe', email: 'john.doe@example.com', defaultAvatarUrl: '', - } as User; + } as UserEntity; jest .spyOn(jwtWrapperService, 'verifyJwtToken') @@ -132,10 +134,10 @@ describe('RefreshTokenService', () => { jest.spyOn(jwtWrapperService, 'sign').mockReturnValue(mockToken); jest .spyOn(appTokenRepository, 'create') - .mockReturnValue({ id: 'new-token-id' } as AppToken); + .mockReturnValue({ id: 'new-token-id' } as AppTokenEntity); jest .spyOn(appTokenRepository, 'save') - .mockResolvedValue({ id: 'new-token-id' } as AppToken); + .mockResolvedValue({ id: 'new-token-id' } as AppTokenEntity); const result = await service.generateRefreshToken({ userId, @@ -195,11 +197,14 @@ describe('RefreshTokenService', () => { impersonatedUserWorkspaceId: 'uw-orig', }); - const token = { id: tokenId, type: AppTokenType.RefreshToken } as AppToken; + const token = { + id: tokenId, + type: AppTokenType.RefreshToken, + } as AppTokenEntity; jest.spyOn(appTokenRepository, 'findOneBy').mockResolvedValue(token); - const user = { id: userId } as User; + const user = { id: userId } as UserEntity; jest.spyOn(userRepository, 'findOne').mockResolvedValue(user); diff --git a/packages/twenty-server/src/engine/core-modules/auth/token/services/refresh-token.service.ts b/packages/twenty-server/src/engine/core-modules/auth/token/services/refresh-token.service.ts index 36f375daec8..ae25a667248 100644 --- a/packages/twenty-server/src/engine/core-modules/auth/token/services/refresh-token.service.ts +++ b/packages/twenty-server/src/engine/core-modules/auth/token/services/refresh-token.service.ts @@ -6,31 +6,31 @@ import ms from 'ms'; import { Repository } from 'typeorm'; import { - AppToken, + AppTokenEntity, AppTokenType, } from 'src/engine/core-modules/app-token/app-token.entity'; import { AuthException, AuthExceptionCode, } from 'src/engine/core-modules/auth/auth.exception'; -import { type AuthToken } from 'src/engine/core-modules/auth/dto/token.entity'; +import { type AuthToken } from 'src/engine/core-modules/auth/dto/auth-token.dto'; import { type RefreshTokenJwtPayload, JwtTokenTypeEnum, } from 'src/engine/core-modules/auth/types/auth-context.type'; import { JwtWrapperService } from 'src/engine/core-modules/jwt/services/jwt-wrapper.service'; import { TwentyConfigService } from 'src/engine/core-modules/twenty-config/twenty-config.service'; -import { User } from 'src/engine/core-modules/user/user.entity'; +import { UserEntity } from 'src/engine/core-modules/user/user.entity'; @Injectable() export class RefreshTokenService { constructor( private readonly jwtWrapperService: JwtWrapperService, private readonly twentyConfigService: TwentyConfigService, - @InjectRepository(AppToken) - private readonly appTokenRepository: Repository, - @InjectRepository(User) - private readonly userRepository: Repository, + @InjectRepository(AppTokenEntity) + private readonly appTokenRepository: Repository, + @InjectRepository(UserEntity) + private readonly userRepository: Repository, ) {} async verifyRefreshToken(refreshToken: string) { diff --git a/packages/twenty-server/src/engine/core-modules/auth/token/services/renew-token.service.spec.ts b/packages/twenty-server/src/engine/core-modules/auth/token/services/renew-token.service.spec.ts index 1f9ed38660f..5360d51a79c 100644 --- a/packages/twenty-server/src/engine/core-modules/auth/token/services/renew-token.service.spec.ts +++ b/packages/twenty-server/src/engine/core-modules/auth/token/services/renew-token.service.spec.ts @@ -3,20 +3,20 @@ import { getRepositoryToken } from '@nestjs/typeorm'; import { Repository } from 'typeorm'; -import { AppToken } from 'src/engine/core-modules/app-token/app-token.entity'; +import { AppTokenEntity } from 'src/engine/core-modules/app-token/app-token.entity'; import { AuthException } from 'src/engine/core-modules/auth/auth.exception'; import { AccessTokenService } from 'src/engine/core-modules/auth/token/services/access-token.service'; import { RefreshTokenService } from 'src/engine/core-modules/auth/token/services/refresh-token.service'; import { WorkspaceAgnosticTokenService } from 'src/engine/core-modules/auth/token/services/workspace-agnostic-token.service'; import { JwtTokenTypeEnum } from 'src/engine/core-modules/auth/types/auth-context.type'; -import { type User } from 'src/engine/core-modules/user/user.entity'; +import { type UserEntity } from 'src/engine/core-modules/user/user.entity'; import { AuthProviderEnum } from 'src/engine/core-modules/workspace/types/workspace.type'; import { RenewTokenService } from './renew-token.service'; describe('RenewTokenService', () => { let service: RenewTokenService; - let appTokenRepository: Repository; + let appTokenRepository: Repository; let accessTokenService: AccessTokenService; let refreshTokenService: RefreshTokenService; @@ -25,7 +25,7 @@ describe('RenewTokenService', () => { providers: [ RenewTokenService, { - provide: getRepositoryToken(AppToken), + provide: getRepositoryToken(AppTokenEntity), useClass: Repository, }, { @@ -51,8 +51,8 @@ describe('RenewTokenService', () => { }).compile(); service = module.get(RenewTokenService); - appTokenRepository = module.get>( - getRepositoryToken(AppToken), + appTokenRepository = module.get>( + getRepositoryToken(AppTokenEntity), ); accessTokenService = module.get(AccessTokenService); refreshTokenService = module.get(RefreshTokenService); @@ -65,7 +65,7 @@ describe('RenewTokenService', () => { describe('generateTokensFromRefreshToken', () => { it('should generate new access and refresh tokens', async () => { const mockRefreshToken = 'valid-refresh-token'; - const mockUser = { id: 'user-id' } as User; + const mockUser = { id: 'user-id' } as UserEntity; const mockWorkspaceId = 'workspace-id'; const mockTokenId = 'token-id'; const mockAccessToken = { @@ -77,14 +77,14 @@ describe('RenewTokenService', () => { expiresAt: new Date(), targetedTokenType: JwtTokenTypeEnum.ACCESS, }; - const mockAppToken: Partial = { + const mockAppToken: Partial = { id: mockTokenId, workspaceId: mockWorkspaceId, - } as AppToken; + } as AppTokenEntity; jest.spyOn(refreshTokenService, 'verifyRefreshToken').mockResolvedValue({ user: mockUser, - token: mockAppToken as AppToken, + token: mockAppToken as AppTokenEntity, authProvider: AuthProviderEnum.Password, targetedTokenType: JwtTokenTypeEnum.ACCESS, isImpersonating: false, @@ -132,7 +132,7 @@ describe('RenewTokenService', () => { it('should propagate impersonation claims when present', async () => { const mockRefreshToken = 'valid-refresh-token'; - const mockUser = { id: 'user-id' } as User; + const mockUser = { id: 'user-id' } as UserEntity; const mockWorkspaceId = 'workspace-id'; const mockTokenId = 'token-id'; const mockAccessToken = { @@ -147,11 +147,11 @@ describe('RenewTokenService', () => { const mockAppToken = { id: mockTokenId, workspaceId: mockWorkspaceId, - } as AppToken; + } as AppTokenEntity; jest.spyOn(refreshTokenService, 'verifyRefreshToken').mockResolvedValue({ user: mockUser, - token: mockAppToken as AppToken, + token: mockAppToken as AppTokenEntity, authProvider: AuthProviderEnum.Password, targetedTokenType: JwtTokenTypeEnum.ACCESS, isImpersonating: true, diff --git a/packages/twenty-server/src/engine/core-modules/auth/token/services/renew-token.service.ts b/packages/twenty-server/src/engine/core-modules/auth/token/services/renew-token.service.ts index 35184c6d57a..4eac69a5f3a 100644 --- a/packages/twenty-server/src/engine/core-modules/auth/token/services/renew-token.service.ts +++ b/packages/twenty-server/src/engine/core-modules/auth/token/services/renew-token.service.ts @@ -4,12 +4,12 @@ import { InjectRepository } from '@nestjs/typeorm'; import { isDefined } from 'twenty-shared/utils'; import { Repository } from 'typeorm'; -import { AppToken } from 'src/engine/core-modules/app-token/app-token.entity'; +import { AppTokenEntity } from 'src/engine/core-modules/app-token/app-token.entity'; import { AuthException, AuthExceptionCode, } from 'src/engine/core-modules/auth/auth.exception'; -import { type AuthToken } from 'src/engine/core-modules/auth/dto/token.entity'; +import { type AuthToken } from 'src/engine/core-modules/auth/dto/auth-token.dto'; import { AccessTokenService } from 'src/engine/core-modules/auth/token/services/access-token.service'; import { RefreshTokenService } from 'src/engine/core-modules/auth/token/services/refresh-token.service'; import { WorkspaceAgnosticTokenService } from 'src/engine/core-modules/auth/token/services/workspace-agnostic-token.service'; @@ -19,8 +19,8 @@ import { AuthProviderEnum } from 'src/engine/core-modules/workspace/types/worksp @Injectable() export class RenewTokenService { constructor( - @InjectRepository(AppToken) - private readonly appTokenRepository: Repository, + @InjectRepository(AppTokenEntity) + private readonly appTokenRepository: Repository, private readonly accessTokenService: AccessTokenService, private readonly workspaceAgnosticTokenService: WorkspaceAgnosticTokenService, private readonly refreshTokenService: RefreshTokenService, diff --git a/packages/twenty-server/src/engine/core-modules/auth/token/services/transient-token.service.ts b/packages/twenty-server/src/engine/core-modules/auth/token/services/transient-token.service.ts index b706b6bf674..46228558c30 100644 --- a/packages/twenty-server/src/engine/core-modules/auth/token/services/transient-token.service.ts +++ b/packages/twenty-server/src/engine/core-modules/auth/token/services/transient-token.service.ts @@ -3,7 +3,7 @@ import { Injectable } from '@nestjs/common'; import { addMilliseconds } from 'date-fns'; import ms from 'ms'; -import { type AuthToken } from 'src/engine/core-modules/auth/dto/token.entity'; +import { type AuthToken } from 'src/engine/core-modules/auth/dto/auth-token.dto'; import { JwtWrapperService } from 'src/engine/core-modules/jwt/services/jwt-wrapper.service'; import { TwentyConfigService } from 'src/engine/core-modules/twenty-config/twenty-config.service'; import { diff --git a/packages/twenty-server/src/engine/core-modules/auth/token/services/workspace-agnostic-token.service.spec.ts b/packages/twenty-server/src/engine/core-modules/auth/token/services/workspace-agnostic-token.service.spec.ts index 3e076539a28..711fa25c0e1 100644 --- a/packages/twenty-server/src/engine/core-modules/auth/token/services/workspace-agnostic-token.service.spec.ts +++ b/packages/twenty-server/src/engine/core-modules/auth/token/services/workspace-agnostic-token.service.spec.ts @@ -6,7 +6,7 @@ import { type Repository } from 'typeorm'; import { AuthException } from 'src/engine/core-modules/auth/auth.exception'; import { JwtWrapperService } from 'src/engine/core-modules/jwt/services/jwt-wrapper.service'; import { TwentyConfigService } from 'src/engine/core-modules/twenty-config/twenty-config.service'; -import { User } from 'src/engine/core-modules/user/user.entity'; +import { UserEntity } from 'src/engine/core-modules/user/user.entity'; import { WorkspaceAgnosticTokenService } from 'src/engine/core-modules/auth/token/services/workspace-agnostic-token.service'; import { AuthProviderEnum } from 'src/engine/core-modules/workspace/types/workspace.type'; @@ -14,7 +14,7 @@ describe('WorkspaceAgnosticToken', () => { let service: WorkspaceAgnosticTokenService; let jwtWrapperService: JwtWrapperService; let twentyConfigService: TwentyConfigService; - let userRepository: Repository; + let userRepository: Repository; beforeEach(async () => { const module: TestingModule = await Test.createTestingModule({ @@ -36,7 +36,7 @@ describe('WorkspaceAgnosticToken', () => { }, }, { - provide: getRepositoryToken(User), + provide: getRepositoryToken(UserEntity), useValue: { findOne: jest.fn(), }, @@ -49,7 +49,9 @@ describe('WorkspaceAgnosticToken', () => { ); jwtWrapperService = module.get(JwtWrapperService); twentyConfigService = module.get(TwentyConfigService); - userRepository = module.get>(getRepositoryToken(User)); + userRepository = module.get>( + getRepositoryToken(UserEntity), + ); }); it('should be defined', () => { @@ -69,7 +71,9 @@ describe('WorkspaceAgnosticToken', () => { return undefined; }); jest.spyOn(jwtWrapperService, 'sign').mockReturnValue(mockToken); - jest.spyOn(userRepository, 'findOne').mockResolvedValue(mockUser as User); + jest + .spyOn(userRepository, 'findOne') + .mockResolvedValue(mockUser as UserEntity); const result = await service.generateWorkspaceAgnosticToken({ userId, @@ -134,7 +138,9 @@ describe('WorkspaceAgnosticToken', () => { jest.spyOn(jwtWrapperService, 'decode').mockReturnValue(mockPayload); jest.spyOn(jwtWrapperService, 'verify').mockReturnValue({}); - jest.spyOn(userRepository, 'findOne').mockResolvedValue(mockUser as User); + jest + .spyOn(userRepository, 'findOne') + .mockResolvedValue(mockUser as UserEntity); const result = await service.validateToken(mockToken); diff --git a/packages/twenty-server/src/engine/core-modules/auth/token/services/workspace-agnostic-token.service.ts b/packages/twenty-server/src/engine/core-modules/auth/token/services/workspace-agnostic-token.service.ts index e5931ace74c..2e379d3b4ce 100644 --- a/packages/twenty-server/src/engine/core-modules/auth/token/services/workspace-agnostic-token.service.ts +++ b/packages/twenty-server/src/engine/core-modules/auth/token/services/workspace-agnostic-token.service.ts @@ -9,7 +9,7 @@ import { AuthException, AuthExceptionCode, } from 'src/engine/core-modules/auth/auth.exception'; -import { type AuthToken } from 'src/engine/core-modules/auth/dto/token.entity'; +import { type AuthToken } from 'src/engine/core-modules/auth/dto/auth-token.dto'; import { type AuthContext, JwtTokenTypeEnum, @@ -17,7 +17,7 @@ import { } from 'src/engine/core-modules/auth/types/auth-context.type'; import { JwtWrapperService } from 'src/engine/core-modules/jwt/services/jwt-wrapper.service'; import { TwentyConfigService } from 'src/engine/core-modules/twenty-config/twenty-config.service'; -import { User } from 'src/engine/core-modules/user/user.entity'; +import { UserEntity } from 'src/engine/core-modules/user/user.entity'; import { userValidator } from 'src/engine/core-modules/user/user.validate'; @Injectable() @@ -25,8 +25,8 @@ export class WorkspaceAgnosticTokenService { constructor( private readonly jwtWrapperService: JwtWrapperService, private readonly twentyConfigService: TwentyConfigService, - @InjectRepository(User) - private readonly userRepository: Repository, + @InjectRepository(UserEntity) + private readonly userRepository: Repository, ) {} async generateWorkspaceAgnosticToken({ diff --git a/packages/twenty-server/src/engine/core-modules/auth/token/token.module.ts b/packages/twenty-server/src/engine/core-modules/auth/token/token.module.ts index 4ab0b9ae623..42d9ecb80d1 100644 --- a/packages/twenty-server/src/engine/core-modules/auth/token/token.module.ts +++ b/packages/twenty-server/src/engine/core-modules/auth/token/token.module.ts @@ -2,8 +2,8 @@ import { Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; import { TypeORMModule } from 'src/database/typeorm/typeorm.module'; -import { ApiKey } from 'src/engine/core-modules/api-key/api-key.entity'; -import { AppToken } from 'src/engine/core-modules/app-token/app-token.entity'; +import { ApiKeyEntity } from 'src/engine/core-modules/api-key/api-key.entity'; +import { AppTokenEntity } from 'src/engine/core-modules/app-token/app-token.entity'; import { JwtAuthStrategy } from 'src/engine/core-modules/auth/strategies/jwt.auth.strategy'; import { AccessTokenService } from 'src/engine/core-modules/auth/token/services/access-token.service'; import { LoginTokenService } from 'src/engine/core-modules/auth/token/services/login-token.service'; @@ -11,9 +11,9 @@ import { RefreshTokenService } from 'src/engine/core-modules/auth/token/services import { RenewTokenService } from 'src/engine/core-modules/auth/token/services/renew-token.service'; import { WorkspaceAgnosticTokenService } from 'src/engine/core-modules/auth/token/services/workspace-agnostic-token.service'; import { JwtModule } from 'src/engine/core-modules/jwt/jwt.module'; -import { UserWorkspace } from 'src/engine/core-modules/user-workspace/user-workspace.entity'; -import { User } from 'src/engine/core-modules/user/user.entity'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { UserWorkspaceEntity } from 'src/engine/core-modules/user-workspace/user-workspace.entity'; +import { UserEntity } from 'src/engine/core-modules/user/user.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { DataSourceModule } from 'src/engine/metadata-modules/data-source/data-source.module'; import { PermissionsModule } from 'src/engine/metadata-modules/permissions/permissions.module'; @@ -21,11 +21,11 @@ import { PermissionsModule } from 'src/engine/metadata-modules/permissions/permi imports: [ JwtModule, TypeOrmModule.forFeature([ - User, - AppToken, - Workspace, - UserWorkspace, - ApiKey, + UserEntity, + AppTokenEntity, + WorkspaceEntity, + UserWorkspaceEntity, + ApiKeyEntity, ]), TypeORMModule, DataSourceModule, diff --git a/packages/twenty-server/src/engine/core-modules/auth/types/auth-context.type.ts b/packages/twenty-server/src/engine/core-modules/auth/types/auth-context.type.ts index 425b26309cb..77459e597a8 100644 --- a/packages/twenty-server/src/engine/core-modules/auth/types/auth-context.type.ts +++ b/packages/twenty-server/src/engine/core-modules/auth/types/auth-context.type.ts @@ -1,16 +1,16 @@ -import { type ApiKey } from 'src/engine/core-modules/api-key/api-key.entity'; -import { type UserWorkspace } from 'src/engine/core-modules/user-workspace/user-workspace.entity'; -import { type User } from 'src/engine/core-modules/user/user.entity'; +import { type ApiKeyEntity } from 'src/engine/core-modules/api-key/api-key.entity'; +import { type UserWorkspaceEntity } from 'src/engine/core-modules/user-workspace/user-workspace.entity'; +import { type UserEntity } from 'src/engine/core-modules/user/user.entity'; import { type AuthProviderEnum } from 'src/engine/core-modules/workspace/types/workspace.type'; -import { type Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { type WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; export type AuthContext = { - user?: User | null | undefined; - apiKey?: ApiKey | null | undefined; + user?: UserEntity | null | undefined; + apiKey?: ApiKeyEntity | null | undefined; workspaceMemberId?: string; - workspace?: Workspace; + workspace?: WorkspaceEntity; userWorkspaceId?: string; - userWorkspace?: UserWorkspace; + userWorkspace?: UserWorkspaceEntity; authProvider?: AuthProviderEnum; impersonationContext?: { impersonatorUserWorkspaceId?: string; diff --git a/packages/twenty-server/src/engine/core-modules/auth/types/signInUp.type.ts b/packages/twenty-server/src/engine/core-modules/auth/types/signInUp.type.ts index 6ac2542a3da..c8241969032 100644 --- a/packages/twenty-server/src/engine/core-modules/auth/types/signInUp.type.ts +++ b/packages/twenty-server/src/engine/core-modules/auth/types/signInUp.type.ts @@ -1,9 +1,9 @@ import { type APP_LOCALES } from 'twenty-shared/translations'; -import { type AppToken } from 'src/engine/core-modules/app-token/app-token.entity'; -import { type User } from 'src/engine/core-modules/user/user.entity'; +import { type AppTokenEntity } from 'src/engine/core-modules/app-token/app-token.entity'; +import { type UserEntity } from 'src/engine/core-modules/user/user.entity'; import { type AuthProviderEnum } from 'src/engine/core-modules/workspace/types/workspace.type'; -import { type Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { type WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; export type SocialSSOSignInUpActionType = | 'create-new-workspace' @@ -11,8 +11,8 @@ export type SocialSSOSignInUpActionType = | 'join-workspace'; export type SignInUpBaseParams = { - invitation?: AppToken; - workspace?: Workspace | null; + invitation?: AppTokenEntity; + workspace?: WorkspaceEntity | null; billingCheckoutSessionState?: string | null; }; @@ -28,11 +28,11 @@ export type SignInUpNewUserPayload = { export type PartialUserWithPicture = { picture?: string; -} & Partial; +} & Partial; export type ExistingUserOrNewUser = { userData: - | { type: 'existingUser'; existingUser: User } + | { type: 'existingUser'; existingUser: UserEntity } | { type: 'newUser'; newUserPayload: SignInUpNewUserPayload; @@ -41,7 +41,7 @@ export type ExistingUserOrNewUser = { export type ExistingUserOrPartialUserWithPicture = { userData: - | { type: 'existingUser'; existingUser: User } + | { type: 'existingUser'; existingUser: UserEntity } | { type: 'newUserWithPicture'; newUserWithPicture: PartialUserWithPicture; diff --git a/packages/twenty-server/src/engine/core-modules/billing-webhook/billing-webhook.module.ts b/packages/twenty-server/src/engine/core-modules/billing-webhook/billing-webhook.module.ts index 7ef313cf668..8e57823f7e2 100644 --- a/packages/twenty-server/src/engine/core-modules/billing-webhook/billing-webhook.module.ts +++ b/packages/twenty-server/src/engine/core-modules/billing-webhook/billing-webhook.module.ts @@ -11,19 +11,19 @@ import { BillingWebhookProductService } from 'src/engine/core-modules/billing-we import { BillingWebhookSubscriptionScheduleService } from 'src/engine/core-modules/billing-webhook/services/billing-webhook-subscription-schedule.service'; import { BillingWebhookSubscriptionService } from 'src/engine/core-modules/billing-webhook/services/billing-webhook-subscription.service'; import { BillingModule } from 'src/engine/core-modules/billing/billing.module'; -import { BillingCustomer } from 'src/engine/core-modules/billing/entities/billing-customer.entity'; -import { BillingEntitlement } from 'src/engine/core-modules/billing/entities/billing-entitlement.entity'; -import { BillingMeter } from 'src/engine/core-modules/billing/entities/billing-meter.entity'; -import { BillingPrice } from 'src/engine/core-modules/billing/entities/billing-price.entity'; -import { BillingProduct } from 'src/engine/core-modules/billing/entities/billing-product.entity'; -import { BillingSubscriptionItem } from 'src/engine/core-modules/billing/entities/billing-subscription-item.entity'; -import { BillingSubscription } from 'src/engine/core-modules/billing/entities/billing-subscription.entity'; +import { BillingCustomerEntity } from 'src/engine/core-modules/billing/entities/billing-customer.entity'; +import { BillingEntitlementEntity } from 'src/engine/core-modules/billing/entities/billing-entitlement.entity'; +import { BillingMeterEntity } from 'src/engine/core-modules/billing/entities/billing-meter.entity'; +import { BillingPriceEntity } from 'src/engine/core-modules/billing/entities/billing-price.entity'; +import { BillingProductEntity } from 'src/engine/core-modules/billing/entities/billing-product.entity'; +import { BillingSubscriptionItemEntity } from 'src/engine/core-modules/billing/entities/billing-subscription-item.entity'; +import { BillingSubscriptionEntity } from 'src/engine/core-modules/billing/entities/billing-subscription.entity'; import { StripeModule } from 'src/engine/core-modules/billing/stripe/stripe.module'; -import { FeatureFlag } from 'src/engine/core-modules/feature-flag/feature-flag.entity'; +import { FeatureFlagEntity } from 'src/engine/core-modules/feature-flag/feature-flag.entity'; import { FeatureFlagModule } from 'src/engine/core-modules/feature-flag/feature-flag.module'; import { MessageQueueModule } from 'src/engine/core-modules/message-queue/message-queue.module'; -import { UserWorkspace } from 'src/engine/core-modules/user-workspace/user-workspace.entity'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { UserWorkspaceEntity } from 'src/engine/core-modules/user-workspace/user-workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { WorkspaceModule } from 'src/engine/core-modules/workspace/workspace.module'; import { PermissionsModule } from 'src/engine/metadata-modules/permissions/permissions.module'; @@ -36,16 +36,16 @@ import { PermissionsModule } from 'src/engine/metadata-modules/permissions/permi WorkspaceModule, BillingModule, TypeOrmModule.forFeature([ - BillingSubscription, - BillingSubscriptionItem, - BillingCustomer, - BillingProduct, - BillingPrice, - BillingMeter, - BillingEntitlement, - Workspace, - UserWorkspace, - FeatureFlag, + BillingSubscriptionEntity, + BillingSubscriptionItemEntity, + BillingCustomerEntity, + BillingProductEntity, + BillingPriceEntity, + BillingMeterEntity, + BillingEntitlementEntity, + WorkspaceEntity, + UserWorkspaceEntity, + FeatureFlagEntity, ]), ], controllers: [BillingWebhookController], diff --git a/packages/twenty-server/src/engine/core-modules/billing-webhook/services/billing-webhook-alert.service.ts b/packages/twenty-server/src/engine/core-modules/billing-webhook/services/billing-webhook-alert.service.ts index 703a7df02db..4b9ff2099a8 100644 --- a/packages/twenty-server/src/engine/core-modules/billing-webhook/services/billing-webhook-alert.service.ts +++ b/packages/twenty-server/src/engine/core-modules/billing-webhook/services/billing-webhook-alert.service.ts @@ -12,8 +12,8 @@ import { BillingException, BillingExceptionCode, } from 'src/engine/core-modules/billing/billing.exception'; -import { BillingProduct } from 'src/engine/core-modules/billing/entities/billing-product.entity'; -import { BillingSubscriptionItem } from 'src/engine/core-modules/billing/entities/billing-subscription-item.entity'; +import { BillingProductEntity } from 'src/engine/core-modules/billing/entities/billing-product.entity'; +import { BillingSubscriptionItemEntity } from 'src/engine/core-modules/billing/entities/billing-subscription-item.entity'; import { BillingSubscriptionService } from 'src/engine/core-modules/billing/services/billing-subscription.service'; @Injectable() @@ -21,10 +21,10 @@ export class BillingWebhookAlertService { protected readonly logger = new Logger(BillingWebhookAlertService.name); constructor( private readonly billingSubscriptionService: BillingSubscriptionService, - @InjectRepository(BillingProduct) - private readonly billingProductRepository: Repository, - @InjectRepository(BillingSubscriptionItem) - private readonly billingSubscriptionItemRepository: Repository, + @InjectRepository(BillingProductEntity) + private readonly billingProductRepository: Repository, + @InjectRepository(BillingSubscriptionItemEntity) + private readonly billingSubscriptionItemRepository: Repository, ) {} async processStripeEvent(data: Stripe.BillingAlertTriggeredEvent.Data) { diff --git a/packages/twenty-server/src/engine/core-modules/billing-webhook/services/billing-webhook-customer.service.ts b/packages/twenty-server/src/engine/core-modules/billing-webhook/services/billing-webhook-customer.service.ts index 1df71fb804e..7d48d730e42 100644 --- a/packages/twenty-server/src/engine/core-modules/billing-webhook/services/billing-webhook-customer.service.ts +++ b/packages/twenty-server/src/engine/core-modules/billing-webhook/services/billing-webhook-customer.service.ts @@ -11,14 +11,14 @@ import { BillingException, BillingExceptionCode, } from 'src/engine/core-modules/billing/billing.exception'; -import { BillingCustomer } from 'src/engine/core-modules/billing/entities/billing-customer.entity'; +import { BillingCustomerEntity } from 'src/engine/core-modules/billing/entities/billing-customer.entity'; @Injectable() export class BillingWebhookCustomerService { protected readonly logger = new Logger(BillingWebhookCustomerService.name); constructor( - @InjectRepository(BillingCustomer) - private readonly billingCustomerRepository: Repository, + @InjectRepository(BillingCustomerEntity) + private readonly billingCustomerRepository: Repository, ) {} async processStripeEvent(data: Stripe.CustomerCreatedEvent.Data) { diff --git a/packages/twenty-server/src/engine/core-modules/billing-webhook/services/billing-webhook-entitlement.service.ts b/packages/twenty-server/src/engine/core-modules/billing-webhook/services/billing-webhook-entitlement.service.ts index 114727e56f5..19c756a7824 100644 --- a/packages/twenty-server/src/engine/core-modules/billing-webhook/services/billing-webhook-entitlement.service.ts +++ b/packages/twenty-server/src/engine/core-modules/billing-webhook/services/billing-webhook-entitlement.service.ts @@ -12,16 +12,16 @@ import { BillingException, BillingExceptionCode, } from 'src/engine/core-modules/billing/billing.exception'; -import { BillingCustomer } from 'src/engine/core-modules/billing/entities/billing-customer.entity'; -import { BillingEntitlement } from 'src/engine/core-modules/billing/entities/billing-entitlement.entity'; +import { BillingCustomerEntity } from 'src/engine/core-modules/billing/entities/billing-customer.entity'; +import { BillingEntitlementEntity } from 'src/engine/core-modules/billing/entities/billing-entitlement.entity'; @Injectable() export class BillingWebhookEntitlementService { constructor( - @InjectRepository(BillingCustomer) - private readonly billingCustomerRepository: Repository, - @InjectRepository(BillingEntitlement) - private readonly billingEntitlementRepository: Repository, + @InjectRepository(BillingCustomerEntity) + private readonly billingCustomerRepository: Repository, + @InjectRepository(BillingEntitlementEntity) + private readonly billingEntitlementRepository: Repository, ) {} async processStripeEvent( diff --git a/packages/twenty-server/src/engine/core-modules/billing-webhook/services/billing-webhook-invoice.service.ts b/packages/twenty-server/src/engine/core-modules/billing-webhook/services/billing-webhook-invoice.service.ts index 7dd53e6bd11..48b753d8790 100644 --- a/packages/twenty-server/src/engine/core-modules/billing-webhook/services/billing-webhook-invoice.service.ts +++ b/packages/twenty-server/src/engine/core-modules/billing-webhook/services/billing-webhook-invoice.service.ts @@ -6,7 +6,7 @@ import { Repository } from 'typeorm'; import type Stripe from 'stripe'; -import { BillingSubscriptionItem } from 'src/engine/core-modules/billing/entities/billing-subscription-item.entity'; +import { BillingSubscriptionItemEntity } from 'src/engine/core-modules/billing/entities/billing-subscription-item.entity'; const SUBSCRIPTION_CYCLE_BILLING_REASON = 'subscription_cycle'; @@ -14,8 +14,8 @@ const SUBSCRIPTION_CYCLE_BILLING_REASON = 'subscription_cycle'; export class BillingWebhookInvoiceService { protected readonly logger = new Logger(BillingWebhookInvoiceService.name); constructor( - @InjectRepository(BillingSubscriptionItem) - private readonly billingSubscriptionItemRepository: Repository, + @InjectRepository(BillingSubscriptionItemEntity) + private readonly billingSubscriptionItemRepository: Repository, ) {} async processStripeEvent(data: Stripe.InvoiceFinalizedEvent.Data) { diff --git a/packages/twenty-server/src/engine/core-modules/billing-webhook/services/billing-webhook-price.service.ts b/packages/twenty-server/src/engine/core-modules/billing-webhook/services/billing-webhook-price.service.ts index 7e9269ecaac..f49380d6c2a 100644 --- a/packages/twenty-server/src/engine/core-modules/billing-webhook/services/billing-webhook-price.service.ts +++ b/packages/twenty-server/src/engine/core-modules/billing-webhook/services/billing-webhook-price.service.ts @@ -12,9 +12,9 @@ import { BillingException, BillingExceptionCode, } from 'src/engine/core-modules/billing/billing.exception'; -import { BillingMeter } from 'src/engine/core-modules/billing/entities/billing-meter.entity'; -import { BillingPrice } from 'src/engine/core-modules/billing/entities/billing-price.entity'; -import { BillingProduct } from 'src/engine/core-modules/billing/entities/billing-product.entity'; +import { BillingMeterEntity } from 'src/engine/core-modules/billing/entities/billing-meter.entity'; +import { BillingPriceEntity } from 'src/engine/core-modules/billing/entities/billing-price.entity'; +import { BillingProductEntity } from 'src/engine/core-modules/billing/entities/billing-product.entity'; import { StripeBillingMeterService } from 'src/engine/core-modules/billing/stripe/services/stripe-billing-meter.service'; import { transformStripeMeterToDatabaseMeter } from 'src/engine/core-modules/billing/utils/transform-stripe-meter-to-database-meter.util'; import { StripePriceService } from 'src/engine/core-modules/billing/stripe/services/stripe-price.service'; @@ -25,12 +25,12 @@ export class BillingWebhookPriceService { constructor( private readonly stripeBillingMeterService: StripeBillingMeterService, private readonly stripePriceService: StripePriceService, - @InjectRepository(BillingPrice) - private readonly billingPriceRepository: Repository, - @InjectRepository(BillingMeter) - private readonly billingMeterRepository: Repository, - @InjectRepository(BillingProduct) - private readonly billingProductRepository: Repository, + @InjectRepository(BillingPriceEntity) + private readonly billingPriceRepository: Repository, + @InjectRepository(BillingMeterEntity) + private readonly billingMeterRepository: Repository, + @InjectRepository(BillingProductEntity) + private readonly billingProductRepository: Repository, ) {} async processStripeEvent( diff --git a/packages/twenty-server/src/engine/core-modules/billing-webhook/services/billing-webhook-product.service.ts b/packages/twenty-server/src/engine/core-modules/billing-webhook/services/billing-webhook-product.service.ts index 4aeeb7b1471..242dc6828b0 100644 --- a/packages/twenty-server/src/engine/core-modules/billing-webhook/services/billing-webhook-product.service.ts +++ b/packages/twenty-server/src/engine/core-modules/billing-webhook/services/billing-webhook-product.service.ts @@ -8,14 +8,14 @@ import { Repository } from 'typeorm'; import type Stripe from 'stripe'; import { transformStripeProductEventToDatabaseProduct } from 'src/engine/core-modules/billing-webhook/utils/transform-stripe-product-event-to-database-product.util'; -import { BillingProduct } from 'src/engine/core-modules/billing/entities/billing-product.entity'; +import { BillingProductEntity } from 'src/engine/core-modules/billing/entities/billing-product.entity'; import { isStripeValidProductMetadata } from 'src/engine/core-modules/billing/utils/is-stripe-valid-product-metadata.util'; @Injectable() export class BillingWebhookProductService { protected readonly logger = new Logger(BillingWebhookProductService.name); constructor( - @InjectRepository(BillingProduct) - private readonly billingProductRepository: Repository, + @InjectRepository(BillingProductEntity) + private readonly billingProductRepository: Repository, ) {} async processStripeEvent( diff --git a/packages/twenty-server/src/engine/core-modules/billing-webhook/services/billing-webhook-subscription-schedule.service.ts b/packages/twenty-server/src/engine/core-modules/billing-webhook/services/billing-webhook-subscription-schedule.service.ts index 1fa73452872..90d02727e48 100644 --- a/packages/twenty-server/src/engine/core-modules/billing-webhook/services/billing-webhook-subscription-schedule.service.ts +++ b/packages/twenty-server/src/engine/core-modules/billing-webhook/services/billing-webhook-subscription-schedule.service.ts @@ -7,7 +7,7 @@ import { Repository } from 'typeorm'; import Stripe from 'stripe'; import { isDefined } from 'twenty-shared/utils'; -import { BillingSubscription } from 'src/engine/core-modules/billing/entities/billing-subscription.entity'; +import { BillingSubscriptionEntity } from 'src/engine/core-modules/billing/entities/billing-subscription.entity'; import { StripeSubscriptionScheduleService } from 'src/engine/core-modules/billing/stripe/services/stripe-subscription-schedule.service'; import { transformStripeSubscriptionScheduleEventToDatabaseSubscriptionPhase } from 'src/engine/core-modules/billing-webhook/utils/transform-stripe-subscription-schedule-event-to-database-subscription-phase.util'; @@ -18,8 +18,8 @@ export class BillingWebhookSubscriptionScheduleService { ); constructor( - @InjectRepository(BillingSubscription) - private readonly billingSubscriptionRepository: Repository, + @InjectRepository(BillingSubscriptionEntity) + private readonly billingSubscriptionRepository: Repository, private readonly stripeSubscriptionScheduleService: StripeSubscriptionScheduleService, ) {} diff --git a/packages/twenty-server/src/engine/core-modules/billing-webhook/services/billing-webhook-subscription.service.ts b/packages/twenty-server/src/engine/core-modules/billing-webhook/services/billing-webhook-subscription.service.ts index c854c172ef0..da681a3ff3d 100644 --- a/packages/twenty-server/src/engine/core-modules/billing-webhook/services/billing-webhook-subscription.service.ts +++ b/packages/twenty-server/src/engine/core-modules/billing-webhook/services/billing-webhook-subscription.service.ts @@ -13,9 +13,9 @@ import { getDeletedStripeSubscriptionItemIdsFromStripeSubscriptionEvent } from ' import { transformStripeSubscriptionEventToDatabaseCustomer } from 'src/engine/core-modules/billing-webhook/utils/transform-stripe-subscription-event-to-database-customer.util'; import { transformStripeSubscriptionEventToDatabaseSubscriptionItem } from 'src/engine/core-modules/billing-webhook/utils/transform-stripe-subscription-event-to-database-subscription-item.util'; import { transformStripeSubscriptionEventToDatabaseSubscription } from 'src/engine/core-modules/billing-webhook/utils/transform-stripe-subscription-event-to-database-subscription.util'; -import { BillingCustomer } from 'src/engine/core-modules/billing/entities/billing-customer.entity'; -import { BillingSubscriptionItem } from 'src/engine/core-modules/billing/entities/billing-subscription-item.entity'; -import { BillingSubscription } from 'src/engine/core-modules/billing/entities/billing-subscription.entity'; +import { BillingCustomerEntity } from 'src/engine/core-modules/billing/entities/billing-customer.entity'; +import { BillingSubscriptionEntity } from 'src/engine/core-modules/billing/entities/billing-subscription.entity'; +import { BillingSubscriptionItemEntity } from 'src/engine/core-modules/billing/entities/billing-subscription-item.entity'; import { SubscriptionStatus } from 'src/engine/core-modules/billing/enums/billing-subscription-status.enum'; import { BillingWebhookEvent } from 'src/engine/core-modules/billing/enums/billing-webhook-events.enum'; import { BillingSubscriptionService } from 'src/engine/core-modules/billing/services/billing-subscription.service'; @@ -24,7 +24,7 @@ import { InjectMessageQueue } from 'src/engine/core-modules/message-queue/decora import { MessageQueue } from 'src/engine/core-modules/message-queue/message-queue.constants'; import { MessageQueueService } from 'src/engine/core-modules/message-queue/services/message-queue.service'; import { WorkspaceService } from 'src/engine/core-modules/workspace/services/workspace.service'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { CleanWorkspaceDeletionWarningUserVarsJob, type CleanWorkspaceDeletionWarningUserVarsJobData, @@ -42,14 +42,14 @@ export class BillingWebhookSubscriptionService { private readonly stripeCustomerService: StripeCustomerService, @InjectMessageQueue(MessageQueue.workspaceQueue) private readonly messageQueueService: MessageQueueService, - @InjectRepository(BillingSubscription) - private readonly billingSubscriptionRepository: Repository, - @InjectRepository(BillingSubscriptionItem) - private readonly billingSubscriptionItemRepository: Repository, - @InjectRepository(Workspace) - private readonly workspaceRepository: Repository, - @InjectRepository(BillingCustomer) - private readonly billingCustomerRepository: Repository, + @InjectRepository(BillingSubscriptionEntity) + private readonly billingSubscriptionRepository: Repository, + @InjectRepository(BillingSubscriptionItemEntity) + private readonly billingSubscriptionItemRepository: Repository, + @InjectRepository(WorkspaceEntity) + private readonly workspaceRepository: Repository, + @InjectRepository(BillingCustomerEntity) + private readonly billingCustomerRepository: Repository, private readonly billingSubscriptionService: BillingSubscriptionService, private readonly workspaceService: WorkspaceService, private readonly stripeSubscriptionScheduleService: StripeSubscriptionScheduleService, diff --git a/packages/twenty-server/src/engine/core-modules/billing/billing.module.ts b/packages/twenty-server/src/engine/core-modules/billing/billing.module.ts index 8e68f0ef50a..09f91504b01 100644 --- a/packages/twenty-server/src/engine/core-modules/billing/billing.module.ts +++ b/packages/twenty-server/src/engine/core-modules/billing/billing.module.ts @@ -8,13 +8,13 @@ import { BillingResolver } from 'src/engine/core-modules/billing/billing.resolve import { BillingSyncCustomerDataCommand } from 'src/engine/core-modules/billing/commands/billing-sync-customer-data.command'; import { BillingSyncPlansDataCommand } from 'src/engine/core-modules/billing/commands/billing-sync-plans-data.command'; import { BillingUpdateSubscriptionPriceCommand } from 'src/engine/core-modules/billing/commands/billing-update-subscription-price.command'; -import { BillingCustomer } from 'src/engine/core-modules/billing/entities/billing-customer.entity'; -import { BillingEntitlement } from 'src/engine/core-modules/billing/entities/billing-entitlement.entity'; -import { BillingMeter } from 'src/engine/core-modules/billing/entities/billing-meter.entity'; -import { BillingPrice } from 'src/engine/core-modules/billing/entities/billing-price.entity'; -import { BillingProduct } from 'src/engine/core-modules/billing/entities/billing-product.entity'; -import { BillingSubscriptionItem } from 'src/engine/core-modules/billing/entities/billing-subscription-item.entity'; -import { BillingSubscription } from 'src/engine/core-modules/billing/entities/billing-subscription.entity'; +import { BillingCustomerEntity } from 'src/engine/core-modules/billing/entities/billing-customer.entity'; +import { BillingEntitlementEntity } from 'src/engine/core-modules/billing/entities/billing-entitlement.entity'; +import { BillingMeterEntity } from 'src/engine/core-modules/billing/entities/billing-meter.entity'; +import { BillingPriceEntity } from 'src/engine/core-modules/billing/entities/billing-price.entity'; +import { BillingProductEntity } from 'src/engine/core-modules/billing/entities/billing-product.entity'; +import { BillingSubscriptionItemEntity } from 'src/engine/core-modules/billing/entities/billing-subscription-item.entity'; +import { BillingSubscriptionEntity } from 'src/engine/core-modules/billing/entities/billing-subscription.entity'; import { BillingRestApiExceptionFilter } from 'src/engine/core-modules/billing/filters/billing-api-exception.filter'; import { BillingFeatureUsedListener } from 'src/engine/core-modules/billing/listeners/billing-feature-used.listener'; import { BillingWorkspaceMemberListener } from 'src/engine/core-modules/billing/listeners/billing-workspace-member.listener'; @@ -29,11 +29,11 @@ import { BillingUsageService } from 'src/engine/core-modules/billing/services/bi import { BillingService } from 'src/engine/core-modules/billing/services/billing.service'; import { StripeModule } from 'src/engine/core-modules/billing/stripe/stripe.module'; import { WorkspaceDomainsModule } from 'src/engine/core-modules/domain/workspace-domains/workspace-domains.module'; -import { FeatureFlag } from 'src/engine/core-modules/feature-flag/feature-flag.entity'; +import { FeatureFlagEntity } from 'src/engine/core-modules/feature-flag/feature-flag.entity'; import { FeatureFlagModule } from 'src/engine/core-modules/feature-flag/feature-flag.module'; import { MessageQueueModule } from 'src/engine/core-modules/message-queue/message-queue.module'; -import { UserWorkspace } from 'src/engine/core-modules/user-workspace/user-workspace.entity'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { UserWorkspaceEntity } from 'src/engine/core-modules/user-workspace/user-workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { PermissionsModule } from 'src/engine/metadata-modules/permissions/permissions.module'; @Module({ @@ -45,16 +45,16 @@ import { PermissionsModule } from 'src/engine/metadata-modules/permissions/permi AiModule, WorkspaceDomainsModule, TypeOrmModule.forFeature([ - BillingSubscription, - BillingSubscriptionItem, - BillingCustomer, - BillingProduct, - BillingPrice, - BillingMeter, - BillingEntitlement, - Workspace, - UserWorkspace, - FeatureFlag, + BillingSubscriptionEntity, + BillingSubscriptionItemEntity, + BillingCustomerEntity, + BillingProductEntity, + BillingPriceEntity, + BillingMeterEntity, + BillingEntitlementEntity, + WorkspaceEntity, + UserWorkspaceEntity, + FeatureFlagEntity, ]), ], providers: [ diff --git a/packages/twenty-server/src/engine/core-modules/billing/billing.resolver.ts b/packages/twenty-server/src/engine/core-modules/billing/billing.resolver.ts index 6db3678ad60..9f0a2bc6063 100644 --- a/packages/twenty-server/src/engine/core-modules/billing/billing.resolver.ts +++ b/packages/twenty-server/src/engine/core-modules/billing/billing.resolver.ts @@ -21,8 +21,8 @@ import { BillingService } from 'src/engine/core-modules/billing/services/billing import { formatBillingDatabaseProductToGraphqlDTO } from 'src/engine/core-modules/billing/utils/format-database-product-to-graphql-dto.util'; import { PreventNestToAutoLogGraphqlErrorsFilter } from 'src/engine/core-modules/graphql/filters/prevent-nest-to-auto-log-graphql-errors.filter'; import { ResolverValidationPipe } from 'src/engine/core-modules/graphql/pipes/resolver-validation.pipe'; -import { User } from 'src/engine/core-modules/user/user.entity'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { UserEntity } from 'src/engine/core-modules/user/user.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { AuthApiKey } from 'src/engine/decorators/auth/auth-api-key.decorator'; import { AuthUserWorkspaceId } from 'src/engine/decorators/auth/auth-user-workspace-id.decorator'; import { AuthUser } from 'src/engine/decorators/auth/auth-user.decorator'; @@ -62,7 +62,7 @@ export class BillingResolver { SettingsPermissionsGuard(PermissionFlagType.WORKSPACE), ) async billingPortalSession( - @AuthWorkspace() workspace: Workspace, + @AuthWorkspace() workspace: WorkspaceEntity, @Args() { returnUrlPath }: BillingSessionInput, ) { return { @@ -76,8 +76,8 @@ export class BillingResolver { @Mutation(() => BillingSessionOutput) @UseGuards(WorkspaceAuthGuard, UserAuthGuard) async checkoutSession( - @AuthWorkspace() workspace: Workspace, - @AuthUser() user: User, + @AuthWorkspace() workspace: WorkspaceEntity, + @AuthUser() user: UserEntity, @AuthUserWorkspaceId() userWorkspaceId: string, @Args() { @@ -139,7 +139,9 @@ export class BillingResolver { WorkspaceAuthGuard, SettingsPermissionsGuard(PermissionFlagType.WORKSPACE), ) - async switchSubscriptionInterval(@AuthWorkspace() workspace: Workspace) { + async switchSubscriptionInterval( + @AuthWorkspace() workspace: WorkspaceEntity, + ) { await this.billingSubscriptionService.changeInterval(workspace); return { @@ -159,7 +161,7 @@ export class BillingResolver { WorkspaceAuthGuard, SettingsPermissionsGuard(PermissionFlagType.WORKSPACE), ) - async switchBillingPlan(@AuthWorkspace() workspace: Workspace) { + async switchBillingPlan(@AuthWorkspace() workspace: WorkspaceEntity) { await this.billingSubscriptionService.changePlan(workspace); return { @@ -179,7 +181,7 @@ export class BillingResolver { WorkspaceAuthGuard, SettingsPermissionsGuard(PermissionFlagType.WORKSPACE), ) - async cancelSwitchBillingPlan(@AuthWorkspace() workspace: Workspace) { + async cancelSwitchBillingPlan(@AuthWorkspace() workspace: WorkspaceEntity) { await this.billingSubscriptionService.cancelSwitchPlan(workspace); return { @@ -199,7 +201,9 @@ export class BillingResolver { WorkspaceAuthGuard, SettingsPermissionsGuard(PermissionFlagType.WORKSPACE), ) - async cancelSwitchBillingInterval(@AuthWorkspace() workspace: Workspace) { + async cancelSwitchBillingInterval( + @AuthWorkspace() workspace: WorkspaceEntity, + ) { await this.billingSubscriptionService.cancelSwitchInterval(workspace); return { @@ -220,7 +224,7 @@ export class BillingResolver { SettingsPermissionsGuard(PermissionFlagType.WORKSPACE), ) async setMeteredSubscriptionPrice( - @AuthWorkspace() workspace: Workspace, + @AuthWorkspace() workspace: WorkspaceEntity, @Args() { priceId }: BillingUpdateSubscriptionItemPriceInput, ) { await this.billingSubscriptionService.changeMeteredPrice( @@ -254,7 +258,7 @@ export class BillingResolver { SettingsPermissionsGuard(PermissionFlagType.WORKSPACE), ) async endSubscriptionTrialPeriod( - @AuthWorkspace() workspace: Workspace, + @AuthWorkspace() workspace: WorkspaceEntity, ): Promise { return await this.billingSubscriptionService.endTrialPeriod(workspace); } @@ -265,7 +269,7 @@ export class BillingResolver { SettingsPermissionsGuard(PermissionFlagType.WORKSPACE), ) async getMeteredProductsUsage( - @AuthWorkspace() workspace: Workspace, + @AuthWorkspace() workspace: WorkspaceEntity, ): Promise { return await this.billingUsageService.getMeteredProductsUsage(workspace); } @@ -275,7 +279,7 @@ export class BillingResolver { WorkspaceAuthGuard, SettingsPermissionsGuard(PermissionFlagType.WORKSPACE), ) - async cancelSwitchMeteredPrice(@AuthWorkspace() workspace: Workspace) { + async cancelSwitchMeteredPrice(@AuthWorkspace() workspace: WorkspaceEntity) { await this.billingSubscriptionService.cancelSwitchMeteredPrice(workspace); return { diff --git a/packages/twenty-server/src/engine/core-modules/billing/billing.validate.ts b/packages/twenty-server/src/engine/core-modules/billing/billing.validate.ts index 50381b05071..ccd9a3fcb0e 100644 --- a/packages/twenty-server/src/engine/core-modules/billing/billing.validate.ts +++ b/packages/twenty-server/src/engine/core-modules/billing/billing.validate.ts @@ -1,16 +1,16 @@ import { isDefined } from 'twenty-shared/utils'; import { msg } from '@lingui/core/macro'; -import { type BillingPrice } from 'src/engine/core-modules/billing/entities/billing-price.entity'; +import { type BillingPriceEntity } from 'src/engine/core-modules/billing/entities/billing-price.entity'; import { type MeterBillingPriceTiers } from 'src/engine/core-modules/billing/types/meter-billing-price-tier.type'; import { BillingException, BillingExceptionCode, } from 'src/engine/core-modules/billing/billing.exception'; -import { type BillingSubscriptionItem } from 'src/engine/core-modules/billing/entities/billing-subscription-item.entity'; +import { type BillingSubscriptionItemEntity } from 'src/engine/core-modules/billing/entities/billing-subscription-item.entity'; import { BillingUsageType } from 'src/engine/core-modules/billing/enums/billing-usage-type.enum'; import { type BillingMeterPrice } from 'src/engine/core-modules/billing/types/billing-meter-price.type'; -import { type BillingSubscription } from 'src/engine/core-modules/billing/entities/billing-subscription.entity'; +import { type BillingSubscriptionEntity } from 'src/engine/core-modules/billing/entities/billing-subscription.entity'; import { type LicensedBillingSubscriptionItem, type MeteredBillingSubscriptionItem, @@ -18,7 +18,7 @@ import { import { type BillingSubscriptionWithSubscriptionItems } from 'src/engine/core-modules/billing/types/billing-subscription-with-subscription-items'; const assertIsMeteredTiersSchemaOrThrow = ( - tiers: BillingPrice['tiers'] | undefined | null, + tiers: BillingPriceEntity['tiers'] | undefined | null, ): asserts tiers is MeterBillingPriceTiers => { const error = new BillingException( 'Metered price must have exactly two tiers and only one must have a defined limitation (up_to)', @@ -33,7 +33,7 @@ const assertIsMeteredTiersSchemaOrThrow = ( }; const isMeteredTiersSchema = ( - tiers: BillingPrice['tiers'] | undefined | null, + tiers: BillingPriceEntity['tiers'] | undefined | null, ): tiers is MeterBillingPriceTiers => { if (!isDefined(tiers)) { return false; @@ -51,7 +51,7 @@ const isMeteredTiersSchema = ( }; const assertIsLicensedSubscriptionItem = ( - subscriptionItem: BillingSubscriptionItem, + subscriptionItem: BillingSubscriptionItemEntity, ): asserts subscriptionItem is LicensedBillingSubscriptionItem => { if ( subscriptionItem.quantity !== null && @@ -67,7 +67,7 @@ const assertIsLicensedSubscriptionItem = ( }; const assertIsMeteredSubscriptionItem = ( - subscriptionItem: BillingSubscriptionItem, + subscriptionItem: BillingSubscriptionItemEntity, ): asserts subscriptionItem is MeteredBillingSubscriptionItem => { if ( subscriptionItem.quantity === null && @@ -83,7 +83,7 @@ const assertIsMeteredSubscriptionItem = ( }; const assertIsMeteredPrice = ( - price: BillingPrice, + price: BillingPriceEntity, ): asserts price is BillingMeterPrice => { if ( price.billingProduct?.metadata.priceUsageBased !== BillingUsageType.METERED @@ -104,7 +104,9 @@ const assertIsMeteredPrice = ( return; }; -const isMeteredPrice = (price: BillingPrice): price is BillingMeterPrice => { +const isMeteredPrice = ( + price: BillingPriceEntity, +): price is BillingMeterPrice => { if ( price.billingProduct?.metadata.priceUsageBased !== BillingUsageType.METERED || @@ -117,8 +119,8 @@ const isMeteredPrice = (price: BillingPrice): price is BillingMeterPrice => { }; const assertIsSubscription = ( - subscription: BillingSubscription | undefined, -): asserts subscription is BillingSubscription & + subscription: BillingSubscriptionEntity | undefined, +): asserts subscription is BillingSubscriptionEntity & BillingSubscriptionWithSubscriptionItems => { if (!isDefined(subscription)) { throw new BillingException( diff --git a/packages/twenty-server/src/engine/core-modules/billing/commands/billing-sync-customer-data.command.ts b/packages/twenty-server/src/engine/core-modules/billing/commands/billing-sync-customer-data.command.ts index d5611a571e1..4865d92c18e 100644 --- a/packages/twenty-server/src/engine/core-modules/billing/commands/billing-sync-customer-data.command.ts +++ b/packages/twenty-server/src/engine/core-modules/billing/commands/billing-sync-customer-data.command.ts @@ -10,9 +10,9 @@ import { ActiveOrSuspendedWorkspacesMigrationCommandRunner, type RunOnWorkspaceArgs, } from 'src/database/commands/command-runners/active-or-suspended-workspaces-migration.command-runner'; -import { BillingCustomer } from 'src/engine/core-modules/billing/entities/billing-customer.entity'; +import { BillingCustomerEntity } from 'src/engine/core-modules/billing/entities/billing-customer.entity'; import { StripeSubscriptionService } from 'src/engine/core-modules/billing/stripe/services/stripe-subscription.service'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { TwentyORMGlobalManager } from 'src/engine/twenty-orm/twenty-orm-global.manager'; @Command({ @@ -21,11 +21,11 @@ import { TwentyORMGlobalManager } from 'src/engine/twenty-orm/twenty-orm-global. }) export class BillingSyncCustomerDataCommand extends ActiveOrSuspendedWorkspacesMigrationCommandRunner { constructor( - @InjectRepository(Workspace) - protected readonly workspaceRepository: Repository, + @InjectRepository(WorkspaceEntity) + protected readonly workspaceRepository: Repository, private readonly stripeSubscriptionService: StripeSubscriptionService, - @InjectRepository(BillingCustomer) - protected readonly billingCustomerRepository: Repository, + @InjectRepository(BillingCustomerEntity) + protected readonly billingCustomerRepository: Repository, protected readonly twentyORMGlobalManager: TwentyORMGlobalManager, ) { super(workspaceRepository, twentyORMGlobalManager); diff --git a/packages/twenty-server/src/engine/core-modules/billing/commands/billing-sync-plans-data.command.ts b/packages/twenty-server/src/engine/core-modules/billing/commands/billing-sync-plans-data.command.ts index d4fb7b1911e..0874bdeb831 100644 --- a/packages/twenty-server/src/engine/core-modules/billing/commands/billing-sync-plans-data.command.ts +++ b/packages/twenty-server/src/engine/core-modules/billing/commands/billing-sync-plans-data.command.ts @@ -11,9 +11,9 @@ import { type MigrationCommandOptions, MigrationCommandRunner, } from 'src/database/commands/command-runners/migration.command-runner'; -import { BillingMeter } from 'src/engine/core-modules/billing/entities/billing-meter.entity'; -import { BillingPrice } from 'src/engine/core-modules/billing/entities/billing-price.entity'; -import { BillingProduct } from 'src/engine/core-modules/billing/entities/billing-product.entity'; +import { BillingMeterEntity } from 'src/engine/core-modules/billing/entities/billing-meter.entity'; +import { BillingPriceEntity } from 'src/engine/core-modules/billing/entities/billing-price.entity'; +import { BillingProductEntity } from 'src/engine/core-modules/billing/entities/billing-product.entity'; import { StripeBillingMeterService } from 'src/engine/core-modules/billing/stripe/services/stripe-billing-meter.service'; import { StripePriceService } from 'src/engine/core-modules/billing/stripe/services/stripe-price.service'; import { StripeProductService } from 'src/engine/core-modules/billing/stripe/services/stripe-product.service'; @@ -29,12 +29,12 @@ import { transformStripeProductToDatabaseProduct } from 'src/engine/core-modules export class BillingSyncPlansDataCommand extends MigrationCommandRunner { private readonly batchSize = 5; constructor( - @InjectRepository(BillingPrice) - private readonly billingPriceRepository: Repository, - @InjectRepository(BillingProduct) - private readonly billingProductRepository: Repository, - @InjectRepository(BillingMeter) - private readonly billingMeterRepository: Repository, + @InjectRepository(BillingPriceEntity) + private readonly billingPriceRepository: Repository, + @InjectRepository(BillingProductEntity) + private readonly billingProductRepository: Repository, + @InjectRepository(BillingMeterEntity) + private readonly billingMeterRepository: Repository, private readonly stripeBillingMeterService: StripeBillingMeterService, private readonly stripeProductService: StripeProductService, private readonly stripePriceService: StripePriceService, diff --git a/packages/twenty-server/src/engine/core-modules/billing/commands/billing-update-subscription-price.command.ts b/packages/twenty-server/src/engine/core-modules/billing/commands/billing-update-subscription-price.command.ts index d6655544f5f..dd374f6e7ff 100644 --- a/packages/twenty-server/src/engine/core-modules/billing/commands/billing-update-subscription-price.command.ts +++ b/packages/twenty-server/src/engine/core-modules/billing/commands/billing-update-subscription-price.command.ts @@ -10,10 +10,10 @@ import { ActiveOrSuspendedWorkspacesMigrationCommandRunner, type RunOnWorkspaceArgs, } from 'src/database/commands/command-runners/active-or-suspended-workspaces-migration.command-runner'; -import { BillingSubscription } from 'src/engine/core-modules/billing/entities/billing-subscription.entity'; +import { BillingSubscriptionEntity } from 'src/engine/core-modules/billing/entities/billing-subscription.entity'; import { BillingSubscriptionService } from 'src/engine/core-modules/billing/services/billing-subscription.service'; import { StripeSubscriptionItemService } from 'src/engine/core-modules/billing/stripe/services/stripe-subscription-item.service'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { TwentyORMGlobalManager } from 'src/engine/twenty-orm/twenty-orm-global.manager'; @Command({ @@ -26,11 +26,11 @@ export class BillingUpdateSubscriptionPriceCommand extends ActiveOrSuspendedWork private clearUsage = false; constructor( - @InjectRepository(Workspace) - protected readonly workspaceRepository: Repository, + @InjectRepository(WorkspaceEntity) + protected readonly workspaceRepository: Repository, protected readonly twentyORMGlobalManager: TwentyORMGlobalManager, - @InjectRepository(BillingSubscription) - protected readonly billingSubscriptionRepository: Repository, + @InjectRepository(BillingSubscriptionEntity) + protected readonly billingSubscriptionRepository: Repository, private readonly billingSubscriptionService: BillingSubscriptionService, private readonly stripeSubscriptionItemService: StripeSubscriptionItemService, ) { diff --git a/packages/twenty-server/src/engine/core-modules/billing/dtos/outputs/billing-update.output.ts b/packages/twenty-server/src/engine/core-modules/billing/dtos/outputs/billing-update.output.ts index 9cd10a842d8..0b51571f694 100644 --- a/packages/twenty-server/src/engine/core-modules/billing/dtos/outputs/billing-update.output.ts +++ b/packages/twenty-server/src/engine/core-modules/billing/dtos/outputs/billing-update.output.ts @@ -2,17 +2,17 @@ import { Field, ObjectType } from '@nestjs/graphql'; -import { BillingSubscription } from 'src/engine/core-modules/billing/entities/billing-subscription.entity'; +import { BillingSubscriptionEntity } from 'src/engine/core-modules/billing/entities/billing-subscription.entity'; @ObjectType() export class BillingUpdateOutput { - @Field(() => BillingSubscription, { + @Field(() => BillingSubscriptionEntity, { description: 'Current billing subscription', }) - currentBillingSubscription: BillingSubscription; + currentBillingSubscription: BillingSubscriptionEntity; - @Field(() => [BillingSubscription], { + @Field(() => [BillingSubscriptionEntity], { description: 'All billing subscriptions', }) - billingSubscriptions: BillingSubscription[]; + billingSubscriptions: BillingSubscriptionEntity[]; } diff --git a/packages/twenty-server/src/engine/core-modules/billing/entities/billing-customer.entity.ts b/packages/twenty-server/src/engine/core-modules/billing/entities/billing-customer.entity.ts index 6a6ce599e0f..88020f76efd 100644 --- a/packages/twenty-server/src/engine/core-modules/billing/entities/billing-customer.entity.ts +++ b/packages/twenty-server/src/engine/core-modules/billing/entities/billing-customer.entity.ts @@ -14,12 +14,12 @@ import { } from 'typeorm'; import { UUIDScalarType } from 'src/engine/api/graphql/workspace-schema-builder/graphql-types/scalars'; -import { BillingEntitlement } from 'src/engine/core-modules/billing/entities/billing-entitlement.entity'; -import { BillingSubscription } from 'src/engine/core-modules/billing/entities/billing-subscription.entity'; +import { BillingEntitlementEntity } from 'src/engine/core-modules/billing/entities/billing-entitlement.entity'; +import { BillingSubscriptionEntity } from 'src/engine/core-modules/billing/entities/billing-subscription.entity'; @Entity({ name: 'billingCustomer', schema: 'core' }) -@ObjectType() -export class BillingCustomer { +@ObjectType('BillingCustomer') +export class BillingCustomerEntity { @IDField(() => UUIDScalarType) @PrimaryGeneratedColumn('uuid') id: string; @@ -40,14 +40,14 @@ export class BillingCustomer { stripeCustomerId: string; @OneToMany( - () => BillingSubscription, + () => BillingSubscriptionEntity, (billingSubscription) => billingSubscription.billingCustomer, ) - billingSubscriptions: Relation; + billingSubscriptions: Relation; @OneToMany( - () => BillingEntitlement, + () => BillingEntitlementEntity, (billingEntitlement) => billingEntitlement.billingCustomer, ) - billingEntitlements: Relation; + billingEntitlements: Relation; } diff --git a/packages/twenty-server/src/engine/core-modules/billing/entities/billing-entitlement.entity.ts b/packages/twenty-server/src/engine/core-modules/billing/entities/billing-entitlement.entity.ts index 4e5a51d9360..d31a561660c 100644 --- a/packages/twenty-server/src/engine/core-modules/billing/entities/billing-entitlement.entity.ts +++ b/packages/twenty-server/src/engine/core-modules/billing/entities/billing-entitlement.entity.ts @@ -16,15 +16,15 @@ import { } from 'typeorm'; import { UUIDScalarType } from 'src/engine/api/graphql/workspace-schema-builder/graphql-types/scalars'; -import { BillingCustomer } from 'src/engine/core-modules/billing/entities/billing-customer.entity'; +import { BillingCustomerEntity } from 'src/engine/core-modules/billing/entities/billing-customer.entity'; import { BillingEntitlementKey } from 'src/engine/core-modules/billing/enums/billing-entitlement-key.enum'; @Entity({ name: 'billingEntitlement', schema: 'core' }) -@ObjectType() +@ObjectType('BillingEntitlement') @Unique('IDX_BILLING_ENTITLEMENT_KEY_WORKSPACE_ID_UNIQUE', [ 'key', 'workspaceId', ]) -export class BillingEntitlement { +export class BillingEntitlementEntity { @IDField(() => UUIDScalarType) @PrimaryGeneratedColumn('uuid') id: string; @@ -53,7 +53,7 @@ export class BillingEntitlement { @Column({ nullable: true, type: 'timestamptz' }) deletedAt?: Date; @ManyToOne( - () => BillingCustomer, + () => BillingCustomerEntity, (billingCustomer) => billingCustomer.billingEntitlements, { onDelete: 'CASCADE', @@ -64,5 +64,5 @@ export class BillingEntitlement { referencedColumnName: 'stripeCustomerId', name: 'stripeCustomerId', }) - billingCustomer: Relation; + billingCustomer: Relation; } diff --git a/packages/twenty-server/src/engine/core-modules/billing/entities/billing-meter.entity.ts b/packages/twenty-server/src/engine/core-modules/billing/entities/billing-meter.entity.ts index 275ff014329..a31675d5075 100644 --- a/packages/twenty-server/src/engine/core-modules/billing/entities/billing-meter.entity.ts +++ b/packages/twenty-server/src/engine/core-modules/billing/entities/billing-meter.entity.ts @@ -11,12 +11,12 @@ import { UpdateDateColumn, } from 'typeorm'; -import { BillingPrice } from 'src/engine/core-modules/billing/entities/billing-price.entity'; +import { BillingPriceEntity } from 'src/engine/core-modules/billing/entities/billing-price.entity'; import { BillingMeterEventTimeWindow } from 'src/engine/core-modules/billing/enums/billing-meter-event-time-window.enum'; import { BillingMeterStatus } from 'src/engine/core-modules/billing/enums/billing-meter-status.enum'; @Entity({ name: 'billingMeter', schema: 'core' }) -export class BillingMeter { +export class BillingMeterEntity { @PrimaryGeneratedColumn('uuid') id: string; @@ -55,8 +55,11 @@ export class BillingMeter { }) eventTimeWindow: BillingMeterEventTimeWindow | null; - @OneToMany(() => BillingPrice, (billingPrice) => billingPrice.billingMeter) - billingPrices: Relation; + @OneToMany( + () => BillingPriceEntity, + (billingPrice) => billingPrice.billingMeter, + ) + billingPrices: Relation; @Column({ nullable: false, type: 'jsonb' }) valueSettings: Stripe.Billing.Meter.ValueSettings; diff --git a/packages/twenty-server/src/engine/core-modules/billing/entities/billing-price.entity.ts b/packages/twenty-server/src/engine/core-modules/billing/entities/billing-price.entity.ts index 5f2d1071547..a10246b4c30 100644 --- a/packages/twenty-server/src/engine/core-modules/billing/entities/billing-price.entity.ts +++ b/packages/twenty-server/src/engine/core-modules/billing/entities/billing-price.entity.ts @@ -15,8 +15,8 @@ import { import type Stripe from 'stripe'; -import { BillingMeter } from 'src/engine/core-modules/billing/entities/billing-meter.entity'; -import { BillingProduct } from 'src/engine/core-modules/billing/entities/billing-product.entity'; +import { BillingMeterEntity } from 'src/engine/core-modules/billing/entities/billing-meter.entity'; +import { BillingProductEntity } from 'src/engine/core-modules/billing/entities/billing-product.entity'; import { BillingPriceBillingScheme } from 'src/engine/core-modules/billing/enums/billing-price-billing-scheme.enum'; import { BillingPriceTaxBehavior } from 'src/engine/core-modules/billing/enums/billing-price-tax-behavior.enum'; import { BillingPriceType } from 'src/engine/core-modules/billing/enums/billing-price-type.enum'; @@ -24,7 +24,7 @@ import { SubscriptionInterval } from 'src/engine/core-modules/billing/enums/bill import { BillingUsageType } from 'src/engine/core-modules/billing/enums/billing-usage-type.enum'; @Entity({ name: 'billingPrice', schema: 'core' }) -export class BillingPrice { +export class BillingPriceEntity { @PrimaryGeneratedColumn('uuid') id: string; @@ -110,7 +110,7 @@ export class BillingPrice { interval: SubscriptionInterval; @ManyToOne( - () => BillingProduct, + () => BillingProductEntity, (billingProduct) => billingProduct.billingPrices, { onDelete: 'CASCADE', @@ -121,14 +121,18 @@ export class BillingPrice { referencedColumnName: 'stripeProductId', name: 'stripeProductId', }) - billingProduct: Relation | null; + billingProduct: Relation | null; - @ManyToOne(() => BillingMeter, (billingMeter) => billingMeter.billingPrices, { - nullable: true, - }) + @ManyToOne( + () => BillingMeterEntity, + (billingMeter) => billingMeter.billingPrices, + { + nullable: true, + }, + ) @JoinColumn({ referencedColumnName: 'stripeMeterId', name: 'stripeMeterId', }) - billingMeter: Relation | null; + billingMeter: Relation | null; } diff --git a/packages/twenty-server/src/engine/core-modules/billing/entities/billing-product.entity.ts b/packages/twenty-server/src/engine/core-modules/billing/entities/billing-product.entity.ts index 55db2bb7834..fb8cbba453d 100644 --- a/packages/twenty-server/src/engine/core-modules/billing/entities/billing-product.entity.ts +++ b/packages/twenty-server/src/engine/core-modules/billing/entities/billing-product.entity.ts @@ -14,12 +14,12 @@ import { import type Stripe from 'stripe'; -import { BillingPrice } from 'src/engine/core-modules/billing/entities/billing-price.entity'; +import { BillingPriceEntity } from 'src/engine/core-modules/billing/entities/billing-price.entity'; import { BillingUsageType } from 'src/engine/core-modules/billing/enums/billing-usage-type.enum'; import { BillingProductMetadata } from 'src/engine/core-modules/billing/types/billing-product-metadata.type'; registerEnumType(BillingUsageType, { name: 'BillingUsageType' }); @Entity({ name: 'billingProduct', schema: 'core' }) -export class BillingProduct { +export class BillingProductEntity { @PrimaryGeneratedColumn('uuid') id: string; @@ -59,8 +59,11 @@ export class BillingProduct { @Column({ nullable: false, type: 'jsonb', default: {} }) metadata: BillingProductMetadata; - @OneToMany(() => BillingPrice, (billingPrice) => billingPrice.billingProduct) - billingPrices: Relation; + @OneToMany( + () => BillingPriceEntity, + (billingPrice) => billingPrice.billingProduct, + ) + billingPrices: Relation; @Column({ nullable: true, type: 'text' }) unitLabel: string | null; diff --git a/packages/twenty-server/src/engine/core-modules/billing/entities/billing-subscription-item.entity.ts b/packages/twenty-server/src/engine/core-modules/billing/entities/billing-subscription-item.entity.ts index fe88dc213f5..663ad541e24 100644 --- a/packages/twenty-server/src/engine/core-modules/billing/entities/billing-subscription-item.entity.ts +++ b/packages/twenty-server/src/engine/core-modules/billing/entities/billing-subscription-item.entity.ts @@ -13,15 +13,15 @@ import { UpdateDateColumn, } from 'typeorm'; -import { BillingProduct } from 'src/engine/core-modules/billing/entities/billing-product.entity'; -import { BillingSubscription } from 'src/engine/core-modules/billing/entities/billing-subscription.entity'; +import { BillingProductEntity } from 'src/engine/core-modules/billing/entities/billing-product.entity'; +import { BillingSubscriptionEntity } from 'src/engine/core-modules/billing/entities/billing-subscription.entity'; import { BillingSubscriptionItemMetadata } from 'src/engine/core-modules/billing/types/billing-subscription-item-metadata.type'; @Entity({ name: 'billingSubscriptionItem', schema: 'core' }) @Unique( 'IDX_BILLING_SUBSCRIPTION_ITEM_BILLING_SUBSCRIPTION_ID_STRIPE_PRODUCT_ID_UNIQUE', ['billingSubscriptionId', 'stripeProductId'], ) -export class BillingSubscriptionItem { +export class BillingSubscriptionItemEntity { @PrimaryGeneratedColumn('uuid') id: string; @@ -47,20 +47,20 @@ export class BillingSubscriptionItem { billingThresholds: Stripe.SubscriptionItem.BillingThresholds; @ManyToOne( - () => BillingSubscription, + () => BillingSubscriptionEntity, (billingSubscription) => billingSubscription.billingSubscriptionItems, { onDelete: 'CASCADE', }, ) - billingSubscription: Relation; + billingSubscription: Relation; - @ManyToOne(() => BillingProduct) + @ManyToOne(() => BillingProductEntity) @JoinColumn({ name: 'stripeProductId', referencedColumnName: 'stripeProductId', }) - billingProduct: Relation; + billingProduct: Relation; @Column({ nullable: false }) stripeProductId: string; diff --git a/packages/twenty-server/src/engine/core-modules/billing/entities/billing-subscription.entity.ts b/packages/twenty-server/src/engine/core-modules/billing/entities/billing-subscription.entity.ts index be10cd8ebc4..fe798ef3891 100644 --- a/packages/twenty-server/src/engine/core-modules/billing/entities/billing-subscription.entity.ts +++ b/packages/twenty-server/src/engine/core-modules/billing/entities/billing-subscription.entity.ts @@ -19,10 +19,10 @@ import { } from 'typeorm'; import { UUIDScalarType } from 'src/engine/api/graphql/workspace-schema-builder/graphql-types/scalars'; +import { BillingCustomerEntity } from 'src/engine/core-modules/billing/entities/billing-customer.entity'; import { BillingSubscriptionSchedulePhaseDTO } from 'src/engine/core-modules/billing/dtos/billing-subscription-schedule-phase.dto'; import { BillingSubscriptionItemDTO } from 'src/engine/core-modules/billing/dtos/outputs/billing-subscription-item.output'; -import { BillingCustomer } from 'src/engine/core-modules/billing/entities/billing-customer.entity'; -import { BillingSubscriptionItem } from 'src/engine/core-modules/billing/entities/billing-subscription-item.entity'; +import { BillingSubscriptionItemEntity } from 'src/engine/core-modules/billing/entities/billing-subscription-item.entity'; import { BillingSubscriptionCollectionMethod } from 'src/engine/core-modules/billing/enums/billing-subscription-collection-method.enum'; import { SubscriptionInterval } from 'src/engine/core-modules/billing/enums/billing-subscription-interval.enum'; import { SubscriptionStatus } from 'src/engine/core-modules/billing/enums/billing-subscription-status.enum'; @@ -35,8 +35,8 @@ registerEnumType(SubscriptionInterval, { name: 'SubscriptionInterval' }); unique: true, where: `status IN ('trialing', 'active', 'past_due')`, }) -@ObjectType() -export class BillingSubscription { +@ObjectType('BillingSubscription') +export class BillingSubscriptionEntity { @IDField(() => UUIDScalarType) @PrimaryGeneratedColumn('uuid') id: string; @@ -77,13 +77,13 @@ export class BillingSubscription { @Field(() => [BillingSubscriptionItemDTO], { nullable: true }) @OneToMany( - () => BillingSubscriptionItem, + () => BillingSubscriptionItemEntity, (billingSubscriptionItem) => billingSubscriptionItem.billingSubscription, ) - billingSubscriptionItems: Relation; + billingSubscriptionItems: Relation; @ManyToOne( - () => BillingCustomer, + () => BillingCustomerEntity, (billingCustomer) => billingCustomer.billingSubscriptions, { nullable: false, @@ -95,7 +95,7 @@ export class BillingSubscription { referencedColumnName: 'stripeCustomerId', name: 'stripeCustomerId', }) - billingCustomer: Relation; + billingCustomer: Relation; @Column({ nullable: false, default: false }) cancelAtPeriodEnd: boolean; diff --git a/packages/twenty-server/src/engine/core-modules/billing/jobs/update-subscription-quantity.job.ts b/packages/twenty-server/src/engine/core-modules/billing/jobs/update-subscription-quantity.job.ts index ff220421beb..edc2cab89df 100644 --- a/packages/twenty-server/src/engine/core-modules/billing/jobs/update-subscription-quantity.job.ts +++ b/packages/twenty-server/src/engine/core-modules/billing/jobs/update-subscription-quantity.job.ts @@ -8,7 +8,7 @@ import { Process } from 'src/engine/core-modules/message-queue/decorators/proces import { Processor } from 'src/engine/core-modules/message-queue/decorators/processor.decorator'; import { MessageQueue } from 'src/engine/core-modules/message-queue/message-queue.constants'; import { TwentyORMManager } from 'src/engine/twenty-orm/twenty-orm.manager'; -import { type WorkspaceMemberWorkspaceEntity } from 'src/modules/workspace-member/standard-objects/workspace-member.workspace-entity'; +import { WorkspaceMemberWorkspaceEntity } from 'src/modules/workspace-member/standard-objects/workspace-member.workspace-entity'; export type UpdateSubscriptionQuantityJobData = { workspaceId: string }; @Processor({ diff --git a/packages/twenty-server/src/engine/core-modules/billing/listeners/billing-workspace-member.listener.ts b/packages/twenty-server/src/engine/core-modules/billing/listeners/billing-workspace-member.listener.ts index aa0cb6da4dc..198093664c9 100644 --- a/packages/twenty-server/src/engine/core-modules/billing/listeners/billing-workspace-member.listener.ts +++ b/packages/twenty-server/src/engine/core-modules/billing/listeners/billing-workspace-member.listener.ts @@ -14,7 +14,7 @@ import { MessageQueue } from 'src/engine/core-modules/message-queue/message-queu import { MessageQueueService } from 'src/engine/core-modules/message-queue/services/message-queue.service'; import { TwentyConfigService } from 'src/engine/core-modules/twenty-config/twenty-config.service'; import { WorkspaceEventBatch } from 'src/engine/workspace-event-emitter/types/workspace-event-batch.type'; -import { type WorkspaceMemberWorkspaceEntity } from 'src/modules/workspace-member/standard-objects/workspace-member.workspace-entity'; +import { WorkspaceMemberWorkspaceEntity } from 'src/modules/workspace-member/standard-objects/workspace-member.workspace-entity'; @Injectable() export class BillingWorkspaceMemberListener { diff --git a/packages/twenty-server/src/engine/core-modules/billing/services/billing-plan.service.ts b/packages/twenty-server/src/engine/core-modules/billing/services/billing-plan.service.ts index f6fb4f1a730..dea095b08ec 100644 --- a/packages/twenty-server/src/engine/core-modules/billing/services/billing-plan.service.ts +++ b/packages/twenty-server/src/engine/core-modules/billing/services/billing-plan.service.ts @@ -10,7 +10,7 @@ import { BillingException, BillingExceptionCode, } from 'src/engine/core-modules/billing/billing.exception'; -import { BillingProduct } from 'src/engine/core-modules/billing/entities/billing-product.entity'; +import { BillingProductEntity } from 'src/engine/core-modules/billing/entities/billing-product.entity'; import { BillingPlanKey } from 'src/engine/core-modules/billing/enums/billing-plan-key.enum'; import { BillingProductKey } from 'src/engine/core-modules/billing/enums/billing-product-key.enum'; import { type SubscriptionInterval } from 'src/engine/core-modules/billing/enums/billing-subscription-interval.enum'; @@ -22,8 +22,8 @@ import { type BillingGetPricesPerPlanResult } from 'src/engine/core-modules/bill export class BillingPlanService { protected readonly logger = new Logger(BillingPlanService.name); constructor( - @InjectRepository(BillingProduct) - private readonly billingProductRepository: Repository, + @InjectRepository(BillingProductEntity) + private readonly billingProductRepository: Repository, ) {} async getProductsByProductMetadata({ @@ -34,7 +34,7 @@ export class BillingPlanService { planKey: BillingPlanKey; priceUsageBased: BillingUsageType; productKey: BillingProductKey; - }): Promise { + }): Promise { return await this.billingProductRepository.find({ where: { metadata: JsonContains({ @@ -48,7 +48,9 @@ export class BillingPlanService { }); } - async getPlanBaseProduct(planKey: BillingPlanKey): Promise { + async getPlanBaseProduct( + planKey: BillingPlanKey, + ): Promise { const [baseProduct] = await this.getProductsByProductMetadata({ planKey, priceUsageBased: BillingUsageType.LICENSED, @@ -130,7 +132,7 @@ export class BillingPlanService { } const { meteredProducts, licensedProducts } = plan; - const filterPricesByInterval = (product: BillingProduct) => + const filterPricesByInterval = (product: BillingProductEntity) => product.billingPrices.filter((price) => price.interval === interval); const meteredProductsPrices = meteredProducts.flatMap( diff --git a/packages/twenty-server/src/engine/core-modules/billing/services/billing-portal.workspace-service.ts b/packages/twenty-server/src/engine/core-modules/billing/services/billing-portal.workspace-service.ts index 7d675c5444e..520e90cd1af 100644 --- a/packages/twenty-server/src/engine/core-modules/billing/services/billing-portal.workspace-service.ts +++ b/packages/twenty-server/src/engine/core-modules/billing/services/billing-portal.workspace-service.ts @@ -13,8 +13,8 @@ import { BillingExceptionCode, } from 'src/engine/core-modules/billing/billing.exception'; import { billingValidator } from 'src/engine/core-modules/billing/billing.validate'; -import { BillingCustomer } from 'src/engine/core-modules/billing/entities/billing-customer.entity'; -import { BillingSubscription } from 'src/engine/core-modules/billing/entities/billing-subscription.entity'; +import { BillingCustomerEntity } from 'src/engine/core-modules/billing/entities/billing-customer.entity'; +import { BillingSubscriptionEntity } from 'src/engine/core-modules/billing/entities/billing-subscription.entity'; import { BillingProductKey } from 'src/engine/core-modules/billing/enums/billing-product-key.enum'; import { SubscriptionStatus } from 'src/engine/core-modules/billing/enums/billing-subscription-status.enum'; import { BillingSubscriptionService } from 'src/engine/core-modules/billing/services/billing-subscription.service'; @@ -24,8 +24,8 @@ import { type BillingGetPricesPerPlanResult } from 'src/engine/core-modules/bill import { BillingMeterPrice } from 'src/engine/core-modules/billing/types/billing-meter-price.type'; import { type BillingPortalCheckoutSessionParameters } from 'src/engine/core-modules/billing/types/billing-portal-checkout-session-parameters.type'; import { WorkspaceDomainsService } from 'src/engine/core-modules/domain/workspace-domains/services/workspace-domains.service'; -import { UserWorkspace } from 'src/engine/core-modules/user-workspace/user-workspace.entity'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { UserWorkspaceEntity } from 'src/engine/core-modules/user-workspace/user-workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { assert } from 'src/utils/assert'; @Injectable() @@ -36,12 +36,12 @@ export class BillingPortalWorkspaceService { private readonly stripeBillingPortalService: StripeBillingPortalService, private readonly workspaceDomainsService: WorkspaceDomainsService, private readonly billingSubscriptionService: BillingSubscriptionService, - @InjectRepository(BillingSubscription) - private readonly billingSubscriptionRepository: Repository, - @InjectRepository(BillingCustomer) - private readonly billingCustomerRepository: Repository, - @InjectRepository(UserWorkspace) - private readonly userWorkspaceRepository: Repository, + @InjectRepository(BillingSubscriptionEntity) + private readonly billingSubscriptionRepository: Repository, + @InjectRepository(BillingCustomerEntity) + private readonly billingCustomerRepository: Repository, + @InjectRepository(UserWorkspaceEntity) + private readonly userWorkspaceRepository: Repository, ) {} async computeCheckoutSessionURL({ @@ -123,7 +123,7 @@ export class BillingPortalWorkspaceService { billingPricesPerPlan, successUrlPath, }: { - workspace: Workspace; + workspace: WorkspaceEntity; billingPricesPerPlan: BillingGetPricesPerPlanResult; successUrlPath?: string; }) { @@ -161,7 +161,7 @@ export class BillingPortalWorkspaceService { } async computeBillingPortalSessionURLOrThrow( - workspace: Workspace, + workspace: WorkspaceEntity, returnUrlPath?: string, ) { const lastSubscription = await this.billingSubscriptionRepository.findOne({ diff --git a/packages/twenty-server/src/engine/core-modules/billing/services/billing-price.service.ts b/packages/twenty-server/src/engine/core-modules/billing/services/billing-price.service.ts index 573e171d39e..ac575225327 100644 --- a/packages/twenty-server/src/engine/core-modules/billing/services/billing-price.service.ts +++ b/packages/twenty-server/src/engine/core-modules/billing/services/billing-price.service.ts @@ -5,7 +5,7 @@ import { InjectRepository } from '@nestjs/typeorm'; import { Repository } from 'typeorm'; -import { BillingPrice } from 'src/engine/core-modules/billing/entities/billing-price.entity'; +import { BillingPriceEntity } from 'src/engine/core-modules/billing/entities/billing-price.entity'; import { billingValidator } from 'src/engine/core-modules/billing/billing.validate'; import { StripeSubscriptionService } from 'src/engine/core-modules/billing/stripe/services/stripe-subscription.service'; @@ -14,8 +14,8 @@ export class BillingPriceService { protected readonly logger = new Logger(BillingPriceService.name); constructor( private readonly stripeSubscriptionService: StripeSubscriptionService, - @InjectRepository(BillingPrice) - private readonly billingPriceRepository: Repository, + @InjectRepository(BillingPriceEntity) + private readonly billingPriceRepository: Repository, ) {} async getBillingThresholdsByMeterPriceId(meterPriceId: string) { diff --git a/packages/twenty-server/src/engine/core-modules/billing/services/billing-product.service.ts b/packages/twenty-server/src/engine/core-modules/billing/services/billing-product.service.ts index 63cece7ae37..6746a99c31b 100644 --- a/packages/twenty-server/src/engine/core-modules/billing/services/billing-product.service.ts +++ b/packages/twenty-server/src/engine/core-modules/billing/services/billing-product.service.ts @@ -6,8 +6,8 @@ import { BillingException, BillingExceptionCode, } from 'src/engine/core-modules/billing/billing.exception'; -import { type BillingPrice } from 'src/engine/core-modules/billing/entities/billing-price.entity'; -import { type BillingProduct } from 'src/engine/core-modules/billing/entities/billing-product.entity'; +import { type BillingPriceEntity } from 'src/engine/core-modules/billing/entities/billing-price.entity'; +import { type BillingProductEntity } from 'src/engine/core-modules/billing/entities/billing-product.entity'; import { type BillingPlanKey } from 'src/engine/core-modules/billing/enums/billing-plan-key.enum'; import { type SubscriptionInterval } from 'src/engine/core-modules/billing/enums/billing-subscription-interval.enum'; import { BillingPlanService } from 'src/engine/core-modules/billing/services/billing-plan.service'; @@ -23,7 +23,7 @@ export class BillingProductService { }: { interval: SubscriptionInterval; planKey: BillingPlanKey; - }): Promise { + }): Promise { const billingProducts = await this.getProductsByPlan(planKey); return this.getProductPricesByInterval({ @@ -37,8 +37,8 @@ export class BillingProductService { billingProductsByPlan, }: { interval: SubscriptionInterval; - billingProductsByPlan: BillingProduct[]; - }): BillingPrice[] { + billingProductsByPlan: BillingProductEntity[]; + }): BillingPriceEntity[] { return billingProductsByPlan.flatMap((product) => product.billingPrices.filter( (price) => price.interval === interval && price.active, @@ -46,7 +46,9 @@ export class BillingProductService { ); } - async getProductsByPlan(planKey: BillingPlanKey): Promise { + async getProductsByPlan( + planKey: BillingPlanKey, + ): Promise { const products = await this.billingPlanService.listPlans(); const plan = products.find((product) => product.planKey === planKey); diff --git a/packages/twenty-server/src/engine/core-modules/billing/services/billing-subscription-item.service.ts b/packages/twenty-server/src/engine/core-modules/billing/services/billing-subscription-item.service.ts index 70a925babe3..44a7c0624ee 100644 --- a/packages/twenty-server/src/engine/core-modules/billing/services/billing-subscription-item.service.ts +++ b/packages/twenty-server/src/engine/core-modules/billing/services/billing-subscription-item.service.ts @@ -3,12 +3,12 @@ import { InjectRepository } from '@nestjs/typeorm'; import { Repository } from 'typeorm'; -import { BillingPrice } from 'src/engine/core-modules/billing/entities/billing-price.entity'; +import { BillingPriceEntity } from 'src/engine/core-modules/billing/entities/billing-price.entity'; import { BillingException, BillingExceptionCode, } from 'src/engine/core-modules/billing/billing.exception'; -import { BillingSubscriptionItem } from 'src/engine/core-modules/billing/entities/billing-subscription-item.entity'; +import { BillingSubscriptionItemEntity } from 'src/engine/core-modules/billing/entities/billing-subscription-item.entity'; import { BillingProductKey } from 'src/engine/core-modules/billing/enums/billing-product-key.enum'; import { TwentyConfigService } from 'src/engine/core-modules/twenty-config/twenty-config.service'; import { billingValidator } from 'src/engine/core-modules/billing/billing.validate'; @@ -16,8 +16,8 @@ import { billingValidator } from 'src/engine/core-modules/billing/billing.valida @Injectable() export class BillingSubscriptionItemService { constructor( - @InjectRepository(BillingSubscriptionItem) - private readonly billingSubscriptionItemRepository: Repository, + @InjectRepository(BillingSubscriptionItemEntity) + private readonly billingSubscriptionItemRepository: Repository, private readonly twentyConfigService: TwentyConfigService, ) {} @@ -58,7 +58,9 @@ export class BillingSubscriptionItemService { ); } - private findMatchingPrice(item: BillingSubscriptionItem): BillingPrice { + private findMatchingPrice( + item: BillingSubscriptionItemEntity, + ): BillingPriceEntity { const matchingPrice = item.billingProduct.billingPrices.find( (price) => price.stripePriceId === item.stripePriceId, ); @@ -73,13 +75,13 @@ export class BillingSubscriptionItemService { return matchingPrice; } - private getTierQuantity(price: BillingPrice): number { + private getTierQuantity(price: BillingPriceEntity): number { billingValidator.assertIsMeteredTiersSchemaOrThrow(price.tiers); return price.tiers[0].up_to; } - private getFreeTrialQuantity(item: BillingSubscriptionItem): number { + private getFreeTrialQuantity(item: BillingSubscriptionItemEntity): number { switch (item.billingProduct.metadata.productKey) { case BillingProductKey.WORKFLOW_NODE_EXECUTION: return this.twentyConfigService.get( @@ -90,7 +92,7 @@ export class BillingSubscriptionItemService { } } - private getUnitPrice(price: BillingPrice): number { + private getUnitPrice(price: BillingPriceEntity): number { billingValidator.assertIsMeteredTiersSchemaOrThrow(price.tiers); return Number(price.tiers[1].unit_amount_decimal); diff --git a/packages/twenty-server/src/engine/core-modules/billing/services/billing-subscription-phase.service.ts b/packages/twenty-server/src/engine/core-modules/billing/services/billing-subscription-phase.service.ts index 6bd447edc1f..74f6334efe5 100644 --- a/packages/twenty-server/src/engine/core-modules/billing/services/billing-subscription-phase.service.ts +++ b/packages/twenty-server/src/engine/core-modules/billing/services/billing-subscription-phase.service.ts @@ -12,7 +12,7 @@ import { import { Repository } from 'typeorm'; import { BillingSubscriptionSchedulePhaseDTO } from 'src/engine/core-modules/billing/dtos/billing-subscription-schedule-phase.dto'; -import { BillingPrice } from 'src/engine/core-modules/billing/entities/billing-price.entity'; +import { BillingPriceEntity } from 'src/engine/core-modules/billing/entities/billing-price.entity'; import { BillingPlanKey } from 'src/engine/core-modules/billing/enums/billing-plan-key.enum'; import { SubscriptionInterval } from 'src/engine/core-modules/billing/enums/billing-subscription-interval.enum'; import { BillingPlanService } from 'src/engine/core-modules/billing/services/billing-plan.service'; @@ -22,8 +22,8 @@ import { normalizePriceRef } from 'src/engine/core-modules/billing/utils/normali @Injectable() export class BillingSubscriptionPhaseService { constructor( - @InjectRepository(BillingPrice) - private readonly billingPriceRepository: Repository, + @InjectRepository(BillingPriceEntity) + private readonly billingPriceRepository: Repository, private readonly billingPlanService: BillingPlanService, private readonly billingPriceService: BillingPriceService, ) {} diff --git a/packages/twenty-server/src/engine/core-modules/billing/services/billing-subscription.service.spec.ts b/packages/twenty-server/src/engine/core-modules/billing/services/billing-subscription.service.spec.ts index b705536b9d1..364bcf327a0 100644 --- a/packages/twenty-server/src/engine/core-modules/billing/services/billing-subscription.service.spec.ts +++ b/packages/twenty-server/src/engine/core-modules/billing/services/billing-subscription.service.spec.ts @@ -5,11 +5,11 @@ import { type ObjectLiteral, type Repository } from 'typeorm'; import type Stripe from 'stripe'; -import { BillingPrice } from 'src/engine/core-modules/billing/entities/billing-price.entity'; -import { BillingSubscription } from 'src/engine/core-modules/billing/entities/billing-subscription.entity'; -import { BillingSubscriptionItem } from 'src/engine/core-modules/billing/entities/billing-subscription-item.entity'; -import { BillingEntitlement } from 'src/engine/core-modules/billing/entities/billing-entitlement.entity'; -import { BillingCustomer } from 'src/engine/core-modules/billing/entities/billing-customer.entity'; +import { BillingCustomerEntity } from 'src/engine/core-modules/billing/entities/billing-customer.entity'; +import { BillingPriceEntity } from 'src/engine/core-modules/billing/entities/billing-price.entity'; +import { BillingSubscriptionEntity } from 'src/engine/core-modules/billing/entities/billing-subscription.entity'; +import { BillingSubscriptionItemEntity } from 'src/engine/core-modules/billing/entities/billing-subscription-item.entity'; +import { BillingEntitlementEntity } from 'src/engine/core-modules/billing/entities/billing-entitlement.entity'; import { SubscriptionInterval } from 'src/engine/core-modules/billing/enums/billing-subscription-interval.enum'; import { BillingProductKey } from 'src/engine/core-modules/billing/enums/billing-product-key.enum'; import { BillingPlanKey } from 'src/engine/core-modules/billing/enums/billing-plan-key.enum'; @@ -25,9 +25,9 @@ import { TwentyConfigService } from 'src/engine/core-modules/twenty-config/twent import { StripeSubscriptionService } from 'src/engine/core-modules/billing/stripe/services/stripe-subscription.service'; import { BillingSubscriptionService } from 'src/engine/core-modules/billing/services/billing-subscription.service'; import { type BillingGetPlanResult } from 'src/engine/core-modules/billing/types/billing-get-plan-result.type'; -import { type Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { type WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { type SubscriptionWithSchedule } from 'src/engine/core-modules/billing/types/billing-subscription-with-schedule.type'; -import { type BillingProduct } from 'src/engine/core-modules/billing/entities/billing-product.entity'; +import { type BillingProductEntity } from 'src/engine/core-modules/billing/entities/billing-product.entity'; import { type MeterBillingPriceTiers } from 'src/engine/core-modules/billing/types/meter-billing-price-tier.type'; import { type BillingMeterPrice } from 'src/engine/core-modules/billing/types/billing-meter-price.type'; import { BillingPriceService } from 'src/engine/core-modules/billing/services/billing-price.service'; @@ -63,8 +63,8 @@ const METER_PRICE_PRO_MONTH_TIER_HIGH_ID = 'METER_PRICE_PRO_MONTH_TIER_HIGH_ID'; describe('BillingSubscriptionService', () => { let module: TestingModule; let service: BillingSubscriptionService; - let billingSubscriptionRepository: Repository; - let billingPriceRepository: Repository; + let billingSubscriptionRepository: Repository; + let billingPriceRepository: Repository; let billingProductService: BillingProductService; let stripeSubscriptionScheduleService: StripeSubscriptionScheduleService; let stripeSubscriptionService: StripeSubscriptionService; @@ -102,7 +102,7 @@ describe('BillingSubscriptionService', () => { }, }, ], - } as BillingSubscription; + } as BillingSubscriptionEntity; const arrangeBillingPriceRepositoryFindOneOrFail = () => { const resolvePrice = (criteria: any) => { @@ -114,7 +114,7 @@ describe('BillingSubscriptionService', () => { ? SubscriptionInterval.Year : SubscriptionInterval.Month; - const base: Partial = { + const base: Partial = { stripePriceId: priceId, interval, billingProduct: { @@ -127,7 +127,7 @@ describe('BillingSubscriptionService', () => { ? BillingUsageType.METERED : BillingUsageType.LICENSED, }, - } as BillingProduct, + } as BillingProductEntity, }; if (isMetered) { @@ -152,7 +152,7 @@ describe('BillingSubscriptionService', () => { } as BillingMeterPrice; } - return base as BillingPrice; + return base as BillingPriceEntity; }; return jest @@ -171,7 +171,7 @@ describe('BillingSubscriptionService', () => { stripeSubscriptionId?: string; } = {}, ) => { - const sub: BillingSubscription = { + const sub: BillingSubscriptionEntity = { ...currentSubscription, workspaceId: overrides.workspaceId ?? currentSubscription.workspaceId, stripeSubscriptionId: @@ -222,7 +222,7 @@ describe('BillingSubscriptionService', () => { }, }, ], - } as BillingSubscription; + } as BillingSubscriptionEntity; return jest .spyOn(billingSubscriptionRepository, 'find') @@ -277,7 +277,7 @@ describe('BillingSubscriptionService', () => { licensedPrice: { stripePriceId: licensedPriceId, quantity, - } as unknown as BillingPrice, + } as unknown as BillingPriceEntity, meteredPrice: { stripePriceId: meteredPriceId, tiers: meteredTiers, @@ -335,7 +335,7 @@ describe('BillingSubscriptionService', () => { licensedPrice: { stripePriceId: licensedPriceId, quantity, - } as unknown as BillingPrice, + } as unknown as BillingPriceEntity, meteredPrice: { stripePriceId: meteredPriceId, tiers: meteredTiers, @@ -368,7 +368,7 @@ describe('BillingSubscriptionService', () => { }; const arrangeBillingProductServiceGetProductPrices = ( - prices: Array> = [ + prices: Array> = [ { stripePriceId: LICENSE_PRICE_ENTERPRISE_YEAR_ID, interval: SubscriptionInterval.Year, @@ -379,7 +379,7 @@ describe('BillingSubscriptionService', () => { priceUsageBased: BillingUsageType.LICENSED, }, }, - } as Partial, + } as Partial, { stripePriceId: METER_PRICE_ENTERPRISE_YEAR_ID, interval: SubscriptionInterval.Year, @@ -406,12 +406,12 @@ describe('BillingSubscriptionService', () => { priceUsageBased: BillingUsageType.METERED, }, }, - } as Partial, + } as Partial, ], ) => jest .spyOn(billingProductService, 'getProductPrices') - .mockResolvedValue(prices as BillingPrice[]); + .mockResolvedValue(prices as BillingPriceEntity[]); const arrangeBillingSubscriptionRepositoryFindOneOrFail = ({ planKey = BillingPlanKey.PRO, @@ -465,7 +465,7 @@ describe('BillingSubscriptionService', () => { }, }, ], - } as BillingSubscription); + } as BillingSubscriptionEntity); const arrangeStripeSubscriptionServiceUpdateSubscriptionAndSync = () => { const spy = jest @@ -474,7 +474,7 @@ describe('BillingSubscriptionService', () => { jest .spyOn(service, 'syncSubscriptionToDatabase') - .mockResolvedValueOnce({} as BillingSubscription); + .mockResolvedValueOnce({} as BillingSubscriptionEntity); return spy; }; @@ -554,13 +554,13 @@ describe('BillingSubscriptionService', () => { }; const arrangeBillingProductServiceGetProductPricesSequence = ( - first: Array>, - second: Array>, + first: Array>, + second: Array>, ) => { const spy = jest.spyOn(billingProductService, 'getProductPrices'); - spy.mockResolvedValueOnce(first as BillingPrice[]); - spy.mockResolvedValueOnce(second as BillingPrice[]); + spy.mockResolvedValueOnce(first as BillingPriceEntity[]); + spy.mockResolvedValueOnce(second as BillingPriceEntity[]); return spy; }; @@ -568,7 +568,7 @@ describe('BillingSubscriptionService', () => { const arrangeServiceSyncSubscriptionToDatabase = () => jest .spyOn(service, 'syncSubscriptionToDatabase') - .mockResolvedValue({} as BillingSubscription); + .mockResolvedValue({} as BillingSubscriptionEntity); beforeEach(async () => { module = await Test.createTestingModule({ @@ -648,34 +648,34 @@ describe('BillingSubscriptionService', () => { }, }, { - provide: getRepositoryToken(BillingEntitlement), - useValue: repoMock(), + provide: getRepositoryToken(BillingEntitlementEntity), + useValue: repoMock(), }, { - provide: getRepositoryToken(BillingSubscription), - useValue: repoMock(), + provide: getRepositoryToken(BillingSubscriptionEntity), + useValue: repoMock(), }, { - provide: getRepositoryToken(BillingPrice), - useValue: repoMock(), + provide: getRepositoryToken(BillingPriceEntity), + useValue: repoMock(), }, { - provide: getRepositoryToken(BillingSubscriptionItem), - useValue: repoMock(), + provide: getRepositoryToken(BillingSubscriptionItemEntity), + useValue: repoMock(), }, { - provide: getRepositoryToken(BillingCustomer), - useValue: repoMock(), + provide: getRepositoryToken(BillingCustomerEntity), + useValue: repoMock(), }, ], }).compile(); service = module.get(BillingSubscriptionService); - billingSubscriptionRepository = module.get>( - getRepositoryToken(BillingSubscription), - ); - billingPriceRepository = module.get>( - getRepositoryToken(BillingPrice), + billingSubscriptionRepository = module.get< + Repository + >(getRepositoryToken(BillingSubscriptionEntity)); + billingPriceRepository = module.get>( + getRepositoryToken(BillingPriceEntity), ); billingProductService = module.get( BillingProductService, @@ -746,7 +746,7 @@ describe('BillingSubscriptionService', () => { priceUsageBased: BillingUsageType.LICENSED, }, }, - } as Partial, + } as Partial, { stripePriceId: METER_PRICE_ENTERPRISE_MONTH_ID, interval: SubscriptionInterval.Month, @@ -773,7 +773,7 @@ describe('BillingSubscriptionService', () => { priceUsageBased: BillingUsageType.METERED, }, }, - } as Partial, + } as Partial, ]); const spyBillingPriceFindOneOrFail = @@ -783,7 +783,7 @@ describe('BillingSubscriptionService', () => { const spyUpdateSubscription = arrangeStripeSubscriptionServiceUpdateSubscriptionAndSync(); - await service.changePlan({ id: 'ws_1' } as Workspace); + await service.changePlan({ id: 'ws_1' } as WorkspaceEntity); expect( stripeSubscriptionService.updateSubscription, @@ -882,7 +882,7 @@ describe('BillingSubscriptionService', () => { priceUsageBased: BillingUsageType.LICENSED, }, }, - } as Partial, + } as Partial, { stripePriceId: METER_PRICE_ENTERPRISE_YEAR_ID, interval: SubscriptionInterval.Year, @@ -909,7 +909,7 @@ describe('BillingSubscriptionService', () => { priceUsageBased: BillingUsageType.METERED, }, }, - } as Partial, + } as Partial, ]); const spyToSnapshot2 = arrangeBillingSubscriptionPhaseServiceToSnapshot( LICENSE_PRICE_ENTERPRISE_YEAR_ID, @@ -937,7 +937,7 @@ describe('BillingSubscriptionService', () => { arrangeStripeSubscriptionServiceUpdateSubscriptionAndSync(); const spySyncDB2 = arrangeServiceSyncSubscriptionToDatabase(); - await service.changePlan({ id: 'ws_1' } as Workspace); + await service.changePlan({ id: 'ws_1' } as WorkspaceEntity); expect( stripeSubscriptionService.updateSubscription, @@ -1045,7 +1045,7 @@ describe('BillingSubscriptionService', () => { priceUsageBased: BillingUsageType.LICENSED, }, }, - } as Partial, + } as Partial, { stripePriceId: METER_PRICE_ENTERPRISE_MONTH_ID, interval: SubscriptionInterval.Month, @@ -1072,7 +1072,7 @@ describe('BillingSubscriptionService', () => { priceUsageBased: BillingUsageType.METERED, }, }, - } as Partial, + } as Partial, ], [ { @@ -1085,7 +1085,7 @@ describe('BillingSubscriptionService', () => { priceUsageBased: BillingUsageType.LICENSED, }, }, - } as Partial, + } as Partial, { stripePriceId: METER_PRICE_PRO_MONTH_ID, interval: SubscriptionInterval.Month, @@ -1112,7 +1112,7 @@ describe('BillingSubscriptionService', () => { priceUsageBased: BillingUsageType.METERED, }, }, - } as Partial, + } as Partial, ], ); const spyToSnapshotD1 = @@ -1140,7 +1140,7 @@ describe('BillingSubscriptionService', () => { const spySyncDBD1 = arrangeServiceSyncSubscriptionToDatabase(); - await service.changePlan({ id: 'ws_1' } as Workspace); + await service.changePlan({ id: 'ws_1' } as WorkspaceEntity); expect( stripeSubscriptionScheduleService.replaceEditablePhases, @@ -1233,7 +1233,7 @@ describe('BillingSubscriptionService', () => { priceUsageBased: BillingUsageType.LICENSED, }, }, - } as Partial, + } as Partial, { stripePriceId: METER_PRICE_ENTERPRISE_MONTH_ID, interval: SubscriptionInterval.Month, @@ -1260,7 +1260,7 @@ describe('BillingSubscriptionService', () => { priceUsageBased: BillingUsageType.METERED, }, }, - } as Partial, + } as Partial, ], [ { @@ -1273,7 +1273,7 @@ describe('BillingSubscriptionService', () => { priceUsageBased: BillingUsageType.LICENSED, }, }, - } as Partial, + } as Partial, { stripePriceId: METER_PRICE_PRO_MONTH_ID, interval: SubscriptionInterval.Month, @@ -1300,7 +1300,7 @@ describe('BillingSubscriptionService', () => { priceUsageBased: BillingUsageType.METERED, }, }, - } as Partial, + } as Partial, ], ); @@ -1328,7 +1328,7 @@ describe('BillingSubscriptionService', () => { const spySyncDBD2 = arrangeServiceSyncSubscriptionToDatabase(); - await service.changePlan({ id: 'ws_1' } as Workspace); + await service.changePlan({ id: 'ws_1' } as WorkspaceEntity); expect( stripeSubscriptionService.updateSubscription, @@ -1428,7 +1428,7 @@ describe('BillingSubscriptionService', () => { }); const spySyncDB = arrangeServiceSyncSubscriptionToDatabase(); - await service.changeInterval({ id: 'ws_1' } as Workspace); + await service.changeInterval({ id: 'ws_1' } as WorkspaceEntity); expect( stripeSubscriptionService.updateSubscription, @@ -1530,7 +1530,7 @@ describe('BillingSubscriptionService', () => { priceUsageBased: BillingUsageType.LICENSED, }, }, - } as Partial, + } as Partial, { stripePriceId: METER_PRICE_ENTERPRISE_YEAR_ID, interval: SubscriptionInterval.Year, @@ -1557,7 +1557,7 @@ describe('BillingSubscriptionService', () => { priceUsageBased: BillingUsageType.METERED, }, }, - } as Partial, + } as Partial, ]); const spyPriceFindByOrFail = @@ -1597,7 +1597,7 @@ describe('BillingSubscriptionService', () => { quantity: 7, }); - await service.changeInterval({ id: 'ws_1' } as Workspace); + await service.changeInterval({ id: 'ws_1' } as WorkspaceEntity); expect(stripeSubscriptionService.updateSubscription).toHaveBeenCalled(); expect( @@ -1695,7 +1695,7 @@ describe('BillingSubscriptionService', () => { priceUsageBased: BillingUsageType.LICENSED, }, }, - } as Partial, + } as Partial, { stripePriceId: METER_PRICE_ENTERPRISE_MONTH_ID, interval: SubscriptionInterval.Month, @@ -1722,7 +1722,7 @@ describe('BillingSubscriptionService', () => { priceUsageBased: BillingUsageType.METERED, }, }, - } as Partial, + } as Partial, ]); const spyPriceFindByOrFail = @@ -1751,7 +1751,7 @@ describe('BillingSubscriptionService', () => { const spySyncDB = arrangeServiceSyncSubscriptionToDatabase(); - await service.changeInterval({ id: 'ws_1' } as Workspace); + await service.changeInterval({ id: 'ws_1' } as WorkspaceEntity); expect( stripeSubscriptionService.updateSubscription, @@ -1861,7 +1861,7 @@ describe('BillingSubscriptionService', () => { priceUsageBased: BillingUsageType.LICENSED, }, }, - } as Partial, + } as Partial, { stripePriceId: METER_PRICE_ENTERPRISE_MONTH_ID, interval: SubscriptionInterval.Month, @@ -1888,7 +1888,7 @@ describe('BillingSubscriptionService', () => { priceUsageBased: BillingUsageType.METERED, }, }, - } as Partial, + } as Partial, ]); const spyPriceFindByOrFail = @@ -1917,7 +1917,7 @@ describe('BillingSubscriptionService', () => { const spySyncDB = arrangeServiceSyncSubscriptionToDatabase(); - await service.changeInterval({ id: 'ws_1' } as Workspace); + await service.changeInterval({ id: 'ws_1' } as WorkspaceEntity); expect( stripeSubscriptionService.updateSubscription, @@ -2020,7 +2020,7 @@ describe('BillingSubscriptionService', () => { priceUsageBased: BillingUsageType.LICENSED, }, }, - } as Partial, + } as Partial, { stripePriceId: METER_PRICE_ENTERPRISE_MONTH_TIER_LOW_ID, interval: SubscriptionInterval.Month, @@ -2047,7 +2047,7 @@ describe('BillingSubscriptionService', () => { priceUsageBased: BillingUsageType.METERED, }, }, - } as Partial, + } as Partial, { stripePriceId: METER_PRICE_ENTERPRISE_MONTH_TIER_HIGH_ID, interval: SubscriptionInterval.Month, @@ -2074,7 +2074,7 @@ describe('BillingSubscriptionService', () => { priceUsageBased: BillingUsageType.METERED, }, }, - } as Partial, + } as Partial, ]); const spyPriceFindByOrFail = arrangeBillingPriceRepositoryFindOneOrFail(); @@ -2091,7 +2091,7 @@ describe('BillingSubscriptionService', () => { const spySyncDB = arrangeServiceSyncSubscriptionToDatabase(); await service.changeMeteredPrice( - { id: 'ws_1' } as Workspace, + { id: 'ws_1' } as WorkspaceEntity, METER_PRICE_ENTERPRISE_MONTH_TIER_HIGH_ID, ); @@ -2231,7 +2231,7 @@ describe('BillingSubscriptionService', () => { priceUsageBased: BillingUsageType.LICENSED, }, }, - } as Partial, + } as Partial, { stripePriceId: METER_PRICE_ENTERPRISE_MONTH_TIER_LOW_ID, interval: SubscriptionInterval.Month, @@ -2258,7 +2258,7 @@ describe('BillingSubscriptionService', () => { priceUsageBased: BillingUsageType.METERED, }, }, - } as Partial, + } as Partial, { stripePriceId: METER_PRICE_ENTERPRISE_MONTH_TIER_HIGH_ID, interval: SubscriptionInterval.Month, @@ -2285,7 +2285,7 @@ describe('BillingSubscriptionService', () => { priceUsageBased: BillingUsageType.METERED, }, }, - } as Partial, + } as Partial, ]); const spyPriceFindByOrFail = arrangeBillingPriceRepositoryFindOneOrFail(); @@ -2331,7 +2331,7 @@ describe('BillingSubscriptionService', () => { const spySyncDB = arrangeServiceSyncSubscriptionToDatabase(); await service.changeMeteredPrice( - { id: 'ws_1' } as Workspace, + { id: 'ws_1' } as WorkspaceEntity, METER_PRICE_ENTERPRISE_MONTH_TIER_HIGH_ID, ); @@ -2441,7 +2441,7 @@ describe('BillingSubscriptionService', () => { priceUsageBased: BillingUsageType.LICENSED, }, }, - } as Partial, + } as Partial, { stripePriceId: METER_PRICE_ENTERPRISE_MONTH_TIER_LOW_ID, interval: SubscriptionInterval.Month, @@ -2468,7 +2468,7 @@ describe('BillingSubscriptionService', () => { priceUsageBased: BillingUsageType.METERED, }, }, - } as Partial, + } as Partial, { stripePriceId: METER_PRICE_ENTERPRISE_MONTH_TIER_HIGH_ID, interval: SubscriptionInterval.Month, @@ -2495,7 +2495,7 @@ describe('BillingSubscriptionService', () => { priceUsageBased: BillingUsageType.METERED, }, }, - } as Partial, + } as Partial, ]); const spyPriceFindByOrFail = arrangeBillingPriceRepositoryFindOneOrFail(); @@ -2511,7 +2511,7 @@ describe('BillingSubscriptionService', () => { const spySyncDB = arrangeServiceSyncSubscriptionToDatabase(); await service.changeMeteredPrice( - { id: 'ws_1' } as Workspace, + { id: 'ws_1' } as WorkspaceEntity, METER_PRICE_ENTERPRISE_MONTH_TIER_LOW_ID, ); @@ -2647,7 +2647,7 @@ describe('BillingSubscriptionService', () => { priceUsageBased: BillingUsageType.LICENSED, }, }, - } as Partial, + } as Partial, { stripePriceId: METER_PRICE_ENTERPRISE_MONTH_TIER_LOW_ID, interval: SubscriptionInterval.Month, @@ -2674,7 +2674,7 @@ describe('BillingSubscriptionService', () => { priceUsageBased: BillingUsageType.METERED, }, }, - } as Partial, + } as Partial, { stripePriceId: METER_PRICE_ENTERPRISE_MONTH_TIER_HIGH_ID, interval: SubscriptionInterval.Month, @@ -2701,7 +2701,7 @@ describe('BillingSubscriptionService', () => { priceUsageBased: BillingUsageType.METERED, }, }, - } as Partial, + } as Partial, ]); const spyPriceFindByOrFail = arrangeBillingPriceRepositoryFindOneOrFail(); @@ -2747,7 +2747,7 @@ describe('BillingSubscriptionService', () => { const spySyncDB = arrangeServiceSyncSubscriptionToDatabase(); await service.changeMeteredPrice( - { id: 'ws_1' } as Workspace, + { id: 'ws_1' } as WorkspaceEntity, METER_PRICE_ENTERPRISE_MONTH_TIER_LOW_ID, ); diff --git a/packages/twenty-server/src/engine/core-modules/billing/services/billing-subscription.service.ts b/packages/twenty-server/src/engine/core-modules/billing/services/billing-subscription.service.ts index 1daf46ff6d4..2f0d46eda83 100644 --- a/packages/twenty-server/src/engine/core-modules/billing/services/billing-subscription.service.ts +++ b/packages/twenty-server/src/engine/core-modules/billing/services/billing-subscription.service.ts @@ -25,11 +25,11 @@ import { } from 'src/engine/core-modules/billing/billing.exception'; import { billingValidator } from 'src/engine/core-modules/billing/billing.validate'; import { BillingSubscriptionSchedulePhaseDTO } from 'src/engine/core-modules/billing/dtos/billing-subscription-schedule-phase.dto'; -import { BillingCustomer } from 'src/engine/core-modules/billing/entities/billing-customer.entity'; -import { BillingEntitlement } from 'src/engine/core-modules/billing/entities/billing-entitlement.entity'; -import { BillingPrice } from 'src/engine/core-modules/billing/entities/billing-price.entity'; -import { BillingSubscriptionItem } from 'src/engine/core-modules/billing/entities/billing-subscription-item.entity'; -import { BillingSubscription } from 'src/engine/core-modules/billing/entities/billing-subscription.entity'; +import { BillingCustomerEntity } from 'src/engine/core-modules/billing/entities/billing-customer.entity'; +import { BillingEntitlementEntity } from 'src/engine/core-modules/billing/entities/billing-entitlement.entity'; +import { BillingPriceEntity } from 'src/engine/core-modules/billing/entities/billing-price.entity'; +import { BillingSubscriptionEntity } from 'src/engine/core-modules/billing/entities/billing-subscription.entity'; +import { BillingSubscriptionItemEntity } from 'src/engine/core-modules/billing/entities/billing-subscription-item.entity'; import { type BillingEntitlementKey } from 'src/engine/core-modules/billing/enums/billing-entitlement-key.enum'; import { BillingPlanKey } from 'src/engine/core-modules/billing/enums/billing-plan-key.enum'; import { BillingProductKey } from 'src/engine/core-modules/billing/enums/billing-product-key.enum'; @@ -52,7 +52,7 @@ import { getOppositeInterval } from 'src/engine/core-modules/billing/utils/get-o import { getOppositePlan } from 'src/engine/core-modules/billing/utils/get-opposite-plan'; import { getPlanKeyFromSubscription } from 'src/engine/core-modules/billing/utils/get-plan-key-from-subscription.util'; import { TwentyConfigService } from 'src/engine/core-modules/twenty-config/twenty-config.service'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; @Injectable() export class BillingSubscriptionService { @@ -62,20 +62,20 @@ export class BillingSubscriptionService { private readonly billingPriceService: BillingPriceService, private readonly billingPlanService: BillingPlanService, private readonly billingProductService: BillingProductService, - @InjectRepository(BillingEntitlement) - private readonly billingEntitlementRepository: Repository, - @InjectRepository(BillingSubscription) - private readonly billingSubscriptionRepository: Repository, + @InjectRepository(BillingEntitlementEntity) + private readonly billingEntitlementRepository: Repository, + @InjectRepository(BillingSubscriptionEntity) + private readonly billingSubscriptionRepository: Repository, private readonly stripeCustomerService: StripeCustomerService, private readonly twentyConfigService: TwentyConfigService, - @InjectRepository(BillingPrice) - private readonly billingPriceRepository: Repository, - @InjectRepository(BillingSubscriptionItem) - private readonly billingSubscriptionItemRepository: Repository, + @InjectRepository(BillingPriceEntity) + private readonly billingPriceRepository: Repository, + @InjectRepository(BillingSubscriptionItemEntity) + private readonly billingSubscriptionItemRepository: Repository, private readonly stripeSubscriptionScheduleService: StripeSubscriptionScheduleService, private readonly billingSubscriptionPhaseService: BillingSubscriptionPhaseService, - @InjectRepository(BillingCustomer) - private readonly billingCustomerRepository: Repository, + @InjectRepository(BillingCustomerEntity) + private readonly billingCustomerRepository: Repository, ) {} async getBillingSubscriptions(workspaceId: string) { @@ -87,7 +87,7 @@ export class BillingSubscriptionService { async getCurrentBillingSubscription(criteria: { workspaceId?: string; stripeCustomerId?: string; - }): Promise { + }): Promise { const notCanceledSubscriptions = await this.billingSubscriptionRepository.find({ where: { ...criteria, status: Not(SubscriptionStatus.Canceled) }, @@ -110,7 +110,7 @@ export class BillingSubscriptionService { async getCurrentBillingSubscriptionOrThrow(criteria: { workspaceId?: string; stripeCustomerId?: string; - }): Promise { + }): Promise { const notCanceledSubscription = await this.getCurrentBillingSubscription(criteria); @@ -209,7 +209,7 @@ export class BillingSubscriptionService { } async changeMeteredPrice( - workspace: Workspace, + workspace: WorkspaceEntity, meteredPriceId: string, ): Promise { const { @@ -277,7 +277,7 @@ export class BillingSubscriptionService { ); } - async cancelSwitchMeteredPrice(workspace: Workspace): Promise { + async cancelSwitchMeteredPrice(workspace: WorkspaceEntity): Promise { const billingSubscription = await this.getCurrentBillingSubscriptionOrThrow( { workspaceId: workspace.id }, ); @@ -296,7 +296,7 @@ export class BillingSubscriptionService { ); } - async changeInterval(workspace: Workspace) { + async changeInterval(workspace: WorkspaceEntity) { const billingSubscription = await this.getCurrentBillingSubscriptionOrThrow( { workspaceId: workspace.id }, ); @@ -306,7 +306,7 @@ export class BillingSubscriptionService { return this.setTargetInterval(billingSubscription, nextInterval); } - async changePlan(workspace: Workspace) { + async changePlan(workspace: WorkspaceEntity) { const billingSubscription = await this.getCurrentBillingSubscriptionOrThrow( { workspaceId: workspace.id }, ); @@ -323,7 +323,7 @@ export class BillingSubscriptionService { ); } - async endTrialPeriod(workspace: Workspace) { + async endTrialPeriod(workspace: WorkspaceEntity) { const billingSubscription = await this.getCurrentBillingSubscriptionOrThrow( { workspaceId: workspace.id }, ); @@ -422,7 +422,7 @@ export class BillingSubscriptionService { return currentMeteredBillingPrice; } - async cancelSwitchPlan(workspace: Workspace) { + async cancelSwitchPlan(workspace: WorkspaceEntity) { const billingSubscription = await this.getCurrentBillingSubscriptionOrThrow( { workspaceId: workspace.id }, ); @@ -433,7 +433,7 @@ export class BillingSubscriptionService { ); } - async cancelSwitchInterval(workspace: Workspace) { + async cancelSwitchInterval(workspace: WorkspaceEntity) { const billingSubscription = await this.getCurrentBillingSubscriptionOrThrow( { workspaceId: workspace.id }, ); @@ -570,7 +570,7 @@ export class BillingSubscriptionService { } private async replaceCurrentMeteredItem( - billingSubscription: BillingSubscription, + billingSubscription: BillingSubscriptionEntity, newMeteredPriceId: string, licensedPriceIdForThresholds: string, ): Promise { @@ -599,10 +599,10 @@ export class BillingSubscriptionService { } private async loadInitialState( - workspace: Workspace, + workspace: WorkspaceEntity, meteredPriceId: string, ): Promise<{ - billingSubscription: BillingSubscription; + billingSubscription: BillingSubscriptionEntity; subscription: SubscriptionWithSchedule; schedule: Stripe.SubscriptionSchedule; currentEditable: Stripe.SubscriptionSchedule.Phase | undefined; @@ -674,7 +674,7 @@ export class BillingSubscriptionService { } private async maybeUpgradeNowIfHigherTier( - billingSubscription: BillingSubscription, + billingSubscription: BillingSubscriptionEntity, currentPhaseDetails: Awaited< ReturnType >, @@ -813,7 +813,7 @@ export class BillingSubscriptionService { } private getCurrentMeteredBillingSubscriptionItemOrThrow( - billingSubscription: BillingSubscription, + billingSubscription: BillingSubscriptionEntity, ) { return findOrThrow( billingSubscription.billingSubscriptionItems, @@ -823,7 +823,7 @@ export class BillingSubscriptionService { } private getCurrentLicensedBillingSubscriptionItemOrThrow( - billingSubscription: BillingSubscription, + billingSubscription: BillingSubscriptionEntity, ) { return findOrThrow( billingSubscription.billingSubscriptionItems, @@ -832,7 +832,9 @@ export class BillingSubscriptionService { ) as LicensedBillingSubscriptionItem; } - getTrialPeriodFreeWorkflowCredits(billingSubscription: BillingSubscription) { + getTrialPeriodFreeWorkflowCredits( + billingSubscription: BillingSubscriptionEntity, + ) { const trialDuration = isDefined(billingSubscription.trialEnd) && isDefined(billingSubscription.trialStart) @@ -897,7 +899,7 @@ export class BillingSubscriptionService { } private async setTargetInterval( - billingSubscription: BillingSubscription, + billingSubscription: BillingSubscriptionEntity, targetInterval: SubscriptionInterval, ): Promise { const { currentEditable } = await this.loadScheduleEditable( @@ -1502,7 +1504,7 @@ export class BillingSubscriptionService { } private filterMeteredCandidates( - catalog: BillingPrice[], + catalog: BillingPriceEntity[], interval?: SubscriptionInterval, ) { const pool = interval @@ -1517,7 +1519,7 @@ export class BillingSubscriptionService { } private async findMeteredMatchFloor( - catalog: BillingPrice[], + catalog: BillingPriceEntity[], referencePriceId: string, targetInterval?: SubscriptionInterval, ): Promise { @@ -1552,10 +1554,12 @@ export class BillingSubscriptionService { meteredPriceId, targetInterval, }: { - billingPricesPerPlanAndIntervalArray: BillingPrice[]; + billingPricesPerPlanAndIntervalArray: BillingPriceEntity[]; meteredPriceId: string; targetInterval: SubscriptionInterval; - }): Promise & { tiers: MeterBillingPriceTiers }> { + }): Promise< + Omit & { tiers: MeterBillingPriceTiers } + > { const mapped = await this.findMeteredMatchFloor( billingPricesPerPlanAndIntervalArray, meteredPriceId, @@ -1569,7 +1573,7 @@ export class BillingSubscriptionService { billingPricesPerPlanAndIntervalArray, meteredPriceId, }: { - billingPricesPerPlanAndIntervalArray: BillingPrice[]; + billingPricesPerPlanAndIntervalArray: BillingPriceEntity[]; meteredPriceId: string; }): Promise { return (await this.findMeteredMatchFloor( @@ -1583,7 +1587,7 @@ export class BillingSubscriptionService { targetMeteredPriceId, interval, }: { - billingPricesPerPlanAndIntervalArray: BillingPrice[]; + billingPricesPerPlanAndIntervalArray: BillingPriceEntity[]; targetMeteredPriceId: string; interval: SubscriptionInterval; }): Promise { diff --git a/packages/twenty-server/src/engine/core-modules/billing/services/billing-usage.service.ts b/packages/twenty-server/src/engine/core-modules/billing/services/billing-usage.service.ts index 3eca70d64e5..002e751b2c5 100644 --- a/packages/twenty-server/src/engine/core-modules/billing/services/billing-usage.service.ts +++ b/packages/twenty-server/src/engine/core-modules/billing/services/billing-usage.service.ts @@ -11,21 +11,21 @@ import { BillingExceptionCode, } from 'src/engine/core-modules/billing/billing.exception'; import { type BillingMeteredProductUsageOutput } from 'src/engine/core-modules/billing/dtos/outputs/billing-metered-product-usage.output'; -import { BillingCustomer } from 'src/engine/core-modules/billing/entities/billing-customer.entity'; +import { BillingCustomerEntity } from 'src/engine/core-modules/billing/entities/billing-customer.entity'; import { SubscriptionStatus } from 'src/engine/core-modules/billing/enums/billing-subscription-status.enum'; import { BillingSubscriptionItemService } from 'src/engine/core-modules/billing/services/billing-subscription-item.service'; import { BillingSubscriptionService } from 'src/engine/core-modules/billing/services/billing-subscription.service'; import { StripeBillingMeterEventService } from 'src/engine/core-modules/billing/stripe/services/stripe-billing-meter-event.service'; import { type BillingUsageEvent } from 'src/engine/core-modules/billing/types/billing-usage-event.type'; import { TwentyConfigService } from 'src/engine/core-modules/twenty-config/twenty-config.service'; -import { type Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; @Injectable() export class BillingUsageService { protected readonly logger = new Logger(BillingUsageService.name); constructor( - @InjectRepository(BillingCustomer) - private readonly billingCustomerRepository: Repository, + @InjectRepository(BillingCustomerEntity) + private readonly billingCustomerRepository: Repository, private readonly billingSubscriptionService: BillingSubscriptionService, private readonly stripeBillingMeterEventService: StripeBillingMeterEventService, private readonly twentyConfigService: TwentyConfigService, @@ -81,7 +81,7 @@ export class BillingUsageService { } async getMeteredProductsUsage( - workspace: Workspace, + workspace: WorkspaceEntity, ): Promise { const subscription = await this.billingSubscriptionService.getCurrentBillingSubscriptionOrThrow( diff --git a/packages/twenty-server/src/engine/core-modules/billing/services/billing.service.ts b/packages/twenty-server/src/engine/core-modules/billing/services/billing.service.ts index 2acd7baad44..55925d6d462 100644 --- a/packages/twenty-server/src/engine/core-modules/billing/services/billing.service.ts +++ b/packages/twenty-server/src/engine/core-modules/billing/services/billing.service.ts @@ -6,7 +6,7 @@ import { InjectRepository } from '@nestjs/typeorm'; import { isDefined } from 'class-validator'; import { Repository } from 'typeorm'; -import { BillingSubscription } from 'src/engine/core-modules/billing/entities/billing-subscription.entity'; +import { BillingSubscriptionEntity } from 'src/engine/core-modules/billing/entities/billing-subscription.entity'; import { type BillingEntitlementKey } from 'src/engine/core-modules/billing/enums/billing-entitlement-key.enum'; import { BillingProductKey } from 'src/engine/core-modules/billing/enums/billing-product-key.enum'; import { SubscriptionStatus } from 'src/engine/core-modules/billing/enums/billing-subscription-status.enum'; @@ -22,8 +22,8 @@ export class BillingService { private readonly twentyConfigService: TwentyConfigService, private readonly billingSubscriptionService: BillingSubscriptionService, private readonly billingProductService: BillingProductService, - @InjectRepository(BillingSubscription) - private readonly billingSubscriptionRepository: Repository, + @InjectRepository(BillingSubscriptionEntity) + private readonly billingSubscriptionRepository: Repository, ) {} isBillingEnabled() { diff --git a/packages/twenty-server/src/engine/core-modules/billing/stripe/services/stripe-checkout.service.ts b/packages/twenty-server/src/engine/core-modules/billing/stripe/services/stripe-checkout.service.ts index 41066f39cd8..dde565b132b 100644 --- a/packages/twenty-server/src/engine/core-modules/billing/stripe/services/stripe-checkout.service.ts +++ b/packages/twenty-server/src/engine/core-modules/billing/stripe/services/stripe-checkout.service.ts @@ -10,8 +10,8 @@ import { BillingPlanKey } from 'src/engine/core-modules/billing/enums/billing-pl import { StripeCustomerService } from 'src/engine/core-modules/billing/stripe/services/stripe-customer.service'; import { StripeSDKService } from 'src/engine/core-modules/billing/stripe/stripe-sdk/services/stripe-sdk.service'; import { TwentyConfigService } from 'src/engine/core-modules/twenty-config/twenty-config.service'; -import { type User } from 'src/engine/core-modules/user/user.entity'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { UserEntity } from 'src/engine/core-modules/user/user.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; @Injectable() export class StripeCheckoutService { @@ -42,8 +42,8 @@ export class StripeCheckoutService { requirePaymentMethod = true, withTrialPeriod, }: { - user: User; - workspace: Pick; + user: UserEntity; + workspace: Pick; stripeSubscriptionLineItems: Stripe.Checkout.SessionCreateParams.LineItem[]; successUrl?: string; cancelUrl?: string; @@ -97,8 +97,8 @@ export class StripeCheckoutService { requirePaymentMethod = false, withTrialPeriod, }: { - user: User; - workspace: Pick; + user: UserEntity; + workspace: Pick; stripeSubscriptionLineItems: Stripe.Checkout.SessionCreateParams.LineItem[]; stripeCustomerId?: string; plan?: BillingPlanKey; diff --git a/packages/twenty-server/src/engine/core-modules/billing/stripe/services/stripe-customer.service.ts b/packages/twenty-server/src/engine/core-modules/billing/stripe/services/stripe-customer.service.ts index da0faad5774..04cb386178c 100644 --- a/packages/twenty-server/src/engine/core-modules/billing/stripe/services/stripe-customer.service.ts +++ b/packages/twenty-server/src/engine/core-modules/billing/stripe/services/stripe-customer.service.ts @@ -7,7 +7,7 @@ import { Repository } from 'typeorm'; import type Stripe from 'stripe'; -import { BillingCustomer } from 'src/engine/core-modules/billing/entities/billing-customer.entity'; +import { BillingCustomerEntity } from 'src/engine/core-modules/billing/entities/billing-customer.entity'; import { StripeSDKService } from 'src/engine/core-modules/billing/stripe/stripe-sdk/services/stripe-sdk.service'; import { TwentyConfigService } from 'src/engine/core-modules/twenty-config/twenty-config.service'; @@ -19,8 +19,8 @@ export class StripeCustomerService { constructor( private readonly twentyConfigService: TwentyConfigService, private readonly stripeSDKService: StripeSDKService, - @InjectRepository(BillingCustomer) - private readonly billingCustomerRepository: Repository, + @InjectRepository(BillingCustomerEntity) + private readonly billingCustomerRepository: Repository, ) { if (!this.twentyConfigService.get('IS_BILLING_ENABLED')) { return; diff --git a/packages/twenty-server/src/engine/core-modules/billing/stripe/stripe.module.ts b/packages/twenty-server/src/engine/core-modules/billing/stripe/stripe.module.ts index 5cf50c38496..70c8850f6fa 100644 --- a/packages/twenty-server/src/engine/core-modules/billing/stripe/stripe.module.ts +++ b/packages/twenty-server/src/engine/core-modules/billing/stripe/stripe.module.ts @@ -3,7 +3,6 @@ import { Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; -import { BillingCustomer } from 'src/engine/core-modules/billing/entities/billing-customer.entity'; import { StripeBillingAlertService } from 'src/engine/core-modules/billing/stripe/services/stripe-billing-alert.service'; import { StripeBillingMeterEventService } from 'src/engine/core-modules/billing/stripe/services/stripe-billing-meter-event.service'; import { StripeBillingMeterService } from 'src/engine/core-modules/billing/stripe/services/stripe-billing-meter.service'; @@ -17,13 +16,14 @@ import { StripeSubscriptionScheduleService } from 'src/engine/core-modules/billi import { StripeSubscriptionService } from 'src/engine/core-modules/billing/stripe/services/stripe-subscription.service'; import { StripeWebhookService } from 'src/engine/core-modules/billing/stripe/services/stripe-webhook.service'; import { StripeSDKModule } from 'src/engine/core-modules/billing/stripe/stripe-sdk/stripe-sdk.module'; +import { BillingCustomerEntity } from 'src/engine/core-modules/billing/entities/billing-customer.entity'; import { DomainServerConfigModule } from 'src/engine/core-modules/domain/domain-server-config/domain-server-config.module'; @Module({ imports: [ DomainServerConfigModule, StripeSDKModule, - TypeOrmModule.forFeature([BillingCustomer]), + TypeOrmModule.forFeature([BillingCustomerEntity]), ], providers: [ StripeSubscriptionItemService, diff --git a/packages/twenty-server/src/engine/core-modules/billing/types/billing-get-plan-result.type.ts b/packages/twenty-server/src/engine/core-modules/billing/types/billing-get-plan-result.type.ts index 03ec98fcd1d..8e7644aac2c 100644 --- a/packages/twenty-server/src/engine/core-modules/billing/types/billing-get-plan-result.type.ts +++ b/packages/twenty-server/src/engine/core-modules/billing/types/billing-get-plan-result.type.ts @@ -1,10 +1,10 @@ /* @license Enterprise */ -import { type BillingProduct } from 'src/engine/core-modules/billing/entities/billing-product.entity'; +import { type BillingProductEntity } from 'src/engine/core-modules/billing/entities/billing-product.entity'; import { type BillingPlanKey } from 'src/engine/core-modules/billing/enums/billing-plan-key.enum'; export type BillingGetPlanResult = { planKey: BillingPlanKey; - meteredProducts: BillingProduct[]; - licensedProducts: BillingProduct[]; + meteredProducts: BillingProductEntity[]; + licensedProducts: BillingProductEntity[]; }; diff --git a/packages/twenty-server/src/engine/core-modules/billing/types/billing-get-prices-per-plan-result.type.ts b/packages/twenty-server/src/engine/core-modules/billing/types/billing-get-prices-per-plan-result.type.ts index 09458b0659e..fd8a9793917 100644 --- a/packages/twenty-server/src/engine/core-modules/billing/types/billing-get-prices-per-plan-result.type.ts +++ b/packages/twenty-server/src/engine/core-modules/billing/types/billing-get-prices-per-plan-result.type.ts @@ -1,8 +1,8 @@ /* @license Enterprise */ -import { type BillingPrice } from 'src/engine/core-modules/billing/entities/billing-price.entity'; +import { type BillingPriceEntity } from 'src/engine/core-modules/billing/entities/billing-price.entity'; export type BillingGetPricesPerPlanResult = { - meteredProductsPrices: BillingPrice[]; - licensedProductsPrices: BillingPrice[]; + meteredProductsPrices: BillingPriceEntity[]; + licensedProductsPrices: BillingPriceEntity[]; }; diff --git a/packages/twenty-server/src/engine/core-modules/billing/types/billing-meter-price.type.ts b/packages/twenty-server/src/engine/core-modules/billing/types/billing-meter-price.type.ts index 5f5498454b3..749ba668ed9 100644 --- a/packages/twenty-server/src/engine/core-modules/billing/types/billing-meter-price.type.ts +++ b/packages/twenty-server/src/engine/core-modules/billing/types/billing-meter-price.type.ts @@ -1,6 +1,6 @@ import type { MeterBillingPriceTiers } from 'src/engine/core-modules/billing/types/meter-billing-price-tier.type'; -import { type BillingPrice } from 'src/engine/core-modules/billing/entities/billing-price.entity'; +import { type BillingPriceEntity } from 'src/engine/core-modules/billing/entities/billing-price.entity'; -export type BillingMeterPrice = BillingPrice & { +export type BillingMeterPrice = BillingPriceEntity & { tiers: MeterBillingPriceTiers; }; diff --git a/packages/twenty-server/src/engine/core-modules/billing/types/billing-portal-checkout-session-parameters.type.ts b/packages/twenty-server/src/engine/core-modules/billing/types/billing-portal-checkout-session-parameters.type.ts index a86e7789f93..e53fbbd91ad 100644 --- a/packages/twenty-server/src/engine/core-modules/billing/types/billing-portal-checkout-session-parameters.type.ts +++ b/packages/twenty-server/src/engine/core-modules/billing/types/billing-portal-checkout-session-parameters.type.ts @@ -2,12 +2,12 @@ import { type BillingPlanKey } from 'src/engine/core-modules/billing/enums/billing-plan-key.enum'; import { type BillingGetPricesPerPlanResult } from 'src/engine/core-modules/billing/types/billing-get-prices-per-plan-result.type'; -import { type User } from 'src/engine/core-modules/user/user.entity'; -import { type Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { type UserEntity } from 'src/engine/core-modules/user/user.entity'; +import { type WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; export type BillingPortalCheckoutSessionParameters = { - user: User; - workspace: Workspace; + user: UserEntity; + workspace: WorkspaceEntity; billingPricesPerPlan: BillingGetPricesPerPlanResult; successUrlPath?: string; plan: BillingPlanKey; diff --git a/packages/twenty-server/src/engine/core-modules/billing/types/billing-subscription-item.type.ts b/packages/twenty-server/src/engine/core-modules/billing/types/billing-subscription-item.type.ts index 5a04b4f5c56..fbbdf739275 100644 --- a/packages/twenty-server/src/engine/core-modules/billing/types/billing-subscription-item.type.ts +++ b/packages/twenty-server/src/engine/core-modules/billing/types/billing-subscription-item.type.ts @@ -1,14 +1,14 @@ -import { type BillingSubscriptionItem } from 'src/engine/core-modules/billing/entities/billing-subscription-item.entity'; +import { type BillingSubscriptionItemEntity } from 'src/engine/core-modules/billing/entities/billing-subscription-item.entity'; export type LicensedBillingSubscriptionItem = Omit< - BillingSubscriptionItem, + BillingSubscriptionItemEntity, 'quantity' > & { quantity: number; }; export type MeteredBillingSubscriptionItem = Omit< - BillingSubscriptionItem, + BillingSubscriptionItemEntity, 'quantity' > & { quantity: null; diff --git a/packages/twenty-server/src/engine/core-modules/billing/types/billing-subscription-with-subscription-items.ts b/packages/twenty-server/src/engine/core-modules/billing/types/billing-subscription-with-subscription-items.ts index 2b5f1b191a7..248f161fb80 100644 --- a/packages/twenty-server/src/engine/core-modules/billing/types/billing-subscription-with-subscription-items.ts +++ b/packages/twenty-server/src/engine/core-modules/billing/types/billing-subscription-with-subscription-items.ts @@ -1,11 +1,11 @@ -import { type BillingSubscription } from 'src/engine/core-modules/billing/entities/billing-subscription.entity'; +import { type BillingSubscriptionEntity } from 'src/engine/core-modules/billing/entities/billing-subscription.entity'; import { type LicensedBillingSubscriptionItem, type MeteredBillingSubscriptionItem, } from 'src/engine/core-modules/billing/types/billing-subscription-item.type'; export type BillingSubscriptionWithSubscriptionItems = Omit< - BillingSubscription, + BillingSubscriptionEntity, 'billingSubscriptionItems' > & { billingSubscriptionItems: Array< diff --git a/packages/twenty-server/src/engine/core-modules/billing/utils/format-database-product-to-graphql-dto.util.ts b/packages/twenty-server/src/engine/core-modules/billing/utils/format-database-product-to-graphql-dto.util.ts index 7b8253872f3..ba75b18e0a3 100644 --- a/packages/twenty-server/src/engine/core-modules/billing/utils/format-database-product-to-graphql-dto.util.ts +++ b/packages/twenty-server/src/engine/core-modules/billing/utils/format-database-product-to-graphql-dto.util.ts @@ -3,7 +3,7 @@ import { type BillingPriceLicensedDTO } from 'src/engine/core-modules/billing/dtos/billing-price-licensed.dto'; import { type BillingPriceMeteredDTO } from 'src/engine/core-modules/billing/dtos/billing-price-metered.dto'; import { type BillingPlanOutput } from 'src/engine/core-modules/billing/dtos/outputs/billing-plan.output'; -import { type BillingPrice } from 'src/engine/core-modules/billing/entities/billing-price.entity'; +import { type BillingPriceEntity } from 'src/engine/core-modules/billing/entities/billing-price.entity'; import { SubscriptionInterval } from 'src/engine/core-modules/billing/enums/billing-subscription-interval.enum'; import { BillingUsageType } from 'src/engine/core-modules/billing/enums/billing-usage-type.enum'; import { type BillingGetPlanResult } from 'src/engine/core-modules/billing/types/billing-get-plan-result.type'; @@ -37,7 +37,7 @@ export const formatBillingDatabaseProductToGraphqlDTO = ( }; const formatBillingDatabasePriceToMeteredPriceDTO = ( - billingPrice: BillingPrice, + billingPrice: BillingPriceEntity, ): BillingPriceMeteredDTO => { return { tiers: @@ -53,7 +53,7 @@ const formatBillingDatabasePriceToMeteredPriceDTO = ( }; const formatBillingDatabasePriceToLicensedPriceDTO = ( - billingPrice: BillingPrice, + billingPrice: BillingPriceEntity, ): BillingPriceLicensedDTO => { return { recurringInterval: billingPrice?.interval ?? SubscriptionInterval.Month, diff --git a/packages/twenty-server/src/engine/core-modules/billing/utils/get-plan-key-from-subscription.util.ts b/packages/twenty-server/src/engine/core-modules/billing/utils/get-plan-key-from-subscription.util.ts index b6b1c38dac9..f5de992fca3 100644 --- a/packages/twenty-server/src/engine/core-modules/billing/utils/get-plan-key-from-subscription.util.ts +++ b/packages/twenty-server/src/engine/core-modules/billing/utils/get-plan-key-from-subscription.util.ts @@ -1,8 +1,8 @@ -import { type BillingSubscription } from 'src/engine/core-modules/billing/entities/billing-subscription.entity'; +import { type BillingSubscriptionEntity } from 'src/engine/core-modules/billing/entities/billing-subscription.entity'; import { BillingPlanKey } from 'src/engine/core-modules/billing/enums/billing-plan-key.enum'; export const getPlanKeyFromSubscription = ( - subscription: BillingSubscription, + subscription: BillingSubscriptionEntity, ): BillingPlanKey => { const plan = subscription.metadata?.plan; //To do : #867 Naming issue decide if we should rename stripe product metadata planKey to plan (+ productKey to product) OR at session checkout creating subscription with metadata planKey (and not plan) diff --git a/packages/twenty-server/src/engine/core-modules/cloudflare/cloudflare.module.ts b/packages/twenty-server/src/engine/core-modules/cloudflare/cloudflare.module.ts index 6ed3f237074..ba118efe9e3 100644 --- a/packages/twenty-server/src/engine/core-modules/cloudflare/cloudflare.module.ts +++ b/packages/twenty-server/src/engine/core-modules/cloudflare/cloudflare.module.ts @@ -6,13 +6,13 @@ import { DnsCloudflareController } from 'src/engine/core-modules/cloudflare/cont import { DnsCloudflareService } from 'src/engine/core-modules/cloudflare/services/dns-cloudflare.service'; import { CustomDomainManagerModule } from 'src/engine/core-modules/domain/custom-domain-manager/custom-domain-manager.module'; import { WorkspaceDomainsModule } from 'src/engine/core-modules/domain/workspace-domains/workspace-domains.module'; -import { PublicDomain } from 'src/engine/core-modules/public-domain/public-domain.entity'; +import { PublicDomainEntity } from 'src/engine/core-modules/public-domain/public-domain.entity'; import { PublicDomainModule } from 'src/engine/core-modules/public-domain/public-domain.module'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; @Module({ imports: [ - NestjsQueryTypeOrmModule.forFeature([PublicDomain, Workspace]), + NestjsQueryTypeOrmModule.forFeature([PublicDomainEntity, WorkspaceEntity]), WorkspaceDomainsModule, CustomDomainManagerModule, PublicDomainModule, diff --git a/packages/twenty-server/src/engine/core-modules/dns-manager/services/dns-manager.service.spec.ts b/packages/twenty-server/src/engine/core-modules/dns-manager/services/dns-manager.service.spec.ts index d83ba09b1f7..10fdd60e8c4 100644 --- a/packages/twenty-server/src/engine/core-modules/dns-manager/services/dns-manager.service.spec.ts +++ b/packages/twenty-server/src/engine/core-modules/dns-manager/services/dns-manager.service.spec.ts @@ -10,7 +10,7 @@ import { DnsManagerException } from 'src/engine/core-modules/dns-manager/excepti import { DnsManagerService } from 'src/engine/core-modules/dns-manager/services/dns-manager.service'; import { DomainServerConfigService } from 'src/engine/core-modules/domain/domain-server-config/services/domain-server-config.service'; import { TwentyConfigService } from 'src/engine/core-modules/twenty-config/twenty-config.service'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; jest.mock('cloudflare'); @@ -43,7 +43,7 @@ describe('DnsManagerService', () => { }, }, { - provide: getRepositoryToken(Workspace), + provide: getRepositoryToken(WorkspaceEntity), useValue: { save: jest.fn(), }, diff --git a/packages/twenty-server/src/engine/core-modules/domain/custom-domain-manager/custom-domain-manager.module.ts b/packages/twenty-server/src/engine/core-modules/domain/custom-domain-manager/custom-domain-manager.module.ts index 6fc34537a08..1b05bd7382d 100644 --- a/packages/twenty-server/src/engine/core-modules/domain/custom-domain-manager/custom-domain-manager.module.ts +++ b/packages/twenty-server/src/engine/core-modules/domain/custom-domain-manager/custom-domain-manager.module.ts @@ -5,12 +5,12 @@ import { AuditModule } from 'src/engine/core-modules/audit/audit.module'; import { BillingModule } from 'src/engine/core-modules/billing/billing.module'; import { DnsManagerModule } from 'src/engine/core-modules/dns-manager/dns-manager.module'; import { CustomDomainManagerService } from 'src/engine/core-modules/domain/custom-domain-manager/services/custom-domain-manager.service'; -import { PublicDomain } from 'src/engine/core-modules/public-domain/public-domain.entity'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { PublicDomainEntity } from 'src/engine/core-modules/public-domain/public-domain.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; @Module({ imports: [ - TypeOrmModule.forFeature([Workspace, PublicDomain]), + TypeOrmModule.forFeature([WorkspaceEntity, PublicDomainEntity]), DnsManagerModule, BillingModule, AuditModule, diff --git a/packages/twenty-server/src/engine/core-modules/domain/custom-domain-manager/services/custom-domain-manager.service.ts b/packages/twenty-server/src/engine/core-modules/domain/custom-domain-manager/services/custom-domain-manager.service.ts index 6bd5de30a83..f1428159bdd 100644 --- a/packages/twenty-server/src/engine/core-modules/domain/custom-domain-manager/services/custom-domain-manager.service.ts +++ b/packages/twenty-server/src/engine/core-modules/domain/custom-domain-manager/services/custom-domain-manager.service.ts @@ -12,8 +12,8 @@ import { BillingEntitlementKey } from 'src/engine/core-modules/billing/enums/bil import { BillingService } from 'src/engine/core-modules/billing/services/billing.service'; import { DomainValidRecords } from 'src/engine/core-modules/dns-manager/dtos/domain-valid-records'; import { DnsManagerService } from 'src/engine/core-modules/dns-manager/services/dns-manager.service'; -import { PublicDomain } from 'src/engine/core-modules/public-domain/public-domain.entity'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { PublicDomainEntity } from 'src/engine/core-modules/public-domain/public-domain.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { WorkspaceException, WorkspaceExceptionCode, @@ -22,10 +22,10 @@ import { @Injectable() export class CustomDomainManagerService { constructor( - @InjectRepository(Workspace) - private readonly workspaceRepository: Repository, - @InjectRepository(PublicDomain) - private readonly publicDomainRepository: Repository, + @InjectRepository(WorkspaceEntity) + private readonly workspaceRepository: Repository, + @InjectRepository(PublicDomainEntity) + private readonly publicDomainRepository: Repository, private readonly billingService: BillingService, private readonly dnsManagerService: DnsManagerService, private readonly auditService: AuditService, @@ -46,7 +46,7 @@ export class CustomDomainManagerService { } } - async setCustomDomain(workspace: Workspace, customDomain: string) { + async setCustomDomain(workspace: WorkspaceEntity, customDomain: string) { await this.isCustomDomainEnabled(workspace.id); const existingWorkspace = await this.workspaceRepository.findOne({ @@ -89,7 +89,7 @@ export class CustomDomainManagerService { } async checkCustomDomainValidRecords( - workspace: Workspace, + workspace: WorkspaceEntity, domainValidRecord?: DomainValidRecords, ) { assertIsDefinedOrThrow(workspace.customDomain); diff --git a/packages/twenty-server/src/engine/core-modules/domain/domain-server-config/services/__test__/domain-server-config.service.spec.ts b/packages/twenty-server/src/engine/core-modules/domain/domain-server-config/services/__test__/domain-server-config.service.spec.ts index a17a175a1d1..0dbb8955c89 100644 --- a/packages/twenty-server/src/engine/core-modules/domain/domain-server-config/services/__test__/domain-server-config.service.spec.ts +++ b/packages/twenty-server/src/engine/core-modules/domain/domain-server-config/services/__test__/domain-server-config.service.spec.ts @@ -1,10 +1,10 @@ import { Test, type TestingModule } from '@nestjs/testing'; import { getRepositoryToken } from '@nestjs/typeorm'; +import { ApprovedAccessDomainEntity } from 'src/engine/core-modules/approved-access-domain/approved-access-domain.entity'; import { DomainServerConfigService } from 'src/engine/core-modules/domain/domain-server-config/services/domain-server-config.service'; -import { PublicDomain } from 'src/engine/core-modules/public-domain/public-domain.entity'; import { TwentyConfigService } from 'src/engine/core-modules/twenty-config/twenty-config.service'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; describe('SubdomainManagerService', () => { let domainServerConfigService: DomainServerConfigService; @@ -15,14 +15,14 @@ describe('SubdomainManagerService', () => { providers: [ DomainServerConfigService, { - provide: getRepositoryToken(Workspace), + provide: getRepositoryToken(WorkspaceEntity), useValue: { find: jest.fn(), findOne: jest.fn(), }, }, { - provide: getRepositoryToken(PublicDomain), + provide: getRepositoryToken(ApprovedAccessDomainEntity), useValue: { findOne: jest.fn(), }, diff --git a/packages/twenty-server/src/engine/core-modules/domain/subdomain-manager/services/subdomain-manager.service.ts b/packages/twenty-server/src/engine/core-modules/domain/subdomain-manager/services/subdomain-manager.service.ts index f700d6795d5..31086523fba 100644 --- a/packages/twenty-server/src/engine/core-modules/domain/subdomain-manager/services/subdomain-manager.service.ts +++ b/packages/twenty-server/src/engine/core-modules/domain/subdomain-manager/services/subdomain-manager.service.ts @@ -9,7 +9,7 @@ import { getSubdomainFromEmail } from 'src/engine/core-modules/domain/subdomain- import { getSubdomainNameFromDisplayName } from 'src/engine/core-modules/domain/subdomain-manager/utils/get-subdomain-name-from-display-name.util'; import { isSubdomainValid } from 'src/engine/core-modules/domain/subdomain-manager/utils/is-subdomain-valid.util'; import { TwentyConfigService } from 'src/engine/core-modules/twenty-config/twenty-config.service'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { WorkspaceException, WorkspaceExceptionCode, @@ -18,8 +18,8 @@ import { @Injectable() export class SubdomainManagerService { constructor( - @InjectRepository(Workspace) - private readonly workspaceRepository: Repository, + @InjectRepository(WorkspaceEntity) + private readonly workspaceRepository: Repository, private readonly twentyConfigService: TwentyConfigService, ) {} diff --git a/packages/twenty-server/src/engine/core-modules/domain/subdomain-manager/subdomain-manager.module.ts b/packages/twenty-server/src/engine/core-modules/domain/subdomain-manager/subdomain-manager.module.ts index b1491421dc5..9e44cb3a9b2 100644 --- a/packages/twenty-server/src/engine/core-modules/domain/subdomain-manager/subdomain-manager.module.ts +++ b/packages/twenty-server/src/engine/core-modules/domain/subdomain-manager/subdomain-manager.module.ts @@ -2,10 +2,10 @@ import { Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; import { SubdomainManagerService } from 'src/engine/core-modules/domain/subdomain-manager/services/subdomain-manager.service'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; @Module({ - imports: [TypeOrmModule.forFeature([Workspace])], + imports: [TypeOrmModule.forFeature([WorkspaceEntity])], providers: [SubdomainManagerService], exports: [SubdomainManagerService], }) diff --git a/packages/twenty-server/src/engine/core-modules/domain/workspace-domains/services/__test__/workspace-domains.service.spec.ts b/packages/twenty-server/src/engine/core-modules/domain/workspace-domains/services/__test__/workspace-domains.service.spec.ts index d0d8394cbaf..81edd7578ca 100644 --- a/packages/twenty-server/src/engine/core-modules/domain/workspace-domains/services/__test__/workspace-domains.service.spec.ts +++ b/packages/twenty-server/src/engine/core-modules/domain/workspace-domains/services/__test__/workspace-domains.service.spec.ts @@ -5,15 +5,15 @@ import { type Repository } from 'typeorm'; import { DomainServerConfigService } from 'src/engine/core-modules/domain/domain-server-config/services/domain-server-config.service'; import { WorkspaceDomainsService } from 'src/engine/core-modules/domain/workspace-domains/services/workspace-domains.service'; -import { PublicDomain } from 'src/engine/core-modules/public-domain/public-domain.entity'; +import { PublicDomainEntity } from 'src/engine/core-modules/public-domain/public-domain.entity'; import { TwentyConfigService } from 'src/engine/core-modules/twenty-config/twenty-config.service'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; describe('WorkspaceDomainsService', () => { let workspaceDomainsService: WorkspaceDomainsService; let twentyConfigService: TwentyConfigService; - let workspaceRepository: Repository; - let publicDomainRepository: Repository; + let workspaceRepository: Repository; + let publicDomainRepository: Repository; beforeEach(async () => { const module: TestingModule = await Test.createTestingModule({ @@ -21,14 +21,14 @@ describe('WorkspaceDomainsService', () => { DomainServerConfigService, WorkspaceDomainsService, { - provide: getRepositoryToken(Workspace), + provide: getRepositoryToken(WorkspaceEntity), useValue: { find: jest.fn(), findOne: jest.fn(), }, }, { - provide: getRepositoryToken(PublicDomain), + provide: getRepositoryToken(PublicDomainEntity), useValue: { findOne: jest.fn(), }, @@ -42,11 +42,11 @@ describe('WorkspaceDomainsService', () => { ], }).compile(); - workspaceRepository = module.get>( - getRepositoryToken(Workspace), + workspaceRepository = module.get>( + getRepositoryToken(WorkspaceEntity), ); - publicDomainRepository = module.get>( - getRepositoryToken(PublicDomain), + publicDomainRepository = module.get>( + getRepositoryToken(PublicDomainEntity), ); workspaceDomainsService = module.get( WorkspaceDomainsService, @@ -203,7 +203,7 @@ describe('WorkspaceDomainsService', () => { { id: 'workspace-id', }, - ] as unknown as Workspace[]); + ] as unknown as WorkspaceEntity[]); const result = await workspaceDomainsService.getWorkspaceByOriginOrDefaultWorkspace( @@ -233,7 +233,7 @@ describe('WorkspaceDomainsService', () => { { id: 'workspace-id2', }, - ] as unknown as Workspace[]); + ] as unknown as WorkspaceEntity[]); const result = await workspaceDomainsService.getWorkspaceByOriginOrDefaultWorkspace( @@ -259,7 +259,7 @@ describe('WorkspaceDomainsService', () => { jest.spyOn(workspaceRepository, 'findOne').mockResolvedValueOnce({ id: 'workspace-id1', subdomain: '123', - } as unknown as Promise); + } as unknown as Promise); const result = await workspaceDomainsService.getWorkspaceByOriginOrDefaultWorkspace( @@ -285,7 +285,7 @@ describe('WorkspaceDomainsService', () => { jest.spyOn(workspaceRepository, 'findOne').mockResolvedValueOnce({ id: 'workspace-id1', customDomain: '123.custom.com', - } as unknown as Promise); + } as unknown as Promise); const result = await workspaceDomainsService.getWorkspaceByOriginOrDefaultWorkspace( @@ -310,12 +310,12 @@ describe('WorkspaceDomainsService', () => { jest.spyOn(workspaceRepository, 'findOne').mockResolvedValueOnce({ id: 'workspace-id1', - } as unknown as Promise); + } as unknown as Promise); jest.spyOn(publicDomainRepository, 'findOne').mockResolvedValueOnce({ domain: '123.custom.com', workspaceId: 'workspace-id1', - } as unknown as Promise); + } as unknown as Promise); const result = await workspaceDomainsService.getWorkspaceByOriginOrDefaultWorkspace( diff --git a/packages/twenty-server/src/engine/core-modules/domain/workspace-domains/services/workspace-domains.service.ts b/packages/twenty-server/src/engine/core-modules/domain/workspace-domains/services/workspace-domains.service.ts index 83403970a52..ceea764406a 100644 --- a/packages/twenty-server/src/engine/core-modules/domain/workspace-domains/services/workspace-domains.service.ts +++ b/packages/twenty-server/src/engine/core-modules/domain/workspace-domains/services/workspace-domains.service.ts @@ -7,9 +7,9 @@ import { Repository } from 'typeorm'; import { DomainServerConfigService } from 'src/engine/core-modules/domain/domain-server-config/services/domain-server-config.service'; import { buildUrlWithPathnameAndSearchParams } from 'src/engine/core-modules/domain/domain-server-config/utils/build-url-with-pathname-and-search-params.util'; import { WorkspaceDomainConfig } from 'src/engine/core-modules/domain/workspace-domains/types/workspace-domain-config.type'; -import { PublicDomain } from 'src/engine/core-modules/public-domain/public-domain.entity'; +import { PublicDomainEntity } from 'src/engine/core-modules/public-domain/public-domain.entity'; import { TwentyConfigService } from 'src/engine/core-modules/twenty-config/twenty-config.service'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { WorkspaceNotFoundDefaultError } from 'src/engine/core-modules/workspace/workspace.exception'; @Injectable() @@ -17,10 +17,10 @@ export class WorkspaceDomainsService { constructor( private readonly domainServerConfigService: DomainServerConfigService, private readonly twentyConfigService: TwentyConfigService, - @InjectRepository(Workspace) - private readonly workspaceRepository: Repository, - @InjectRepository(PublicDomain) - private readonly publicDomainRepository: Repository, + @InjectRepository(WorkspaceEntity) + private readonly workspaceRepository: Repository, + @InjectRepository(PublicDomainEntity) + private readonly publicDomainRepository: Repository, ) {} buildWorkspaceURL({ diff --git a/packages/twenty-server/src/engine/core-modules/domain/workspace-domains/types/workspace-domain-config.type.ts b/packages/twenty-server/src/engine/core-modules/domain/workspace-domains/types/workspace-domain-config.type.ts index 4c8073039a2..d3dd4eb693b 100644 --- a/packages/twenty-server/src/engine/core-modules/domain/workspace-domains/types/workspace-domain-config.type.ts +++ b/packages/twenty-server/src/engine/core-modules/domain/workspace-domains/types/workspace-domain-config.type.ts @@ -1,6 +1,6 @@ -import { type Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { type WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; export type WorkspaceDomainConfig = Pick< - Workspace, + WorkspaceEntity, 'subdomain' | 'customDomain' | 'isCustomDomainEnabled' >; diff --git a/packages/twenty-server/src/engine/core-modules/domain/workspace-domains/workspace-domains.module.ts b/packages/twenty-server/src/engine/core-modules/domain/workspace-domains/workspace-domains.module.ts index 5f7e21f5222..22389e039db 100644 --- a/packages/twenty-server/src/engine/core-modules/domain/workspace-domains/workspace-domains.module.ts +++ b/packages/twenty-server/src/engine/core-modules/domain/workspace-domains/workspace-domains.module.ts @@ -3,13 +3,13 @@ import { TypeOrmModule } from '@nestjs/typeorm'; import { DomainServerConfigModule } from 'src/engine/core-modules/domain/domain-server-config/domain-server-config.module'; import { WorkspaceDomainsService } from 'src/engine/core-modules/domain/workspace-domains/services/workspace-domains.service'; -import { PublicDomain } from 'src/engine/core-modules/public-domain/public-domain.entity'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { PublicDomainEntity } from 'src/engine/core-modules/public-domain/public-domain.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; @Module({ imports: [ DomainServerConfigModule, - TypeOrmModule.forFeature([Workspace, PublicDomain]), + TypeOrmModule.forFeature([WorkspaceEntity, PublicDomainEntity]), ], providers: [WorkspaceDomainsService], exports: [WorkspaceDomainsService], diff --git a/packages/twenty-server/src/engine/core-modules/email-verification/email-verification.module.ts b/packages/twenty-server/src/engine/core-modules/email-verification/email-verification.module.ts index 5052e6906cc..4aa2e1a404c 100644 --- a/packages/twenty-server/src/engine/core-modules/email-verification/email-verification.module.ts +++ b/packages/twenty-server/src/engine/core-modules/email-verification/email-verification.module.ts @@ -1,7 +1,7 @@ import { Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; -import { AppToken } from 'src/engine/core-modules/app-token/app-token.entity'; +import { AppTokenEntity } from 'src/engine/core-modules/app-token/app-token.entity'; import { EmailVerificationTokenService } from 'src/engine/core-modules/auth/token/services/email-verification-token.service'; import { DomainServerConfigModule } from 'src/engine/core-modules/domain/domain-server-config/domain-server-config.module'; import { WorkspaceDomainsModule } from 'src/engine/core-modules/domain/workspace-domains/workspace-domains.module'; @@ -10,12 +10,12 @@ import { EmailVerificationService } from 'src/engine/core-modules/email-verifica import { EmailModule } from 'src/engine/core-modules/email/email.module'; import { TwentyConfigModule } from 'src/engine/core-modules/twenty-config/twenty-config.module'; import { UserWorkspaceModule } from 'src/engine/core-modules/user-workspace/user-workspace.module'; -import { User } from 'src/engine/core-modules/user/user.entity'; +import { UserEntity } from 'src/engine/core-modules/user/user.entity'; import { UserModule } from 'src/engine/core-modules/user/user.module'; @Module({ imports: [ - TypeOrmModule.forFeature([AppToken, User]), + TypeOrmModule.forFeature([AppTokenEntity, UserEntity]), EmailModule, TwentyConfigModule, UserModule, diff --git a/packages/twenty-server/src/engine/core-modules/email-verification/services/email-verification.service.ts b/packages/twenty-server/src/engine/core-modules/email-verification/services/email-verification.service.ts index d0f5491a285..d4381c97c43 100644 --- a/packages/twenty-server/src/engine/core-modules/email-verification/services/email-verification.service.ts +++ b/packages/twenty-server/src/engine/core-modules/email-verification/services/email-verification.service.ts @@ -12,7 +12,7 @@ import { isDefined } from 'twenty-shared/utils'; import { Repository } from 'typeorm'; import { - AppToken, + AppTokenEntity, AppTokenType, } from 'src/engine/core-modules/app-token/app-token.entity'; import { EmailVerificationTokenService } from 'src/engine/core-modules/auth/token/services/email-verification-token.service'; @@ -31,8 +31,8 @@ import { UserService } from 'src/engine/core-modules/user/services/user.service' @Injectable() export class EmailVerificationService { constructor( - @InjectRepository(AppToken) - private readonly appTokenRepository: Repository, + @InjectRepository(AppTokenEntity) + private readonly appTokenRepository: Repository, private readonly workspaceDomainsService: WorkspaceDomainsService, private readonly domainsServerConfigService: DomainServerConfigService, private readonly emailService: EmailService, diff --git a/packages/twenty-server/src/engine/core-modules/emailing-domain/emailing-domain.entity.ts b/packages/twenty-server/src/engine/core-modules/emailing-domain/emailing-domain.entity.ts index 079d973fbc0..044c2e3e215 100644 --- a/packages/twenty-server/src/engine/core-modules/emailing-domain/emailing-domain.entity.ts +++ b/packages/twenty-server/src/engine/core-modules/emailing-domain/emailing-domain.entity.ts @@ -18,15 +18,15 @@ import { EmailingDomainStatus, } from 'src/engine/core-modules/emailing-domain/drivers/types/emailing-domain'; import { VerificationRecord } from 'src/engine/core-modules/emailing-domain/drivers/types/verifications-record'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; @Entity({ name: 'emailingDomain', schema: 'core' }) -@ObjectType() +@ObjectType('EmailingDomain') @Unique('IDX_EMAILING_DOMAIN_DOMAIN_WORKSPACE_ID_UNIQUE', [ 'domain', 'workspaceId', ]) -export class EmailingDomain { +export class EmailingDomainEntity { @PrimaryGeneratedColumn('uuid') id: string; @@ -63,9 +63,9 @@ export class EmailingDomain { @Column({ nullable: false }) workspaceId: string; - @ManyToOne(() => Workspace, (workspace) => workspace.emailingDomains, { + @ManyToOne(() => WorkspaceEntity, (workspace) => workspace.emailingDomains, { onDelete: 'CASCADE', }) @JoinColumn({ name: 'workspaceId' }) - workspace: Relation; + workspace: Relation; } diff --git a/packages/twenty-server/src/engine/core-modules/emailing-domain/emailing-domain.module.ts b/packages/twenty-server/src/engine/core-modules/emailing-domain/emailing-domain.module.ts index ef81ac1b708..6db26a87b90 100644 --- a/packages/twenty-server/src/engine/core-modules/emailing-domain/emailing-domain.module.ts +++ b/packages/twenty-server/src/engine/core-modules/emailing-domain/emailing-domain.module.ts @@ -6,14 +6,14 @@ import { TypeORMModule } from 'src/database/typeorm/typeorm.module'; import { AwsSesClientProvider } from 'src/engine/core-modules/emailing-domain/drivers/aws-ses/providers/aws-ses-client.provider'; import { AwsSesHandleErrorService } from 'src/engine/core-modules/emailing-domain/drivers/aws-ses/services/aws-ses-handle-error.service'; import { EmailingDomainDriverFactory } from 'src/engine/core-modules/emailing-domain/drivers/emailing-domain-driver.factory'; -import { EmailingDomain } from 'src/engine/core-modules/emailing-domain/emailing-domain.entity'; +import { EmailingDomainEntity } from 'src/engine/core-modules/emailing-domain/emailing-domain.entity'; import { EmailingDomainResolver } from 'src/engine/core-modules/emailing-domain/emailing-domain.resolver'; import { EmailingDomainService } from 'src/engine/core-modules/emailing-domain/services/emailing-domain.service'; @Module({ imports: [ TypeORMModule, - NestjsQueryTypeOrmModule.forFeature([EmailingDomain]), + NestjsQueryTypeOrmModule.forFeature([EmailingDomainEntity]), ], exports: [EmailingDomainService], providers: [ diff --git a/packages/twenty-server/src/engine/core-modules/emailing-domain/emailing-domain.resolver.ts b/packages/twenty-server/src/engine/core-modules/emailing-domain/emailing-domain.resolver.ts index 0f8f85f676d..2f506805b22 100644 --- a/packages/twenty-server/src/engine/core-modules/emailing-domain/emailing-domain.resolver.ts +++ b/packages/twenty-server/src/engine/core-modules/emailing-domain/emailing-domain.resolver.ts @@ -5,7 +5,7 @@ import { EmailingDomainDriver } from 'src/engine/core-modules/emailing-domain/dr import { EmailingDomainDto } from 'src/engine/core-modules/emailing-domain/dtos/emailing-domain.dto'; import { EmailingDomainService } from 'src/engine/core-modules/emailing-domain/services/emailing-domain.service'; import { ResolverValidationPipe } from 'src/engine/core-modules/graphql/pipes/resolver-validation.pipe'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { AuthWorkspace } from 'src/engine/decorators/auth/auth-workspace.decorator'; import { WorkspaceAuthGuard } from 'src/engine/guards/workspace-auth.guard'; @@ -19,7 +19,7 @@ export class EmailingDomainResolver { async createEmailingDomain( @Args('domain') domain: string, @Args('driver') driver: EmailingDomainDriver, - @AuthWorkspace() currentWorkspace: Workspace, + @AuthWorkspace() currentWorkspace: WorkspaceEntity, ): Promise { const emailingDomain = await this.emailingDomainService.createEmailingDomain( @@ -34,7 +34,7 @@ export class EmailingDomainResolver { @Mutation(() => Boolean) async deleteEmailingDomain( @Args('id') id: string, - @AuthWorkspace() currentWorkspace: Workspace, + @AuthWorkspace() currentWorkspace: WorkspaceEntity, ): Promise { await this.emailingDomainService.deleteEmailingDomain(currentWorkspace, id); @@ -44,7 +44,7 @@ export class EmailingDomainResolver { @Mutation(() => EmailingDomainDto) async verifyEmailingDomain( @Args('id') id: string, - @AuthWorkspace() currentWorkspace: Workspace, + @AuthWorkspace() currentWorkspace: WorkspaceEntity, ): Promise { const emailingDomain = await this.emailingDomainService.verifyEmailingDomain( @@ -57,7 +57,7 @@ export class EmailingDomainResolver { @Query(() => [EmailingDomainDto]) async getEmailingDomains( - @AuthWorkspace() currentWorkspace: Workspace, + @AuthWorkspace() currentWorkspace: WorkspaceEntity, ): Promise { const emailingDomains = await this.emailingDomainService.getEmailingDomains(currentWorkspace); diff --git a/packages/twenty-server/src/engine/core-modules/emailing-domain/services/emailing-domain.service.ts b/packages/twenty-server/src/engine/core-modules/emailing-domain/services/emailing-domain.service.ts index ae187a9dc47..1f691d283b6 100644 --- a/packages/twenty-server/src/engine/core-modules/emailing-domain/services/emailing-domain.service.ts +++ b/packages/twenty-server/src/engine/core-modules/emailing-domain/services/emailing-domain.service.ts @@ -8,22 +8,22 @@ import { EmailingDomainDriver, EmailingDomainStatus, } from 'src/engine/core-modules/emailing-domain/drivers/types/emailing-domain'; -import { EmailingDomain } from 'src/engine/core-modules/emailing-domain/emailing-domain.entity'; -import { type Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { EmailingDomainEntity } from 'src/engine/core-modules/emailing-domain/emailing-domain.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; @Injectable() export class EmailingDomainService { constructor( - @InjectRepository(EmailingDomain) - private readonly emailingDomainRepository: Repository, + @InjectRepository(EmailingDomainEntity) + private readonly emailingDomainRepository: Repository, private readonly emailingDomainDriverFactory: EmailingDomainDriverFactory, ) {} async createEmailingDomain( domain: string, driver: EmailingDomainDriver, - workspace: Workspace, - ): Promise { + workspace: WorkspaceEntity, + ): Promise { const existingDomain = await this.emailingDomainRepository.findOneBy({ domain, workspaceId: workspace.id, @@ -53,7 +53,7 @@ export class EmailingDomainService { } async deleteEmailingDomain( - workspace: Workspace, + workspace: WorkspaceEntity, emailingDomainId: string, ): Promise { const emailingDomain = await this.emailingDomainRepository.findOneBy({ @@ -70,7 +70,9 @@ export class EmailingDomainService { }); } - async getEmailingDomains(workspace: Workspace): Promise { + async getEmailingDomains( + workspace: WorkspaceEntity, + ): Promise { return await this.emailingDomainRepository.find({ where: { workspaceId: workspace.id, @@ -82,9 +84,9 @@ export class EmailingDomainService { } async getEmailingDomain( - workspace: Workspace, + workspace: WorkspaceEntity, emailingDomainId: string, - ): Promise { + ): Promise { return await this.emailingDomainRepository.findOneBy({ id: emailingDomainId, workspaceId: workspace.id, @@ -92,9 +94,9 @@ export class EmailingDomainService { } async verifyEmailingDomain( - workspace: Workspace, + workspace: WorkspaceEntity, emailingDomainId: string, - ): Promise { + ): Promise { const emailingDomain = await this.getEmailingDomain( workspace, emailingDomainId, @@ -123,9 +125,9 @@ export class EmailingDomainService { } async syncEmailingDomain( - workspace: Workspace, + workspace: WorkspaceEntity, emailingDomainId: string, - ): Promise { + ): Promise { const emailingDomain = await this.getEmailingDomain( workspace, emailingDomainId, diff --git a/packages/twenty-server/src/engine/core-modules/feature-flag/feature-flag.entity.ts b/packages/twenty-server/src/engine/core-modules/feature-flag/feature-flag.entity.ts index a9bb36cff3e..ae8b1899ad0 100644 --- a/packages/twenty-server/src/engine/core-modules/feature-flag/feature-flag.entity.ts +++ b/packages/twenty-server/src/engine/core-modules/feature-flag/feature-flag.entity.ts @@ -14,12 +14,12 @@ import { import { UUIDScalarType } from 'src/engine/api/graphql/workspace-schema-builder/graphql-types/scalars'; import { FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; @Entity({ name: 'featureFlag', schema: 'core' }) -@ObjectType() +@ObjectType('FeatureFlag') @Unique('IDX_FEATURE_FLAG_KEY_WORKSPACE_ID_UNIQUE', ['key', 'workspaceId']) -export class FeatureFlag { +export class FeatureFlagEntity { @IDField(() => UUIDScalarType) @PrimaryGeneratedColumn('uuid') id: string; @@ -32,10 +32,10 @@ export class FeatureFlag { @Column({ nullable: false, type: 'uuid' }) workspaceId: string; - @ManyToOne(() => Workspace, (workspace) => workspace.featureFlags, { + @ManyToOne(() => WorkspaceEntity, (workspace) => workspace.featureFlags, { onDelete: 'CASCADE', }) - workspace: Relation; + workspace: Relation; @Field() @Column({ nullable: false }) diff --git a/packages/twenty-server/src/engine/core-modules/feature-flag/feature-flag.module.ts b/packages/twenty-server/src/engine/core-modules/feature-flag/feature-flag.module.ts index b3dc35b1f0d..ce68a960c5d 100644 --- a/packages/twenty-server/src/engine/core-modules/feature-flag/feature-flag.module.ts +++ b/packages/twenty-server/src/engine/core-modules/feature-flag/feature-flag.module.ts @@ -4,7 +4,7 @@ import { NestjsQueryGraphQLModule } from '@ptc-org/nestjs-query-graphql'; import { NestjsQueryTypeOrmModule } from '@ptc-org/nestjs-query-typeorm'; import { TypeORMModule } from 'src/database/typeorm/typeorm.module'; -import { FeatureFlag } from 'src/engine/core-modules/feature-flag/feature-flag.entity'; +import { FeatureFlagEntity } from 'src/engine/core-modules/feature-flag/feature-flag.entity'; import { FeatureFlagService } from 'src/engine/core-modules/feature-flag/services/feature-flag.service'; import { WorkspaceFeatureFlagsMapCacheModule } from 'src/engine/metadata-modules/workspace-feature-flags-map-cache/workspace-feature-flags-map-cache.module'; import { WorkspacePermissionsCacheModule } from 'src/engine/metadata-modules/workspace-permissions-cache/workspace-permissions-cache.module'; @@ -13,7 +13,7 @@ import { WorkspacePermissionsCacheModule } from 'src/engine/metadata-modules/wor imports: [ TypeORMModule, NestjsQueryGraphQLModule.forFeature({ - imports: [NestjsQueryTypeOrmModule.forFeature([FeatureFlag])], + imports: [NestjsQueryTypeOrmModule.forFeature([FeatureFlagEntity])], services: [], resolvers: [], }), diff --git a/packages/twenty-server/src/engine/core-modules/feature-flag/services/__tests__/feature-flag.service.spec.ts b/packages/twenty-server/src/engine/core-modules/feature-flag/services/__tests__/feature-flag.service.spec.ts index 563931e9efa..4f1441fdda4 100644 --- a/packages/twenty-server/src/engine/core-modules/feature-flag/services/__tests__/feature-flag.service.spec.ts +++ b/packages/twenty-server/src/engine/core-modules/feature-flag/services/__tests__/feature-flag.service.spec.ts @@ -2,7 +2,7 @@ import { Test, type TestingModule } from '@nestjs/testing'; import { getRepositoryToken } from '@nestjs/typeorm'; import { FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum'; -import { FeatureFlag } from 'src/engine/core-modules/feature-flag/feature-flag.entity'; +import { FeatureFlagEntity } from 'src/engine/core-modules/feature-flag/feature-flag.entity'; import { FeatureFlagException, FeatureFlagExceptionCode, @@ -55,7 +55,7 @@ describe('FeatureFlagService', () => { providers: [ FeatureFlagService, { - provide: getRepositoryToken(FeatureFlag), + provide: getRepositoryToken(FeatureFlagEntity), useValue: mockFeatureFlagRepository, }, { diff --git a/packages/twenty-server/src/engine/core-modules/feature-flag/services/feature-flag.service.ts b/packages/twenty-server/src/engine/core-modules/feature-flag/services/feature-flag.service.ts index dd5d46b0d2f..cc7cd669f20 100644 --- a/packages/twenty-server/src/engine/core-modules/feature-flag/services/feature-flag.service.ts +++ b/packages/twenty-server/src/engine/core-modules/feature-flag/services/feature-flag.service.ts @@ -7,7 +7,7 @@ import { type FeatureFlagMap } from 'src/engine/core-modules/feature-flag/interf import { type FeatureFlagDTO } from 'src/engine/core-modules/feature-flag/dtos/feature-flag-dto'; import { FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum'; -import { FeatureFlag } from 'src/engine/core-modules/feature-flag/feature-flag.entity'; +import { FeatureFlagEntity } from 'src/engine/core-modules/feature-flag/feature-flag.entity'; import { FeatureFlagException, FeatureFlagExceptionCode, @@ -20,8 +20,8 @@ import { WorkspacePermissionsCacheService } from 'src/engine/metadata-modules/wo @Injectable() export class FeatureFlagService { constructor( - @InjectRepository(FeatureFlag) - private readonly featureFlagRepository: Repository, + @InjectRepository(FeatureFlagEntity) + private readonly featureFlagRepository: Repository, private readonly workspaceFeatureFlagsMapCacheService: WorkspaceFeatureFlagsMapCacheService, private readonly workspacePermissionsCacheService: WorkspacePermissionsCacheService, ) {} @@ -89,7 +89,7 @@ export class FeatureFlagService { featureFlag: FeatureFlagKey; value: boolean; shouldBePublic?: boolean; - }): Promise { + }): Promise { featureFlagValidator.assertIsFeatureFlagKey( featureFlag, new FeatureFlagException( diff --git a/packages/twenty-server/src/engine/core-modules/file/entities/file.entity.ts b/packages/twenty-server/src/engine/core-modules/file/entities/file.entity.ts index e7c810f7a09..cd59c394363 100644 --- a/packages/twenty-server/src/engine/core-modules/file/entities/file.entity.ts +++ b/packages/twenty-server/src/engine/core-modules/file/entities/file.entity.ts @@ -1,3 +1,5 @@ +import { ObjectType } from '@nestjs/graphql'; + import { Column, CreateDateColumn, @@ -9,9 +11,10 @@ import { Relation, } from 'typeorm'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; @Entity('file') +@ObjectType('File') @Index('IDX_FILE_WORKSPACE_ID', ['workspaceId']) export class FileEntity { @PrimaryGeneratedColumn('uuid') @@ -32,11 +35,11 @@ export class FileEntity { @Column({ nullable: false, type: 'uuid' }) workspaceId: string; - @ManyToOne(() => Workspace, { + @ManyToOne(() => WorkspaceEntity, { onDelete: 'CASCADE', }) @JoinColumn({ name: 'workspaceId' }) - workspace: Relation; + workspace: Relation; @CreateDateColumn({ type: 'timestamptz' }) createdAt: Date; diff --git a/packages/twenty-server/src/engine/core-modules/file/file-upload/resolvers/file-upload.resolver.ts b/packages/twenty-server/src/engine/core-modules/file/file-upload/resolvers/file-upload.resolver.ts index 67e2f7b1147..cc9e6e08dc0 100644 --- a/packages/twenty-server/src/engine/core-modules/file/file-upload/resolvers/file-upload.resolver.ts +++ b/packages/twenty-server/src/engine/core-modules/file/file-upload/resolvers/file-upload.resolver.ts @@ -9,7 +9,7 @@ import { SignedFileDTO } from 'src/engine/core-modules/file/file-upload/dtos/sig import { FileUploadService } from 'src/engine/core-modules/file/file-upload/services/file-upload.service'; import { PreventNestToAutoLogGraphqlErrorsFilter } from 'src/engine/core-modules/graphql/filters/prevent-nest-to-auto-log-graphql-errors.filter'; import { ResolverValidationPipe } from 'src/engine/core-modules/graphql/pipes/resolver-validation.pipe'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { AuthWorkspace } from 'src/engine/decorators/auth/auth-workspace.decorator'; import { WorkspaceAuthGuard } from 'src/engine/guards/workspace-auth.guard'; import { streamToBuffer } from 'src/utils/stream-to-buffer'; @@ -23,7 +23,7 @@ export class FileUploadResolver { @Mutation(() => SignedFileDTO) async uploadFile( - @AuthWorkspace() { id: workspaceId }: Workspace, + @AuthWorkspace() { id: workspaceId }: WorkspaceEntity, @Args({ name: 'file', type: () => GraphQLUpload }) { createReadStream, filename, mimetype }: FileUpload, @Args('fileFolder', { type: () => FileFolder, nullable: true }) @@ -49,7 +49,7 @@ export class FileUploadResolver { @Mutation(() => SignedFileDTO) async uploadImage( - @AuthWorkspace() { id: workspaceId }: Workspace, + @AuthWorkspace() { id: workspaceId }: WorkspaceEntity, @Args({ name: 'file', type: () => GraphQLUpload }) { createReadStream, filename, mimetype }: FileUpload, @Args('fileFolder', { type: () => FileFolder, nullable: true }) diff --git a/packages/twenty-server/src/engine/core-modules/file/file.module.ts b/packages/twenty-server/src/engine/core-modules/file/file.module.ts index b4da6bbc58a..7d0291f8db9 100644 --- a/packages/twenty-server/src/engine/core-modules/file/file.module.ts +++ b/packages/twenty-server/src/engine/core-modules/file/file.module.ts @@ -8,7 +8,7 @@ import { FileWorkspaceFolderDeletionJob } from 'src/engine/core-modules/file/job import { FileAttachmentListener } from 'src/engine/core-modules/file/listeners/file-attachment.listener'; import { FileWorkspaceMemberListener } from 'src/engine/core-modules/file/listeners/file-workspace-member.listener'; import { JwtModule } from 'src/engine/core-modules/jwt/jwt.module'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { FileController } from './controllers/file.controller'; import { FileEntity } from './entities/file.entity'; @@ -20,7 +20,7 @@ import { FileService } from './services/file.service'; @Module({ imports: [ JwtModule, - TypeOrmModule.forFeature([FileEntity, Workspace]), + TypeOrmModule.forFeature([FileEntity, WorkspaceEntity]), HttpModule, ], providers: [ diff --git a/packages/twenty-server/src/engine/core-modules/file/listeners/file-workspace-member.listener.ts b/packages/twenty-server/src/engine/core-modules/file/listeners/file-workspace-member.listener.ts index e280edc86a6..8e29515a356 100644 --- a/packages/twenty-server/src/engine/core-modules/file/listeners/file-workspace-member.listener.ts +++ b/packages/twenty-server/src/engine/core-modules/file/listeners/file-workspace-member.listener.ts @@ -11,7 +11,7 @@ import { InjectMessageQueue } from 'src/engine/core-modules/message-queue/decora import { MessageQueue } from 'src/engine/core-modules/message-queue/message-queue.constants'; import { MessageQueueService } from 'src/engine/core-modules/message-queue/services/message-queue.service'; import { WorkspaceEventBatch } from 'src/engine/workspace-event-emitter/types/workspace-event-batch.type'; -import { type WorkspaceMemberWorkspaceEntity } from 'src/modules/workspace-member/standard-objects/workspace-member.workspace-entity'; +import { WorkspaceMemberWorkspaceEntity } from 'src/modules/workspace-member/standard-objects/workspace-member.workspace-entity'; @Injectable() export class FileWorkspaceMemberListener { diff --git a/packages/twenty-server/src/engine/core-modules/file/resolvers/file.resolver.ts b/packages/twenty-server/src/engine/core-modules/file/resolvers/file.resolver.ts index f1d5e9500b5..849ee859170 100644 --- a/packages/twenty-server/src/engine/core-modules/file/resolvers/file.resolver.ts +++ b/packages/twenty-server/src/engine/core-modules/file/resolvers/file.resolver.ts @@ -8,7 +8,7 @@ import { FileDTO } from 'src/engine/core-modules/file/dtos/file.dto'; import { FileMetadataService } from 'src/engine/core-modules/file/services/file-metadata.service'; import { PreventNestToAutoLogGraphqlErrorsFilter } from 'src/engine/core-modules/graphql/filters/prevent-nest-to-auto-log-graphql-errors.filter'; import { ResolverValidationPipe } from 'src/engine/core-modules/graphql/pipes/resolver-validation.pipe'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { AuthWorkspace } from 'src/engine/decorators/auth/auth-workspace.decorator'; import { WorkspaceAuthGuard } from 'src/engine/guards/workspace-auth.guard'; import { streamToBuffer } from 'src/utils/stream-to-buffer'; @@ -22,7 +22,7 @@ export class FileResolver { @Mutation(() => FileDTO) async createFile( - @AuthWorkspace() { id: workspaceId }: Workspace, + @AuthWorkspace() { id: workspaceId }: WorkspaceEntity, @Args({ name: 'file', type: () => GraphQLUpload }) { createReadStream, filename, mimetype }: FileUpload, ): Promise { @@ -39,7 +39,7 @@ export class FileResolver { @Mutation(() => FileDTO) async deleteFile( - @AuthWorkspace() { id: workspaceId }: Workspace, + @AuthWorkspace() { id: workspaceId }: WorkspaceEntity, @Args('fileId', { type: () => UUIDScalarType }) fileId: string, ): Promise { const deletedFile = await this.fileMetadataService.deleteFileById( diff --git a/packages/twenty-server/src/engine/core-modules/health/health.module.ts b/packages/twenty-server/src/engine/core-modules/health/health.module.ts index 69f083bb65d..6dc53094bff 100644 --- a/packages/twenty-server/src/engine/core-modules/health/health.module.ts +++ b/packages/twenty-server/src/engine/core-modules/health/health.module.ts @@ -6,7 +6,7 @@ import { HealthController } from 'src/engine/core-modules/health/controllers/hea import { AppHealthIndicator } from 'src/engine/core-modules/health/indicators/app.health'; import { MetricsModule } from 'src/engine/core-modules/metrics/metrics.module'; import { RedisClientModule } from 'src/engine/core-modules/redis-client/redis-client.module'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { WorkspaceMigrationModule } from 'src/engine/metadata-modules/workspace-migration/workspace-migration.module'; import { ConnectedAccountHealth } from './indicators/connected-account.health'; @@ -18,7 +18,7 @@ import { WorkerHealthIndicator } from './indicators/worker.health'; TerminusModule, RedisClientModule, WorkspaceMigrationModule, - TypeOrmModule.forFeature([Workspace]), + TypeOrmModule.forFeature([WorkspaceEntity]), MetricsModule, ], controllers: [HealthController], diff --git a/packages/twenty-server/src/engine/core-modules/health/indicators/__tests__/app.health.spec.ts b/packages/twenty-server/src/engine/core-modules/health/indicators/__tests__/app.health.spec.ts index 18f18e5d4b8..34e98805a53 100644 --- a/packages/twenty-server/src/engine/core-modules/health/indicators/__tests__/app.health.spec.ts +++ b/packages/twenty-server/src/engine/core-modules/health/indicators/__tests__/app.health.spec.ts @@ -5,12 +5,12 @@ import { getRepositoryToken } from '@nestjs/typeorm'; import { type Repository } from 'typeorm'; import { AppHealthIndicator } from 'src/engine/core-modules/health/indicators/app.health'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { WorkspaceMigrationService } from 'src/engine/metadata-modules/workspace-migration/workspace-migration.service'; describe('AppHealthIndicator', () => { let service: AppHealthIndicator; - let workspaceRepository: jest.Mocked>; + let workspaceRepository: jest.Mocked>; let workspaceMigrationService: jest.Mocked; let healthIndicatorService: jest.Mocked; @@ -39,7 +39,7 @@ describe('AppHealthIndicator', () => { providers: [ AppHealthIndicator, { - provide: getRepositoryToken(Workspace), + provide: getRepositoryToken(WorkspaceEntity), useValue: workspaceRepository, }, { diff --git a/packages/twenty-server/src/engine/core-modules/health/indicators/app.health.ts b/packages/twenty-server/src/engine/core-modules/health/indicators/app.health.ts index 8ca860c036e..611e5052888 100644 --- a/packages/twenty-server/src/engine/core-modules/health/indicators/app.health.ts +++ b/packages/twenty-server/src/engine/core-modules/health/indicators/app.health.ts @@ -8,7 +8,7 @@ import { InjectRepository } from '@nestjs/typeorm'; import { Repository } from 'typeorm'; import { HealthStateManager } from 'src/engine/core-modules/health/utils/health-state-manager.util'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { WorkspaceMigrationService } from 'src/engine/metadata-modules/workspace-migration/workspace-migration.service'; @Injectable() @@ -17,8 +17,8 @@ export class AppHealthIndicator { constructor( private readonly healthIndicatorService: HealthIndicatorService, - @InjectRepository(Workspace) - private readonly workspaceRepository: Repository, + @InjectRepository(WorkspaceEntity) + private readonly workspaceRepository: Repository, private readonly workspaceMigrationService: WorkspaceMigrationService, ) {} diff --git a/packages/twenty-server/src/engine/core-modules/imap-smtp-caldav-connection/imap-smtp-caldav-connection.resolver.ts b/packages/twenty-server/src/engine/core-modules/imap-smtp-caldav-connection/imap-smtp-caldav-connection.resolver.ts index 9816244bd21..c6e9ab3c4f6 100644 --- a/packages/twenty-server/src/engine/core-modules/imap-smtp-caldav-connection/imap-smtp-caldav-connection.resolver.ts +++ b/packages/twenty-server/src/engine/core-modules/imap-smtp-caldav-connection/imap-smtp-caldav-connection.resolver.ts @@ -20,7 +20,7 @@ import { ImapSmtpCaldavConnectionSuccessDTO } from 'src/engine/core-modules/imap import { EmailAccountConnectionParameters } from 'src/engine/core-modules/imap-smtp-caldav-connection/dtos/imap-smtp-caldav-connection.dto'; import { ImapSmtpCaldavValidatorService } from 'src/engine/core-modules/imap-smtp-caldav-connection/services/imap-smtp-caldav-connection-validator.service'; import { ImapSmtpCaldavService } from 'src/engine/core-modules/imap-smtp-caldav-connection/services/imap-smtp-caldav-connection.service'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { AuthWorkspace } from 'src/engine/decorators/auth/auth-workspace.decorator'; import { SettingsPermissionsGuard } from 'src/engine/guards/settings-permissions.guard'; import { WorkspaceAuthGuard } from 'src/engine/guards/workspace-auth.guard'; @@ -47,7 +47,7 @@ export class ImapSmtpCaldavResolver { @UseGuards(WorkspaceAuthGuard) async getConnectedImapSmtpCaldavAccount( @Args('id', { type: () => UUIDScalarType }) id: string, - @AuthWorkspace() workspace: Workspace, + @AuthWorkspace() workspace: WorkspaceEntity, ): Promise { const connectedAccountRepository = await this.twentyORMGlobalManager.getRepositoryForWorkspace( @@ -82,7 +82,7 @@ export class ImapSmtpCaldavResolver { @Args('handle') handle: string, @Args('connectionParameters') connectionParameters: EmailAccountConnectionParameters, - @AuthWorkspace() workspace: Workspace, + @AuthWorkspace() workspace: WorkspaceEntity, @Args('id', { type: () => UUIDScalarType, nullable: true }) id?: string, ): Promise { const isImapSmtpCaldavFeatureFlagEnabled = diff --git a/packages/twenty-server/src/engine/core-modules/impersonation/__tests__/impersonation.service.spec.ts b/packages/twenty-server/src/engine/core-modules/impersonation/__tests__/impersonation.service.spec.ts index 74f11f84447..83ee8aeae17 100644 --- a/packages/twenty-server/src/engine/core-modules/impersonation/__tests__/impersonation.service.spec.ts +++ b/packages/twenty-server/src/engine/core-modules/impersonation/__tests__/impersonation.service.spec.ts @@ -13,8 +13,8 @@ import { WorkspaceDomainsService } from 'src/engine/core-modules/domain/workspac import { ImpersonationService } from 'src/engine/core-modules/impersonation/services/impersonation.service'; import { TwentyConfigService } from 'src/engine/core-modules/twenty-config/twenty-config.service'; import { OTPStatus } from 'src/engine/core-modules/two-factor-authentication/strategies/otp/otp.constants'; -import { UserWorkspace } from 'src/engine/core-modules/user-workspace/user-workspace.entity'; -import { User } from 'src/engine/core-modules/user/user.entity'; +import { UserWorkspaceEntity } from 'src/engine/core-modules/user-workspace/user-workspace.entity'; +import { UserEntity } from 'src/engine/core-modules/user/user.entity'; import { PermissionsService } from 'src/engine/metadata-modules/permissions/permissions.service'; const UserWorkspaceFindOneMock = jest.fn(); @@ -37,13 +37,13 @@ describe('ImpersonationService', () => { providers: [ ImpersonationService, { - provide: getRepositoryToken(User), + provide: getRepositoryToken(UserEntity), useValue: { findOne: jest.fn(), // Not used but required by constructor }, }, { - provide: getRepositoryToken(UserWorkspace), + provide: getRepositoryToken(UserWorkspaceEntity), useValue: { findOne: UserWorkspaceFindOneMock, }, diff --git a/packages/twenty-server/src/engine/core-modules/impersonation/impersonation.module.ts b/packages/twenty-server/src/engine/core-modules/impersonation/impersonation.module.ts index a194d8f8d62..2acb4d902e4 100644 --- a/packages/twenty-server/src/engine/core-modules/impersonation/impersonation.module.ts +++ b/packages/twenty-server/src/engine/core-modules/impersonation/impersonation.module.ts @@ -6,10 +6,10 @@ import { AuthModule } from 'src/engine/core-modules/auth/auth.module'; import { WorkspaceDomainsModule } from 'src/engine/core-modules/domain/workspace-domains/workspace-domains.module'; import { ImpersonationResolver } from 'src/engine/core-modules/impersonation/impersonation.resolver'; import { ImpersonationService } from 'src/engine/core-modules/impersonation/services/impersonation.service'; -import { UserWorkspace } from 'src/engine/core-modules/user-workspace/user-workspace.entity'; +import { UserWorkspaceEntity } from 'src/engine/core-modules/user-workspace/user-workspace.entity'; import { UserWorkspaceModule } from 'src/engine/core-modules/user-workspace/user-workspace.module'; -import { User } from 'src/engine/core-modules/user/user.entity'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { UserEntity } from 'src/engine/core-modules/user/user.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { PermissionsModule } from 'src/engine/metadata-modules/permissions/permissions.module'; import { RoleModule } from 'src/engine/metadata-modules/role/role.module'; import { UserRoleModule } from 'src/engine/metadata-modules/user-role/user-role.module'; @@ -22,7 +22,11 @@ import { UserRoleModule } from 'src/engine/metadata-modules/user-role/user-role. RoleModule, UserRoleModule, AuditModule, - TypeOrmModule.forFeature([UserWorkspace, Workspace, User]), + TypeOrmModule.forFeature([ + UserWorkspaceEntity, + WorkspaceEntity, + UserEntity, + ]), WorkspaceDomainsModule, PermissionsModule, ], diff --git a/packages/twenty-server/src/engine/core-modules/impersonation/services/impersonation.service.ts b/packages/twenty-server/src/engine/core-modules/impersonation/services/impersonation.service.ts index 0d7232bb5ff..5c5bd22cc5d 100644 --- a/packages/twenty-server/src/engine/core-modules/impersonation/services/impersonation.service.ts +++ b/packages/twenty-server/src/engine/core-modules/impersonation/services/impersonation.service.ts @@ -16,7 +16,7 @@ import { LoginTokenService } from 'src/engine/core-modules/auth/token/services/l import { WorkspaceDomainsService } from 'src/engine/core-modules/domain/workspace-domains/services/workspace-domains.service'; import { TwentyConfigService } from 'src/engine/core-modules/twenty-config/twenty-config.service'; import { twoFactorAuthenticationMethodsValidator } from 'src/engine/core-modules/two-factor-authentication/two-factor-authentication.validation'; -import { UserWorkspace } from 'src/engine/core-modules/user-workspace/user-workspace.entity'; +import { UserWorkspaceEntity } from 'src/engine/core-modules/user-workspace/user-workspace.entity'; import { AuthProviderEnum } from 'src/engine/core-modules/workspace/types/workspace.type'; import { PermissionFlagType } from 'src/engine/metadata-modules/permissions/constants/permission-flag-type.constants'; import { PermissionsService } from 'src/engine/metadata-modules/permissions/permissions.service'; @@ -28,8 +28,8 @@ export class ImpersonationService { private readonly workspaceDomainsService: WorkspaceDomainsService, private readonly loginTokenService: LoginTokenService, private readonly twentyConfigService: TwentyConfigService, - @InjectRepository(UserWorkspace) - private readonly userWorkspaceRepository: Repository, + @InjectRepository(UserWorkspaceEntity) + private readonly userWorkspaceRepository: Repository, private readonly permissionsService: PermissionsService, ) {} @@ -135,8 +135,8 @@ export class ImpersonationService { } async generateImpersonationLoginToken( - impersonatorUserWorkspace: UserWorkspace, - toImpersonateUserWorkspace: UserWorkspace, + impersonatorUserWorkspace: UserWorkspaceEntity, + toImpersonateUserWorkspace: UserWorkspaceEntity, impersonationLevel: 'server' | 'workspace', ) { const auditService = this.auditService.createContext({ diff --git a/packages/twenty-server/src/engine/core-modules/key-value-pair/key-value-pair.entity.ts b/packages/twenty-server/src/engine/core-modules/key-value-pair/key-value-pair.entity.ts index 44ca26034b6..429e78e9adf 100644 --- a/packages/twenty-server/src/engine/core-modules/key-value-pair/key-value-pair.entity.ts +++ b/packages/twenty-server/src/engine/core-modules/key-value-pair/key-value-pair.entity.ts @@ -15,8 +15,8 @@ import { } from 'typeorm'; import { UUIDScalarType } from 'src/engine/api/graphql/workspace-schema-builder/graphql-types/scalars'; -import { User } from 'src/engine/core-modules/user/user.entity'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { UserEntity } from 'src/engine/core-modules/user/user.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; export enum KeyValuePairType { USER_VARIABLE = 'USER_VARIABLE', @@ -25,7 +25,7 @@ export enum KeyValuePairType { } @Entity({ name: 'keyValuePair', schema: 'core' }) -@ObjectType() +@ObjectType('KeyValuePair') @Unique('IDX_KEY_VALUE_PAIR_KEY_USER_ID_WORKSPACE_ID_UNIQUE', [ 'key', 'userId', @@ -47,25 +47,25 @@ export enum KeyValuePairType { where: '"workspaceId" is NULL', }, ) -export class KeyValuePair { +export class KeyValuePairEntity { @IDField(() => UUIDScalarType) @PrimaryGeneratedColumn('uuid') id: string; - @ManyToOne(() => User, (user) => user.keyValuePairs, { + @ManyToOne(() => UserEntity, (user) => user.keyValuePairs, { onDelete: 'CASCADE', }) @JoinColumn({ name: 'userId' }) - user: Relation; + user: Relation; @Column({ nullable: true }) userId: string | null; - @ManyToOne(() => Workspace, (workspace) => workspace.keyValuePairs, { + @ManyToOne(() => WorkspaceEntity, (workspace) => workspace.keyValuePairs, { onDelete: 'CASCADE', }) @JoinColumn({ name: 'workspaceId' }) - workspace: Relation; + workspace: Relation; @Column({ nullable: true }) workspaceId: string | null; diff --git a/packages/twenty-server/src/engine/core-modules/key-value-pair/key-value-pair.module.ts b/packages/twenty-server/src/engine/core-modules/key-value-pair/key-value-pair.module.ts index a5ae662385f..e7b97a335bf 100644 --- a/packages/twenty-server/src/engine/core-modules/key-value-pair/key-value-pair.module.ts +++ b/packages/twenty-server/src/engine/core-modules/key-value-pair/key-value-pair.module.ts @@ -4,14 +4,14 @@ import { NestjsQueryGraphQLModule } from '@ptc-org/nestjs-query-graphql'; import { NestjsQueryTypeOrmModule } from '@ptc-org/nestjs-query-typeorm'; import { KeyValuePairService } from 'src/engine/core-modules/key-value-pair/key-value-pair.service'; -import { KeyValuePair } from 'src/engine/core-modules/key-value-pair/key-value-pair.entity'; +import { KeyValuePairEntity } from 'src/engine/core-modules/key-value-pair/key-value-pair.entity'; import { TypeORMModule } from 'src/database/typeorm/typeorm.module'; @Module({ imports: [ NestjsQueryGraphQLModule.forFeature({ imports: [ - NestjsQueryTypeOrmModule.forFeature([KeyValuePair]), + NestjsQueryTypeOrmModule.forFeature([KeyValuePairEntity]), TypeORMModule, ], }), diff --git a/packages/twenty-server/src/engine/core-modules/key-value-pair/key-value-pair.service.ts b/packages/twenty-server/src/engine/core-modules/key-value-pair/key-value-pair.service.ts index 39d3ff0f611..5eecbc92b41 100644 --- a/packages/twenty-server/src/engine/core-modules/key-value-pair/key-value-pair.service.ts +++ b/packages/twenty-server/src/engine/core-modules/key-value-pair/key-value-pair.service.ts @@ -3,7 +3,7 @@ import { InjectRepository } from '@nestjs/typeorm'; import { IsNull, Repository } from 'typeorm'; import { - KeyValuePair, + KeyValuePairEntity, type KeyValuePairType, } from 'src/engine/core-modules/key-value-pair/key-value-pair.entity'; @@ -12,8 +12,8 @@ export class KeyValuePairService< KeyValueTypesMap extends Record = Record, > { constructor( - @InjectRepository(KeyValuePair) - private readonly keyValuePairRepository: Repository, + @InjectRepository(KeyValuePairEntity) + private readonly keyValuePairRepository: Repository, ) {} async get({ diff --git a/packages/twenty-server/src/engine/core-modules/lab/lab.resolver.ts b/packages/twenty-server/src/engine/core-modules/lab/lab.resolver.ts index e9fdde506d3..297b32c15b8 100644 --- a/packages/twenty-server/src/engine/core-modules/lab/lab.resolver.ts +++ b/packages/twenty-server/src/engine/core-modules/lab/lab.resolver.ts @@ -9,7 +9,7 @@ import { PreventNestToAutoLogGraphqlErrorsFilter } from 'src/engine/core-modules import { ResolverValidationPipe } from 'src/engine/core-modules/graphql/pipes/resolver-validation.pipe'; import { UserInputError } from 'src/engine/core-modules/graphql/utils/graphql-errors.util'; import { UpdateLabPublicFeatureFlagInput } from 'src/engine/core-modules/lab/dtos/update-lab-public-feature-flag.input'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { AuthWorkspace } from 'src/engine/decorators/auth/auth-workspace.decorator'; import { SettingsPermissionsGuard } from 'src/engine/guards/settings-permissions.guard'; import { WorkspaceAuthGuard } from 'src/engine/guards/workspace-auth.guard'; @@ -31,7 +31,7 @@ export class LabResolver { @Mutation(() => FeatureFlagDTO) async updateLabPublicFeatureFlag( @Args('input') input: UpdateLabPublicFeatureFlagInput, - @AuthWorkspace() workspace: Workspace, + @AuthWorkspace() workspace: WorkspaceEntity, ): Promise { try { const result = await this.featureFlagService.upsertWorkspaceFeatureFlag({ diff --git a/packages/twenty-server/src/engine/core-modules/message-queue/jobs.module.ts b/packages/twenty-server/src/engine/core-modules/message-queue/jobs.module.ts index 9bd4c5cd423..82c8686b744 100644 --- a/packages/twenty-server/src/engine/core-modules/message-queue/jobs.module.ts +++ b/packages/twenty-server/src/engine/core-modules/message-queue/jobs.module.ts @@ -6,7 +6,7 @@ import { TypeORMModule } from 'src/database/typeorm/typeorm.module'; import { AuditJobModule } from 'src/engine/core-modules/audit/jobs/audit-job.module'; import { AuthModule } from 'src/engine/core-modules/auth/auth.module'; import { BillingModule } from 'src/engine/core-modules/billing/billing.module'; -import { BillingSubscription } from 'src/engine/core-modules/billing/entities/billing-subscription.entity'; +import { BillingSubscriptionEntity } from 'src/engine/core-modules/billing/entities/billing-subscription.entity'; import { UpdateSubscriptionQuantityJob } from 'src/engine/core-modules/billing/jobs/update-subscription-quantity.job'; import { StripeModule } from 'src/engine/core-modules/billing/stripe/stripe.module'; import { EmailSenderJob } from 'src/engine/core-modules/email/email-sender.job'; @@ -16,7 +16,7 @@ import { UserVarsModule } from 'src/engine/core-modules/user/user-vars/user-vars import { UserModule } from 'src/engine/core-modules/user/user.module'; import { WebhookJobModule } from 'src/engine/core-modules/webhook/jobs/webhook-job.module'; import { HandleWorkspaceMemberDeletedJob } from 'src/engine/core-modules/workspace/handle-workspace-member-deleted.job'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { WorkspaceModule } from 'src/engine/core-modules/workspace/workspace.module'; import { CronTriggerModule } from 'src/engine/metadata-modules/cron-trigger/cron-trigger.module'; import { DataSourceModule } from 'src/engine/metadata-modules/data-source/data-source.module'; @@ -39,7 +39,7 @@ import { WorkflowModule } from 'src/modules/workflow/workflow.module'; @Module({ imports: [ - TypeOrmModule.forFeature([Workspace, BillingSubscription]), + TypeOrmModule.forFeature([WorkspaceEntity, BillingSubscriptionEntity]), DataSourceModule, ObjectMetadataModule, TypeORMModule, diff --git a/packages/twenty-server/src/engine/core-modules/messaging/timeline-messaging.resolver.ts b/packages/twenty-server/src/engine/core-modules/messaging/timeline-messaging.resolver.ts index 104345774c0..31033ca58eb 100644 --- a/packages/twenty-server/src/engine/core-modules/messaging/timeline-messaging.resolver.ts +++ b/packages/twenty-server/src/engine/core-modules/messaging/timeline-messaging.resolver.ts @@ -8,8 +8,8 @@ import { TIMELINE_THREADS_MAX_PAGE_SIZE } from 'src/engine/core-modules/messagin import { TimelineThreadsWithTotalDTO } from 'src/engine/core-modules/messaging/dtos/timeline-threads-with-total.dto'; import { GetMessagesService } from 'src/engine/core-modules/messaging/services/get-messages.service'; import { UserService } from 'src/engine/core-modules/user/services/user.service'; -import { User } from 'src/engine/core-modules/user/user.entity'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { UserEntity } from 'src/engine/core-modules/user/user.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { AuthUser } from 'src/engine/decorators/auth/auth-user.decorator'; import { AuthWorkspace } from 'src/engine/decorators/auth/auth-workspace.decorator'; import { UserAuthGuard } from 'src/engine/guards/user-auth.guard'; @@ -64,8 +64,8 @@ export class TimelineMessagingResolver { @Query(() => TimelineThreadsWithTotalDTO) async getTimelineThreadsFromPersonId( - @AuthUser() user: User, - @AuthWorkspace() workspace: Workspace, + @AuthUser() user: UserEntity, + @AuthWorkspace() workspace: WorkspaceEntity, @Args() { personId, page, pageSize }: GetTimelineThreadsFromPersonIdArgs, ) { const workspaceMember = await this.userService.loadWorkspaceMember( @@ -90,8 +90,8 @@ export class TimelineMessagingResolver { @Query(() => TimelineThreadsWithTotalDTO) async getTimelineThreadsFromCompanyId( - @AuthUser() user: User, - @AuthWorkspace() workspace: Workspace, + @AuthUser() user: UserEntity, + @AuthWorkspace() workspace: WorkspaceEntity, @Args() { companyId, page, pageSize }: GetTimelineThreadsFromCompanyIdArgs, ) { const workspaceMember = await this.userService.loadWorkspaceMember( @@ -116,8 +116,8 @@ export class TimelineMessagingResolver { @Query(() => TimelineThreadsWithTotalDTO) async getTimelineThreadsFromOpportunityId( - @AuthUser() user: User, - @AuthWorkspace() workspace: Workspace, + @AuthUser() user: UserEntity, + @AuthWorkspace() workspace: WorkspaceEntity, @Args() { opportunityId, page, pageSize }: GetTimelineThreadsFromOpportunityIdArgs, ) { diff --git a/packages/twenty-server/src/engine/core-modules/onboarding/onboarding.resolver.ts b/packages/twenty-server/src/engine/core-modules/onboarding/onboarding.resolver.ts index 6d6e8c4e31f..c289263758c 100644 --- a/packages/twenty-server/src/engine/core-modules/onboarding/onboarding.resolver.ts +++ b/packages/twenty-server/src/engine/core-modules/onboarding/onboarding.resolver.ts @@ -5,8 +5,8 @@ import { PreventNestToAutoLogGraphqlErrorsFilter } from 'src/engine/core-modules import { ResolverValidationPipe } from 'src/engine/core-modules/graphql/pipes/resolver-validation.pipe'; import { OnboardingStepSuccessDTO } from 'src/engine/core-modules/onboarding/dtos/onboarding-step-success.dto'; import { OnboardingService } from 'src/engine/core-modules/onboarding/onboarding.service'; -import { User } from 'src/engine/core-modules/user/user.entity'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { UserEntity } from 'src/engine/core-modules/user/user.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { AuthUser } from 'src/engine/decorators/auth/auth-user.decorator'; import { AuthWorkspace } from 'src/engine/decorators/auth/auth-workspace.decorator'; import { UserAuthGuard } from 'src/engine/guards/user-auth.guard'; @@ -21,8 +21,8 @@ export class OnboardingResolver { @Mutation(() => OnboardingStepSuccessDTO) async skipSyncEmailOnboardingStep( - @AuthUser() user: User, - @AuthWorkspace() workspace: Workspace, + @AuthUser() user: UserEntity, + @AuthWorkspace() workspace: WorkspaceEntity, ): Promise { await this.onboardingService.setOnboardingConnectAccountPending({ userId: user.id, @@ -35,7 +35,7 @@ export class OnboardingResolver { @Mutation(() => OnboardingStepSuccessDTO) async skipBookOnboardingStep( - @AuthWorkspace() workspace: Workspace, + @AuthWorkspace() workspace: WorkspaceEntity, ): Promise { await this.onboardingService.setOnboardingBookOnboardingPending({ workspaceId: workspace.id, diff --git a/packages/twenty-server/src/engine/core-modules/onboarding/onboarding.service.ts b/packages/twenty-server/src/engine/core-modules/onboarding/onboarding.service.ts index 89b9184b6fc..4518f78667f 100644 --- a/packages/twenty-server/src/engine/core-modules/onboarding/onboarding.service.ts +++ b/packages/twenty-server/src/engine/core-modules/onboarding/onboarding.service.ts @@ -8,8 +8,8 @@ import { BillingService } from 'src/engine/core-modules/billing/services/billing import { OnboardingStatus } from 'src/engine/core-modules/onboarding/enums/onboarding-status.enum'; import { TwentyConfigService } from 'src/engine/core-modules/twenty-config/twenty-config.service'; import { UserVarsService } from 'src/engine/core-modules/user/user-vars/services/user-vars.service'; -import { type User } from 'src/engine/core-modules/user/user.entity'; -import { type Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { UserEntity } from 'src/engine/core-modules/user/user.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; export enum OnboardingStepKeys { ONBOARDING_CONNECT_ACCOUNT_PENDING = 'ONBOARDING_CONNECT_ACCOUNT_PENDING', @@ -33,13 +33,13 @@ export class OnboardingService { private readonly twentyConfigService: TwentyConfigService, ) {} - private isWorkspaceActivationPending(workspace: Workspace) { + private isWorkspaceActivationPending(workspace: WorkspaceEntity) { return ( workspace.activationStatus === WorkspaceActivationStatus.PENDING_CREATION ); } - async getOnboardingStatus(user: User, workspace: Workspace) { + async getOnboardingStatus(user: UserEntity, workspace: WorkspaceEntity) { if ( await this.billingService.isSubscriptionIncompleteOnboardingStatus( workspace.id, diff --git a/packages/twenty-server/src/engine/core-modules/open-api/open-api.service.ts b/packages/twenty-server/src/engine/core-modules/open-api/open-api.service.ts index 2f7018ddb20..7f511bfb61d 100644 --- a/packages/twenty-server/src/engine/core-modules/open-api/open-api.service.ts +++ b/packages/twenty-server/src/engine/core-modules/open-api/open-api.service.ts @@ -42,7 +42,7 @@ import { getUpdateOneResponse200, } from 'src/engine/core-modules/open-api/utils/responses.utils'; import { TwentyConfigService } from 'src/engine/core-modules/twenty-config/twenty-config.service'; -import { type Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { type ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity'; import { ObjectMetadataService } from 'src/engine/metadata-modules/object-metadata/object-metadata.service'; import { standardObjectMetadataDefinitions } from 'src/engine/workspace-manager/workspace-sync-metadata/standard-objects'; @@ -72,7 +72,7 @@ export class OpenApiService { } } - private async getObjectMetadataItems(workspace: Workspace) { + private async getObjectMetadataItems(workspace: WorkspaceEntity) { return await this.objectMetadataService.findManyWithinWorkspace( workspace.id, { diff --git a/packages/twenty-server/src/engine/core-modules/page-layout/controllers/page-layout-tab.controller.ts b/packages/twenty-server/src/engine/core-modules/page-layout/controllers/page-layout-tab.controller.ts index 28ea96bb7cc..4aa5434d31d 100644 --- a/packages/twenty-server/src/engine/core-modules/page-layout/controllers/page-layout-tab.controller.ts +++ b/packages/twenty-server/src/engine/core-modules/page-layout/controllers/page-layout-tab.controller.ts @@ -24,7 +24,7 @@ import { } from 'src/engine/core-modules/page-layout/exceptions/page-layout-tab.exception'; import { PageLayoutTabRestApiExceptionFilter } from 'src/engine/core-modules/page-layout/filters/page-layout-tab-rest-api-exception.filter'; import { PageLayoutTabService } from 'src/engine/core-modules/page-layout/services/page-layout-tab.service'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { AuthWorkspace } from 'src/engine/decorators/auth/auth-workspace.decorator'; import { WorkspaceAuthGuard } from 'src/engine/guards/workspace-auth.guard'; @@ -36,7 +36,7 @@ export class PageLayoutTabController { @Get() async findMany( - @AuthWorkspace() workspace: Workspace, + @AuthWorkspace() workspace: WorkspaceEntity, @Query('pageLayoutId') pageLayoutId: string, ): Promise { if (!isDefined(pageLayoutId)) { @@ -57,7 +57,7 @@ export class PageLayoutTabController { @Get(':id') async findOne( @Param('id') id: string, - @AuthWorkspace() workspace: Workspace, + @AuthWorkspace() workspace: WorkspaceEntity, ): Promise { return this.pageLayoutTabService.findByIdOrThrow(id, workspace.id); } @@ -65,7 +65,7 @@ export class PageLayoutTabController { @Post() async create( @Body() input: CreatePageLayoutTabInput, - @AuthWorkspace() workspace: Workspace, + @AuthWorkspace() workspace: WorkspaceEntity, ): Promise { return this.pageLayoutTabService.create(input, workspace.id); } @@ -74,7 +74,7 @@ export class PageLayoutTabController { async update( @Param('id') id: string, @Body() input: UpdatePageLayoutTabInput, - @AuthWorkspace() workspace: Workspace, + @AuthWorkspace() workspace: WorkspaceEntity, ): Promise { return this.pageLayoutTabService.update(id, workspace.id, input); } @@ -82,7 +82,7 @@ export class PageLayoutTabController { @Delete(':id') async delete( @Param('id') id: string, - @AuthWorkspace() workspace: Workspace, + @AuthWorkspace() workspace: WorkspaceEntity, ): Promise { return this.pageLayoutTabService.delete(id, workspace.id); } diff --git a/packages/twenty-server/src/engine/core-modules/page-layout/controllers/page-layout-widget.controller.ts b/packages/twenty-server/src/engine/core-modules/page-layout/controllers/page-layout-widget.controller.ts index 00192b7ded0..9a5eaa30350 100644 --- a/packages/twenty-server/src/engine/core-modules/page-layout/controllers/page-layout-widget.controller.ts +++ b/packages/twenty-server/src/engine/core-modules/page-layout/controllers/page-layout-widget.controller.ts @@ -24,7 +24,7 @@ import { } from 'src/engine/core-modules/page-layout/exceptions/page-layout-widget.exception'; import { PageLayoutWidgetRestApiExceptionFilter } from 'src/engine/core-modules/page-layout/filters/page-layout-widget-rest-api-exception.filter'; import { PageLayoutWidgetService } from 'src/engine/core-modules/page-layout/services/page-layout-widget.service'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { AuthWorkspace } from 'src/engine/decorators/auth/auth-workspace.decorator'; import { WorkspaceAuthGuard } from 'src/engine/guards/workspace-auth.guard'; @@ -38,7 +38,7 @@ export class PageLayoutWidgetController { @Get() async findMany( - @AuthWorkspace() workspace: Workspace, + @AuthWorkspace() workspace: WorkspaceEntity, @Query('pageLayoutTabId') pageLayoutTabId: string, ): Promise { if (!isDefined(pageLayoutTabId)) { @@ -59,7 +59,7 @@ export class PageLayoutWidgetController { @Get(':id') async findOne( @Param('id') id: string, - @AuthWorkspace() workspace: Workspace, + @AuthWorkspace() workspace: WorkspaceEntity, ): Promise { return this.pageLayoutWidgetService.findByIdOrThrow(id, workspace.id); } @@ -67,7 +67,7 @@ export class PageLayoutWidgetController { @Post() async create( @Body() input: CreatePageLayoutWidgetInput, - @AuthWorkspace() workspace: Workspace, + @AuthWorkspace() workspace: WorkspaceEntity, ): Promise { return this.pageLayoutWidgetService.create(input, workspace.id); } @@ -76,7 +76,7 @@ export class PageLayoutWidgetController { async update( @Param('id') id: string, @Body() input: UpdatePageLayoutWidgetInput, - @AuthWorkspace() workspace: Workspace, + @AuthWorkspace() workspace: WorkspaceEntity, ): Promise { return this.pageLayoutWidgetService.update(id, workspace.id, input); } @@ -84,7 +84,7 @@ export class PageLayoutWidgetController { @Delete(':id') async delete( @Param('id') id: string, - @AuthWorkspace() workspace: Workspace, + @AuthWorkspace() workspace: WorkspaceEntity, ): Promise { return this.pageLayoutWidgetService.delete(id, workspace.id); } diff --git a/packages/twenty-server/src/engine/core-modules/page-layout/controllers/page-layout.controller.ts b/packages/twenty-server/src/engine/core-modules/page-layout/controllers/page-layout.controller.ts index 1ed98e434d4..9baab3cb0cf 100644 --- a/packages/twenty-server/src/engine/core-modules/page-layout/controllers/page-layout.controller.ts +++ b/packages/twenty-server/src/engine/core-modules/page-layout/controllers/page-layout.controller.ts @@ -19,7 +19,7 @@ import { type PageLayoutDTO } from 'src/engine/core-modules/page-layout/dtos/pag import { PageLayoutEntity } from 'src/engine/core-modules/page-layout/entities/page-layout.entity'; import { PageLayoutRestApiExceptionFilter } from 'src/engine/core-modules/page-layout/filters/page-layout-rest-api-exception.filter'; import { PageLayoutService } from 'src/engine/core-modules/page-layout/services/page-layout.service'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { AuthWorkspace } from 'src/engine/decorators/auth/auth-workspace.decorator'; import { WorkspaceAuthGuard } from 'src/engine/guards/workspace-auth.guard'; @@ -31,7 +31,7 @@ export class PageLayoutController { @Get() async findMany( - @AuthWorkspace() workspace: Workspace, + @AuthWorkspace() workspace: WorkspaceEntity, @Query('objectMetadataId') objectMetadataId?: string, ): Promise { if (isDefined(objectMetadataId)) { @@ -47,7 +47,7 @@ export class PageLayoutController { @Get(':id') async findOne( @Param('id') id: string, - @AuthWorkspace() workspace: Workspace, + @AuthWorkspace() workspace: WorkspaceEntity, ): Promise { return this.pageLayoutService.findByIdOrThrow(id, workspace.id); } @@ -55,7 +55,7 @@ export class PageLayoutController { @Post() async create( @Body() input: CreatePageLayoutInput, - @AuthWorkspace() workspace: Workspace, + @AuthWorkspace() workspace: WorkspaceEntity, ): Promise { return this.pageLayoutService.create(input, workspace.id); } @@ -64,7 +64,7 @@ export class PageLayoutController { async update( @Param('id') id: string, @Body() input: UpdatePageLayoutInput, - @AuthWorkspace() workspace: Workspace, + @AuthWorkspace() workspace: WorkspaceEntity, ): Promise { const updatedPageLayout = await this.pageLayoutService.update( id, @@ -78,7 +78,7 @@ export class PageLayoutController { @Delete(':id') async delete( @Param('id') id: string, - @AuthWorkspace() workspace: Workspace, + @AuthWorkspace() workspace: WorkspaceEntity, ): Promise { const deletedPageLayout = await this.pageLayoutService.delete( id, diff --git a/packages/twenty-server/src/engine/core-modules/page-layout/entities/page-layout-tab.entity.ts b/packages/twenty-server/src/engine/core-modules/page-layout/entities/page-layout-tab.entity.ts index ecc51505ebb..16268785db5 100644 --- a/packages/twenty-server/src/engine/core-modules/page-layout/entities/page-layout-tab.entity.ts +++ b/packages/twenty-server/src/engine/core-modules/page-layout/entities/page-layout-tab.entity.ts @@ -1,3 +1,5 @@ +import { ObjectType } from '@nestjs/graphql'; + import { Column, CreateDateColumn, @@ -14,9 +16,10 @@ import { import { PageLayoutWidgetEntity } from 'src/engine/core-modules/page-layout/entities/page-layout-widget.entity'; import { PageLayoutEntity } from 'src/engine/core-modules/page-layout/entities/page-layout.entity'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; @Entity({ name: 'pageLayoutTab', schema: 'core' }) +@ObjectType('PageLayoutTab') @Index( 'IDX_PAGE_LAYOUT_TAB_WORKSPACE_ID_PAGE_LAYOUT_ID', ['workspaceId', 'pageLayoutId'], @@ -32,11 +35,11 @@ export class PageLayoutTabEntity implements Required { @Column({ nullable: false, type: 'uuid' }) workspaceId: string; - @ManyToOne(() => Workspace, { + @ManyToOne(() => WorkspaceEntity, { onDelete: 'CASCADE', }) @JoinColumn({ name: 'workspaceId' }) - workspace: Relation; + workspace: Relation; @Column({ nullable: false, type: 'float', default: 0 }) position: number; diff --git a/packages/twenty-server/src/engine/core-modules/page-layout/entities/page-layout-widget.entity.ts b/packages/twenty-server/src/engine/core-modules/page-layout/entities/page-layout-widget.entity.ts index 382c3192b49..dbdae813af7 100644 --- a/packages/twenty-server/src/engine/core-modules/page-layout/entities/page-layout-widget.entity.ts +++ b/packages/twenty-server/src/engine/core-modules/page-layout/entities/page-layout-widget.entity.ts @@ -1,3 +1,5 @@ +import { ObjectType } from '@nestjs/graphql'; + import { Column, CreateDateColumn, @@ -15,10 +17,11 @@ import { WidgetConfigurationInterface } from 'src/engine/core-modules/page-layou import { PageLayoutTabEntity } from 'src/engine/core-modules/page-layout/entities/page-layout-tab.entity'; import { WidgetType } from 'src/engine/core-modules/page-layout/enums/widget-type.enum'; import { GridPosition } from 'src/engine/core-modules/page-layout/types/grid-position.type'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity'; @Entity({ name: 'pageLayoutWidget', schema: 'core' }) +@ObjectType('PageLayoutWidget') @Index( 'IDX_PAGE_LAYOUT_WIDGET_WORKSPACE_ID_PAGE_LAYOUT_TAB_ID', ['workspaceId', 'pageLayoutTabId'], @@ -36,11 +39,11 @@ export class PageLayoutWidgetEntity @Column({ nullable: false, type: 'uuid' }) workspaceId: string; - @ManyToOne(() => Workspace, { + @ManyToOne(() => WorkspaceEntity, { onDelete: 'CASCADE', }) @JoinColumn({ name: 'workspaceId' }) - workspace: Relation; + workspace: Relation; @ManyToOne(() => PageLayoutTabEntity, { onDelete: 'CASCADE', diff --git a/packages/twenty-server/src/engine/core-modules/page-layout/entities/page-layout.entity.ts b/packages/twenty-server/src/engine/core-modules/page-layout/entities/page-layout.entity.ts index a721267ba77..44cd50885d6 100644 --- a/packages/twenty-server/src/engine/core-modules/page-layout/entities/page-layout.entity.ts +++ b/packages/twenty-server/src/engine/core-modules/page-layout/entities/page-layout.entity.ts @@ -1,3 +1,5 @@ +import { ObjectType } from '@nestjs/graphql'; + import { Column, CreateDateColumn, @@ -14,10 +16,11 @@ import { import { PageLayoutTabEntity } from 'src/engine/core-modules/page-layout/entities/page-layout-tab.entity'; import { PageLayoutType } from 'src/engine/core-modules/page-layout/enums/page-layout-type.enum'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity'; @Entity({ name: 'pageLayout', schema: 'core' }) +@ObjectType('PageLayout') @Index( 'IDX_PAGE_LAYOUT_WORKSPACE_ID_OBJECT_METADATA_ID', ['workspaceId', 'objectMetadataId'], @@ -33,11 +36,11 @@ export class PageLayoutEntity implements Required { @Column({ nullable: false, type: 'uuid' }) workspaceId: string; - @ManyToOne(() => Workspace, { + @ManyToOne(() => WorkspaceEntity, { onDelete: 'CASCADE', }) @JoinColumn({ name: 'workspaceId' }) - workspace: Relation; + workspace: Relation; @Column({ type: 'enum', diff --git a/packages/twenty-server/src/engine/core-modules/page-layout/resolvers/page-layout-tab.resolver.ts b/packages/twenty-server/src/engine/core-modules/page-layout/resolvers/page-layout-tab.resolver.ts index dac589db3b9..f38161b12b8 100644 --- a/packages/twenty-server/src/engine/core-modules/page-layout/resolvers/page-layout-tab.resolver.ts +++ b/packages/twenty-server/src/engine/core-modules/page-layout/resolvers/page-layout-tab.resolver.ts @@ -9,7 +9,7 @@ import { UpdatePageLayoutTabInput } from 'src/engine/core-modules/page-layout/dt import { PageLayoutTabDTO } from 'src/engine/core-modules/page-layout/dtos/page-layout-tab.dto'; import { PageLayoutTabService } from 'src/engine/core-modules/page-layout/services/page-layout-tab.service'; import { PageLayoutGraphqlApiExceptionFilter } from 'src/engine/core-modules/page-layout/utils/page-layout-graphql-api-exception.filter'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { AuthWorkspace } from 'src/engine/decorators/auth/auth-workspace.decorator'; import { WorkspaceAuthGuard } from 'src/engine/guards/workspace-auth.guard'; @@ -22,7 +22,7 @@ export class PageLayoutTabResolver { @Query(() => [PageLayoutTabDTO]) async getPageLayoutTabs( - @AuthWorkspace() workspace: Workspace, + @AuthWorkspace() workspace: WorkspaceEntity, @Args('pageLayoutId', { type: () => String }) pageLayoutId: string, ): Promise { return this.pageLayoutTabService.findByPageLayoutId( @@ -34,7 +34,7 @@ export class PageLayoutTabResolver { @Query(() => PageLayoutTabDTO) async getPageLayoutTab( @Args('id', { type: () => String }) id: string, - @AuthWorkspace() workspace: Workspace, + @AuthWorkspace() workspace: WorkspaceEntity, ): Promise { return this.pageLayoutTabService.findByIdOrThrow(id, workspace.id); } @@ -42,7 +42,7 @@ export class PageLayoutTabResolver { @Mutation(() => PageLayoutTabDTO) async createPageLayoutTab( @Args('input') input: CreatePageLayoutTabInput, - @AuthWorkspace() workspace: Workspace, + @AuthWorkspace() workspace: WorkspaceEntity, ): Promise { return this.pageLayoutTabService.create(input, workspace.id); } @@ -51,7 +51,7 @@ export class PageLayoutTabResolver { async updatePageLayoutTab( @Args('id', { type: () => String }) id: string, @Args('input') input: UpdatePageLayoutTabInput, - @AuthWorkspace() workspace: Workspace, + @AuthWorkspace() workspace: WorkspaceEntity, ): Promise { return this.pageLayoutTabService.update(id, workspace.id, input); } @@ -59,7 +59,7 @@ export class PageLayoutTabResolver { @Mutation(() => Boolean) async deletePageLayoutTab( @Args('id', { type: () => String }) id: string, - @AuthWorkspace() workspace: Workspace, + @AuthWorkspace() workspace: WorkspaceEntity, ): Promise { const deletedPageLayoutTab = await this.pageLayoutTabService.delete( id, @@ -72,7 +72,7 @@ export class PageLayoutTabResolver { @Mutation(() => Boolean) async destroyPageLayoutTab( @Args('id', { type: () => String }) id: string, - @AuthWorkspace() workspace: Workspace, + @AuthWorkspace() workspace: WorkspaceEntity, ): Promise { return this.pageLayoutTabService.destroy(id, workspace.id); } @@ -80,7 +80,7 @@ export class PageLayoutTabResolver { @Mutation(() => PageLayoutTabDTO) async restorePageLayoutTab( @Args('id', { type: () => String }) id: string, - @AuthWorkspace() workspace: Workspace, + @AuthWorkspace() workspace: WorkspaceEntity, ): Promise { return this.pageLayoutTabService.restore(id, workspace.id); } diff --git a/packages/twenty-server/src/engine/core-modules/page-layout/resolvers/page-layout-widget.resolver.ts b/packages/twenty-server/src/engine/core-modules/page-layout/resolvers/page-layout-widget.resolver.ts index 2e86fa0ab25..8593406b7aa 100644 --- a/packages/twenty-server/src/engine/core-modules/page-layout/resolvers/page-layout-widget.resolver.ts +++ b/packages/twenty-server/src/engine/core-modules/page-layout/resolvers/page-layout-widget.resolver.ts @@ -16,7 +16,7 @@ import { WidgetConfiguration } from 'src/engine/core-modules/page-layout/dtos/wi import { PageLayoutWidgetService } from 'src/engine/core-modules/page-layout/services/page-layout-widget.service'; import { injectWidgetConfigurationDiscriminator } from 'src/engine/core-modules/page-layout/utils/inject-widget-configuration-discriminator.util'; import { PageLayoutGraphqlApiExceptionFilter } from 'src/engine/core-modules/page-layout/utils/page-layout-graphql-api-exception.filter'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { AuthWorkspace } from 'src/engine/decorators/auth/auth-workspace.decorator'; import { WorkspaceAuthGuard } from 'src/engine/guards/workspace-auth.guard'; @@ -31,7 +31,7 @@ export class PageLayoutWidgetResolver { @Query(() => [PageLayoutWidgetDTO]) async getPageLayoutWidgets( - @AuthWorkspace() workspace: Workspace, + @AuthWorkspace() workspace: WorkspaceEntity, @Args('pageLayoutTabId', { type: () => String }) pageLayoutTabId: string, ): Promise { return this.pageLayoutWidgetService.findByPageLayoutTabId( @@ -43,7 +43,7 @@ export class PageLayoutWidgetResolver { @Query(() => PageLayoutWidgetDTO) async getPageLayoutWidget( @Args('id', { type: () => String }) id: string, - @AuthWorkspace() workspace: Workspace, + @AuthWorkspace() workspace: WorkspaceEntity, ): Promise { return this.pageLayoutWidgetService.findByIdOrThrow(id, workspace.id); } @@ -51,7 +51,7 @@ export class PageLayoutWidgetResolver { @Mutation(() => PageLayoutWidgetDTO) async createPageLayoutWidget( @Args('input') input: CreatePageLayoutWidgetInput, - @AuthWorkspace() workspace: Workspace, + @AuthWorkspace() workspace: WorkspaceEntity, ): Promise { return this.pageLayoutWidgetService.create(input, workspace.id); } @@ -60,7 +60,7 @@ export class PageLayoutWidgetResolver { async updatePageLayoutWidget( @Args('id', { type: () => String }) id: string, @Args('input') input: UpdatePageLayoutWidgetInput, - @AuthWorkspace() workspace: Workspace, + @AuthWorkspace() workspace: WorkspaceEntity, ): Promise { return this.pageLayoutWidgetService.update(id, workspace.id, input); } @@ -68,7 +68,7 @@ export class PageLayoutWidgetResolver { @Mutation(() => PageLayoutWidgetDTO) async deletePageLayoutWidget( @Args('id', { type: () => String }) id: string, - @AuthWorkspace() workspace: Workspace, + @AuthWorkspace() workspace: WorkspaceEntity, ): Promise { return this.pageLayoutWidgetService.delete(id, workspace.id); } @@ -76,7 +76,7 @@ export class PageLayoutWidgetResolver { @Mutation(() => Boolean) async destroyPageLayoutWidget( @Args('id', { type: () => String }) id: string, - @AuthWorkspace() workspace: Workspace, + @AuthWorkspace() workspace: WorkspaceEntity, ): Promise { return this.pageLayoutWidgetService.destroy(id, workspace.id); } @@ -84,7 +84,7 @@ export class PageLayoutWidgetResolver { @Mutation(() => PageLayoutWidgetDTO) async restorePageLayoutWidget( @Args('id', { type: () => String }) id: string, - @AuthWorkspace() workspace: Workspace, + @AuthWorkspace() workspace: WorkspaceEntity, ): Promise { return this.pageLayoutWidgetService.restore(id, workspace.id); } diff --git a/packages/twenty-server/src/engine/core-modules/page-layout/resolvers/page-layout.resolver.ts b/packages/twenty-server/src/engine/core-modules/page-layout/resolvers/page-layout.resolver.ts index 62ef3bdf08a..3ce9a6454cf 100644 --- a/packages/twenty-server/src/engine/core-modules/page-layout/resolvers/page-layout.resolver.ts +++ b/packages/twenty-server/src/engine/core-modules/page-layout/resolvers/page-layout.resolver.ts @@ -11,7 +11,7 @@ import { PageLayoutDTO } from 'src/engine/core-modules/page-layout/dtos/page-lay import { PageLayoutUpdateService } from 'src/engine/core-modules/page-layout/services/page-layout-update.service'; import { PageLayoutService } from 'src/engine/core-modules/page-layout/services/page-layout.service'; import { PageLayoutGraphqlApiExceptionFilter } from 'src/engine/core-modules/page-layout/utils/page-layout-graphql-api-exception.filter'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { AuthWorkspace } from 'src/engine/decorators/auth/auth-workspace.decorator'; import { WorkspaceAuthGuard } from 'src/engine/guards/workspace-auth.guard'; @@ -27,7 +27,7 @@ export class PageLayoutResolver { @Query(() => [PageLayoutDTO]) async getPageLayouts( - @AuthWorkspace() workspace: Workspace, + @AuthWorkspace() workspace: WorkspaceEntity, @Args('objectMetadataId', { type: () => String, nullable: true }) objectMetadataId?: string, ): Promise { @@ -44,7 +44,7 @@ export class PageLayoutResolver { @Query(() => PageLayoutDTO, { nullable: true }) async getPageLayout( @Args('id', { type: () => String }) id: string, - @AuthWorkspace() workspace: Workspace, + @AuthWorkspace() workspace: WorkspaceEntity, ): Promise { return this.pageLayoutService.findByIdOrThrow(id, workspace.id); } @@ -52,7 +52,7 @@ export class PageLayoutResolver { @Mutation(() => PageLayoutDTO) async createPageLayout( @Args('input') input: CreatePageLayoutInput, - @AuthWorkspace() workspace: Workspace, + @AuthWorkspace() workspace: WorkspaceEntity, ): Promise { return this.pageLayoutService.create(input, workspace.id); } @@ -61,7 +61,7 @@ export class PageLayoutResolver { async updatePageLayout( @Args('id', { type: () => String }) id: string, @Args('input') input: UpdatePageLayoutInput, - @AuthWorkspace() workspace: Workspace, + @AuthWorkspace() workspace: WorkspaceEntity, ): Promise { return this.pageLayoutService.update(id, workspace.id, input); } @@ -69,7 +69,7 @@ export class PageLayoutResolver { @Mutation(() => PageLayoutDTO) async deletePageLayout( @Args('id', { type: () => String }) id: string, - @AuthWorkspace() workspace: Workspace, + @AuthWorkspace() workspace: WorkspaceEntity, ): Promise { const deletedPageLayout = await this.pageLayoutService.delete( id, @@ -82,7 +82,7 @@ export class PageLayoutResolver { @Mutation(() => Boolean) async destroyPageLayout( @Args('id', { type: () => String }) id: string, - @AuthWorkspace() workspace: Workspace, + @AuthWorkspace() workspace: WorkspaceEntity, ): Promise { const deletedPageLayout = await this.pageLayoutService.destroy( id, @@ -95,7 +95,7 @@ export class PageLayoutResolver { @Mutation(() => PageLayoutDTO) async restorePageLayout( @Args('id', { type: () => String }) id: string, - @AuthWorkspace() workspace: Workspace, + @AuthWorkspace() workspace: WorkspaceEntity, ): Promise { return this.pageLayoutService.restore(id, workspace.id); } @@ -104,7 +104,7 @@ export class PageLayoutResolver { async updatePageLayoutWithTabsAndWidgets( @Args('id', { type: () => String }) id: string, @Args('input') input: UpdatePageLayoutWithTabsInput, - @AuthWorkspace() workspace: Workspace, + @AuthWorkspace() workspace: WorkspaceEntity, ): Promise { return this.pageLayoutUpdateService.updatePageLayoutWithTabs({ id, diff --git a/packages/twenty-server/src/engine/core-modules/page-layout/services/__tests__/page-layout-update.service.spec.ts b/packages/twenty-server/src/engine/core-modules/page-layout/services/__tests__/page-layout-update.service.spec.ts index 4b97e34b5c3..83991a0f56b 100644 --- a/packages/twenty-server/src/engine/core-modules/page-layout/services/__tests__/page-layout-update.service.spec.ts +++ b/packages/twenty-server/src/engine/core-modules/page-layout/services/__tests__/page-layout-update.service.spec.ts @@ -13,7 +13,7 @@ import { PageLayoutTabService } from 'src/engine/core-modules/page-layout/servic import { PageLayoutUpdateService } from 'src/engine/core-modules/page-layout/services/page-layout-update.service'; import { PageLayoutWidgetService } from 'src/engine/core-modules/page-layout/services/page-layout-widget.service'; import { PageLayoutService } from 'src/engine/core-modules/page-layout/services/page-layout.service'; -import { type Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { type WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; describe('PageLayoutUpdateService', () => { let pageLayoutUpdateService: PageLayoutUpdateService; @@ -30,7 +30,7 @@ describe('PageLayoutUpdateService', () => { type: PageLayoutType.DASHBOARD, objectMetadataId: 'object-metadata-id', tabs: [], - workspace: {} as Workspace, + workspace: {} as WorkspaceEntity, objectMetadata: null, createdAt: new Date(), updatedAt: new Date(), @@ -43,7 +43,7 @@ describe('PageLayoutUpdateService', () => { position: 0, pageLayoutId: 'page-layout-id', workspaceId: 'workspace-id', - workspace: {} as Workspace, + workspace: {} as WorkspaceEntity, pageLayout: {} as PageLayoutEntity, widgets: [], createdAt: new Date(), diff --git a/packages/twenty-server/src/engine/core-modules/postgres-credentials/postgres-credentials.entity.ts b/packages/twenty-server/src/engine/core-modules/postgres-credentials/postgres-credentials.entity.ts index e8fe9ecea37..6daeaab2d7c 100644 --- a/packages/twenty-server/src/engine/core-modules/postgres-credentials/postgres-credentials.entity.ts +++ b/packages/twenty-server/src/engine/core-modules/postgres-credentials/postgres-credentials.entity.ts @@ -1,3 +1,5 @@ +import { ObjectType } from '@nestjs/graphql'; + import { Entity, Column, @@ -8,10 +10,11 @@ import { Relation, } from 'typeorm'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; @Entity({ name: 'postgresCredentials', schema: 'core' }) -export class PostgresCredentials { +@ObjectType('PostgresCredentials') +export class PostgresCredentialsEntity { @PrimaryGeneratedColumn('uuid') id: string; @@ -30,10 +33,14 @@ export class PostgresCredentials { @Column({ nullable: true, type: 'timestamptz' }) deletedAt: Date; - @ManyToOne(() => Workspace, (workspace) => workspace.allPostgresCredentials, { - onDelete: 'CASCADE', - }) - workspace: Relation; + @ManyToOne( + () => WorkspaceEntity, + (workspace) => workspace.allPostgresCredentials, + { + onDelete: 'CASCADE', + }, + ) + workspace: Relation; @Column({ nullable: false, type: 'uuid' }) workspaceId: string; diff --git a/packages/twenty-server/src/engine/core-modules/postgres-credentials/postgres-credentials.module.ts b/packages/twenty-server/src/engine/core-modules/postgres-credentials/postgres-credentials.module.ts index 4124f30c78d..53e9e4b9bd1 100644 --- a/packages/twenty-server/src/engine/core-modules/postgres-credentials/postgres-credentials.module.ts +++ b/packages/twenty-server/src/engine/core-modules/postgres-credentials/postgres-credentials.module.ts @@ -2,16 +2,16 @@ import { Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; import { JwtModule } from 'src/engine/core-modules/jwt/jwt.module'; -import { PostgresCredentials } from 'src/engine/core-modules/postgres-credentials/postgres-credentials.entity'; +import { PostgresCredentialsEntity } from 'src/engine/core-modules/postgres-credentials/postgres-credentials.entity'; import { PostgresCredentialsResolver } from 'src/engine/core-modules/postgres-credentials/postgres-credentials.resolver'; import { PostgresCredentialsService } from 'src/engine/core-modules/postgres-credentials/postgres-credentials.service'; @Module({ - imports: [JwtModule, TypeOrmModule.forFeature([PostgresCredentials])], + imports: [JwtModule, TypeOrmModule.forFeature([PostgresCredentialsEntity])], providers: [ PostgresCredentialsResolver, PostgresCredentialsService, - PostgresCredentials, + PostgresCredentialsEntity, ], }) export class PostgresCredentialsModule {} diff --git a/packages/twenty-server/src/engine/core-modules/postgres-credentials/postgres-credentials.resolver.ts b/packages/twenty-server/src/engine/core-modules/postgres-credentials/postgres-credentials.resolver.ts index b8a6499ec45..d9e1b58c518 100644 --- a/packages/twenty-server/src/engine/core-modules/postgres-credentials/postgres-credentials.resolver.ts +++ b/packages/twenty-server/src/engine/core-modules/postgres-credentials/postgres-credentials.resolver.ts @@ -3,7 +3,7 @@ import { Mutation, Query, Resolver } from '@nestjs/graphql'; import { PostgresCredentialsDTO } from 'src/engine/core-modules/postgres-credentials/dtos/postgres-credentials.dto'; import { PostgresCredentialsService } from 'src/engine/core-modules/postgres-credentials/postgres-credentials.service'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { AuthWorkspace } from 'src/engine/decorators/auth/auth-workspace.decorator'; import { WorkspaceAuthGuard } from 'src/engine/guards/workspace-auth.guard'; @@ -15,20 +15,24 @@ export class PostgresCredentialsResolver { @UseGuards(WorkspaceAuthGuard) @Mutation(() => PostgresCredentialsDTO) - async enablePostgresProxy(@AuthWorkspace() { id: workspaceId }: Workspace) { + async enablePostgresProxy( + @AuthWorkspace() { id: workspaceId }: WorkspaceEntity, + ) { return this.postgresCredentialsService.enablePostgresProxy(workspaceId); } @UseGuards(WorkspaceAuthGuard) @Mutation(() => PostgresCredentialsDTO) - async disablePostgresProxy(@AuthWorkspace() { id: workspaceId }: Workspace) { + async disablePostgresProxy( + @AuthWorkspace() { id: workspaceId }: WorkspaceEntity, + ) { return this.postgresCredentialsService.disablePostgresProxy(workspaceId); } @UseGuards(WorkspaceAuthGuard) @Query(() => PostgresCredentialsDTO, { nullable: true }) async getPostgresCredentials( - @AuthWorkspace() { id: workspaceId }: Workspace, + @AuthWorkspace() { id: workspaceId }: WorkspaceEntity, ) { return this.postgresCredentialsService.getPostgresCredentials(workspaceId); } diff --git a/packages/twenty-server/src/engine/core-modules/postgres-credentials/postgres-credentials.service.ts b/packages/twenty-server/src/engine/core-modules/postgres-credentials/postgres-credentials.service.ts index 699d55946a6..a2c5f2794ff 100644 --- a/packages/twenty-server/src/engine/core-modules/postgres-credentials/postgres-credentials.service.ts +++ b/packages/twenty-server/src/engine/core-modules/postgres-credentials/postgres-credentials.service.ts @@ -12,13 +12,13 @@ import { import { NotFoundError } from 'src/engine/core-modules/graphql/utils/graphql-errors.util'; import { JwtWrapperService } from 'src/engine/core-modules/jwt/services/jwt-wrapper.service'; import { type PostgresCredentialsDTO } from 'src/engine/core-modules/postgres-credentials/dtos/postgres-credentials.dto'; -import { PostgresCredentials } from 'src/engine/core-modules/postgres-credentials/postgres-credentials.entity'; +import { PostgresCredentialsEntity } from 'src/engine/core-modules/postgres-credentials/postgres-credentials.entity'; import { JwtTokenTypeEnum } from 'src/engine/core-modules/auth/types/auth-context.type'; export class PostgresCredentialsService { constructor( - @InjectRepository(PostgresCredentials) - private readonly postgresCredentialsRepository: Repository, + @InjectRepository(PostgresCredentialsEntity) + private readonly postgresCredentialsRepository: Repository, private readonly jwtWrapperService: JwtWrapperService, ) {} diff --git a/packages/twenty-server/src/engine/core-modules/public-domain/crons/jobs/check-public-domains-valid-records.cron.job.ts b/packages/twenty-server/src/engine/core-modules/public-domain/crons/jobs/check-public-domains-valid-records.cron.job.ts index a5f86509d10..fcac605bba7 100644 --- a/packages/twenty-server/src/engine/core-modules/public-domain/crons/jobs/check-public-domains-valid-records.cron.job.ts +++ b/packages/twenty-server/src/engine/core-modules/public-domain/crons/jobs/check-public-domains-valid-records.cron.job.ts @@ -7,15 +7,15 @@ import { Processor } from 'src/engine/core-modules/message-queue/decorators/proc import { MessageQueue } from 'src/engine/core-modules/message-queue/message-queue.constants'; import { PublicDomainService } from 'src/engine/core-modules/public-domain/public-domain.service'; import { SentryCronMonitor } from 'src/engine/core-modules/cron/sentry-cron-monitor.decorator'; -import { PublicDomain } from 'src/engine/core-modules/public-domain/public-domain.entity'; +import { PublicDomainEntity } from 'src/engine/core-modules/public-domain/public-domain.entity'; export const CHECK_PUBLIC_DOMAINS_VALID_RECORDS_CRON_PATTERN = '0 * * * *'; @Processor(MessageQueue.cronQueue) export class CheckPublicDomainsValidRecordsCronJob { constructor( - @InjectRepository(PublicDomain) - private readonly publicDomainRepository: Repository, + @InjectRepository(PublicDomainEntity) + private readonly publicDomainRepository: Repository, private readonly publicDomainService: PublicDomainService, ) {} diff --git a/packages/twenty-server/src/engine/core-modules/public-domain/public-domain.entity.ts b/packages/twenty-server/src/engine/core-modules/public-domain/public-domain.entity.ts index fc75d0b5a43..0c7994cb31e 100644 --- a/packages/twenty-server/src/engine/core-modules/public-domain/public-domain.entity.ts +++ b/packages/twenty-server/src/engine/core-modules/public-domain/public-domain.entity.ts @@ -12,11 +12,11 @@ import { import { Relation } from 'src/engine/workspace-manager/workspace-sync-metadata/interfaces/relation.interface'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; @Entity({ name: 'publicDomain', schema: 'core' }) -@ObjectType() -export class PublicDomain { +@ObjectType('PublicDomain') +export class PublicDomainEntity { @PrimaryGeneratedColumn('uuid') id: string; @@ -35,9 +35,9 @@ export class PublicDomain { @Column({ nullable: false, type: 'uuid' }) workspaceId: string; - @ManyToOne(() => Workspace, (workspace) => workspace.publicDomains, { + @ManyToOne(() => WorkspaceEntity, (workspace) => workspace.publicDomains, { onDelete: 'CASCADE', }) @JoinColumn({ name: 'workspaceId' }) - workspace: Relation; + workspace: Relation; } diff --git a/packages/twenty-server/src/engine/core-modules/public-domain/public-domain.module.ts b/packages/twenty-server/src/engine/core-modules/public-domain/public-domain.module.ts index 07ba444f7b8..970e6a75e88 100644 --- a/packages/twenty-server/src/engine/core-modules/public-domain/public-domain.module.ts +++ b/packages/twenty-server/src/engine/core-modules/public-domain/public-domain.module.ts @@ -3,16 +3,16 @@ import { Module } from '@nestjs/common'; import { NestjsQueryTypeOrmModule } from '@ptc-org/nestjs-query-typeorm'; import { PublicDomainService } from 'src/engine/core-modules/public-domain/public-domain.service'; -import { PublicDomain } from 'src/engine/core-modules/public-domain/public-domain.entity'; +import { PublicDomainEntity } from 'src/engine/core-modules/public-domain/public-domain.entity'; import { PublicDomainResolver } from 'src/engine/core-modules/public-domain/public-domain.resolver'; import { DnsManagerModule } from 'src/engine/core-modules/dns-manager/dns-manager.module'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { CheckPublicDomainsValidRecordsCronCommand } from 'src/engine/core-modules/public-domain/crons/commands/check-public-domains-valid-records.cron.command'; import { CheckPublicDomainsValidRecordsCronJob } from 'src/engine/core-modules/public-domain/crons/jobs/check-public-domains-valid-records.cron.job'; @Module({ imports: [ - NestjsQueryTypeOrmModule.forFeature([PublicDomain, Workspace]), + NestjsQueryTypeOrmModule.forFeature([PublicDomainEntity, WorkspaceEntity]), DnsManagerModule, ], exports: [CheckPublicDomainsValidRecordsCronCommand, PublicDomainService], diff --git a/packages/twenty-server/src/engine/core-modules/public-domain/public-domain.resolver.ts b/packages/twenty-server/src/engine/core-modules/public-domain/public-domain.resolver.ts index 6cd7b599e48..147f9a7a965 100644 --- a/packages/twenty-server/src/engine/core-modules/public-domain/public-domain.resolver.ts +++ b/packages/twenty-server/src/engine/core-modules/public-domain/public-domain.resolver.ts @@ -13,9 +13,9 @@ import { PublicDomainService } from 'src/engine/core-modules/public-domain/publi import { PublicDomainDTO } from 'src/engine/core-modules/public-domain/dtos/public-domain.dto'; import { PublicDomainInput } from 'src/engine/core-modules/public-domain/dtos/public-domain.input'; import { AuthWorkspace } from 'src/engine/decorators/auth/auth-workspace.decorator'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { DomainValidRecords } from 'src/engine/core-modules/dns-manager/dtos/domain-valid-records'; -import { PublicDomain } from 'src/engine/core-modules/public-domain/public-domain.entity'; +import { PublicDomainEntity } from 'src/engine/core-modules/public-domain/public-domain.entity'; import { DnsManagerService } from 'src/engine/core-modules/dns-manager/services/dns-manager.service'; import { PublicDomainException, @@ -31,15 +31,15 @@ import { @Resolver() export class PublicDomainResolver { constructor( - @InjectRepository(PublicDomain) - private readonly publicDomainRepository: Repository, + @InjectRepository(PublicDomainEntity) + private readonly publicDomainRepository: Repository, private readonly publicDomainService: PublicDomainService, private readonly dnsManagerService: DnsManagerService, ) {} @Query(() => [PublicDomainDTO]) async findManyPublicDomains( - @AuthWorkspace() currentWorkspace: Workspace, + @AuthWorkspace() currentWorkspace: WorkspaceEntity, ): Promise { return await this.publicDomainRepository.find({ where: { workspaceId: currentWorkspace.id }, @@ -49,7 +49,7 @@ export class PublicDomainResolver { @Mutation(() => PublicDomainDTO) async createPublicDomain( @Args() { domain }: PublicDomainInput, - @AuthWorkspace() currentWorkspace: Workspace, + @AuthWorkspace() currentWorkspace: WorkspaceEntity, ): Promise { return this.publicDomainService.createPublicDomain({ domain, @@ -60,7 +60,7 @@ export class PublicDomainResolver { @Mutation(() => Boolean) async deletePublicDomain( @Args() { domain }: PublicDomainInput, - @AuthWorkspace() currentWorkspace: Workspace, + @AuthWorkspace() currentWorkspace: WorkspaceEntity, ): Promise { await this.publicDomainService.deletePublicDomain({ domain, @@ -73,7 +73,7 @@ export class PublicDomainResolver { @Mutation(() => DomainValidRecords, { nullable: true }) async checkPublicDomainValidRecords( @Args() { domain }: PublicDomainInput, - @AuthWorkspace() workspace: Workspace, + @AuthWorkspace() workspace: WorkspaceEntity, ): Promise { const publicDomain = await this.publicDomainRepository.findOne({ where: { workspaceId: workspace.id, domain }, diff --git a/packages/twenty-server/src/engine/core-modules/public-domain/public-domain.service.ts b/packages/twenty-server/src/engine/core-modules/public-domain/public-domain.service.ts index f23d0c54a44..69b7cac9a7a 100644 --- a/packages/twenty-server/src/engine/core-modules/public-domain/public-domain.service.ts +++ b/packages/twenty-server/src/engine/core-modules/public-domain/public-domain.service.ts @@ -7,22 +7,22 @@ import { type QueryDeepPartialEntity } from 'typeorm/query-builder/QueryPartialE import { DnsManagerService } from 'src/engine/core-modules/dns-manager/services/dns-manager.service'; import { PublicDomainDTO } from 'src/engine/core-modules/public-domain/dtos/public-domain.dto'; -import { PublicDomain } from 'src/engine/core-modules/public-domain/public-domain.entity'; +import { PublicDomainEntity } from 'src/engine/core-modules/public-domain/public-domain.entity'; import { PublicDomainException, PublicDomainExceptionCode, } from 'src/engine/core-modules/public-domain/public-domain.exception'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { DomainValidRecords } from 'src/engine/core-modules/dns-manager/dtos/domain-valid-records'; @Injectable() export class PublicDomainService { constructor( private readonly dnsManagerService: DnsManagerService, - @InjectRepository(PublicDomain) - private readonly publicDomainRepository: Repository, - @InjectRepository(Workspace) - private readonly workspaceRepository: Repository, + @InjectRepository(PublicDomainEntity) + private readonly publicDomainRepository: Repository, + @InjectRepository(WorkspaceEntity) + private readonly workspaceRepository: Repository, ) {} async deletePublicDomain({ @@ -30,7 +30,7 @@ export class PublicDomainService { workspace, }: { domain: string; - workspace: Workspace; + workspace: WorkspaceEntity; }): Promise { const formattedDomain = domain.trim().toLowerCase(); @@ -49,7 +49,7 @@ export class PublicDomainService { workspace, }: { domain: string; - workspace: Workspace; + workspace: WorkspaceEntity; }): Promise { const formattedDomain = domain.trim().toLowerCase(); @@ -93,7 +93,7 @@ export class PublicDomainService { try { await this.publicDomainRepository.insert( - publicDomain as QueryDeepPartialEntity, + publicDomain as QueryDeepPartialEntity, ); } catch (error) { await this.dnsManagerService.deleteHostnameSilently(formattedDomain, { @@ -107,7 +107,7 @@ export class PublicDomainService { } async checkPublicDomainValidRecords( - publicDomain: PublicDomain, + publicDomain: PublicDomainEntity, domainValidRecords?: DomainValidRecords, ): Promise { const publicDomainWithRecords = diff --git a/packages/twenty-server/src/engine/core-modules/search/search.resolver.ts b/packages/twenty-server/src/engine/core-modules/search/search.resolver.ts index d11a00e8c82..399791deef7 100644 --- a/packages/twenty-server/src/engine/core-modules/search/search.resolver.ts +++ b/packages/twenty-server/src/engine/core-modules/search/search.resolver.ts @@ -9,7 +9,7 @@ import { SearchArgs } from 'src/engine/core-modules/search/dtos/search-args'; import { SearchResultConnectionDTO } from 'src/engine/core-modules/search/dtos/search-result-connection.dto'; import { SearchApiExceptionFilter } from 'src/engine/core-modules/search/filters/search-api-exception.filter'; import { SearchService } from 'src/engine/core-modules/search/services/search.service'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { AuthWorkspace } from 'src/engine/decorators/auth/auth-workspace.decorator'; import { WorkspaceAuthGuard } from 'src/engine/guards/workspace-auth.guard'; import { WorkspaceCacheStorageService } from 'src/engine/workspace-cache-storage/workspace-cache-storage.service'; @@ -26,7 +26,7 @@ export class SearchResolver { @Query(() => SearchResultConnectionDTO) @UseGuards(WorkspaceAuthGuard) async search( - @AuthWorkspace() workspace: Workspace, + @AuthWorkspace() workspace: WorkspaceEntity, @Args() { searchInput, diff --git a/packages/twenty-server/src/engine/core-modules/sso/services/sso.service.spec.ts b/packages/twenty-server/src/engine/core-modules/sso/services/sso.service.spec.ts index 541150ee7cc..071919717fe 100644 --- a/packages/twenty-server/src/engine/core-modules/sso/services/sso.service.spec.ts +++ b/packages/twenty-server/src/engine/core-modules/sso/services/sso.service.spec.ts @@ -7,12 +7,12 @@ import { BillingService } from 'src/engine/core-modules/billing/services/billing import { ExceptionHandlerService } from 'src/engine/core-modules/exception-handler/exception-handler.service'; import { SSOService } from 'src/engine/core-modules/sso/services/sso.service'; import { SSOException } from 'src/engine/core-modules/sso/sso.exception'; -import { WorkspaceSSOIdentityProvider } from 'src/engine/core-modules/sso/workspace-sso-identity-provider.entity'; +import { WorkspaceSSOIdentityProviderEntity } from 'src/engine/core-modules/sso/workspace-sso-identity-provider.entity'; import { TwentyConfigService } from 'src/engine/core-modules/twenty-config/twenty-config.service'; describe('SSOService', () => { let service: SSOService; - let repository: Repository; + let repository: Repository; let billingService: BillingService; beforeEach(async () => { @@ -20,7 +20,7 @@ describe('SSOService', () => { providers: [ SSOService, { - provide: getRepositoryToken(WorkspaceSSOIdentityProvider), + provide: getRepositoryToken(WorkspaceSSOIdentityProviderEntity), useClass: Repository, }, { @@ -45,8 +45,8 @@ describe('SSOService', () => { }).compile(); service = module.get(SSOService); - repository = module.get>( - getRepositoryToken(WorkspaceSSOIdentityProvider), + repository = module.get>( + getRepositoryToken(WorkspaceSSOIdentityProviderEntity), ); billingService = module.get(BillingService); }); diff --git a/packages/twenty-server/src/engine/core-modules/sso/services/sso.service.ts b/packages/twenty-server/src/engine/core-modules/sso/services/sso.service.ts index 9609309d2e1..6a743d24146 100644 --- a/packages/twenty-server/src/engine/core-modules/sso/services/sso.service.ts +++ b/packages/twenty-server/src/engine/core-modules/sso/services/sso.service.ts @@ -6,6 +6,11 @@ import { InjectRepository } from '@nestjs/typeorm'; import { Issuer } from 'openid-client'; import { Repository } from 'typeorm'; +import { + WorkspaceSSOIdentityProviderEntity, + IdentityProviderType, + OIDCResponseType, +} from 'src/engine/core-modules/sso/workspace-sso-identity-provider.entity'; import { BillingEntitlementKey } from 'src/engine/core-modules/billing/enums/billing-entitlement-key.enum'; import { BillingService } from 'src/engine/core-modules/billing/services/billing.service'; import { ExceptionHandlerService } from 'src/engine/core-modules/exception-handler/exception-handler.service'; @@ -18,19 +23,14 @@ import { type SAMLConfiguration, type SSOConfiguration, } from 'src/engine/core-modules/sso/types/SSOConfigurations.type'; -import { - IdentityProviderType, - OIDCResponseType, - WorkspaceSSOIdentityProvider, -} from 'src/engine/core-modules/sso/workspace-sso-identity-provider.entity'; import { TwentyConfigService } from 'src/engine/core-modules/twenty-config/twenty-config.service'; @Injectable() export class SSOService { private readonly featureLookUpKey = BillingEntitlementKey.SSO; constructor( - @InjectRepository(WorkspaceSSOIdentityProvider) - private readonly workspaceSSOIdentityProviderRepository: Repository, + @InjectRepository(WorkspaceSSOIdentityProviderEntity) + private readonly workspaceSSOIdentityProviderRepository: Repository, private readonly twentyConfigService: TwentyConfigService, private readonly billingService: BillingService, private readonly exceptionHandlerService: ExceptionHandlerService, @@ -63,7 +63,7 @@ export class SSOService { async createOIDCIdentityProvider( data: Pick< - WorkspaceSSOIdentityProvider, + WorkspaceSSOIdentityProviderEntity, 'issuer' | 'clientID' | 'clientSecret' | 'name' >, workspaceId: string, @@ -106,7 +106,7 @@ export class SSOService { async createSAMLIdentityProvider( data: Pick< - WorkspaceSSOIdentityProvider, + WorkspaceSSOIdentityProviderEntity, 'ssoURL' | 'certificate' | 'fingerprint' | 'id' >, workspaceId: string, @@ -133,11 +133,11 @@ export class SSOService { return (await this.workspaceSSOIdentityProviderRepository.findOne({ where: { id: identityProviderId }, relations: { workspace: true }, - })) as (SSOConfiguration & WorkspaceSSOIdentityProvider) | null; + })) as (SSOConfiguration & WorkspaceSSOIdentityProviderEntity) | null; } buildCallbackUrl( - identityProvider: Pick, + identityProvider: Pick, ) { const callbackURL = new URL(this.twentyConfigService.get('SERVER_URL')); @@ -151,7 +151,7 @@ export class SSOService { } buildIssuerURL( - identityProvider: Pick, + identityProvider: Pick, searchParams?: Record, ) { const authorizationUrl = new URL( @@ -170,19 +170,21 @@ export class SSOService { } private isOIDCIdentityProvider( - identityProvider: WorkspaceSSOIdentityProvider, - ): identityProvider is OIDCConfiguration & WorkspaceSSOIdentityProvider { + identityProvider: WorkspaceSSOIdentityProviderEntity, + ): identityProvider is OIDCConfiguration & + WorkspaceSSOIdentityProviderEntity { return identityProvider.type === IdentityProviderType.OIDC; } isSAMLIdentityProvider( - identityProvider: WorkspaceSSOIdentityProvider, - ): identityProvider is SAMLConfiguration & WorkspaceSSOIdentityProvider { + identityProvider: WorkspaceSSOIdentityProviderEntity, + ): identityProvider is SAMLConfiguration & + WorkspaceSSOIdentityProviderEntity { return identityProvider.type === IdentityProviderType.SAML; } getOIDCClient( - identityProvider: WorkspaceSSOIdentityProvider, + identityProvider: WorkspaceSSOIdentityProviderEntity, issuer: Issuer, ) { if (!this.isOIDCIdentityProvider(identityProvider)) { @@ -209,7 +211,7 @@ export class SSOService { where: { id: identityProviderId, }, - })) as WorkspaceSSOIdentityProvider & SSOConfiguration; + })) as WorkspaceSSOIdentityProviderEntity & SSOConfiguration; if (!identityProvider) { throw new SSOException( @@ -231,7 +233,7 @@ export class SSOService { select: ['id', 'name', 'type', 'issuer', 'status'], })) as Array< Pick< - WorkspaceSSOIdentityProvider, + WorkspaceSSOIdentityProviderEntity, 'id' | 'name' | 'type' | 'issuer' | 'status' > >; @@ -264,7 +266,7 @@ export class SSOService { } async editSSOIdentityProvider( - payload: Partial, + payload: Partial, workspaceId: string, ) { const ssoIdp = await this.workspaceSSOIdentityProviderRepository.findOne({ diff --git a/packages/twenty-server/src/engine/core-modules/sso/sso.module.ts b/packages/twenty-server/src/engine/core-modules/sso/sso.module.ts index fde38f7b111..fda73a25497 100644 --- a/packages/twenty-server/src/engine/core-modules/sso/sso.module.ts +++ b/packages/twenty-server/src/engine/core-modules/sso/sso.module.ts @@ -4,23 +4,23 @@ import { Module } from '@nestjs/common'; import { NestjsQueryTypeOrmModule } from '@ptc-org/nestjs-query-typeorm'; -import { AppToken } from 'src/engine/core-modules/app-token/app-token.entity'; +import { AppTokenEntity } from 'src/engine/core-modules/app-token/app-token.entity'; import { BillingModule } from 'src/engine/core-modules/billing/billing.module'; -import { FeatureFlag } from 'src/engine/core-modules/feature-flag/feature-flag.entity'; +import { FeatureFlagEntity } from 'src/engine/core-modules/feature-flag/feature-flag.entity'; import { FeatureFlagModule } from 'src/engine/core-modules/feature-flag/feature-flag.module'; import { GuardRedirectModule } from 'src/engine/core-modules/guard-redirect/guard-redirect.module'; import { SSOService } from 'src/engine/core-modules/sso/services/sso.service'; import { SSOResolver } from 'src/engine/core-modules/sso/sso.resolver'; -import { WorkspaceSSOIdentityProvider } from 'src/engine/core-modules/sso/workspace-sso-identity-provider.entity'; -import { User } from 'src/engine/core-modules/user/user.entity'; +import { WorkspaceSSOIdentityProviderEntity } from 'src/engine/core-modules/sso/workspace-sso-identity-provider.entity'; +import { UserEntity } from 'src/engine/core-modules/user/user.entity'; import { PermissionsModule } from 'src/engine/metadata-modules/permissions/permissions.module'; @Module({ imports: [ NestjsQueryTypeOrmModule.forFeature([ - WorkspaceSSOIdentityProvider, - User, - AppToken, - FeatureFlag, + WorkspaceSSOIdentityProviderEntity, + UserEntity, + AppTokenEntity, + FeatureFlagEntity, ]), BillingModule, GuardRedirectModule, diff --git a/packages/twenty-server/src/engine/core-modules/sso/sso.resolver.ts b/packages/twenty-server/src/engine/core-modules/sso/sso.resolver.ts index d89aa293e13..1ecb4223a6d 100644 --- a/packages/twenty-server/src/engine/core-modules/sso/sso.resolver.ts +++ b/packages/twenty-server/src/engine/core-modules/sso/sso.resolver.ts @@ -18,7 +18,7 @@ import { import { SetupSsoOutput } from 'src/engine/core-modules/sso/dtos/setup-sso.output'; import { SSOService } from 'src/engine/core-modules/sso/services/sso.service'; import { type SSOException } from 'src/engine/core-modules/sso/sso.exception'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { AuthWorkspace } from 'src/engine/decorators/auth/auth-workspace.decorator'; import { SettingsPermissionsGuard } from 'src/engine/guards/settings-permissions.guard'; import { WorkspaceAuthGuard } from 'src/engine/guards/workspace-auth.guard'; @@ -39,7 +39,7 @@ export class SSOResolver { @Mutation(() => SetupSsoOutput) async createOIDCIdentityProvider( @Args('input') setupSsoInput: SetupOIDCSsoInput, - @AuthWorkspace() { id: workspaceId }: Workspace, + @AuthWorkspace() { id: workspaceId }: WorkspaceEntity, ): Promise { return this.sSOService.createOIDCIdentityProvider( setupSsoInput, @@ -50,7 +50,7 @@ export class SSOResolver { @UseGuards(WorkspaceAuthGuard, EnterpriseFeaturesEnabledGuard) @Query(() => [FindAvailableSSOIDPOutput]) async getSSOIdentityProviders( - @AuthWorkspace() { id: workspaceId }: Workspace, + @AuthWorkspace() { id: workspaceId }: WorkspaceEntity, ) { return this.sSOService.getSSOIdentityProviders(workspaceId); } @@ -59,7 +59,7 @@ export class SSOResolver { @Mutation(() => SetupSsoOutput) async createSAMLIdentityProvider( @Args('input') setupSsoInput: SetupSAMLSsoInput, - @AuthWorkspace() { id: workspaceId }: Workspace, + @AuthWorkspace() { id: workspaceId }: WorkspaceEntity, ): Promise { return this.sSOService.createSAMLIdentityProvider( setupSsoInput, @@ -71,7 +71,7 @@ export class SSOResolver { @Mutation(() => DeleteSsoOutput) async deleteSSOIdentityProvider( @Args('input') { identityProviderId }: DeleteSsoInput, - @AuthWorkspace() { id: workspaceId }: Workspace, + @AuthWorkspace() { id: workspaceId }: WorkspaceEntity, ) { return this.sSOService.deleteSSOIdentityProvider( identityProviderId, @@ -83,7 +83,7 @@ export class SSOResolver { @Mutation(() => EditSsoOutput) async editSSOIdentityProvider( @Args('input') input: EditSsoInput, - @AuthWorkspace() { id: workspaceId }: Workspace, + @AuthWorkspace() { id: workspaceId }: WorkspaceEntity, ) { return this.sSOService.editSSOIdentityProvider(input, workspaceId); } diff --git a/packages/twenty-server/src/engine/core-modules/sso/workspace-sso-identity-provider.entity.ts b/packages/twenty-server/src/engine/core-modules/sso/workspace-sso-identity-provider.entity.ts index 164a8f3d846..06cbe7b9a97 100644 --- a/packages/twenty-server/src/engine/core-modules/sso/workspace-sso-identity-provider.entity.ts +++ b/packages/twenty-server/src/engine/core-modules/sso/workspace-sso-identity-provider.entity.ts @@ -15,7 +15,7 @@ import { } from 'typeorm'; import { UUIDScalarType } from 'src/engine/api/graphql/workspace-schema-builder/graphql-types/scalars'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; export enum IdentityProviderType { OIDC = 'OIDC', @@ -45,8 +45,8 @@ registerEnumType(SSOIdentityProviderStatus, { }); @Entity({ name: 'workspaceSSOIdentityProvider', schema: 'core' }) -@ObjectType() -export class WorkspaceSSOIdentityProvider { +@ObjectType('WorkspaceSSOIdentityProvider') +export class WorkspaceSSOIdentityProviderEntity { // COMMON @IDField(() => UUIDScalarType) @PrimaryGeneratedColumn('uuid') @@ -63,14 +63,14 @@ export class WorkspaceSSOIdentityProvider { status: SSOIdentityProviderStatus; @ManyToOne( - () => Workspace, + () => WorkspaceEntity, (workspace) => workspace.workspaceSSOIdentityProviders, { onDelete: 'CASCADE', }, ) @JoinColumn({ name: 'workspaceId' }) - workspace: Relation; + workspace: Relation; @Column() workspaceId: string; diff --git a/packages/twenty-server/src/engine/core-modules/twenty-config/drivers/database-config.module.ts b/packages/twenty-server/src/engine/core-modules/twenty-config/drivers/database-config.module.ts index 26e83c6b2aa..4ae46395404 100644 --- a/packages/twenty-server/src/engine/core-modules/twenty-config/drivers/database-config.module.ts +++ b/packages/twenty-server/src/engine/core-modules/twenty-config/drivers/database-config.module.ts @@ -2,7 +2,7 @@ import { type DynamicModule, Module } from '@nestjs/common'; import { ScheduleModule } from '@nestjs/schedule'; import { TypeOrmModule } from '@nestjs/typeorm'; -import { KeyValuePair } from 'src/engine/core-modules/key-value-pair/key-value-pair.entity'; +import { KeyValuePairEntity } from 'src/engine/core-modules/key-value-pair/key-value-pair.entity'; import { ConfigCacheService } from 'src/engine/core-modules/twenty-config/cache/config-cache.service'; import { ConfigVariables } from 'src/engine/core-modules/twenty-config/config-variables'; import { CONFIG_VARIABLES_INSTANCE_TOKEN } from 'src/engine/core-modules/twenty-config/constants/config-variables-instance-tokens.constants'; @@ -17,7 +17,7 @@ export class DatabaseConfigModule { return { module: DatabaseConfigModule, imports: [ - TypeOrmModule.forFeature([KeyValuePair]), + TypeOrmModule.forFeature([KeyValuePairEntity]), ScheduleModule.forRoot(), ], providers: [ diff --git a/packages/twenty-server/src/engine/core-modules/twenty-config/storage/__tests__/config-storage.service.spec.ts b/packages/twenty-server/src/engine/core-modules/twenty-config/storage/__tests__/config-storage.service.spec.ts index 1456d1c9cbb..34d48b02178 100644 --- a/packages/twenty-server/src/engine/core-modules/twenty-config/storage/__tests__/config-storage.service.spec.ts +++ b/packages/twenty-server/src/engine/core-modules/twenty-config/storage/__tests__/config-storage.service.spec.ts @@ -5,7 +5,7 @@ import { type DeleteResult, IsNull, type Repository } from 'typeorm'; import * as authUtils from 'src/engine/core-modules/auth/auth.util'; import { - KeyValuePair, + KeyValuePairEntity, KeyValuePairType, } from 'src/engine/core-modules/key-value-pair/key-value-pair.entity'; import { ConfigVariables } from 'src/engine/core-modules/twenty-config/config-variables'; @@ -18,8 +18,8 @@ import { ConfigVariableException, ConfigVariableExceptionCode, } from 'src/engine/core-modules/twenty-config/twenty-config.exception'; -import { type User } from 'src/engine/core-modules/user/user.entity'; -import { type Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { type UserEntity } from 'src/engine/core-modules/user/user.entity'; +import { type WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { TypedReflect } from 'src/utils/typed-reflect'; jest.mock('src/engine/core-modules/auth/auth.util', () => ({ @@ -29,22 +29,22 @@ jest.mock('src/engine/core-modules/auth/auth.util', () => ({ describe('ConfigStorageService', () => { let service: ConfigStorageService; - let keyValuePairRepository: Repository; + let keyValuePairRepository: Repository; let configValueConverter: ConfigValueConverterService; let environmentConfigDriver: EnvironmentConfigDriver; const createMockKeyValuePair = ( key: string, value: string, - ): KeyValuePair => ({ + ): KeyValuePairEntity => ({ id: '1', key, value: value as unknown as JSON, type: KeyValuePairType.CONFIG_VARIABLE, userId: null, workspaceId: null, - user: null as unknown as User, - workspace: null as unknown as Workspace, + user: null as unknown as UserEntity, + workspace: null as unknown as WorkspaceEntity, createdAt: new Date(), updatedAt: new Date(), textValueDeprecated: null, @@ -70,7 +70,7 @@ describe('ConfigStorageService', () => { }, ConfigVariables, { - provide: getRepositoryToken(KeyValuePair), + provide: getRepositoryToken(KeyValuePairEntity), useValue: { findOne: jest.fn(), find: jest.fn(), @@ -83,8 +83,8 @@ describe('ConfigStorageService', () => { }).compile(); service = module.get(ConfigStorageService); - keyValuePairRepository = module.get>( - getRepositoryToken(KeyValuePair), + keyValuePairRepository = module.get>( + getRepositoryToken(KeyValuePairEntity), ); configValueConverter = module.get( ConfigValueConverterService, @@ -509,7 +509,7 @@ describe('ConfigStorageService', () => { describe('loadAll', () => { it('should load and convert all config variables', async () => { - const configVars: KeyValuePair[] = [ + const configVars: KeyValuePairEntity[] = [ createMockKeyValuePair('AUTH_PASSWORD_ENABLED', 'true'), createMockKeyValuePair('EMAIL_FROM_ADDRESS', 'test@example.com'), ]; @@ -537,7 +537,7 @@ describe('ConfigStorageService', () => { }); it('should skip invalid values but continue processing', async () => { - const configVars: KeyValuePair[] = [ + const configVars: KeyValuePairEntity[] = [ createMockKeyValuePair('AUTH_PASSWORD_ENABLED', 'invalid'), createMockKeyValuePair('EMAIL_FROM_ADDRESS', 'test@example.com'), ]; @@ -574,7 +574,7 @@ describe('ConfigStorageService', () => { describe('Null Value Handling', () => { it('should handle null values in loadAll', async () => { - const configVars: KeyValuePair[] = [ + const configVars: KeyValuePairEntity[] = [ { ...createMockKeyValuePair('AUTH_PASSWORD_ENABLED', 'true'), value: null as unknown as JSON, @@ -607,7 +607,7 @@ describe('ConfigStorageService', () => { }); it('should decrypt sensitive string values in loadAll', async () => { - const configVars: KeyValuePair[] = [ + const configVars: KeyValuePairEntity[] = [ createMockKeyValuePair('SENSITIVE_CONFIG', 'encrypted:sensitive-value'), createMockKeyValuePair('NORMAL_CONFIG', 'normal-value'), ]; diff --git a/packages/twenty-server/src/engine/core-modules/twenty-config/storage/config-storage.service.ts b/packages/twenty-server/src/engine/core-modules/twenty-config/storage/config-storage.service.ts index ee05bdc5677..1b04b798ba3 100644 --- a/packages/twenty-server/src/engine/core-modules/twenty-config/storage/config-storage.service.ts +++ b/packages/twenty-server/src/engine/core-modules/twenty-config/storage/config-storage.service.ts @@ -8,8 +8,8 @@ import { encryptText, } from 'src/engine/core-modules/auth/auth.util'; import { - KeyValuePair, KeyValuePairType, + KeyValuePairEntity, } from 'src/engine/core-modules/key-value-pair/key-value-pair.entity'; import { ConfigVariables } from 'src/engine/core-modules/twenty-config/config-variables'; import { ConfigValueConverterService } from 'src/engine/core-modules/twenty-config/conversion/config-value-converter.service'; @@ -28,15 +28,15 @@ export class ConfigStorageService implements ConfigStorageInterface { private readonly logger = new Logger(ConfigStorageService.name); constructor( - @InjectRepository(KeyValuePair) - private readonly keyValuePairRepository: Repository, + @InjectRepository(KeyValuePairEntity) + private readonly keyValuePairRepository: Repository, private readonly configValueConverter: ConfigValueConverterService, private readonly environmentConfigDriver: EnvironmentConfigDriver, ) {} private getConfigVariableWhereClause( key?: string, - ): FindOptionsWhere { + ): FindOptionsWhere { return { type: KeyValuePairType.CONFIG_VARIABLE, ...(key ? { key } : {}), diff --git a/packages/twenty-server/src/engine/core-modules/two-factor-authentication/entities/two-factor-authentication-method.entity.ts b/packages/twenty-server/src/engine/core-modules/two-factor-authentication/entities/two-factor-authentication-method.entity.ts index e657a2b13da..a9b8db67e27 100644 --- a/packages/twenty-server/src/engine/core-modules/two-factor-authentication/entities/two-factor-authentication-method.entity.ts +++ b/packages/twenty-server/src/engine/core-modules/two-factor-authentication/entities/two-factor-authentication-method.entity.ts @@ -14,12 +14,12 @@ import { } from 'typeorm'; import { OTPStatus } from 'src/engine/core-modules/two-factor-authentication/strategies/otp/otp.constants'; -import { UserWorkspace } from 'src/engine/core-modules/user-workspace/user-workspace.entity'; +import { UserWorkspaceEntity } from 'src/engine/core-modules/user-workspace/user-workspace.entity'; @Index(['userWorkspaceId', 'strategy'], { unique: true }) @Entity({ name: 'twoFactorAuthenticationMethod', schema: 'core' }) -@ObjectType() -export class TwoFactorAuthenticationMethod { +@ObjectType('TwoFactorAuthenticationMethod') +export class TwoFactorAuthenticationMethodEntity { @Field() @PrimaryGeneratedColumn('uuid') id: string; @@ -28,16 +28,16 @@ export class TwoFactorAuthenticationMethod { @Column({ nullable: false, type: 'uuid' }) userWorkspaceId: string; - @Field(() => UserWorkspace) + @Field(() => UserWorkspaceEntity) @ManyToOne( - () => UserWorkspace, + () => UserWorkspaceEntity, (userWorkspace) => userWorkspace.twoFactorAuthenticationMethods, { onDelete: 'CASCADE', }, ) @JoinColumn({ name: 'userWorkspaceId' }) - userWorkspace: Relation; + userWorkspace: Relation; @Column({ nullable: false, type: 'text' }) secret: string; diff --git a/packages/twenty-server/src/engine/core-modules/two-factor-authentication/two-factor-authentication.module.ts b/packages/twenty-server/src/engine/core-modules/two-factor-authentication/two-factor-authentication.module.ts index 1f88abc9986..020781ffb27 100644 --- a/packages/twenty-server/src/engine/core-modules/two-factor-authentication/two-factor-authentication.module.ts +++ b/packages/twenty-server/src/engine/core-modules/two-factor-authentication/two-factor-authentication.module.ts @@ -5,15 +5,15 @@ import { TokenModule } from 'src/engine/core-modules/auth/token/token.module'; import { WorkspaceDomainsModule } from 'src/engine/core-modules/domain/workspace-domains/workspace-domains.module'; import { JwtModule } from 'src/engine/core-modules/jwt/jwt.module'; import { MetricsModule } from 'src/engine/core-modules/metrics/metrics.module'; -import { UserWorkspace } from 'src/engine/core-modules/user-workspace/user-workspace.entity'; +import { UserWorkspaceEntity } from 'src/engine/core-modules/user-workspace/user-workspace.entity'; import { UserWorkspaceModule } from 'src/engine/core-modules/user-workspace/user-workspace.module'; -import { User } from 'src/engine/core-modules/user/user.entity'; +import { UserEntity } from 'src/engine/core-modules/user/user.entity'; import { UserModule } from 'src/engine/core-modules/user/user.module'; import { TwoFactorAuthenticationResolver } from './two-factor-authentication.resolver'; import { TwoFactorAuthenticationService } from './two-factor-authentication.service'; -import { TwoFactorAuthenticationMethod } from './entities/two-factor-authentication-method.entity'; +import { TwoFactorAuthenticationMethodEntity } from './entities/two-factor-authentication-method.entity'; import { SimpleSecretEncryptionUtil } from './utils/simple-secret-encryption.util'; @Module({ @@ -24,9 +24,9 @@ import { SimpleSecretEncryptionUtil } from './utils/simple-secret-encryption.uti TokenModule, JwtModule, TypeOrmModule.forFeature([ - User, - TwoFactorAuthenticationMethod, - UserWorkspace, + UserEntity, + TwoFactorAuthenticationMethodEntity, + UserWorkspaceEntity, ]), UserModule, ], diff --git a/packages/twenty-server/src/engine/core-modules/two-factor-authentication/two-factor-authentication.resolver.spec.ts b/packages/twenty-server/src/engine/core-modules/two-factor-authentication/two-factor-authentication.resolver.spec.ts index 85b2a20dc58..dfa201432cc 100644 --- a/packages/twenty-server/src/engine/core-modules/two-factor-authentication/two-factor-authentication.resolver.spec.ts +++ b/packages/twenty-server/src/engine/core-modules/two-factor-authentication/two-factor-authentication.resolver.spec.ts @@ -8,8 +8,8 @@ import { import { LoginTokenService } from 'src/engine/core-modules/auth/token/services/login-token.service'; import { WorkspaceDomainsService } from 'src/engine/core-modules/domain/workspace-domains/services/workspace-domains.service'; import { UserService } from 'src/engine/core-modules/user/services/user.service'; -import { type User } from 'src/engine/core-modules/user/user.entity'; -import { type Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { type UserEntity } from 'src/engine/core-modules/user/user.entity'; +import { type WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { TwoFactorAuthenticationResolver } from './two-factor-authentication.resolver'; import { TwoFactorAuthenticationService } from './two-factor-authentication.service'; @@ -17,7 +17,7 @@ import { TwoFactorAuthenticationService } from './two-factor-authentication.serv import { type DeleteTwoFactorAuthenticationMethodInput } from './dto/delete-two-factor-authentication-method.input'; import { type InitiateTwoFactorAuthenticationProvisioningInput } from './dto/initiate-two-factor-authentication-provisioning.input'; import { type VerifyTwoFactorAuthenticationMethodInput } from './dto/verify-two-factor-authentication-method.input'; -import { TwoFactorAuthenticationMethod } from './entities/two-factor-authentication-method.entity'; +import { TwoFactorAuthenticationMethodEntity } from './entities/two-factor-authentication-method.entity'; const createMockRepository = () => ({ findOne: jest.fn(), @@ -53,23 +53,23 @@ describe('TwoFactorAuthenticationResolver', () => { >; let repository: ReturnType; - const mockUser: User = { + const mockUser: UserEntity = { id: 'user-123', email: 'test@example.com', - } as User; + } as UserEntity; - const mockWorkspace: Workspace = { + const mockWorkspace: WorkspaceEntity = { id: 'workspace-123', displayName: 'Test Workspace', - } as Workspace; + } as WorkspaceEntity; - const mockTwoFactorMethod: TwoFactorAuthenticationMethod = { + const mockTwoFactorMethod: TwoFactorAuthenticationMethodEntity = { id: '2fa-method-123', userWorkspace: { userId: 'user-123', workspaceId: 'workspace-123', }, - } as TwoFactorAuthenticationMethod; + } as TwoFactorAuthenticationMethodEntity; beforeEach(async () => { const module: TestingModule = await Test.createTestingModule({ @@ -92,7 +92,7 @@ describe('TwoFactorAuthenticationResolver', () => { useFactory: createMockWorkspaceDomainsService, }, { - provide: getRepositoryToken(TwoFactorAuthenticationMethod), + provide: getRepositoryToken(TwoFactorAuthenticationMethodEntity), useFactory: createMockRepository, }, ], @@ -105,7 +105,9 @@ describe('TwoFactorAuthenticationResolver', () => { loginTokenService = module.get(LoginTokenService); userService = module.get(UserService); workspaceDomainsService = module.get(WorkspaceDomainsService); - repository = module.get(getRepositoryToken(TwoFactorAuthenticationMethod)); + repository = module.get( + getRepositoryToken(TwoFactorAuthenticationMethodEntity), + ); }); afterEach(() => { diff --git a/packages/twenty-server/src/engine/core-modules/two-factor-authentication/two-factor-authentication.resolver.ts b/packages/twenty-server/src/engine/core-modules/two-factor-authentication/two-factor-authentication.resolver.ts index c0485c3fbec..2e8e133caef 100644 --- a/packages/twenty-server/src/engine/core-modules/two-factor-authentication/two-factor-authentication.resolver.ts +++ b/packages/twenty-server/src/engine/core-modules/two-factor-authentication/two-factor-authentication.resolver.ts @@ -13,8 +13,8 @@ import { AuthGraphqlApiExceptionFilter } from 'src/engine/core-modules/auth/filt import { LoginTokenService } from 'src/engine/core-modules/auth/token/services/login-token.service'; import { WorkspaceDomainsService } from 'src/engine/core-modules/domain/workspace-domains/services/workspace-domains.service'; import { UserService } from 'src/engine/core-modules/user/services/user.service'; -import { User } from 'src/engine/core-modules/user/user.entity'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { UserEntity } from 'src/engine/core-modules/user/user.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { AuthUser } from 'src/engine/decorators/auth/auth-user.decorator'; import { AuthWorkspace } from 'src/engine/decorators/auth/auth-workspace.decorator'; import { PublicEndpointGuard } from 'src/engine/guards/public-endpoint.guard'; @@ -30,7 +30,7 @@ import { InitiateTwoFactorAuthenticationProvisioningInput } from './dto/initiate import { InitiateTwoFactorAuthenticationProvisioningOutput } from './dto/initiate-two-factor-authentication-provisioning.output'; import { VerifyTwoFactorAuthenticationMethodInput } from './dto/verify-two-factor-authentication-method.input'; import { VerifyTwoFactorAuthenticationMethodOutput } from './dto/verify-two-factor-authentication-method.output'; -import { TwoFactorAuthenticationMethod } from './entities/two-factor-authentication-method.entity'; +import { TwoFactorAuthenticationMethodEntity } from './entities/two-factor-authentication-method.entity'; @Resolver() @UseFilters(AuthGraphqlApiExceptionFilter, PermissionsGraphqlApiExceptionFilter) @@ -40,8 +40,8 @@ export class TwoFactorAuthenticationResolver { private readonly loginTokenService: LoginTokenService, private readonly userService: UserService, private readonly workspaceDomainsService: WorkspaceDomainsService, - @InjectRepository(TwoFactorAuthenticationMethod) - private readonly twoFactorAuthenticationMethodRepository: Repository, + @InjectRepository(TwoFactorAuthenticationMethodEntity) + private readonly twoFactorAuthenticationMethodRepository: Repository, ) {} @Mutation(() => InitiateTwoFactorAuthenticationProvisioningOutput) @@ -99,8 +99,8 @@ export class TwoFactorAuthenticationResolver { @Mutation(() => InitiateTwoFactorAuthenticationProvisioningOutput) @UseGuards(UserAuthGuard) async initiateOTPProvisioningForAuthenticatedUser( - @AuthUser() user: User, - @AuthWorkspace() workspace: Workspace, + @AuthUser() user: UserEntity, + @AuthWorkspace() workspace: WorkspaceEntity, ): Promise { const uri = await this.twoFactorAuthenticationService.initiateStrategyConfiguration( @@ -125,8 +125,8 @@ export class TwoFactorAuthenticationResolver { async deleteTwoFactorAuthenticationMethod( @Args() deleteTwoFactorAuthenticationMethodInput: DeleteTwoFactorAuthenticationMethodInput, - @AuthWorkspace() workspace: Workspace, - @AuthUser() user: User, + @AuthWorkspace() workspace: WorkspaceEntity, + @AuthUser() user: UserEntity, ): Promise { const twoFactorMethod = await this.twoFactorAuthenticationMethodRepository.findOne({ @@ -165,8 +165,8 @@ export class TwoFactorAuthenticationResolver { async verifyTwoFactorAuthenticationMethodForAuthenticatedUser( @Args() verifyTwoFactorAuthenticationMethodInput: VerifyTwoFactorAuthenticationMethodInput, - @AuthWorkspace() workspace: Workspace, - @AuthUser() user: User, + @AuthWorkspace() workspace: WorkspaceEntity, + @AuthUser() user: UserEntity, ): Promise { return await this.twoFactorAuthenticationService.verifyTwoFactorAuthenticationMethodForAuthenticatedUser( user.id, diff --git a/packages/twenty-server/src/engine/core-modules/two-factor-authentication/two-factor-authentication.service.spec.ts b/packages/twenty-server/src/engine/core-modules/two-factor-authentication/two-factor-authentication.service.spec.ts index 09bf0033581..df37d4aa4b5 100644 --- a/packages/twenty-server/src/engine/core-modules/two-factor-authentication/two-factor-authentication.service.spec.ts +++ b/packages/twenty-server/src/engine/core-modules/two-factor-authentication/two-factor-authentication.service.spec.ts @@ -9,7 +9,7 @@ import { } from 'src/engine/core-modules/auth/auth.exception'; import { SimpleSecretEncryptionUtil } from 'src/engine/core-modules/two-factor-authentication/utils/simple-secret-encryption.util'; import { UserWorkspaceService } from 'src/engine/core-modules/user-workspace/user-workspace.service'; -import { type Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { type WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { TwoFactorAuthenticationException, @@ -17,7 +17,7 @@ import { } from './two-factor-authentication.exception'; import { TwoFactorAuthenticationService } from './two-factor-authentication.service'; -import { TwoFactorAuthenticationMethod } from './entities/two-factor-authentication-method.entity'; +import { TwoFactorAuthenticationMethodEntity } from './entities/two-factor-authentication-method.entity'; import { OTPStatus } from './strategies/otp/otp.constants'; const totpStrategyMocks = { @@ -74,7 +74,7 @@ describe('TwoFactorAuthenticationService', () => { providers: [ TwoFactorAuthenticationService, { - provide: getRepositoryToken(TwoFactorAuthenticationMethod), + provide: getRepositoryToken(TwoFactorAuthenticationMethodEntity), useValue: { findOne: jest.fn(), save: jest.fn(), @@ -99,7 +99,9 @@ describe('TwoFactorAuthenticationService', () => { service = module.get( TwoFactorAuthenticationService, ); - repository = module.get(getRepositoryToken(TwoFactorAuthenticationMethod)); + repository = module.get( + getRepositoryToken(TwoFactorAuthenticationMethodEntity), + ); userWorkspaceService = module.get(UserWorkspaceService); simpleSecretEncryptionUtil = module.get( @@ -117,7 +119,7 @@ describe('TwoFactorAuthenticationService', () => { it('should do nothing if workspace does not enforce 2FA', async () => { const mockWorkspace = { isTwoFactorAuthenticationEnforced: false, - } as unknown as Workspace; + } as unknown as WorkspaceEntity; await expect( service.validateTwoFactorAuthenticationRequirement(mockWorkspace), @@ -127,7 +129,7 @@ describe('TwoFactorAuthenticationService', () => { it('should throw PROVISION_REQUIRED if 2FA is required but not set up', async () => { const mockWorkspace = { isTwoFactorAuthenticationEnforced: true, - } as unknown as Workspace; + } as unknown as WorkspaceEntity; const expectedError = new AuthException( 'Two factor authentication setup required', AuthExceptionCode.TWO_FACTOR_AUTHENTICATION_PROVISION_REQUIRED, @@ -139,12 +141,12 @@ describe('TwoFactorAuthenticationService', () => { }); it('should throw VERIFICATION_REQUIRED if 2FA is set up', async () => { - const mockWorkspace = {} as Workspace; + const mockWorkspace = {} as WorkspaceEntity; const mockProvider = [ { status: 'VERIFIED', }, - ] as TwoFactorAuthenticationMethod[]; + ] as TwoFactorAuthenticationMethodEntity[]; const expectedError = new AuthException( 'Two factor authentication verification required', AuthExceptionCode.TWO_FACTOR_AUTHENTICATION_VERIFICATION_REQUIRED, diff --git a/packages/twenty-server/src/engine/core-modules/two-factor-authentication/two-factor-authentication.service.ts b/packages/twenty-server/src/engine/core-modules/two-factor-authentication/two-factor-authentication.service.ts index 75e34e895e8..df5eca2fc8c 100644 --- a/packages/twenty-server/src/engine/core-modules/two-factor-authentication/two-factor-authentication.service.ts +++ b/packages/twenty-server/src/engine/core-modules/two-factor-authentication/two-factor-authentication.service.ts @@ -10,13 +10,13 @@ import { AuthException, AuthExceptionCode, } from 'src/engine/core-modules/auth/auth.exception'; -import { TwoFactorAuthenticationMethod } from 'src/engine/core-modules/two-factor-authentication/entities/two-factor-authentication-method.entity'; +import { UserEntity } from 'src/engine/core-modules/user/user.entity'; +import { TwoFactorAuthenticationMethodEntity } from 'src/engine/core-modules/two-factor-authentication/entities/two-factor-authentication-method.entity'; import { TOTP_DEFAULT_CONFIGURATION } from 'src/engine/core-modules/two-factor-authentication/strategies/otp/totp/constants/totp.strategy.constants'; import { TotpStrategy } from 'src/engine/core-modules/two-factor-authentication/strategies/otp/totp/totp.strategy'; import { SimpleSecretEncryptionUtil } from 'src/engine/core-modules/two-factor-authentication/utils/simple-secret-encryption.util'; import { UserWorkspaceService } from 'src/engine/core-modules/user-workspace/user-workspace.service'; -import { type User } from 'src/engine/core-modules/user/user.entity'; -import { type Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { TwoFactorAuthenticationException, @@ -32,8 +32,8 @@ const PENDING_METHOD_REUSE_WINDOW_MS = 60 * 60 * 1000; // eslint-disable-next-line @nx/workspace-inject-workspace-repository export class TwoFactorAuthenticationService { constructor( - @InjectRepository(TwoFactorAuthenticationMethod) - private readonly twoFactorAuthenticationMethodRepository: Repository, + @InjectRepository(TwoFactorAuthenticationMethodEntity) + private readonly twoFactorAuthenticationMethodRepository: Repository, private readonly userWorkspaceService: UserWorkspaceService, private readonly simpleSecretEncryptionUtil: SimpleSecretEncryptionUtil, ) {} @@ -57,8 +57,8 @@ export class TwoFactorAuthenticationService { * @param userTwoFactorAuthenticationMethods - Optional array of user's 2FA methods */ async validateTwoFactorAuthenticationRequirement( - targetWorkspace: Workspace, - userTwoFactorAuthenticationMethods?: TwoFactorAuthenticationMethod[], + targetWorkspace: WorkspaceEntity, + userTwoFactorAuthenticationMethods?: TwoFactorAuthenticationMethodEntity[], ) { if ( twoFactorAuthenticationMethodsValidator.areDefined( @@ -150,9 +150,9 @@ export class TwoFactorAuthenticationService { } async validateStrategy( - userId: User['id'], + userId: UserEntity['id'], token: string, - workspaceId: Workspace['id'], + workspaceId: WorkspaceEntity['id'], twoFactorAuthenticationStrategy: TwoFactorAuthenticationStrategy, ) { const userTwoFactorAuthenticationMethod = @@ -208,9 +208,9 @@ export class TwoFactorAuthenticationService { } async verifyTwoFactorAuthenticationMethodForAuthenticatedUser( - userId: User['id'], + userId: UserEntity['id'], token: string, - workspaceId: Workspace['id'], + workspaceId: WorkspaceEntity['id'], ) { await this.validateStrategy( userId, diff --git a/packages/twenty-server/src/engine/core-modules/two-factor-authentication/two-factor-authentication.validation.spec.ts b/packages/twenty-server/src/engine/core-modules/two-factor-authentication/two-factor-authentication.validation.spec.ts index d057e7a9740..3695aac37c6 100644 --- a/packages/twenty-server/src/engine/core-modules/two-factor-authentication/two-factor-authentication.validation.spec.ts +++ b/packages/twenty-server/src/engine/core-modules/two-factor-authentication/two-factor-authentication.validation.spec.ts @@ -4,13 +4,13 @@ import { } from './two-factor-authentication.exception'; import { twoFactorAuthenticationMethodsValidator } from './two-factor-authentication.validation'; -import { type TwoFactorAuthenticationMethod } from './entities/two-factor-authentication-method.entity'; +import { type TwoFactorAuthenticationMethodEntity } from './entities/two-factor-authentication-method.entity'; import { OTPStatus } from './strategies/otp/otp.constants'; describe('twoFactorAuthenticationMethodsValidator', () => { const createMockMethod = ( status: OTPStatus = OTPStatus.VERIFIED, - ): TwoFactorAuthenticationMethod => + ): TwoFactorAuthenticationMethodEntity => ({ id: 'method-123', status, @@ -21,7 +21,7 @@ describe('twoFactorAuthenticationMethodsValidator', () => { createdAt: new Date(), updatedAt: new Date(), deletedAt: new Date(), - }) as unknown as TwoFactorAuthenticationMethod; + }) as unknown as TwoFactorAuthenticationMethodEntity; describe('assertIsDefinedOrThrow', () => { it('should not throw when method is defined', () => { @@ -91,7 +91,7 @@ describe('twoFactorAuthenticationMethodsValidator', () => { }); it('should return false when methods array is empty', () => { - const methods: TwoFactorAuthenticationMethod[] = []; + const methods: TwoFactorAuthenticationMethodEntity[] = []; const result = twoFactorAuthenticationMethodsValidator.areDefined(methods); @@ -151,7 +151,7 @@ describe('twoFactorAuthenticationMethodsValidator', () => { }); it('should return false when methods array is empty', () => { - const methods: TwoFactorAuthenticationMethod[] = []; + const methods: TwoFactorAuthenticationMethodEntity[] = []; const result = twoFactorAuthenticationMethodsValidator.areVerified(methods); diff --git a/packages/twenty-server/src/engine/core-modules/two-factor-authentication/two-factor-authentication.validation.ts b/packages/twenty-server/src/engine/core-modules/two-factor-authentication/two-factor-authentication.validation.ts index f2ed188e62b..36c5627c07d 100644 --- a/packages/twenty-server/src/engine/core-modules/two-factor-authentication/two-factor-authentication.validation.ts +++ b/packages/twenty-server/src/engine/core-modules/two-factor-authentication/two-factor-authentication.validation.ts @@ -7,19 +7,19 @@ import { TwoFactorAuthenticationExceptionCode, } from './two-factor-authentication.exception'; -import { type TwoFactorAuthenticationMethod } from './entities/two-factor-authentication-method.entity'; +import { type TwoFactorAuthenticationMethodEntity } from './entities/two-factor-authentication-method.entity'; import { OTPStatus } from './strategies/otp/otp.constants'; const assertIsDefinedOrThrow = ( twoFactorAuthenticationMethod: - | TwoFactorAuthenticationMethod + | TwoFactorAuthenticationMethodEntity | undefined | null, exceptionToThrow: CustomException = new TwoFactorAuthenticationException( '2FA method not found', TwoFactorAuthenticationExceptionCode.TWO_FACTOR_AUTHENTICATION_METHOD_NOT_FOUND, ), -): asserts twoFactorAuthenticationMethod is TwoFactorAuthenticationMethod => { +): asserts twoFactorAuthenticationMethod is TwoFactorAuthenticationMethodEntity => { if (!isDefined(twoFactorAuthenticationMethod)) { throw exceptionToThrow; } @@ -27,10 +27,10 @@ const assertIsDefinedOrThrow = ( const areTwoFactorAuthenticationMethodsDefined = ( twoFactorAuthenticationMethods: - | TwoFactorAuthenticationMethod[] + | TwoFactorAuthenticationMethodEntity[] | undefined | null, -): twoFactorAuthenticationMethods is TwoFactorAuthenticationMethod[] => { +): twoFactorAuthenticationMethods is TwoFactorAuthenticationMethodEntity[] => { return ( isDefined(twoFactorAuthenticationMethods) && twoFactorAuthenticationMethods.length > 0 @@ -38,7 +38,7 @@ const areTwoFactorAuthenticationMethodsDefined = ( }; const isAnyTwoFactorAuthenticationMethodVerified = ( - twoFactorAuthenticationMethods: TwoFactorAuthenticationMethod[], + twoFactorAuthenticationMethods: TwoFactorAuthenticationMethodEntity[], ) => { return ( twoFactorAuthenticationMethods.filter( diff --git a/packages/twenty-server/src/engine/core-modules/two-factor-authentication/utils/two-factor-authentication-method.presenter.spec.ts b/packages/twenty-server/src/engine/core-modules/two-factor-authentication/utils/two-factor-authentication-method.presenter.spec.ts index 76d1c286652..06a0e882db2 100644 --- a/packages/twenty-server/src/engine/core-modules/two-factor-authentication/utils/two-factor-authentication-method.presenter.spec.ts +++ b/packages/twenty-server/src/engine/core-modules/two-factor-authentication/utils/two-factor-authentication-method.presenter.spec.ts @@ -1,6 +1,6 @@ import { TwoFactorAuthenticationStrategy } from 'twenty-shared/types'; -import { type TwoFactorAuthenticationMethod } from 'src/engine/core-modules/two-factor-authentication/entities/two-factor-authentication-method.entity'; +import { type TwoFactorAuthenticationMethodEntity } from 'src/engine/core-modules/two-factor-authentication/entities/two-factor-authentication-method.entity'; import { OTPStatus } from 'src/engine/core-modules/two-factor-authentication/strategies/otp/otp.constants'; import { buildTwoFactorAuthenticationMethodSummary } from './two-factor-authentication-method.presenter'; @@ -10,7 +10,7 @@ describe('buildTwoFactorAuthenticationMethodSummary', () => { id: string, status: OTPStatus, strategy: TwoFactorAuthenticationStrategy, - ): TwoFactorAuthenticationMethod => + ): TwoFactorAuthenticationMethodEntity => ({ id, status, @@ -21,7 +21,7 @@ describe('buildTwoFactorAuthenticationMethodSummary', () => { createdAt: new Date(), updatedAt: new Date(), deletedAt: new Date(), - }) as unknown as TwoFactorAuthenticationMethod; + }) as unknown as TwoFactorAuthenticationMethodEntity; it('should return undefined when methods is undefined', () => { const result = buildTwoFactorAuthenticationMethodSummary(undefined); diff --git a/packages/twenty-server/src/engine/core-modules/two-factor-authentication/utils/two-factor-authentication-method.presenter.ts b/packages/twenty-server/src/engine/core-modules/two-factor-authentication/utils/two-factor-authentication-method.presenter.ts index 5befc096486..8cf656c8e7d 100644 --- a/packages/twenty-server/src/engine/core-modules/two-factor-authentication/utils/two-factor-authentication-method.presenter.ts +++ b/packages/twenty-server/src/engine/core-modules/two-factor-authentication/utils/two-factor-authentication-method.presenter.ts @@ -1,10 +1,10 @@ import { isDefined } from 'twenty-shared/utils'; import { type TwoFactorAuthenticationMethodSummaryDto } from 'src/engine/core-modules/two-factor-authentication/dto/two-factor-authentication-method.dto'; -import { type TwoFactorAuthenticationMethod } from 'src/engine/core-modules/two-factor-authentication/entities/two-factor-authentication-method.entity'; +import { type TwoFactorAuthenticationMethodEntity } from 'src/engine/core-modules/two-factor-authentication/entities/two-factor-authentication-method.entity'; export function buildTwoFactorAuthenticationMethodSummary( - methods: TwoFactorAuthenticationMethod[] | undefined, + methods: TwoFactorAuthenticationMethodEntity[] | undefined, ): TwoFactorAuthenticationMethodSummaryDto[] | undefined { if (!isDefined(methods)) return undefined; diff --git a/packages/twenty-server/src/engine/core-modules/user-workspace/user-workspace.entity.ts b/packages/twenty-server/src/engine/core-modules/user-workspace/user-workspace.entity.ts index 883ef978905..57971126587 100644 --- a/packages/twenty-server/src/engine/core-modules/user-workspace/user-workspace.entity.ts +++ b/packages/twenty-server/src/engine/core-modules/user-workspace/user-workspace.entity.ts @@ -19,9 +19,9 @@ import { import { UUIDScalarType } from 'src/engine/api/graphql/workspace-schema-builder/graphql-types/scalars'; import { TwoFactorAuthenticationMethodSummaryDto } from 'src/engine/core-modules/two-factor-authentication/dto/two-factor-authentication-method.dto'; -import { TwoFactorAuthenticationMethod } from 'src/engine/core-modules/two-factor-authentication/entities/two-factor-authentication-method.entity'; -import { User } from 'src/engine/core-modules/user/user.entity'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { TwoFactorAuthenticationMethodEntity } from 'src/engine/core-modules/two-factor-authentication/entities/two-factor-authentication-method.entity'; +import { UserEntity } from 'src/engine/core-modules/user/user.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { ObjectPermissionDTO } from 'src/engine/metadata-modules/object-permission/dtos/object-permission.dto'; import { PermissionFlagType } from 'src/engine/metadata-modules/permissions/constants/permission-flag-type.constants'; @@ -34,7 +34,7 @@ registerEnumType(PermissionsOnAllObjectRecords, { }); @Entity({ name: 'userWorkspace', schema: 'core' }) -@ObjectType() +@ObjectType('UserWorkspace') @Index( 'IDX_USER_WORKSPACE_USER_ID_WORKSPACE_ID_UNIQUE', ['userId', 'workspaceId'], @@ -45,28 +45,28 @@ registerEnumType(PermissionsOnAllObjectRecords, { ) @Index('IDX_USER_WORKSPACE_USER_ID', ['userId']) @Index('IDX_USER_WORKSPACE_WORKSPACE_ID', ['workspaceId']) -export class UserWorkspace { +export class UserWorkspaceEntity { @IDField(() => UUIDScalarType) @PrimaryGeneratedColumn('uuid') id: string; - @Field(() => User) - @ManyToOne(() => User, (user) => user.userWorkspaces, { + @Field(() => UserEntity) + @ManyToOne(() => UserEntity, (user) => user.userWorkspaces, { onDelete: 'CASCADE', }) @JoinColumn({ name: 'userId' }) - user: Relation; + user: Relation; @Field(() => UUIDScalarType, { nullable: false }) @Column() userId: string; - @Field(() => Workspace, { nullable: true }) - @ManyToOne(() => Workspace, (workspace) => workspace.workspaceUsers, { + @Field(() => WorkspaceEntity, { nullable: true }) + @ManyToOne(() => WorkspaceEntity, (workspace) => workspace.workspaceUsers, { onDelete: 'CASCADE', }) @JoinColumn({ name: 'workspaceId' }) - workspace: Relation; + workspace: Relation; @Field(() => UUIDScalarType, { nullable: false }) @Column() @@ -92,12 +92,14 @@ export class UserWorkspace { deletedAt: Date; @OneToMany( - () => TwoFactorAuthenticationMethod, + () => TwoFactorAuthenticationMethodEntity, (twoFactorAuthenticationMethod) => twoFactorAuthenticationMethod.userWorkspace, { nullable: true }, ) - twoFactorAuthenticationMethods: Relation; + twoFactorAuthenticationMethods: Relation< + TwoFactorAuthenticationMethodEntity[] + >; @Field(() => [PermissionFlagType], { nullable: true }) permissionFlags?: PermissionFlagType[]; diff --git a/packages/twenty-server/src/engine/core-modules/user-workspace/user-workspace.module.ts b/packages/twenty-server/src/engine/core-modules/user-workspace/user-workspace.module.ts index 06c03a498c3..17c4c350b8f 100644 --- a/packages/twenty-server/src/engine/core-modules/user-workspace/user-workspace.module.ts +++ b/packages/twenty-server/src/engine/core-modules/user-workspace/user-workspace.module.ts @@ -9,11 +9,11 @@ import { TokenModule } from 'src/engine/core-modules/auth/token/token.module'; import { WorkspaceDomainsModule } from 'src/engine/core-modules/domain/workspace-domains/workspace-domains.module'; import { FileUploadModule } from 'src/engine/core-modules/file/file-upload/file-upload.module'; import { FileModule } from 'src/engine/core-modules/file/file.module'; -import { UserWorkspace } from 'src/engine/core-modules/user-workspace/user-workspace.entity'; +import { UserWorkspaceEntity } from 'src/engine/core-modules/user-workspace/user-workspace.entity'; import { UserWorkspaceService } from 'src/engine/core-modules/user-workspace/user-workspace.service'; -import { User } from 'src/engine/core-modules/user/user.entity'; +import { UserEntity } from 'src/engine/core-modules/user/user.entity'; import { WorkspaceInvitationModule } from 'src/engine/core-modules/workspace-invitation/workspace-invitation.module'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { DataSourceModule } from 'src/engine/metadata-modules/data-source/data-source.module'; import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity'; import { UserRoleModule } from 'src/engine/metadata-modules/user-role/user-role.module'; @@ -24,7 +24,11 @@ import { WorkspaceDataSourceModule } from 'src/engine/workspace-datasource/works imports: [ NestjsQueryGraphQLModule.forFeature({ imports: [ - NestjsQueryTypeOrmModule.forFeature([User, UserWorkspace, Workspace]), + NestjsQueryTypeOrmModule.forFeature([ + UserEntity, + UserWorkspaceEntity, + WorkspaceEntity, + ]), NestjsQueryTypeOrmModule.forFeature([ObjectMetadataEntity]), TypeORMModule, DataSourceModule, diff --git a/packages/twenty-server/src/engine/core-modules/user-workspace/user-workspace.service.spec.ts b/packages/twenty-server/src/engine/core-modules/user-workspace/user-workspace.service.spec.ts index 1d69a6e6795..92ac9145660 100644 --- a/packages/twenty-server/src/engine/core-modules/user-workspace/user-workspace.service.spec.ts +++ b/packages/twenty-server/src/engine/core-modules/user-workspace/user-workspace.service.spec.ts @@ -5,7 +5,7 @@ import { type DataSource, type Repository } from 'typeorm'; import { FileFolder } from 'src/engine/core-modules/file/interfaces/file-folder.interface'; -import { type ApprovedAccessDomain } from 'src/engine/core-modules/approved-access-domain/approved-access-domain.entity'; +import { type ApprovedAccessDomainEntity } from 'src/engine/core-modules/approved-access-domain/approved-access-domain.entity'; import { ApprovedAccessDomainService } from 'src/engine/core-modules/approved-access-domain/services/approved-access-domain.service'; import { AuthException } from 'src/engine/core-modules/auth/auth.exception'; import { LoginTokenService } from 'src/engine/core-modules/auth/token/services/login-token.service'; @@ -16,22 +16,21 @@ import { type SignedFilesResult, } from 'src/engine/core-modules/file/file-upload/services/file-upload.service'; import { FileService } from 'src/engine/core-modules/file/services/file.service'; -import { UserWorkspace } from 'src/engine/core-modules/user-workspace/user-workspace.entity'; +import { UserWorkspaceEntity } from 'src/engine/core-modules/user-workspace/user-workspace.entity'; import { UserWorkspaceService } from 'src/engine/core-modules/user-workspace/user-workspace.service'; -import { User } from 'src/engine/core-modules/user/user.entity'; +import { UserEntity } from 'src/engine/core-modules/user/user.entity'; import { WorkspaceInvitationService } from 'src/engine/core-modules/workspace-invitation/services/workspace-invitation.service'; -import { type Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { type WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { DataSourceService } from 'src/engine/metadata-modules/data-source/data-source.service'; import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity'; import { PermissionsException } from 'src/engine/metadata-modules/permissions/permissions.exception'; import { UserRoleService } from 'src/engine/metadata-modules/user-role/user-role.service'; import { TwentyORMGlobalManager } from 'src/engine/twenty-orm/twenty-orm-global.manager'; -import { type WorkspaceMemberWorkspaceEntity } from 'src/modules/workspace-member/standard-objects/workspace-member.workspace-entity'; describe('UserWorkspaceService', () => { let service: UserWorkspaceService; - let userWorkspaceRepository: Repository; - let userRepository: Repository; + let userWorkspaceRepository: Repository; + let userRepository: Repository; let workspaceInvitationService: WorkspaceInvitationService; let approvedAccessDomainService: ApprovedAccessDomainService; let twentyORMGlobalManager: TwentyORMGlobalManager; @@ -44,7 +43,7 @@ describe('UserWorkspaceService', () => { providers: [ UserWorkspaceService, { - provide: getRepositoryToken(UserWorkspace), + provide: getRepositoryToken(UserWorkspaceEntity), useValue: { create: jest.fn(), save: jest.fn(), @@ -56,7 +55,7 @@ describe('UserWorkspaceService', () => { }, }, { - provide: getRepositoryToken(User), + provide: getRepositoryToken(UserEntity), useValue: { findOne: jest.fn(), }, @@ -132,8 +131,10 @@ describe('UserWorkspaceService', () => { service = module.get(UserWorkspaceService); fileService = module.get(FileService); - userWorkspaceRepository = module.get(getRepositoryToken(UserWorkspace)); - userRepository = module.get(getRepositoryToken(User)); + userWorkspaceRepository = module.get( + getRepositoryToken(UserWorkspaceEntity), + ); + userRepository = module.get(getRepositoryToken(UserEntity)); workspaceInvitationService = module.get( WorkspaceInvitationService, ); @@ -155,7 +156,10 @@ describe('UserWorkspaceService', () => { it("should create a user workspace with a default avatar url if it's an existing user with a user workspace having a default avatar url", async () => { const userId = 'user-id'; const workspaceId = 'workspace-id'; - const userWorkspace = { userId, workspaceId } as UserWorkspace; + const userWorkspace = { + userId, + workspaceId, + } as UserWorkspaceEntity; jest .spyOn(userWorkspaceRepository, 'create') @@ -165,7 +169,7 @@ describe('UserWorkspaceService', () => { .mockResolvedValue(userWorkspace); jest.spyOn(userWorkspaceRepository, 'findOne').mockResolvedValue({ defaultAvatarUrl: 'path/to/file', - } as UserWorkspace); + } as UserWorkspaceEntity); jest .spyOn(fileService, 'copyFileFromWorkspaceToWorkspace') .mockResolvedValue(['', 'path/to', 'copy']); @@ -188,7 +192,10 @@ describe('UserWorkspaceService', () => { it("should create a user workspace without a default avatar url if it's an existing user without any user workspace having a default avatar url", async () => { const userId = 'user-id'; const workspaceId = 'workspace-id'; - const userWorkspace = { userId, workspaceId } as UserWorkspace; + const userWorkspace = { + userId, + workspaceId, + } as UserWorkspaceEntity; jest .spyOn(userWorkspaceRepository, 'create') @@ -216,7 +223,10 @@ describe('UserWorkspaceService', () => { it("should create a user workspace with a default avatar url if it's a new user with a picture url", async () => { const userId = 'user-id'; const workspaceId = 'workspace-id'; - const userWorkspace = { userId, workspaceId } as UserWorkspace; + const userWorkspace = { + userId, + workspaceId, + } as UserWorkspaceEntity; jest .spyOn(userWorkspaceRepository, 'create') @@ -252,7 +262,10 @@ describe('UserWorkspaceService', () => { it("should create a user workspace without a default avatar url if it's a new user without a picture url", async () => { const userId = 'user-id'; const workspaceId = 'workspace-id'; - const userWorkspace = { userId, workspaceId } as UserWorkspace; + const userWorkspace = { + userId, + workspaceId, + } as unknown as UserWorkspaceEntity; jest .spyOn(userWorkspaceRepository, 'create') @@ -275,7 +288,10 @@ describe('UserWorkspaceService', () => { it("should create a user workspace without a default avatar url if it's a new user with an empty picture url", async () => { const userId = 'user-id'; const workspaceId = 'workspace-id'; - const userWorkspace = { userId, workspaceId } as UserWorkspace; + const userWorkspace = { + userId, + workspaceId, + } as unknown as UserWorkspaceEntity; jest .spyOn(userWorkspaceRepository, 'create') @@ -319,7 +335,7 @@ describe('UserWorkspaceService', () => { lastName: 'Doe', defaultAvatarUrl: 'avatar-url', locale: 'en', - } as User; + } as UserEntity; const mainDataSource = { query: jest.fn(), } as unknown as DataSource; @@ -347,7 +363,7 @@ describe('UserWorkspaceService', () => { jest.spyOn(userWorkspaceRepository, 'findOneOrFail').mockResolvedValue({ defaultAvatarUrl: 'userWorkspace-avatar-url', - } as UserWorkspace); + } as UserWorkspaceEntity); await service.createWorkspaceMember(workspaceId, user); @@ -370,16 +386,16 @@ describe('UserWorkspaceService', () => { const user = { id: 'user-id', email: 'test@example.com', - } as User; + } as UserEntity; const workspace = { id: 'workspace-id', defaultRoleId: 'default-role-id', - } as Workspace; + } as WorkspaceEntity; const userWorkspace = { id: 'user-workspace-id', userId: user.id, workspaceId: workspace.id, - } as UserWorkspace; + } as UserWorkspaceEntity; jest.spyOn(service, 'checkUserWorkspaceExists').mockResolvedValue(null); jest.spyOn(service, 'create').mockResolvedValue(userWorkspace); @@ -420,16 +436,16 @@ describe('UserWorkspaceService', () => { const user = { id: 'user-id', email: 'test@example.com', - } as User; + } as UserEntity; const workspace = { id: 'workspace-id', defaultRoleId: 'default-role-id', - } as Workspace; + } as WorkspaceEntity; const userWorkspace = { id: 'user-workspace-id', userId: user.id, workspaceId: workspace.id, - } as UserWorkspace; + } as UserWorkspaceEntity; jest .spyOn(service, 'checkUserWorkspaceExists') @@ -451,14 +467,16 @@ describe('UserWorkspaceService', () => { const user = { id: 'user-id', email: 'test@example.com', - } as User; + } as UserEntity; const workspace = { id: 'workspace-id', defaultRoleId: undefined, - } as unknown as Workspace; + } as unknown as WorkspaceEntity; jest.spyOn(service, 'checkUserWorkspaceExists').mockResolvedValue(null); - jest.spyOn(service, 'create').mockResolvedValue({} as UserWorkspace); + jest + .spyOn(service, 'create') + .mockResolvedValue({} as UserWorkspaceEntity); jest.spyOn(service, 'createWorkspaceMember').mockResolvedValue(undefined); await expect( @@ -487,7 +505,10 @@ describe('UserWorkspaceService', () => { it('should check if a user workspace exists', async () => { const userId = 'user-id'; const workspaceId = 'workspace-id'; - const userWorkspace = { userId, workspaceId } as UserWorkspace; + const userWorkspace = { + userId, + workspaceId, + } as unknown as UserWorkspaceEntity; jest .spyOn(userWorkspaceRepository, 'findOneBy') @@ -574,13 +595,13 @@ describe('UserWorkspaceService', () => { status: 'Inactive', }, ], - } as unknown as Workspace; + } as unknown as WorkspaceEntity; const workspace2 = { id: 'workspace-id-2', displayName: 'Workspace 2', logo: 'logo2.png', workspaceSSOIdentityProviders: [], - } as unknown as Workspace; + } as unknown as WorkspaceEntity; const user = { email, userWorkspaces: [ @@ -593,7 +614,7 @@ describe('UserWorkspaceService', () => { workspace: workspace2, }, ], - } as User; + } as UserEntity; jest.spyOn(userRepository, 'findOne').mockResolvedValue(user); jest @@ -654,13 +675,13 @@ describe('UserWorkspaceService', () => { status: 'Inactive', }, ], - } as unknown as Workspace; + } as unknown as WorkspaceEntity; const workspace2 = { id: 'workspace-id-2', displayName: 'Workspace 2', logo: 'logo2.png', workspaceSSOIdentityProviders: [], - } as unknown as Workspace; + } as unknown as WorkspaceEntity; const user = { email, @@ -670,7 +691,7 @@ describe('UserWorkspaceService', () => { workspace: workspace1, }, ], - } as User; + } as UserEntity; jest.spyOn(userRepository, 'findOne').mockResolvedValue(user); jest @@ -684,7 +705,7 @@ describe('UserWorkspaceService', () => { workspaceId: workspace2.id, workspace: workspace2, isValidated: true, - } as unknown as ApprovedAccessDomain, + } as unknown as ApprovedAccessDomainEntity, ]); jest @@ -720,7 +741,7 @@ describe('UserWorkspaceService', () => { displayName: 'Workspace 1', logo: 'logo1.png', workspaceSSOIdentityProviders: [], - } as unknown as Workspace; + } as unknown as WorkspaceEntity; jest.spyOn(userRepository, 'findOne').mockResolvedValue(null); @@ -735,7 +756,7 @@ describe('UserWorkspaceService', () => { workspaceId: workspace1.id, workspace: workspace1, isValidated: true, - } as unknown as ApprovedAccessDomain, + } as unknown as ApprovedAccessDomainEntity, ]); jest @@ -757,15 +778,15 @@ describe('UserWorkspaceService', () => { const workspace1 = { id: 'workspace-id', createdAt: '2025-01-02T00:00:00.000Z', - } as unknown as Workspace; + } as unknown as WorkspaceEntity; const workspace2 = { id: 'workspace-id-2', createdAt: '2025-01-01T00:00:00.000Z', - } as unknown as Workspace; + } as unknown as WorkspaceEntity; const user = { id: userId, userWorkspaces: [{ workspace: workspace1 }, { workspace: workspace2 }], - } as unknown as User; + } as unknown as UserEntity; jest.spyOn(userRepository, 'findOne').mockResolvedValue(user); @@ -792,7 +813,7 @@ describe('UserWorkspaceService', () => { const user = { id: userId, workspaces: [], - } as unknown as User; + } as unknown as UserEntity; jest.spyOn(userRepository, 'findOne').mockResolvedValue(user); @@ -806,7 +827,10 @@ describe('UserWorkspaceService', () => { it('should get a user workspace or throw', async () => { const userId = 'user-id'; const workspaceId = 'workspace-id'; - const userWorkspace = { userId, workspaceId } as UserWorkspace; + const userWorkspace = { + userId, + workspaceId, + } as unknown as UserWorkspaceEntity; jest .spyOn(userWorkspaceRepository, 'findOne') @@ -845,7 +869,7 @@ describe('UserWorkspaceService', () => { const workspaceId = 'workspace-id'; const workspaceMember = { id: workspaceMemberId, - } as WorkspaceMemberWorkspaceEntity; + } as WorkspaceEntity; const workspaceMemberRepository = { findOne: jest.fn().mockResolvedValue(workspaceMember), }; diff --git a/packages/twenty-server/src/engine/core-modules/user-workspace/user-workspace.service.ts b/packages/twenty-server/src/engine/core-modules/user-workspace/user-workspace.service.ts index 5122fb6d6d4..e6241466f5e 100644 --- a/packages/twenty-server/src/engine/core-modules/user-workspace/user-workspace.service.ts +++ b/packages/twenty-server/src/engine/core-modules/user-workspace/user-workspace.service.ts @@ -8,7 +8,7 @@ import { IsNull, Not, Repository } from 'typeorm'; import { FileStorageExceptionCode } from 'src/engine/core-modules/file-storage/interfaces/file-storage-exception'; import { FileFolder } from 'src/engine/core-modules/file/interfaces/file-folder.interface'; -import { type AppToken } from 'src/engine/core-modules/app-token/app-token.entity'; +import { type AppTokenEntity } from 'src/engine/core-modules/app-token/app-token.entity'; import { ApprovedAccessDomainService } from 'src/engine/core-modules/approved-access-domain/services/approved-access-domain.service'; import { AuthException, @@ -19,11 +19,11 @@ import { LoginTokenService } from 'src/engine/core-modules/auth/token/services/l import { WorkspaceDomainsService } from 'src/engine/core-modules/domain/workspace-domains/services/workspace-domains.service'; import { FileUploadService } from 'src/engine/core-modules/file/file-upload/services/file-upload.service'; import { FileService } from 'src/engine/core-modules/file/services/file.service'; -import { UserWorkspace } from 'src/engine/core-modules/user-workspace/user-workspace.entity'; -import { User } from 'src/engine/core-modules/user/user.entity'; +import { UserWorkspaceEntity } from 'src/engine/core-modules/user-workspace/user-workspace.entity'; +import { UserEntity } from 'src/engine/core-modules/user/user.entity'; import { WorkspaceInvitationService } from 'src/engine/core-modules/workspace-invitation/services/workspace-invitation.service'; import { AuthProviderEnum } from 'src/engine/core-modules/workspace/types/workspace.type'; -import { type Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { workspaceValidator } from 'src/engine/core-modules/workspace/workspace.validate'; import { PermissionsException, @@ -32,16 +32,16 @@ import { } from 'src/engine/metadata-modules/permissions/permissions.exception'; import { UserRoleService } from 'src/engine/metadata-modules/user-role/user-role.service'; import { TwentyORMGlobalManager } from 'src/engine/twenty-orm/twenty-orm-global.manager'; -import { type WorkspaceMemberWorkspaceEntity } from 'src/modules/workspace-member/standard-objects/workspace-member.workspace-entity'; +import { WorkspaceMemberWorkspaceEntity } from 'src/modules/workspace-member/standard-objects/workspace-member.workspace-entity'; import { assert } from 'src/utils/assert'; import { getDomainNameByEmail } from 'src/utils/get-domain-name-by-email'; -export class UserWorkspaceService extends TypeOrmQueryService { +export class UserWorkspaceService extends TypeOrmQueryService { constructor( - @InjectRepository(UserWorkspace) - private readonly userWorkspaceRepository: Repository, - @InjectRepository(User) - private readonly userRepository: Repository, + @InjectRepository(UserWorkspaceEntity) + private readonly userWorkspaceRepository: Repository, + @InjectRepository(UserEntity) + private readonly userRepository: Repository, private readonly workspaceInvitationService: WorkspaceInvitationService, private readonly workspaceDomainsService: WorkspaceDomainsService, private readonly loginTokenService: LoginTokenService, @@ -64,7 +64,7 @@ export class UserWorkspaceService extends TypeOrmQueryService { workspaceId: string; isExistingUser: boolean; pictureUrl?: string; - }): Promise { + }): Promise { const defaultAvatarUrl = await this.computeDefaultAvatarUrl( userId, workspaceId, @@ -81,7 +81,7 @@ export class UserWorkspaceService extends TypeOrmQueryService { return this.userWorkspaceRepository.save(userWorkspace); } - async createWorkspaceMember(workspaceId: string, user: User) { + async createWorkspaceMember(workspaceId: string, user: UserEntity) { const workspaceMemberRepository = await this.twentyORMGlobalManager.getRepositoryForWorkspace( workspaceId, @@ -120,8 +120,8 @@ export class UserWorkspaceService extends TypeOrmQueryService { } async addUserToWorkspaceIfUserNotInWorkspace( - user: User, - workspace: Workspace, + user: UserEntity, + workspace: WorkspaceEntity, ) { let userWorkspace = await this.checkUserWorkspaceExists( user.id, @@ -168,7 +168,7 @@ export class UserWorkspaceService extends TypeOrmQueryService { async checkUserWorkspaceExists( userId: string, workspaceId: string, - ): Promise { + ): Promise { return this.userWorkspaceRepository.findOneBy({ userId, workspaceId, @@ -287,7 +287,7 @@ export class UserWorkspaceService extends TypeOrmQueryService { }: { userId: string; workspaceId: string; - }): Promise { + }): Promise { const userWorkspace = await this.userWorkspaceRepository.findOne({ where: { userId, @@ -380,7 +380,7 @@ export class UserWorkspaceService extends TypeOrmQueryService { return files[0].path; } - castWorkspaceToAvailableWorkspace(workspace: Workspace) { + castWorkspaceToAvailableWorkspace(workspace: WorkspaceEntity) { return { id: workspace.id, displayName: workspace.displayName, @@ -415,15 +415,15 @@ export class UserWorkspaceService extends TypeOrmQueryService { async setLoginTokenToAvailableWorkspacesWhenAuthProviderMatch( availableWorkspaces: { availableWorkspacesForSignUp: Array<{ - workspace: Workspace; - appToken?: AppToken; + workspace: WorkspaceEntity; + appToken?: AppTokenEntity; }>; availableWorkspacesForSignIn: Array<{ - workspace: Workspace; - appToken?: AppToken; + workspace: WorkspaceEntity; + appToken?: AppTokenEntity; }>; }, - user: User, + user: UserEntity, authProvider: AuthProviderEnum, ) { return { diff --git a/packages/twenty-server/src/engine/core-modules/user/services/user.service.spec.ts b/packages/twenty-server/src/engine/core-modules/user/services/user.service.spec.ts index 1fb12bed04d..220c9ff2221 100644 --- a/packages/twenty-server/src/engine/core-modules/user/services/user.service.spec.ts +++ b/packages/twenty-server/src/engine/core-modules/user/services/user.service.spec.ts @@ -4,23 +4,23 @@ import { getRepositoryToken } from '@nestjs/typeorm'; import { type Repository } from 'typeorm'; import { WorkspaceActivationStatus } from 'twenty-shared/workspace'; +import { type WorkspaceRepository } from 'src/engine/twenty-orm/repository/workspace.repository'; import { UserService } from 'src/engine/core-modules/user/services/user.service'; -import { User } from 'src/engine/core-modules/user/user.entity'; +import { UserEntity } from 'src/engine/core-modules/user/user.entity'; import { WorkspaceService } from 'src/engine/core-modules/workspace/services/workspace.service'; import { TwentyORMGlobalManager } from 'src/engine/twenty-orm/twenty-orm-global.manager'; import { UserRoleService } from 'src/engine/metadata-modules/user-role/user-role.service'; -import type { WorkspaceRepository } from 'src/engine/twenty-orm/repository/workspace.repository'; -import type { WorkspaceMemberWorkspaceEntity } from 'src/modules/workspace-member/standard-objects/workspace-member.workspace-entity'; +import { type WorkspaceMemberWorkspaceEntity } from 'src/modules/workspace-member/standard-objects/workspace-member.workspace-entity'; import { AuthException } from 'src/engine/core-modules/auth/auth.exception'; import { PermissionsException, PermissionsExceptionCode, } from 'src/engine/metadata-modules/permissions/permissions.exception'; -import { type Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { type WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; describe('UserService', () => { let service: UserService; - let userRepository: Repository; + let userRepository: Repository; let workspaceService: WorkspaceService; let twentyORMGlobalManager: TwentyORMGlobalManager; let userRoleService: UserRoleService; @@ -36,7 +36,7 @@ describe('UserService', () => { providers: [ UserService, { - provide: getRepositoryToken(User), + provide: getRepositoryToken(UserEntity), useValue: { findOne: jest.fn(), save: jest.fn(), @@ -62,7 +62,9 @@ describe('UserService', () => { }).compile(); service = module.get(UserService); - userRepository = module.get>(getRepositoryToken(User)); + userRepository = module.get>( + getRepositoryToken(UserEntity), + ); userRoleService = module.get(UserRoleService); twentyORMGlobalManager = module.get( TwentyORMGlobalManager, @@ -75,8 +77,8 @@ describe('UserService', () => { // isWorkspaceActiveOrSuspendedSpy.mockReturnValue(false); const res = await service.loadWorkspaceMember( - { id: 'u1' } as User, - { id: 'w1' } as Workspace, + { id: 'u1' } as UserEntity, + { id: 'w1' } as WorkspaceEntity, ); expect(res).toBeNull(); @@ -96,11 +98,11 @@ describe('UserService', () => { .mockResolvedValue(mockWorkspaceMemberRepo); const res = await service.loadWorkspaceMember( - { id: 'u1' } as User, + { id: 'u1' } as UserEntity, { id: 'w1', activationStatus: WorkspaceActivationStatus.ACTIVE, - } as Workspace, + } as WorkspaceEntity, ); expect( @@ -118,7 +120,7 @@ describe('UserService', () => { const res = await service.loadWorkspaceMembers({ id: 'w1', activationStatus: WorkspaceActivationStatus.INACTIVE, - } as Workspace); + } as WorkspaceEntity); expect(res).toEqual([]); expect( @@ -138,7 +140,7 @@ describe('UserService', () => { { id: 'w2', activationStatus: WorkspaceActivationStatus.ACTIVE, - } as Workspace, + } as WorkspaceEntity, true, ); @@ -154,7 +156,7 @@ describe('UserService', () => { const res = await service.loadDeletedWorkspaceMembersOnly({ id: 'w1', activationStatus: WorkspaceActivationStatus.INACTIVE, - } as Workspace); + } as WorkspaceEntity); expect(res).toEqual([]); }); @@ -172,7 +174,7 @@ describe('UserService', () => { await service.loadDeletedWorkspaceMembersOnly({ id: 'w3', activationStatus: WorkspaceActivationStatus.ACTIVE, - } as Workspace); + } as WorkspaceEntity); expect(mockWorkspaceMemberRepo.find).toHaveBeenCalledWith({ where: { deletedAt: expect.any(Object) }, @@ -183,7 +185,7 @@ describe('UserService', () => { describe('findUserByEmailOrThrow', () => { it('returns user when found', async () => { - const user = { id: 'u1', email: 'a@b.com' } as User; + const user = { id: 'u1', email: 'a@b.com' } as UserEntity; (userRepository.findOne as jest.Mock).mockResolvedValue(user); @@ -202,7 +204,7 @@ describe('UserService', () => { describe('findUserByEmail', () => { it('returns the user when found', async () => { - const user: Partial = { id: 'u1', email: 'john@doe.com' }; + const user: Partial = { id: 'u1', email: 'john@doe.com' }; (userRepository.findOne as jest.Mock).mockResolvedValue(user); @@ -244,11 +246,11 @@ describe('UserService', () => { describe('markEmailAsVerified', () => { it('sets isEmailVerified and saves', async () => { - const user = { id: 'u1', isEmailVerified: false } as User; + const user = { id: 'u1', isEmailVerified: false } as UserEntity; (userRepository.findOne as jest.Mock).mockResolvedValue(user); (userRepository.save as jest.Mock).mockImplementation( - async (u: User) => u, + async (u: UserEntity) => u, ); const res = await service.markEmailAsVerified('u1'); @@ -287,9 +289,7 @@ describe('UserService', () => { ]); jest .spyOn(twentyORMGlobalManager, 'getRepositoryForWorkspace') - .mockResolvedValue( - mockWorkspaceMemberRepo as unknown as WorkspaceRepository, - ); + .mockResolvedValue(mockWorkspaceMemberRepo); jest .spyOn(userRoleService, 'validateUserWorkspaceIsNotUniqueAdminOrThrow') @@ -338,7 +338,7 @@ describe('UserService', () => { describe('findUserById', () => { it('returns the user when found', async () => { - const user = { id: 'u42' } as User; + const user = { id: 'u42' } as UserEntity; (userRepository.findOne as jest.Mock).mockResolvedValue(user); @@ -361,7 +361,7 @@ describe('UserService', () => { describe('findUserByIdOrThrow', () => { it('returns user when found', async () => { - const user = { id: 'u99' } as User; + const user = { id: 'u99' } as UserEntity; (userRepository.findOne as jest.Mock).mockResolvedValue(user); diff --git a/packages/twenty-server/src/engine/core-modules/user/services/user.service.ts b/packages/twenty-server/src/engine/core-modules/user/services/user.service.ts index 1e87b2689ad..d3d8894264d 100644 --- a/packages/twenty-server/src/engine/core-modules/user/services/user.service.ts +++ b/packages/twenty-server/src/engine/core-modules/user/services/user.service.ts @@ -12,10 +12,10 @@ import { AuthException, AuthExceptionCode, } from 'src/engine/core-modules/auth/auth.exception'; -import { User } from 'src/engine/core-modules/user/user.entity'; +import { UserEntity } from 'src/engine/core-modules/user/user.entity'; import { userValidator } from 'src/engine/core-modules/user/user.validate'; import { WorkspaceService } from 'src/engine/core-modules/workspace/services/workspace.service'; -import { type Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { PermissionsException, PermissionsExceptionCode, @@ -23,13 +23,13 @@ import { } from 'src/engine/metadata-modules/permissions/permissions.exception'; import { UserRoleService } from 'src/engine/metadata-modules/user-role/user-role.service'; import { TwentyORMGlobalManager } from 'src/engine/twenty-orm/twenty-orm-global.manager'; -import { type WorkspaceMemberWorkspaceEntity } from 'src/modules/workspace-member/standard-objects/workspace-member.workspace-entity'; +import { WorkspaceMemberWorkspaceEntity } from 'src/modules/workspace-member/standard-objects/workspace-member.workspace-entity'; // eslint-disable-next-line @nx/workspace-inject-workspace-repository -export class UserService extends TypeOrmQueryService { +export class UserService extends TypeOrmQueryService { constructor( - @InjectRepository(User) - private readonly userRepository: Repository, + @InjectRepository(UserEntity) + private readonly userRepository: Repository, private readonly workspaceService: WorkspaceService, private readonly twentyORMGlobalManager: TwentyORMGlobalManager, private readonly userRoleService: UserRoleService, @@ -37,7 +37,7 @@ export class UserService extends TypeOrmQueryService { super(userRepository); } - async loadWorkspaceMember(user: User, workspace: Workspace) { + async loadWorkspaceMember(user: UserEntity, workspace: WorkspaceEntity) { if (!isWorkspaceActiveOrSuspended(workspace)) { return null; } @@ -55,7 +55,7 @@ export class UserService extends TypeOrmQueryService { }); } - async loadWorkspaceMembers(workspace: Workspace, withDeleted = false) { + async loadWorkspaceMembers(workspace: WorkspaceEntity, withDeleted = false) { if (!isWorkspaceActiveOrSuspended(workspace)) { return []; } @@ -69,7 +69,7 @@ export class UserService extends TypeOrmQueryService { return await workspaceMemberRepository.find({ withDeleted: withDeleted }); } - async loadDeletedWorkspaceMembersOnly(workspace: Workspace) { + async loadDeletedWorkspaceMembersOnly(workspace: WorkspaceEntity) { if (!isWorkspaceActiveOrSuspended(workspace)) { return []; } @@ -86,7 +86,7 @@ export class UserService extends TypeOrmQueryService { }); } - async deleteUser(userId: string): Promise { + async deleteUser(userId: string): Promise { const user = await this.userRepository.findOne({ where: { id: userId, diff --git a/packages/twenty-server/src/engine/core-modules/user/services/workspace-member-transpiler.service.ts b/packages/twenty-server/src/engine/core-modules/user/services/workspace-member-transpiler.service.ts index f45f438f605..e339099d4be 100644 --- a/packages/twenty-server/src/engine/core-modules/user/services/workspace-member-transpiler.service.ts +++ b/packages/twenty-server/src/engine/core-modules/user/services/workspace-member-transpiler.service.ts @@ -4,7 +4,7 @@ import { isNonEmptyString } from '@sniptt/guards'; import { isDefined } from 'twenty-shared/utils'; import { FileService } from 'src/engine/core-modules/file/services/file.service'; -import { type UserWorkspace } from 'src/engine/core-modules/user-workspace/user-workspace.entity'; +import { UserWorkspaceEntity } from 'src/engine/core-modules/user-workspace/user-workspace.entity'; import { type DeletedWorkspaceMemberDTO } from 'src/engine/core-modules/user/dtos/deleted-workspace-member.dto'; import { type WorkspaceMemberDTO } from 'src/engine/core-modules/user/dtos/workspace-member.dto'; import { type RoleEntity } from 'src/engine/metadata-modules/role/role.entity'; @@ -19,7 +19,7 @@ import { export type ToWorkspaceMemberDtoArgs = { workspaceMemberEntity: WorkspaceMemberWorkspaceEntity; userWorkspaceRoles: RoleEntity[]; - userWorkspace: UserWorkspace; + userWorkspace: UserWorkspaceEntity; }; @Injectable() diff --git a/packages/twenty-server/src/engine/core-modules/user/user-vars/utils/merge-user-vars.util.ts b/packages/twenty-server/src/engine/core-modules/user/user-vars/utils/merge-user-vars.util.ts index 568ea2defa8..7d67aad6425 100644 --- a/packages/twenty-server/src/engine/core-modules/user/user-vars/utils/merge-user-vars.util.ts +++ b/packages/twenty-server/src/engine/core-modules/user/user-vars/utils/merge-user-vars.util.ts @@ -1,7 +1,10 @@ -import { type KeyValuePair } from 'src/engine/core-modules/key-value-pair/key-value-pair.entity'; +import { type KeyValuePairEntity } from 'src/engine/core-modules/key-value-pair/key-value-pair.entity'; export const mergeUserVars = ( - userVars: Pick[], + userVars: Pick< + KeyValuePairEntity, + 'key' | 'value' | 'userId' | 'workspaceId' + >[], ): Map => { const workspaceUserVarMap = new Map(); const userUserVarMap = new Map(); diff --git a/packages/twenty-server/src/engine/core-modules/user/user.auto-resolver-opts.ts b/packages/twenty-server/src/engine/core-modules/user/user.auto-resolver-opts.ts index ec360aa8f9f..d4f86e28d17 100644 --- a/packages/twenty-server/src/engine/core-modules/user/user.auto-resolver-opts.ts +++ b/packages/twenty-server/src/engine/core-modules/user/user.auto-resolver-opts.ts @@ -4,7 +4,7 @@ import { type ReadResolverOpts, } from '@ptc-org/nestjs-query-graphql'; -import { User } from 'src/engine/core-modules/user/user.entity'; +import { UserEntity } from 'src/engine/core-modules/user/user.entity'; import { WorkspaceAuthGuard } from 'src/engine/guards/workspace-auth.guard'; export const userAutoResolverOpts: AutoResolverOpts< @@ -19,8 +19,8 @@ export const userAutoResolverOpts: AutoResolverOpts< PagingStrategies >[] = [ { - EntityClass: User, - DTOClass: User, + EntityClass: UserEntity, + DTOClass: UserEntity, enableTotalCount: true, pagingStrategy: PagingStrategies.CURSOR, read: { diff --git a/packages/twenty-server/src/engine/core-modules/user/user.entity.ts b/packages/twenty-server/src/engine/core-modules/user/user.entity.ts index 086fff9b2ec..1f0d01ea48a 100644 --- a/packages/twenty-server/src/engine/core-modules/user/user.entity.ts +++ b/packages/twenty-server/src/engine/core-modules/user/user.entity.ts @@ -17,12 +17,12 @@ import { } from 'typeorm'; import { UUIDScalarType } from 'src/engine/api/graphql/workspace-schema-builder/graphql-types/scalars'; -import { AppToken } from 'src/engine/core-modules/app-token/app-token.entity'; -import { KeyValuePair } from 'src/engine/core-modules/key-value-pair/key-value-pair.entity'; +import { AppTokenEntity } from 'src/engine/core-modules/app-token/app-token.entity'; +import { KeyValuePairEntity } from 'src/engine/core-modules/key-value-pair/key-value-pair.entity'; import { OnboardingStatus } from 'src/engine/core-modules/onboarding/enums/onboarding-status.enum'; -import { UserWorkspace } from 'src/engine/core-modules/user-workspace/user-workspace.entity'; +import { UserWorkspaceEntity } from 'src/engine/core-modules/user-workspace/user-workspace.entity'; import { WorkspaceMemberDTO } from 'src/engine/core-modules/user/dtos/workspace-member.dto'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; registerEnumType(OnboardingStatus, { name: 'OnboardingStatus', @@ -30,12 +30,12 @@ registerEnumType(OnboardingStatus, { }); @Entity({ name: 'user', schema: 'core' }) -@ObjectType() +@ObjectType('User') @Index('UQ_USER_EMAIL', ['email'], { unique: true, where: '"deletedAt" IS NULL', }) -export class User { +export class UserEntity { @IDField(() => UUIDScalarType) @PrimaryGeneratedColumn('uuid') id: string; @@ -98,29 +98,32 @@ export class User { @Column({ nullable: false, default: SOURCE_LOCALE }) locale: string; - @OneToMany(() => AppToken, (appToken) => appToken.user, { + @OneToMany(() => AppTokenEntity, (appToken) => appToken.user, { cascade: true, }) - appTokens: Relation; + appTokens: Relation; - @OneToMany(() => KeyValuePair, (keyValuePair) => keyValuePair.user, { + @OneToMany(() => KeyValuePairEntity, (keyValuePair) => keyValuePair.user, { cascade: true, }) - keyValuePairs: Relation; + keyValuePairs: Relation; @Field(() => WorkspaceMemberDTO, { nullable: true }) workspaceMember: Relation; - @Field(() => [UserWorkspace]) - @OneToMany(() => UserWorkspace, (userWorkspace) => userWorkspace.user) - userWorkspaces: Relation; + @Field(() => [UserWorkspaceEntity]) + @OneToMany( + () => UserWorkspaceEntity, + (userWorkspace: UserWorkspaceEntity) => userWorkspace.user, + ) + userWorkspaces: Relation; @Field(() => OnboardingStatus, { nullable: true }) onboardingStatus: OnboardingStatus; - @Field(() => Workspace, { nullable: true }) - currentWorkspace?: Relation; + @Field(() => WorkspaceEntity, { nullable: true }) + currentWorkspace?: Relation; - @Field(() => UserWorkspace, { nullable: true }) - currentUserWorkspace?: Relation; + @Field(() => UserWorkspaceEntity, { nullable: true }) + currentUserWorkspace?: Relation; } diff --git a/packages/twenty-server/src/engine/core-modules/user/user.module.ts b/packages/twenty-server/src/engine/core-modules/user/user.module.ts index f044a576f81..e5fa0c42db0 100644 --- a/packages/twenty-server/src/engine/core-modules/user/user.module.ts +++ b/packages/twenty-server/src/engine/core-modules/user/user.module.ts @@ -9,13 +9,13 @@ import { AuditModule } from 'src/engine/core-modules/audit/audit.module'; import { FeatureFlagModule } from 'src/engine/core-modules/feature-flag/feature-flag.module'; import { FileUploadModule } from 'src/engine/core-modules/file/file-upload/file-upload.module'; import { FileModule } from 'src/engine/core-modules/file/file.module'; -import { KeyValuePair } from 'src/engine/core-modules/key-value-pair/key-value-pair.entity'; +import { KeyValuePairEntity } from 'src/engine/core-modules/key-value-pair/key-value-pair.entity'; import { OnboardingModule } from 'src/engine/core-modules/onboarding/onboarding.module'; -import { UserWorkspace } from 'src/engine/core-modules/user-workspace/user-workspace.entity'; +import { UserWorkspaceEntity } from 'src/engine/core-modules/user-workspace/user-workspace.entity'; import { UserWorkspaceModule } from 'src/engine/core-modules/user-workspace/user-workspace.module'; import { WorkspaceMemberTranspiler } from 'src/engine/core-modules/user/services/workspace-member-transpiler.service'; import { UserVarsModule } from 'src/engine/core-modules/user/user-vars/user-vars.module'; -import { User } from 'src/engine/core-modules/user/user.entity'; +import { UserEntity } from 'src/engine/core-modules/user/user.entity'; import { UserResolver } from 'src/engine/core-modules/user/user.resolver'; import { WorkspaceModule } from 'src/engine/core-modules/workspace/workspace.module'; import { DataSourceModule } from 'src/engine/metadata-modules/data-source/data-source.module'; @@ -31,7 +31,7 @@ import { UserService } from './services/user.service'; imports: [ NestjsQueryGraphQLModule.forFeature({ imports: [ - NestjsQueryTypeOrmModule.forFeature([User]), + NestjsQueryTypeOrmModule.forFeature([UserEntity]), TypeORMModule, FileModule, ], @@ -42,7 +42,7 @@ import { UserService } from './services/user.service'; FileUploadModule, WorkspaceModule, OnboardingModule, - TypeOrmModule.forFeature([KeyValuePair, UserWorkspace]), + TypeOrmModule.forFeature([KeyValuePairEntity, UserWorkspaceEntity]), UserVarsModule, UserWorkspaceModule, AuditModule, diff --git a/packages/twenty-server/src/engine/core-modules/user/user.resolver.ts b/packages/twenty-server/src/engine/core-modules/user/user.resolver.ts index eaf9aa0ca4e..8948585ebb5 100644 --- a/packages/twenty-server/src/engine/core-modules/user/user.resolver.ts +++ b/packages/twenty-server/src/engine/core-modules/user/user.resolver.ts @@ -34,7 +34,7 @@ import { } from 'src/engine/core-modules/onboarding/onboarding.service'; import { TwentyConfigService } from 'src/engine/core-modules/twenty-config/twenty-config.service'; import { buildTwoFactorAuthenticationMethodSummary } from 'src/engine/core-modules/two-factor-authentication/utils/two-factor-authentication-method.presenter'; -import { UserWorkspace } from 'src/engine/core-modules/user-workspace/user-workspace.entity'; +import { UserWorkspaceEntity } from 'src/engine/core-modules/user-workspace/user-workspace.entity'; import { UserWorkspaceService } from 'src/engine/core-modules/user-workspace/user-workspace.service'; import { DeletedWorkspaceMemberDTO } from 'src/engine/core-modules/user/dtos/deleted-workspace-member.dto'; import { WorkspaceMemberDTO } from 'src/engine/core-modules/user/dtos/workspace-member.dto'; @@ -44,10 +44,10 @@ import { WorkspaceMemberTranspiler, } from 'src/engine/core-modules/user/services/workspace-member-transpiler.service'; import { UserVarsService } from 'src/engine/core-modules/user/user-vars/services/user-vars.service'; -import { User } from 'src/engine/core-modules/user/user.entity'; +import { UserEntity } from 'src/engine/core-modules/user/user.entity'; import { userValidator } from 'src/engine/core-modules/user/user.validate'; import { AuthProviderEnum } from 'src/engine/core-modules/workspace/types/workspace.type'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { AuthProvider } from 'src/engine/decorators/auth/auth-provider.decorator'; import { AuthUser } from 'src/engine/decorators/auth/auth-user.decorator'; import { AuthWorkspace } from 'src/engine/decorators/auth/auth-workspace.decorator'; @@ -69,19 +69,19 @@ const getHMACKey = (email?: string, key?: string | null) => { return hmac.update(email).digest('hex'); }; -@Resolver(() => User) +@Resolver(() => UserEntity) @UseFilters(PermissionsGraphqlApiExceptionFilter) export class UserResolver { constructor( - @InjectRepository(User) - private readonly userRepository: Repository, + @InjectRepository(UserEntity) + private readonly userRepository: Repository, private readonly userService: UserService, private readonly twentyConfigService: TwentyConfigService, private readonly fileUploadService: FileUploadService, private readonly onboardingService: OnboardingService, private readonly userVarService: UserVarsService, - @InjectRepository(UserWorkspace) - private readonly userWorkspaceRepository: Repository, + @InjectRepository(UserWorkspaceEntity) + private readonly userWorkspaceRepository: Repository, private readonly userRoleService: UserRoleService, private readonly permissionsService: PermissionsService, @@ -93,8 +93,8 @@ export class UserResolver { currentUserWorkspace, workspace, }: { - workspace: Workspace; - currentUserWorkspace: UserWorkspace; + workspace: WorkspaceEntity; + currentUserWorkspace: UserWorkspaceEntity; }): Promise { const workspaceIsPendingOrOngoingCreation = [ WorkspaceActivationStatus.PENDING_CREATION, @@ -111,12 +111,12 @@ export class UserResolver { }); } - @Query(() => User) + @Query(() => UserEntity) @UseGuards(UserAuthGuard) async currentUser( - @AuthUser() { id: userId }: User, - @AuthWorkspace({ allowUndefined: true }) workspace: Workspace, - ): Promise { + @AuthUser() { id: userId }: UserEntity, + @AuthWorkspace({ allowUndefined: true }) workspace: WorkspaceEntity, + ): Promise { const user = await this.userRepository.findOne({ where: { id: userId, @@ -130,7 +130,10 @@ export class UserResolver { userValidator.assertIsDefinedOrThrow( user, - new AuthException('User not found', AuthExceptionCode.USER_NOT_FOUND), + new AuthException( + 'UserEntity not found', + AuthExceptionCode.USER_NOT_FOUND, + ), ); if (!workspace) { @@ -173,8 +176,9 @@ export class UserResolver { nullable: true, }) async userVars( - @Parent() user: User, - @AuthWorkspace({ allowUndefined: true }) workspace: Workspace | undefined, + @Parent() user: UserEntity, + @AuthWorkspace({ allowUndefined: true }) + workspace: WorkspaceEntity | undefined, ): Promise> { if (!workspace) return {}; const userVars = await this.userVarService.getAll({ @@ -199,8 +203,9 @@ export class UserResolver { nullable: true, }) async workspaceMember( - @Parent() user: User, - @AuthWorkspace({ allowUndefined: true }) workspace: Workspace | undefined, + @Parent() user: UserEntity, + @AuthWorkspace({ allowUndefined: true }) + workspace: WorkspaceEntity | undefined, ): Promise { if (!workspace) return null; @@ -229,7 +234,7 @@ export class UserResolver { const userWorkspaceRoles = roleOfUserWorkspace.get(userWorkspace.id); if (!isDefined(userWorkspaceRoles)) { - throw new Error('User workspace roles not found'); + throw new Error('UserEntity workspace roles not found'); } return this.workspaceMemberTranspiler.toWorkspaceMemberDto({ @@ -243,8 +248,9 @@ export class UserResolver { nullable: true, }) async workspaceMembers( - @Parent() _user: User, - @AuthWorkspace({ allowUndefined: true }) workspace: Workspace | undefined, + @Parent() _user: UserEntity, + @AuthWorkspace({ allowUndefined: true }) + workspace: WorkspaceEntity | undefined, ): Promise { if (!workspace) return []; @@ -260,7 +266,7 @@ export class UserResolver { }, }); - const userWorkspacesByUserIdMap = new Map( + const userWorkspacesByUserIdMap = new Map( userWorkspaces.map((userWorkspace) => [ userWorkspace.userId, userWorkspace, @@ -283,7 +289,7 @@ export class UserResolver { ); if (!isDefined(userWorkspace)) { - throw new Error('User workspace not found'); + throw new Error('UserEntity workspace not found'); } const userWorkspaceRoles = rolesByUserWorkspacesMap.get( @@ -291,7 +297,7 @@ export class UserResolver { ); if (!isDefined(userWorkspaceRoles)) { - throw new Error('User workspace roles not found'); + throw new Error('UserEntity workspace roles not found'); } return { @@ -311,8 +317,9 @@ export class UserResolver { nullable: true, }) async deletedWorkspaceMembers( - @Parent() _user: User, - @AuthWorkspace({ allowUndefined: true }) workspace: Workspace | undefined, + @Parent() _user: UserEntity, + @AuthWorkspace({ allowUndefined: true }) + workspace: WorkspaceEntity | undefined, ): Promise { if (!workspace) return []; @@ -328,7 +335,7 @@ export class UserResolver { @ResolveField(() => String, { nullable: true, }) - supportUserHash(@Parent() parent: User): string | null { + supportUserHash(@Parent() parent: UserEntity): string | null { if ( this.twentyConfigService.get('SUPPORT_DRIVER') !== SupportDriver.FRONT ) { @@ -342,13 +349,14 @@ export class UserResolver { @Mutation(() => SignedFileDTO) @UseGuards(WorkspaceAuthGuard) async uploadProfilePicture( - @AuthUser() { id }: User, - @AuthWorkspace({ allowUndefined: true }) { id: workspaceId }: Workspace, + @AuthUser() { id }: UserEntity, + @AuthWorkspace({ allowUndefined: true }) + { id: workspaceId }: WorkspaceEntity, @Args({ name: 'file', type: () => GraphQLUpload }) { createReadStream, filename, mimetype }: FileUpload, ): Promise { if (!id) { - throw new Error('User not found'); + throw new Error('UserEntity not found'); } const stream = createReadStream(); @@ -370,9 +378,9 @@ export class UserResolver { return files[0]; } - @Mutation(() => User) + @Mutation(() => UserEntity) @UseGuards(UserAuthGuard) - async deleteUser(@AuthUser() { id: userId }: User) { + async deleteUser(@AuthUser() { id: userId }: UserEntity) { return this.userService.deleteUser(userId); } @@ -380,33 +388,35 @@ export class UserResolver { nullable: true, }) async onboardingStatus( - @Parent() user: User, - @AuthWorkspace({ allowUndefined: true }) workspace: Workspace | undefined, + @Parent() user: UserEntity, + @AuthWorkspace({ allowUndefined: true }) + workspace: WorkspaceEntity | undefined, ): Promise { if (!workspace) return null; return this.onboardingService.getOnboardingStatus(user, workspace); } - @ResolveField(() => Workspace, { + @ResolveField(() => WorkspaceEntity, { nullable: true, }) async currentWorkspace( - @AuthWorkspace({ allowUndefined: true }) workspace: Workspace | undefined, + @AuthWorkspace({ allowUndefined: true }) + workspace: WorkspaceEntity | undefined, ) { return workspace; } - @ResolveField(() => [UserWorkspace], { + @ResolveField(() => [UserWorkspaceEntity], { nullable: false, }) - async workspaces(@Parent() user: User) { + async workspaces(@Parent() user: UserEntity) { return user.userWorkspaces; } @ResolveField(() => AvailableWorkspaces) async availableWorkspaces( - @AuthUser() user: User, + @AuthUser() user: UserEntity, @AuthProvider() authProvider: AuthProviderEnum, ): Promise { return this.userWorkspaceService.setLoginTokenToAvailableWorkspacesWhenAuthProviderMatch( diff --git a/packages/twenty-server/src/engine/core-modules/user/user.validate.ts b/packages/twenty-server/src/engine/core-modules/user/user.validate.ts index 3e8e1b965c7..0d7fd0c1147 100644 --- a/packages/twenty-server/src/engine/core-modules/user/user.validate.ts +++ b/packages/twenty-server/src/engine/core-modules/user/user.validate.ts @@ -1,6 +1,6 @@ import { isDefined } from 'twenty-shared/utils'; -import { type User } from 'src/engine/core-modules/user/user.entity'; +import { type UserEntity } from 'src/engine/core-modules/user/user.entity'; import { UserException, UserExceptionCode, @@ -8,18 +8,20 @@ import { import { type CustomException } from 'src/utils/custom-exception'; const assertIsDefinedOrThrow = ( - user: User | undefined | null, + user: UserEntity | undefined | null, exceptionToThrow: CustomException = new UserException( - 'User not found', + 'UserEntity not found', UserExceptionCode.USER_NOT_FOUND, ), -): asserts user is User => { +): asserts user is UserEntity => { if (!isDefined(user)) { throw exceptionToThrow; } }; -const isUserDefined = (user: User | undefined | null): user is User => { +const isUserDefined = ( + user: UserEntity | undefined | null, +): user is UserEntity => { return isDefined(user); }; diff --git a/packages/twenty-server/src/engine/core-modules/webhook/controllers/webhook.controller.ts b/packages/twenty-server/src/engine/core-modules/webhook/controllers/webhook.controller.ts index c7718ed85c5..24261fdc729 100644 --- a/packages/twenty-server/src/engine/core-modules/webhook/controllers/webhook.controller.ts +++ b/packages/twenty-server/src/engine/core-modules/webhook/controllers/webhook.controller.ts @@ -11,11 +11,11 @@ import { } from '@nestjs/common'; import { RestApiExceptionFilter } from 'src/engine/api/rest/rest-api-exception.filter'; -import { CreateWebhookDTO } from 'src/engine/core-modules/webhook/dtos/create-webhook.dto'; -import { UpdateWebhookDTO } from 'src/engine/core-modules/webhook/dtos/update-webhook.dto'; -import { type Webhook } from 'src/engine/core-modules/webhook/webhook.entity'; +import { CreateWebhookInput } from 'src/engine/core-modules/webhook/dtos/create-webhook.dto'; +import { UpdateWebhookInput } from 'src/engine/core-modules/webhook/dtos/update-webhook.dto'; +import { type WebhookEntity } from 'src/engine/core-modules/webhook/webhook.entity'; import { WebhookService } from 'src/engine/core-modules/webhook/webhook.service'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { AuthWorkspace } from 'src/engine/decorators/auth/auth-workspace.decorator'; import { JwtAuthGuard } from 'src/engine/guards/jwt-auth.guard'; import { WorkspaceAuthGuard } from 'src/engine/guards/workspace-auth.guard'; @@ -31,23 +31,25 @@ export class WebhookController { constructor(private readonly webhookService: WebhookService) {} @Get() - async findAll(@AuthWorkspace() workspace: Workspace): Promise { + async findAll( + @AuthWorkspace() workspace: WorkspaceEntity, + ): Promise { return this.webhookService.findByWorkspaceId(workspace.id); } @Get(':id') async findOne( @Param('id') id: string, - @AuthWorkspace() workspace: Workspace, - ): Promise { + @AuthWorkspace() workspace: WorkspaceEntity, + ): Promise { return this.webhookService.findById(id, workspace.id); } @Post() async create( - @Body() createWebhookDto: CreateWebhookDTO, - @AuthWorkspace() workspace: Workspace, - ): Promise { + @Body() createWebhookDto: CreateWebhookInput, + @AuthWorkspace() workspace: WorkspaceEntity, + ): Promise { return this.webhookService.create({ targetUrl: createWebhookDto.targetUrl, operations: createWebhookDto.operations || ['*.*'], @@ -60,16 +62,16 @@ export class WebhookController { @Patch(':id') async update( @Param('id') id: string, - @Body() updateWebhookDto: UpdateWebhookDTO, - @AuthWorkspace() workspace: Workspace, - ): Promise { + @Body() updateWebhookDto: UpdateWebhookInput, + @AuthWorkspace() workspace: WorkspaceEntity, + ): Promise { return this.webhookService.update(id, workspace.id, updateWebhookDto); } @Delete(':id') async remove( @Param('id') id: string, - @AuthWorkspace() workspace: Workspace, + @AuthWorkspace() workspace: WorkspaceEntity, ): Promise { const result = await this.webhookService.delete(id, workspace.id); diff --git a/packages/twenty-server/src/engine/core-modules/webhook/dtos/create-webhook.dto.ts b/packages/twenty-server/src/engine/core-modules/webhook/dtos/create-webhook.dto.ts index 57374afb2fa..7903abfad37 100644 --- a/packages/twenty-server/src/engine/core-modules/webhook/dtos/create-webhook.dto.ts +++ b/packages/twenty-server/src/engine/core-modules/webhook/dtos/create-webhook.dto.ts @@ -3,7 +3,7 @@ import { Field, InputType } from '@nestjs/graphql'; import { IsNotEmpty, IsUrl } from 'class-validator'; @InputType() -export class CreateWebhookDTO { +export class CreateWebhookInput { @Field() @IsNotEmpty() @IsUrl() diff --git a/packages/twenty-server/src/engine/core-modules/webhook/dtos/delete-webhook.dto.ts b/packages/twenty-server/src/engine/core-modules/webhook/dtos/delete-webhook.dto.ts index 1f63f9df78c..2a1a6c96a2e 100644 --- a/packages/twenty-server/src/engine/core-modules/webhook/dtos/delete-webhook.dto.ts +++ b/packages/twenty-server/src/engine/core-modules/webhook/dtos/delete-webhook.dto.ts @@ -5,7 +5,7 @@ import { IsNotEmpty, IsUUID } from 'class-validator'; import { UUIDScalarType } from 'src/engine/api/graphql/workspace-schema-builder/graphql-types/scalars'; @InputType() -export class DeleteWebhookDTO { +export class DeleteWebhookInput { @Field(() => UUIDScalarType) @IsNotEmpty() @IsUUID() diff --git a/packages/twenty-server/src/engine/core-modules/webhook/dtos/get-webhook.dto.ts b/packages/twenty-server/src/engine/core-modules/webhook/dtos/get-webhook.dto.ts index 5cec9b600a8..4cc1fd42f3d 100644 --- a/packages/twenty-server/src/engine/core-modules/webhook/dtos/get-webhook.dto.ts +++ b/packages/twenty-server/src/engine/core-modules/webhook/dtos/get-webhook.dto.ts @@ -5,7 +5,7 @@ import { IsNotEmpty, IsUUID } from 'class-validator'; import { UUIDScalarType } from 'src/engine/api/graphql/workspace-schema-builder/graphql-types/scalars'; @InputType() -export class GetWebhookDTO { +export class GetWebhookInput { @Field(() => UUIDScalarType) @IsNotEmpty() @IsUUID() diff --git a/packages/twenty-server/src/engine/core-modules/webhook/dtos/update-webhook.dto.ts b/packages/twenty-server/src/engine/core-modules/webhook/dtos/update-webhook.dto.ts index 8ec9e5a9e1c..4febb511fc4 100644 --- a/packages/twenty-server/src/engine/core-modules/webhook/dtos/update-webhook.dto.ts +++ b/packages/twenty-server/src/engine/core-modules/webhook/dtos/update-webhook.dto.ts @@ -5,7 +5,7 @@ import { IsNotEmpty, IsUUID } from 'class-validator'; import { UUIDScalarType } from 'src/engine/api/graphql/workspace-schema-builder/graphql-types/scalars'; @InputType() -export class UpdateWebhookDTO { +export class UpdateWebhookInput { @Field(() => UUIDScalarType) @IsNotEmpty() @IsUUID() diff --git a/packages/twenty-server/src/engine/core-modules/webhook/utils/__tests__/transform-event-batch-to-webhook-events.spec.ts b/packages/twenty-server/src/engine/core-modules/webhook/utils/__tests__/transform-event-batch-to-webhook-events.spec.ts index 1d117ee0b5a..1a28b2ae444 100644 --- a/packages/twenty-server/src/engine/core-modules/webhook/utils/__tests__/transform-event-batch-to-webhook-events.spec.ts +++ b/packages/twenty-server/src/engine/core-modules/webhook/utils/__tests__/transform-event-batch-to-webhook-events.spec.ts @@ -1,6 +1,6 @@ -import type { WorkspaceEventBatch } from 'src/engine/workspace-event-emitter/types/workspace-event-batch.type'; +import { type WorkspaceEventBatch } from 'src/engine/workspace-event-emitter/types/workspace-event-batch.type'; import type { ObjectRecordEvent } from 'src/engine/core-modules/event-emitter/types/object-record-event.event'; -import type { Webhook } from 'src/engine/core-modules/webhook/webhook.entity'; +import type { WebhookEntity } from 'src/engine/core-modules/webhook/webhook.entity'; import { transformEventBatchToWebhookEvents } from 'src/engine/core-modules/webhook/utils/transform-event-batch-to-webhook-events'; import { getMockObjectMetadataEntity } from 'src/utils/__test__/get-object-metadata-entity.mock'; @@ -61,7 +61,7 @@ describe('transformEventBatchToWebhookEvents', () => { targetUrl: 'targetUrl-2', secret: 'secret-2', }, - ] as Webhook[]; + ] as WebhookEntity[]; const result = transformEventBatchToWebhookEvents({ workspaceEventBatch, @@ -198,7 +198,7 @@ describe('transformEventBatchToWebhookEvents', () => { targetUrl: 'targetUrl', secret: 'secret', }, - ] as Webhook[]; + ] as WebhookEntity[]; const result = transformEventBatchToWebhookEvents({ workspaceEventBatch, diff --git a/packages/twenty-server/src/engine/core-modules/webhook/utils/transform-event-batch-to-webhook-events.ts b/packages/twenty-server/src/engine/core-modules/webhook/utils/transform-event-batch-to-webhook-events.ts index cd1dac2a69c..f0a5e31150b 100644 --- a/packages/twenty-server/src/engine/core-modules/webhook/utils/transform-event-batch-to-webhook-events.ts +++ b/packages/twenty-server/src/engine/core-modules/webhook/utils/transform-event-batch-to-webhook-events.ts @@ -1,6 +1,6 @@ import { type WorkspaceEventBatch } from 'src/engine/workspace-event-emitter/types/workspace-event-batch.type'; import { type CallWebhookJobData } from 'src/engine/core-modules/webhook/jobs/call-webhook.job'; -import { type Webhook } from 'src/engine/core-modules/webhook/webhook.entity'; +import { type WebhookEntity } from 'src/engine/core-modules/webhook/webhook.entity'; import type { ObjectRecordEvent } from 'src/engine/core-modules/event-emitter/types/object-record-event.event'; import { transformEventToWebhookEvent } from 'src/engine/core-modules/webhook/utils/transform-event-to-webhook-event'; @@ -9,7 +9,7 @@ export const transformEventBatchToWebhookEvents = ({ webhooks, }: { workspaceEventBatch: WorkspaceEventBatch; - webhooks: Webhook[]; + webhooks: WebhookEntity[]; }): CallWebhookJobData[] => { const result: CallWebhookJobData[] = []; diff --git a/packages/twenty-server/src/engine/core-modules/webhook/webhook.entity.ts b/packages/twenty-server/src/engine/core-modules/webhook/webhook.entity.ts index 40ef19ea995..ab0bc962147 100644 --- a/packages/twenty-server/src/engine/core-modules/webhook/webhook.entity.ts +++ b/packages/twenty-server/src/engine/core-modules/webhook/webhook.entity.ts @@ -15,12 +15,12 @@ import { } from 'typeorm'; import { UUIDScalarType } from 'src/engine/api/graphql/workspace-schema-builder/graphql-types/scalars'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; @Index('IDX_WEBHOOK_WORKSPACE_ID', ['workspaceId']) @Entity({ name: 'webhook', schema: 'core' }) @ObjectType('Webhook') -export class Webhook { +export class WebhookEntity { @IDField(() => UUIDScalarType) @PrimaryGeneratedColumn('uuid') id: string; @@ -57,10 +57,10 @@ export class Webhook { @DeleteDateColumn({ type: 'timestamptz' }) deletedAt?: Date; - @Field(() => Workspace) - @ManyToOne(() => Workspace, (workspace) => workspace.webhooks, { + @Field(() => WorkspaceEntity) + @ManyToOne(() => WorkspaceEntity, (workspace) => workspace.webhooks, { onDelete: 'CASCADE', }) @JoinColumn({ name: 'workspaceId' }) - workspace: Relation; + workspace: Relation; } diff --git a/packages/twenty-server/src/engine/core-modules/webhook/webhook.module.ts b/packages/twenty-server/src/engine/core-modules/webhook/webhook.module.ts index 21677071048..9fe7d1bf28e 100644 --- a/packages/twenty-server/src/engine/core-modules/webhook/webhook.module.ts +++ b/packages/twenty-server/src/engine/core-modules/webhook/webhook.module.ts @@ -2,7 +2,7 @@ import { Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; import { AuthModule } from 'src/engine/core-modules/auth/auth.module'; -import { Webhook } from 'src/engine/core-modules/webhook/webhook.entity'; +import { WebhookEntity } from 'src/engine/core-modules/webhook/webhook.entity'; import { WebhookResolver } from 'src/engine/core-modules/webhook/webhook.resolver'; import { WebhookService } from 'src/engine/core-modules/webhook/webhook.service'; import { WorkspaceCacheStorageModule } from 'src/engine/workspace-cache-storage/workspace-cache-storage.module'; @@ -11,7 +11,7 @@ import { WebhookController } from './controllers/webhook.controller'; @Module({ imports: [ - TypeOrmModule.forFeature([Webhook]), + TypeOrmModule.forFeature([WebhookEntity]), AuthModule, WorkspaceCacheStorageModule, ], diff --git a/packages/twenty-server/src/engine/core-modules/webhook/webhook.resolver.ts b/packages/twenty-server/src/engine/core-modules/webhook/webhook.resolver.ts index bece6b077be..a034fdaf5bd 100644 --- a/packages/twenty-server/src/engine/core-modules/webhook/webhook.resolver.ts +++ b/packages/twenty-server/src/engine/core-modules/webhook/webhook.resolver.ts @@ -3,41 +3,43 @@ import { Args, Mutation, Query, Resolver } from '@nestjs/graphql'; import { type QueryDeepPartialEntity } from 'typeorm/query-builder/QueryPartialEntity'; -import { CreateWebhookDTO } from 'src/engine/core-modules/webhook/dtos/create-webhook.dto'; -import { DeleteWebhookDTO } from 'src/engine/core-modules/webhook/dtos/delete-webhook.dto'; -import { GetWebhookDTO } from 'src/engine/core-modules/webhook/dtos/get-webhook.dto'; -import { UpdateWebhookDTO } from 'src/engine/core-modules/webhook/dtos/update-webhook.dto'; +import { CreateWebhookInput } from 'src/engine/core-modules/webhook/dtos/create-webhook.dto'; +import { DeleteWebhookInput } from 'src/engine/core-modules/webhook/dtos/delete-webhook.dto'; +import { GetWebhookInput } from 'src/engine/core-modules/webhook/dtos/get-webhook.dto'; +import { UpdateWebhookInput } from 'src/engine/core-modules/webhook/dtos/update-webhook.dto'; import { webhookGraphqlApiExceptionHandler } from 'src/engine/core-modules/webhook/utils/webhook-graphql-api-exception-handler.util'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { AuthWorkspace } from 'src/engine/decorators/auth/auth-workspace.decorator'; import { WorkspaceAuthGuard } from 'src/engine/guards/workspace-auth.guard'; -import { Webhook } from './webhook.entity'; +import { WebhookEntity } from './webhook.entity'; import { WebhookService } from './webhook.service'; -@Resolver(() => Webhook) +@Resolver(() => WebhookEntity) @UseGuards(WorkspaceAuthGuard) export class WebhookResolver { constructor(private readonly webhookService: WebhookService) {} - @Query(() => [Webhook]) - async webhooks(@AuthWorkspace() workspace: Workspace): Promise { + @Query(() => [WebhookEntity]) + async webhooks( + @AuthWorkspace() workspace: WorkspaceEntity, + ): Promise { return this.webhookService.findByWorkspaceId(workspace.id); } - @Query(() => Webhook, { nullable: true }) + @Query(() => WebhookEntity, { nullable: true }) async webhook( - @Args('input') input: GetWebhookDTO, - @AuthWorkspace() workspace: Workspace, - ): Promise { + @Args('input') input: GetWebhookInput, + @AuthWorkspace() workspace: WorkspaceEntity, + ): Promise { return this.webhookService.findById(input.id, workspace.id); } - @Mutation(() => Webhook) + @Mutation(() => WebhookEntity) async createWebhook( - @AuthWorkspace() workspace: Workspace, - @Args('input') input: CreateWebhookDTO, - ): Promise { + @AuthWorkspace() workspace: WorkspaceEntity, + @Args('input') input: CreateWebhookInput, + ): Promise { try { return await this.webhookService.create({ targetUrl: input.targetUrl, @@ -52,13 +54,13 @@ export class WebhookResolver { } } - @Mutation(() => Webhook, { nullable: true }) + @Mutation(() => WebhookEntity, { nullable: true }) async updateWebhook( - @AuthWorkspace() workspace: Workspace, - @Args('input') input: UpdateWebhookDTO, - ): Promise { + @AuthWorkspace() workspace: WorkspaceEntity, + @Args('input') input: UpdateWebhookInput, + ): Promise { try { - const updateData: QueryDeepPartialEntity = {}; + const updateData: QueryDeepPartialEntity = {}; if (input.targetUrl !== undefined) updateData.targetUrl = input.targetUrl; if (input.operations !== undefined) @@ -80,8 +82,8 @@ export class WebhookResolver { @Mutation(() => Boolean) async deleteWebhook( - @Args('input') input: DeleteWebhookDTO, - @AuthWorkspace() workspace: Workspace, + @Args('input') input: DeleteWebhookInput, + @AuthWorkspace() workspace: WorkspaceEntity, ): Promise { const result = await this.webhookService.delete(input.id, workspace.id); diff --git a/packages/twenty-server/src/engine/core-modules/webhook/webhook.service.spec.ts b/packages/twenty-server/src/engine/core-modules/webhook/webhook.service.spec.ts index 93759a12d66..cee8b1d8a81 100644 --- a/packages/twenty-server/src/engine/core-modules/webhook/webhook.service.spec.ts +++ b/packages/twenty-server/src/engine/core-modules/webhook/webhook.service.spec.ts @@ -3,7 +3,7 @@ import { getRepositoryToken } from '@nestjs/typeorm'; import { ArrayContains, IsNull } from 'typeorm'; -import { Webhook } from './webhook.entity'; +import { WebhookEntity } from './webhook.entity'; import { WebhookException, WebhookExceptionCode } from './webhook.exception'; import { WebhookService } from './webhook.service'; @@ -14,7 +14,7 @@ describe('WebhookService', () => { const mockWorkspaceId = 'workspace-123'; const mockWebhookId = 'webhook-456'; - const mockWebhook: Webhook = { + const mockWebhook: WebhookEntity = { id: mockWebhookId, targetUrl: 'https://example.com/webhook', secret: 'webhook-secret', @@ -40,7 +40,7 @@ describe('WebhookService', () => { providers: [ WebhookService, { - provide: getRepositoryToken(Webhook), + provide: getRepositoryToken(WebhookEntity), useValue: mockWebhookRepository, }, ], diff --git a/packages/twenty-server/src/engine/core-modules/webhook/webhook.service.ts b/packages/twenty-server/src/engine/core-modules/webhook/webhook.service.ts index 65cfb02a78f..37c12959152 100644 --- a/packages/twenty-server/src/engine/core-modules/webhook/webhook.service.ts +++ b/packages/twenty-server/src/engine/core-modules/webhook/webhook.service.ts @@ -6,14 +6,14 @@ import { isDefined } from 'twenty-shared/utils'; import { ArrayContains, IsNull, Repository } from 'typeorm'; import { type QueryDeepPartialEntity } from 'typeorm/query-builder/QueryPartialEntity'; -import { Webhook } from './webhook.entity'; +import { WebhookEntity } from './webhook.entity'; import { WebhookException, WebhookExceptionCode } from './webhook.exception'; @Injectable() export class WebhookService { constructor( - @InjectRepository(Webhook) - private readonly webhookRepository: Repository, + @InjectRepository(WebhookEntity) + private readonly webhookRepository: Repository, ) {} private normalizeTargetUrl(targetUrl: string): string { @@ -36,7 +36,7 @@ export class WebhookService { } } - async findByWorkspaceId(workspaceId: string): Promise { + async findByWorkspaceId(workspaceId: string): Promise { return this.webhookRepository.find({ where: { workspaceId, @@ -48,7 +48,7 @@ export class WebhookService { async findByOperations( workspaceId: string, operations: string[], - ): Promise { + ): Promise { return this.webhookRepository.find({ where: operations.map((operation) => ({ workspaceId, @@ -58,7 +58,10 @@ export class WebhookService { }); } - async findById(id: string, workspaceId: string): Promise { + async findById( + id: string, + workspaceId: string, + ): Promise { const webhook = await this.webhookRepository.findOne({ where: { id, @@ -70,7 +73,7 @@ export class WebhookService { return webhook || null; } - async create(webhookData: Partial): Promise { + async create(webhookData: Partial): Promise { const normalizedTargetUrl = this.normalizeTargetUrl( webhookData.targetUrl || '', ); @@ -95,8 +98,8 @@ export class WebhookService { async update( id: string, workspaceId: string, - updateData: QueryDeepPartialEntity, - ): Promise { + updateData: QueryDeepPartialEntity, + ): Promise { const webhook = await this.findById(id, workspaceId); if (!webhook) { @@ -126,7 +129,7 @@ export class WebhookService { return this.findById(id, workspaceId); } - async delete(id: string, workspaceId: string): Promise { + async delete(id: string, workspaceId: string): Promise { const webhook = await this.findById(id, workspaceId); if (!webhook) { diff --git a/packages/twenty-server/src/engine/core-modules/workflow/resolvers/workflow-builder.resolver.ts b/packages/twenty-server/src/engine/core-modules/workflow/resolvers/workflow-builder.resolver.ts index 8384fb8d93d..43b61c94701 100644 --- a/packages/twenty-server/src/engine/core-modules/workflow/resolvers/workflow-builder.resolver.ts +++ b/packages/twenty-server/src/engine/core-modules/workflow/resolvers/workflow-builder.resolver.ts @@ -7,7 +7,7 @@ import { PreventNestToAutoLogGraphqlErrorsFilter } from 'src/engine/core-modules import { ResolverValidationPipe } from 'src/engine/core-modules/graphql/pipes/resolver-validation.pipe'; import { ComputeStepOutputSchemaInput } from 'src/engine/core-modules/workflow/dtos/compute-step-output-schema-input.dto'; import { WorkflowTriggerGraphqlApiExceptionFilter } from 'src/engine/core-modules/workflow/filters/workflow-trigger-graphql-api-exception.filter'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { AuthWorkspace } from 'src/engine/decorators/auth/auth-workspace.decorator'; import { SettingsPermissionsGuard } from 'src/engine/guards/settings-permissions.guard'; import { UserAuthGuard } from 'src/engine/guards/user-auth.guard'; @@ -36,7 +36,7 @@ export class WorkflowBuilderResolver { @Mutation(() => graphqlTypeJson) async computeStepOutputSchema( - @AuthWorkspace() { id: workspaceId }: Workspace, + @AuthWorkspace() { id: workspaceId }: WorkspaceEntity, @Args('input') { step, workflowVersionId }: ComputeStepOutputSchemaInput, ): Promise { return this.workflowSchemaWorkspaceService.computeStepOutputSchema({ diff --git a/packages/twenty-server/src/engine/core-modules/workflow/resolvers/workflow-trigger.resolver.ts b/packages/twenty-server/src/engine/core-modules/workflow/resolvers/workflow-trigger.resolver.ts index 8f46be1a6f5..fd2422ba239 100644 --- a/packages/twenty-server/src/engine/core-modules/workflow/resolvers/workflow-trigger.resolver.ts +++ b/packages/twenty-server/src/engine/core-modules/workflow/resolvers/workflow-trigger.resolver.ts @@ -5,11 +5,11 @@ import { UUIDScalarType } from 'src/engine/api/graphql/workspace-schema-builder/ import { buildCreatedByFromFullNameMetadata } from 'src/engine/core-modules/actor/utils/build-created-by-from-full-name-metadata.util'; import { PreventNestToAutoLogGraphqlErrorsFilter } from 'src/engine/core-modules/graphql/filters/prevent-nest-to-auto-log-graphql-errors.filter'; import { ResolverValidationPipe } from 'src/engine/core-modules/graphql/pipes/resolver-validation.pipe'; -import { User } from 'src/engine/core-modules/user/user.entity'; +import { UserEntity } from 'src/engine/core-modules/user/user.entity'; import { RunWorkflowVersionInput } from 'src/engine/core-modules/workflow/dtos/run-workflow-version-input.dto'; import { WorkflowRunDTO } from 'src/engine/core-modules/workflow/dtos/workflow-run.dto'; import { WorkflowTriggerGraphqlApiExceptionFilter } from 'src/engine/core-modules/workflow/filters/workflow-trigger-graphql-api-exception.filter'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { AuthUser } from 'src/engine/decorators/auth/auth-user.decorator'; import { AuthWorkspace } from 'src/engine/decorators/auth/auth-workspace.decorator'; import { SettingsPermissionsGuard } from 'src/engine/guards/settings-permissions.guard'; @@ -19,7 +19,7 @@ import { PermissionFlagType } from 'src/engine/metadata-modules/permissions/cons import { PermissionsGraphqlApiExceptionFilter } from 'src/engine/metadata-modules/permissions/utils/permissions-graphql-api-exception.filter'; import { TwentyORMGlobalManager } from 'src/engine/twenty-orm/twenty-orm-global.manager'; import { WorkflowTriggerWorkspaceService } from 'src/modules/workflow/workflow-trigger/workspace-services/workflow-trigger.workspace-service'; -import { type WorkspaceMemberWorkspaceEntity } from 'src/modules/workspace-member/standard-objects/workspace-member.workspace-entity'; +import { WorkspaceMemberWorkspaceEntity } from 'src/modules/workspace-member/standard-objects/workspace-member.workspace-entity'; @Resolver() @UseGuards( @@ -61,8 +61,8 @@ export class WorkflowTriggerResolver { @Mutation(() => WorkflowRunDTO) async runWorkflowVersion( - @AuthUser() user: User, - @AuthWorkspace() workspace: Workspace, + @AuthUser() user: UserEntity, + @AuthWorkspace() workspace: WorkspaceEntity, @Args('input') { workflowVersionId, workflowRunId, payload }: RunWorkflowVersionInput, ) { diff --git a/packages/twenty-server/src/engine/core-modules/workflow/resolvers/workflow-version-edge.resolver.ts b/packages/twenty-server/src/engine/core-modules/workflow/resolvers/workflow-version-edge.resolver.ts index 1d5cf56468d..7c50eb6be36 100644 --- a/packages/twenty-server/src/engine/core-modules/workflow/resolvers/workflow-version-edge.resolver.ts +++ b/packages/twenty-server/src/engine/core-modules/workflow/resolvers/workflow-version-edge.resolver.ts @@ -6,7 +6,7 @@ import { ResolverValidationPipe } from 'src/engine/core-modules/graphql/pipes/re import { CreateWorkflowVersionEdgeInput } from 'src/engine/core-modules/workflow/dtos/create-workflow-version-edge-input.dto'; import { WorkflowVersionStepChangesDTO } from 'src/engine/core-modules/workflow/dtos/workflow-version-step-changes.dto'; import { WorkflowVersionEdgeGraphqlApiExceptionFilter } from 'src/engine/core-modules/workflow/filters/workflow-version-edge-graphql-api-exception.filter'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { AuthWorkspace } from 'src/engine/decorators/auth/auth-workspace.decorator'; import { SettingsPermissionsGuard } from 'src/engine/guards/settings-permissions.guard'; import { UserAuthGuard } from 'src/engine/guards/user-auth.guard'; @@ -34,7 +34,7 @@ export class WorkflowVersionEdgeResolver { @Mutation(() => WorkflowVersionStepChangesDTO) async createWorkflowVersionEdge( - @AuthWorkspace() { id: workspaceId }: Workspace, + @AuthWorkspace() { id: workspaceId }: WorkspaceEntity, @Args('input') { source, @@ -54,7 +54,7 @@ export class WorkflowVersionEdgeResolver { @Mutation(() => WorkflowVersionStepChangesDTO) async deleteWorkflowVersionEdge( - @AuthWorkspace() { id: workspaceId }: Workspace, + @AuthWorkspace() { id: workspaceId }: WorkspaceEntity, @Args('input') { source, diff --git a/packages/twenty-server/src/engine/core-modules/workflow/resolvers/workflow-version-step.resolver.ts b/packages/twenty-server/src/engine/core-modules/workflow/resolvers/workflow-version-step.resolver.ts index 07387ff9563..749ea484f31 100644 --- a/packages/twenty-server/src/engine/core-modules/workflow/resolvers/workflow-version-step.resolver.ts +++ b/packages/twenty-server/src/engine/core-modules/workflow/resolvers/workflow-version-step.resolver.ts @@ -14,7 +14,7 @@ import { UpdateWorkflowVersionStepInput } from 'src/engine/core-modules/workflow import { WorkflowActionDTO } from 'src/engine/core-modules/workflow/dtos/workflow-action.dto'; import { WorkflowVersionStepChangesDTO } from 'src/engine/core-modules/workflow/dtos/workflow-version-step-changes.dto'; import { WorkflowVersionStepGraphqlApiExceptionFilter } from 'src/engine/core-modules/workflow/filters/workflow-version-step-graphql-api-exception.filter'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { AuthWorkspace } from 'src/engine/decorators/auth/auth-workspace.decorator'; import { SettingsPermissionsGuard } from 'src/engine/guards/settings-permissions.guard'; import { UserAuthGuard } from 'src/engine/guards/user-auth.guard'; @@ -48,7 +48,7 @@ export class WorkflowVersionStepResolver { @Mutation(() => WorkflowVersionStepChangesDTO) async createWorkflowVersionStep( - @AuthWorkspace() { id: workspaceId }: Workspace, + @AuthWorkspace() { id: workspaceId }: WorkspaceEntity, @Args('input') input: CreateWorkflowVersionStepInput, ): Promise { @@ -73,7 +73,7 @@ export class WorkflowVersionStepResolver { @Mutation(() => WorkflowActionDTO) async updateWorkflowVersionStep( - @AuthWorkspace() { id: workspaceId }: Workspace, + @AuthWorkspace() { id: workspaceId }: WorkspaceEntity, @Args('input') { step, workflowVersionId }: UpdateWorkflowVersionStepInput, ): Promise { @@ -86,7 +86,7 @@ export class WorkflowVersionStepResolver { @Mutation(() => WorkflowVersionStepChangesDTO) async deleteWorkflowVersionStep( - @AuthWorkspace() { id: workspaceId }: Workspace, + @AuthWorkspace() { id: workspaceId }: WorkspaceEntity, @Args('input') { stepId, workflowVersionId }: DeleteWorkflowVersionStepInput, ): Promise { @@ -99,7 +99,7 @@ export class WorkflowVersionStepResolver { @Mutation(() => Boolean) async submitFormStep( - @AuthWorkspace() { id: workspaceId }: Workspace, + @AuthWorkspace() { id: workspaceId }: WorkspaceEntity, @Args('input') { stepId, workflowRunId, response }: SubmitFormStepInput, ) { @@ -115,7 +115,7 @@ export class WorkflowVersionStepResolver { @Mutation(() => WorkflowActionDTO) async updateWorkflowRunStep( - @AuthWorkspace() { id: workspaceId }: Workspace, + @AuthWorkspace() { id: workspaceId }: WorkspaceEntity, @Args('input') { workflowRunId, step }: UpdateWorkflowRunStepInput, ): Promise { @@ -130,7 +130,7 @@ export class WorkflowVersionStepResolver { @Mutation(() => WorkflowVersionStepChangesDTO) async duplicateWorkflowVersionStep( - @AuthWorkspace() { id: workspaceId }: Workspace, + @AuthWorkspace() { id: workspaceId }: WorkspaceEntity, @Args('input') { stepId, workflowVersionId }: DuplicateWorkflowVersionStepInput, ): Promise { diff --git a/packages/twenty-server/src/engine/core-modules/workflow/resolvers/workflow-version.resolver.ts b/packages/twenty-server/src/engine/core-modules/workflow/resolvers/workflow-version.resolver.ts index 7673b1af7c9..28ed91bc843 100644 --- a/packages/twenty-server/src/engine/core-modules/workflow/resolvers/workflow-version.resolver.ts +++ b/packages/twenty-server/src/engine/core-modules/workflow/resolvers/workflow-version.resolver.ts @@ -6,7 +6,7 @@ import { ResolverValidationPipe } from 'src/engine/core-modules/graphql/pipes/re import { CreateDraftFromWorkflowVersionInput } from 'src/engine/core-modules/workflow/dtos/create-draft-from-workflow-version-input.dto'; import { UpdateWorkflowVersionPositionsInput } from 'src/engine/core-modules/workflow/dtos/update-workflow-version-positions-input.dto'; import { WorkflowVersionDTO } from 'src/engine/core-modules/workflow/dtos/workflow-version.dto'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { AuthWorkspace } from 'src/engine/decorators/auth/auth-workspace.decorator'; import { SettingsPermissionsGuard } from 'src/engine/guards/settings-permissions.guard'; import { UserAuthGuard } from 'src/engine/guards/user-auth.guard'; @@ -33,7 +33,7 @@ export class WorkflowVersionResolver { @Mutation(() => WorkflowVersionDTO) async createDraftFromWorkflowVersion( - @AuthWorkspace() { id: workspaceId }: Workspace, + @AuthWorkspace() { id: workspaceId }: WorkspaceEntity, @Args('input') { workflowId, @@ -49,7 +49,7 @@ export class WorkflowVersionResolver { @Mutation(() => Boolean) async updateWorkflowVersionPositions( - @AuthWorkspace() { id: workspaceId }: Workspace, + @AuthWorkspace() { id: workspaceId }: WorkspaceEntity, @Args('input') { workflowVersionId, positions }: UpdateWorkflowVersionPositionsInput, ) { diff --git a/packages/twenty-server/src/engine/core-modules/workspace-invitation/services/workspace-invitation.service.spec.ts b/packages/twenty-server/src/engine/core-modules/workspace-invitation/services/workspace-invitation.service.spec.ts index 3a0e431c54f..4661d89b818 100644 --- a/packages/twenty-server/src/engine/core-modules/workspace-invitation/services/workspace-invitation.service.spec.ts +++ b/packages/twenty-server/src/engine/core-modules/workspace-invitation/services/workspace-invitation.service.spec.ts @@ -4,7 +4,7 @@ import { getRepositoryToken } from '@nestjs/typeorm'; import { Repository } from 'typeorm'; import { - AppToken, + AppTokenEntity, AppTokenType, } from 'src/engine/core-modules/app-token/app-token.entity'; import { WorkspaceDomainsService } from 'src/engine/core-modules/domain/workspace-domains/services/workspace-domains.service'; @@ -13,10 +13,10 @@ import { FileService } from 'src/engine/core-modules/file/services/file.service' import { I18nService } from 'src/engine/core-modules/i18n/i18n.service'; import { OnboardingService } from 'src/engine/core-modules/onboarding/onboarding.service'; import { TwentyConfigService } from 'src/engine/core-modules/twenty-config/twenty-config.service'; -import { UserWorkspace } from 'src/engine/core-modules/user-workspace/user-workspace.entity'; +import { UserWorkspaceEntity } from 'src/engine/core-modules/user-workspace/user-workspace.entity'; import { WorkspaceInvitationException } from 'src/engine/core-modules/workspace-invitation/workspace-invitation.exception'; import { WorkspaceService } from 'src/engine/core-modules/workspace/services/workspace.service'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { type WorkspaceMemberWorkspaceEntity } from 'src/modules/workspace-member/standard-objects/workspace-member.workspace-entity'; import { WorkspaceInvitationService } from './workspace-invitation.service'; @@ -37,8 +37,8 @@ jest.mock('@react-email/render', () => ({ describe('WorkspaceInvitationService', () => { let service: WorkspaceInvitationService; - let appTokenRepository: Repository; - let userWorkspaceRepository: Repository; + let appTokenRepository: Repository; + let userWorkspaceRepository: Repository; let twentyConfigService: TwentyConfigService; let emailService: EmailService; let onboardingService: OnboardingService; @@ -48,15 +48,15 @@ describe('WorkspaceInvitationService', () => { providers: [ WorkspaceInvitationService, { - provide: getRepositoryToken(AppToken), + provide: getRepositoryToken(AppTokenEntity), useClass: Repository, }, { - provide: getRepositoryToken(UserWorkspace), + provide: getRepositoryToken(UserWorkspaceEntity), useClass: Repository, }, { - provide: getRepositoryToken(Workspace), + provide: getRepositoryToken(WorkspaceEntity), useClass: Repository, }, { @@ -118,11 +118,11 @@ describe('WorkspaceInvitationService', () => { service = module.get( WorkspaceInvitationService, ); - appTokenRepository = module.get>( - getRepositoryToken(AppToken), + appTokenRepository = module.get>( + getRepositoryToken(AppTokenEntity), ); - userWorkspaceRepository = module.get>( - getRepositoryToken(UserWorkspace), + userWorkspaceRepository = module.get>( + getRepositoryToken(UserWorkspaceEntity), ); twentyConfigService = module.get(TwentyConfigService); emailService = module.get(EmailService); @@ -136,7 +136,7 @@ describe('WorkspaceInvitationService', () => { describe('createWorkspaceInvitation', () => { it('should create a workspace invitation successfully', async () => { const email = 'test@example.com'; - const workspace = { id: 'workspace-id' } as Workspace; + const workspace = { id: 'workspace-id' } as WorkspaceEntity; jest.spyOn(appTokenRepository, 'createQueryBuilder').mockReturnValue({ where: jest.fn().mockReturnThis(), @@ -147,7 +147,7 @@ describe('WorkspaceInvitationService', () => { jest.spyOn(userWorkspaceRepository, 'exists').mockResolvedValue(false); jest .spyOn(service, 'generateInvitationToken') - .mockResolvedValue({} as AppToken); + .mockResolvedValue({} as AppTokenEntity); await expect( service.createWorkspaceInvitation(email, workspace), @@ -156,7 +156,7 @@ describe('WorkspaceInvitationService', () => { it('should throw an exception if invitation already exists', async () => { const email = 'test@example.com'; - const workspace = { id: 'workspace-id' } as Workspace; + const workspace = { id: 'workspace-id' } as WorkspaceEntity; jest.spyOn(appTokenRepository, 'createQueryBuilder').mockReturnValue({ where: jest.fn().mockReturnThis(), @@ -177,7 +177,7 @@ describe('WorkspaceInvitationService', () => { id: 'workspace-id', inviteHash: 'invite-hash', displayName: 'Test Workspace', - } as Workspace; + } as WorkspaceEntity; const sender = { userEmail: 'sender@example.com', name: { firstName: 'Sender' }, @@ -188,7 +188,7 @@ describe('WorkspaceInvitationService', () => { context: { email: 'test@example.com' }, value: 'token-value', type: AppTokenType.InvitationToken, - } as AppToken); + } as AppTokenEntity); jest .spyOn(twentyConfigService, 'get') .mockReturnValue('http://localhost:3000'); diff --git a/packages/twenty-server/src/engine/core-modules/workspace-invitation/services/workspace-invitation.service.ts b/packages/twenty-server/src/engine/core-modules/workspace-invitation/services/workspace-invitation.service.ts index fe80abdd40a..ca94f218d84 100644 --- a/packages/twenty-server/src/engine/core-modules/workspace-invitation/services/workspace-invitation.service.ts +++ b/packages/twenty-server/src/engine/core-modules/workspace-invitation/services/workspace-invitation.service.ts @@ -13,7 +13,7 @@ import { getAppPath } from 'twenty-shared/utils'; import { IsNull, Repository } from 'typeorm'; import { - AppToken, + AppTokenEntity, AppTokenType, } from 'src/engine/core-modules/app-token/app-token.entity'; import { @@ -26,23 +26,23 @@ import { FileService } from 'src/engine/core-modules/file/services/file.service' import { I18nService } from 'src/engine/core-modules/i18n/i18n.service'; import { OnboardingService } from 'src/engine/core-modules/onboarding/onboarding.service'; import { TwentyConfigService } from 'src/engine/core-modules/twenty-config/twenty-config.service'; -import { UserWorkspace } from 'src/engine/core-modules/user-workspace/user-workspace.entity'; +import { UserWorkspaceEntity } from 'src/engine/core-modules/user-workspace/user-workspace.entity'; import { type SendInvitationsOutput } from 'src/engine/core-modules/workspace-invitation/dtos/send-invitations.output'; import { castAppTokenToWorkspaceInvitationUtil } from 'src/engine/core-modules/workspace-invitation/utils/cast-app-token-to-workspace-invitation.util'; import { WorkspaceInvitationException, WorkspaceInvitationExceptionCode, } from 'src/engine/core-modules/workspace-invitation/workspace-invitation.exception'; -import { type Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; -import { type WorkspaceMemberWorkspaceEntity } from 'src/modules/workspace-member/standard-objects/workspace-member.workspace-entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceMemberWorkspaceEntity } from 'src/modules/workspace-member/standard-objects/workspace-member.workspace-entity'; @Injectable() export class WorkspaceInvitationService { constructor( - @InjectRepository(AppToken) - private readonly appTokenRepository: Repository, - @InjectRepository(UserWorkspace) - private readonly userWorkspaceRepository: Repository, + @InjectRepository(AppTokenEntity) + private readonly appTokenRepository: Repository, + @InjectRepository(UserWorkspaceEntity) + private readonly userWorkspaceRepository: Repository, private readonly twentyConfigService: TwentyConfigService, private readonly emailService: EmailService, private readonly onboardingService: OnboardingService, @@ -135,7 +135,7 @@ export class WorkspaceInvitationService { return appToken; } - async loadWorkspaceInvitations(workspace: Workspace) { + async loadWorkspaceInvitations(workspace: WorkspaceEntity) { const appTokens = await this.appTokenRepository.find({ where: { workspaceId: workspace.id, @@ -150,7 +150,7 @@ export class WorkspaceInvitationService { return appTokens.map(castAppTokenToWorkspaceInvitationUtil); } - async createWorkspaceInvitation(email: string, workspace: Workspace) { + async createWorkspaceInvitation(email: string, workspace: WorkspaceEntity) { const maybeWorkspaceInvitation = await this.getOneWorkspaceInvitation( workspace.id, email.toLowerCase(), @@ -213,7 +213,7 @@ export class WorkspaceInvitationService { async resendWorkspaceInvitation( appTokenId: string, - workspace: Workspace, + workspace: WorkspaceEntity, sender: WorkspaceMemberWorkspaceEntity, ) { const appToken = await this.appTokenRepository.findOne({ @@ -238,7 +238,7 @@ export class WorkspaceInvitationService { async sendInvitations( emails: string[], - workspace: Workspace, + workspace: WorkspaceEntity, sender: WorkspaceMemberWorkspaceEntity, usePersonalInvitation = true, ): Promise { diff --git a/packages/twenty-server/src/engine/core-modules/workspace-invitation/utils/cast-app-token-to-workspace-invitation.spec.ts b/packages/twenty-server/src/engine/core-modules/workspace-invitation/utils/cast-app-token-to-workspace-invitation.spec.ts index a29a46559a4..eab60a0918e 100644 --- a/packages/twenty-server/src/engine/core-modules/workspace-invitation/utils/cast-app-token-to-workspace-invitation.spec.ts +++ b/packages/twenty-server/src/engine/core-modules/workspace-invitation/utils/cast-app-token-to-workspace-invitation.spec.ts @@ -1,5 +1,5 @@ import { - type AppToken, + type AppTokenEntity, AppTokenType, } from 'src/engine/core-modules/app-token/app-token.entity'; import { @@ -16,7 +16,7 @@ describe('castAppTokenToWorkspaceInvitation', () => { type: AppTokenType.RefreshToken, context: { email: 'test@example.com' }, expiresAt: new Date(), - } as AppToken; + } as AppTokenEntity; expect(() => castAppTokenToWorkspaceInvitationUtil(appToken)).toThrowError( new WorkspaceInvitationException( @@ -32,7 +32,7 @@ describe('castAppTokenToWorkspaceInvitation', () => { type: AppTokenType.InvitationToken, context: null, expiresAt: new Date(), - } as AppToken; + } as AppTokenEntity; expect(() => castAppTokenToWorkspaceInvitationUtil(appToken)).toThrowError( new WorkspaceInvitationException( @@ -48,7 +48,7 @@ describe('castAppTokenToWorkspaceInvitation', () => { type: AppTokenType.InvitationToken, context: { email: 'test@example.com' }, expiresAt: new Date(), - } as AppToken; + } as AppTokenEntity; const invitation = castAppTokenToWorkspaceInvitationUtil(appToken); diff --git a/packages/twenty-server/src/engine/core-modules/workspace-invitation/utils/cast-app-token-to-workspace-invitation.util.ts b/packages/twenty-server/src/engine/core-modules/workspace-invitation/utils/cast-app-token-to-workspace-invitation.util.ts index 5b868d2e5ba..d1a39b7819b 100644 --- a/packages/twenty-server/src/engine/core-modules/workspace-invitation/utils/cast-app-token-to-workspace-invitation.util.ts +++ b/packages/twenty-server/src/engine/core-modules/workspace-invitation/utils/cast-app-token-to-workspace-invitation.util.ts @@ -1,5 +1,5 @@ import { - type AppToken, + type AppTokenEntity, AppTokenType, } from 'src/engine/core-modules/app-token/app-token.entity'; import { @@ -7,7 +7,9 @@ import { WorkspaceInvitationExceptionCode, } from 'src/engine/core-modules/workspace-invitation/workspace-invitation.exception'; -export const castAppTokenToWorkspaceInvitationUtil = (appToken: AppToken) => { +export const castAppTokenToWorkspaceInvitationUtil = ( + appToken: AppTokenEntity, +) => { if (appToken.type !== AppTokenType.InvitationToken) { throw new WorkspaceInvitationException( `Token type must be "${AppTokenType.InvitationToken}"`, diff --git a/packages/twenty-server/src/engine/core-modules/workspace-invitation/workspace-invitation.module.ts b/packages/twenty-server/src/engine/core-modules/workspace-invitation/workspace-invitation.module.ts index a0a34beb62d..becf292d1bc 100644 --- a/packages/twenty-server/src/engine/core-modules/workspace-invitation/workspace-invitation.module.ts +++ b/packages/twenty-server/src/engine/core-modules/workspace-invitation/workspace-invitation.module.ts @@ -2,21 +2,25 @@ import { Module } from '@nestjs/common'; import { NestjsQueryTypeOrmModule } from '@ptc-org/nestjs-query-typeorm'; -import { AppToken } from 'src/engine/core-modules/app-token/app-token.entity'; +import { AppTokenEntity } from 'src/engine/core-modules/app-token/app-token.entity'; import { WorkspaceDomainsModule } from 'src/engine/core-modules/domain/workspace-domains/workspace-domains.module'; import { FeatureFlagModule } from 'src/engine/core-modules/feature-flag/feature-flag.module'; import { FileModule } from 'src/engine/core-modules/file/file.module'; import { OnboardingModule } from 'src/engine/core-modules/onboarding/onboarding.module'; -import { UserWorkspace } from 'src/engine/core-modules/user-workspace/user-workspace.entity'; +import { UserWorkspaceEntity } from 'src/engine/core-modules/user-workspace/user-workspace.entity'; import { WorkspaceInvitationService } from 'src/engine/core-modules/workspace-invitation/services/workspace-invitation.service'; import { WorkspaceInvitationResolver } from 'src/engine/core-modules/workspace-invitation/workspace-invitation.resolver'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { PermissionsModule } from 'src/engine/metadata-modules/permissions/permissions.module'; @Module({ imports: [ WorkspaceDomainsModule, - NestjsQueryTypeOrmModule.forFeature([AppToken, UserWorkspace, Workspace]), + NestjsQueryTypeOrmModule.forFeature([ + AppTokenEntity, + UserWorkspaceEntity, + WorkspaceEntity, + ]), FileModule, OnboardingModule, PermissionsModule, diff --git a/packages/twenty-server/src/engine/core-modules/workspace-invitation/workspace-invitation.resolver.ts b/packages/twenty-server/src/engine/core-modules/workspace-invitation/workspace-invitation.resolver.ts index 5eb024f352c..7ed5492929e 100644 --- a/packages/twenty-server/src/engine/core-modules/workspace-invitation/workspace-invitation.resolver.ts +++ b/packages/twenty-server/src/engine/core-modules/workspace-invitation/workspace-invitation.resolver.ts @@ -4,11 +4,11 @@ import { Args, Mutation, Query, Resolver } from '@nestjs/graphql'; import { FileService } from 'src/engine/core-modules/file/services/file.service'; import { PreventNestToAutoLogGraphqlErrorsFilter } from 'src/engine/core-modules/graphql/filters/prevent-nest-to-auto-log-graphql-errors.filter'; import { ResolverValidationPipe } from 'src/engine/core-modules/graphql/pipes/resolver-validation.pipe'; -import { User } from 'src/engine/core-modules/user/user.entity'; +import { UserEntity } from 'src/engine/core-modules/user/user.entity'; import { SendInvitationsOutput } from 'src/engine/core-modules/workspace-invitation/dtos/send-invitations.output'; import { WorkspaceInvitation } from 'src/engine/core-modules/workspace-invitation/dtos/workspace-invitation.dto'; import { WorkspaceInvitationService } from 'src/engine/core-modules/workspace-invitation/services/workspace-invitation.service'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { AuthUser } from 'src/engine/decorators/auth/auth-user.decorator'; import { AuthWorkspace } from 'src/engine/decorators/auth/auth-workspace.decorator'; import { SettingsPermissionsGuard } from 'src/engine/guards/settings-permissions.guard'; @@ -17,7 +17,7 @@ import { WorkspaceAuthGuard } from 'src/engine/guards/workspace-auth.guard'; import { PermissionFlagType } from 'src/engine/metadata-modules/permissions/constants/permission-flag-type.constants'; import { PermissionsGraphqlApiExceptionFilter } from 'src/engine/metadata-modules/permissions/utils/permissions-graphql-api-exception.filter'; import { TwentyORMGlobalManager } from 'src/engine/twenty-orm/twenty-orm-global.manager'; -import { type WorkspaceMemberWorkspaceEntity } from 'src/modules/workspace-member/standard-objects/workspace-member.workspace-entity'; +import { WorkspaceMemberWorkspaceEntity } from 'src/modules/workspace-member/standard-objects/workspace-member.workspace-entity'; import { SendInvitationsInput } from './dtos/send-invitations.input'; @@ -41,7 +41,7 @@ export class WorkspaceInvitationResolver { @Mutation(() => String) async deleteWorkspaceInvitation( @Args('appTokenId') appTokenId: string, - @AuthWorkspace() { id: workspaceId }: Workspace, + @AuthWorkspace() { id: workspaceId }: WorkspaceEntity, ) { return this.workspaceInvitationService.deleteWorkspaceInvitation( appTokenId, @@ -53,8 +53,8 @@ export class WorkspaceInvitationResolver { @UseGuards(UserAuthGuard) async resendWorkspaceInvitation( @Args('appTokenId') appTokenId: string, - @AuthWorkspace() workspace: Workspace, - @AuthUser() user: User, + @AuthWorkspace() workspace: WorkspaceEntity, + @AuthUser() user: UserEntity, ) { const workspaceMemberRepository = await this.twentyORMGlobalManager.getRepositoryForWorkspace( @@ -76,7 +76,7 @@ export class WorkspaceInvitationResolver { } @Query(() => [WorkspaceInvitation]) - async findWorkspaceInvitations(@AuthWorkspace() workspace: Workspace) { + async findWorkspaceInvitations(@AuthWorkspace() workspace: WorkspaceEntity) { return this.workspaceInvitationService.loadWorkspaceInvitations(workspace); } @@ -84,8 +84,8 @@ export class WorkspaceInvitationResolver { @UseGuards(UserAuthGuard) async sendInvitations( @Args() sendInviteLinkInput: SendInvitationsInput, - @AuthUser() user: User, - @AuthWorkspace() workspace: Workspace, + @AuthUser() user: UserEntity, + @AuthWorkspace() workspace: WorkspaceEntity, ): Promise { let workspaceLogoWithToken = ''; diff --git a/packages/twenty-server/src/engine/core-modules/workspace/crons/jobs/check-custom-domain-valid-records.cron.job.ts b/packages/twenty-server/src/engine/core-modules/workspace/crons/jobs/check-custom-domain-valid-records.cron.job.ts index 6658fe0182d..136d5931c97 100644 --- a/packages/twenty-server/src/engine/core-modules/workspace/crons/jobs/check-custom-domain-valid-records.cron.job.ts +++ b/packages/twenty-server/src/engine/core-modules/workspace/crons/jobs/check-custom-domain-valid-records.cron.job.ts @@ -8,15 +8,15 @@ import { CustomDomainManagerService } from 'src/engine/core-modules/domain/custo import { Process } from 'src/engine/core-modules/message-queue/decorators/process.decorator'; import { Processor } from 'src/engine/core-modules/message-queue/decorators/processor.decorator'; import { MessageQueue } from 'src/engine/core-modules/message-queue/message-queue.constants'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; export const CHECK_CUSTOM_DOMAIN_VALID_RECORDS_CRON_PATTERN = '0 * * * *'; @Processor(MessageQueue.cronQueue) export class CheckCustomDomainValidRecordsCronJob { constructor( - @InjectRepository(Workspace) - private readonly workspaceRepository: Repository, + @InjectRepository(WorkspaceEntity) + private readonly workspaceRepository: Repository, private readonly customDomainManagerService: CustomDomainManagerService, ) {} diff --git a/packages/twenty-server/src/engine/core-modules/workspace/dtos/public-workspace-data-output.ts b/packages/twenty-server/src/engine/core-modules/workspace/dtos/public-workspace-data-output.ts index 8c2a7bf1e06..bb4efeea1d1 100644 --- a/packages/twenty-server/src/engine/core-modules/workspace/dtos/public-workspace-data-output.ts +++ b/packages/twenty-server/src/engine/core-modules/workspace/dtos/public-workspace-data-output.ts @@ -6,7 +6,7 @@ import { SSOIdentityProviderStatus, } from 'src/engine/core-modules/sso/workspace-sso-identity-provider.entity'; import { WorkspaceUrlsDTO } from 'src/engine/core-modules/workspace/dtos/workspace-urls.dto'; -import { type Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; @ObjectType('SSOIdentityProvider') export class SSOIdentityProviderDTO { @@ -53,10 +53,10 @@ export class PublicWorkspaceDataOutput { authProviders: AuthProvidersDTO; @Field(() => String, { nullable: true }) - logo: Workspace['logo']; + logo: WorkspaceEntity['logo']; @Field(() => String, { nullable: true }) - displayName: Workspace['displayName']; + displayName: WorkspaceEntity['displayName']; @Field(() => WorkspaceUrlsDTO) workspaceUrls: WorkspaceUrlsDTO; diff --git a/packages/twenty-server/src/engine/core-modules/workspace/services/__tests__/workspace.service.spec.ts b/packages/twenty-server/src/engine/core-modules/workspace/services/__tests__/workspace.service.spec.ts index 8a7f6e57262..cb583a7a2e2 100644 --- a/packages/twenty-server/src/engine/core-modules/workspace/services/__tests__/workspace.service.spec.ts +++ b/packages/twenty-server/src/engine/core-modules/workspace/services/__tests__/workspace.service.spec.ts @@ -3,6 +3,7 @@ import { getRepositoryToken } from '@nestjs/typeorm'; import { type Repository } from 'typeorm'; +import { ApprovedAccessDomainEntity } from 'src/engine/core-modules/approved-access-domain/approved-access-domain.entity'; import { AuditService } from 'src/engine/core-modules/audit/services/audit.service'; import { BillingSubscriptionService } from 'src/engine/core-modules/billing/services/billing-subscription.service'; import { BillingService } from 'src/engine/core-modules/billing/services/billing.service'; @@ -16,15 +17,14 @@ import { MessageQueue } from 'src/engine/core-modules/message-queue/message-queu import { type MessageQueueService } from 'src/engine/core-modules/message-queue/services/message-queue.service'; import { getQueueToken } from 'src/engine/core-modules/message-queue/utils/get-queue-token.util'; import { OnboardingService } from 'src/engine/core-modules/onboarding/onboarding.service'; -import { PublicDomain } from 'src/engine/core-modules/public-domain/public-domain.entity'; import { TwentyConfigService } from 'src/engine/core-modules/twenty-config/twenty-config.service'; -import { UserWorkspace } from 'src/engine/core-modules/user-workspace/user-workspace.entity'; +import { UserWorkspaceEntity } from 'src/engine/core-modules/user-workspace/user-workspace.entity'; import { UserWorkspaceService } from 'src/engine/core-modules/user-workspace/user-workspace.service'; import { UserService } from 'src/engine/core-modules/user/services/user.service'; -import { User } from 'src/engine/core-modules/user/user.entity'; +import { UserEntity } from 'src/engine/core-modules/user/user.entity'; import { WorkspaceInvitationService } from 'src/engine/core-modules/workspace-invitation/services/workspace-invitation.service'; import { WorkspaceService } from 'src/engine/core-modules/workspace/services/workspace.service'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { WorkspaceManyOrAllFlatEntityMapsCacheService } from 'src/engine/metadata-modules/flat-entity/services/workspace-many-or-all-flat-entity-maps-cache.service'; import { PermissionsService } from 'src/engine/metadata-modules/permissions/permissions.service'; import { WorkspaceCacheStorageService } from 'src/engine/workspace-cache-storage/workspace-cache-storage.service'; @@ -32,9 +32,9 @@ import { WorkspaceManagerService } from 'src/engine/workspace-manager/workspace- describe('WorkspaceService', () => { let service: WorkspaceService; - let userWorkspaceRepository: Repository; - let userRepository: Repository; - let workspaceRepository: Repository; + let userWorkspaceRepository: Repository; + let userRepository: Repository; + let workspaceRepository: Repository; let workspaceCacheStorageService: WorkspaceCacheStorageService; let messageQueueService: MessageQueueService; let dnsManagerService: DnsManagerService; @@ -45,7 +45,7 @@ describe('WorkspaceService', () => { providers: [ WorkspaceService, { - provide: getRepositoryToken(Workspace), + provide: getRepositoryToken(WorkspaceEntity), useValue: { findOne: jest.fn(), softDelete: jest.fn(), @@ -53,13 +53,13 @@ describe('WorkspaceService', () => { }, }, { - provide: getRepositoryToken(PublicDomain), + provide: getRepositoryToken(ApprovedAccessDomainEntity), useValue: { findOneBy: jest.fn(), }, }, { - provide: getRepositoryToken(UserWorkspace), + provide: getRepositoryToken(UserWorkspaceEntity), useValue: { find: jest.fn(), softDelete: jest.fn(), @@ -67,7 +67,7 @@ describe('WorkspaceService', () => { }, }, { - provide: getRepositoryToken(User), + provide: getRepositoryToken(UserEntity), useValue: { softDelete: jest.fn(), }, @@ -131,12 +131,14 @@ describe('WorkspaceService', () => { }).compile(); service = module.get(WorkspaceService); - userWorkspaceRepository = module.get>( - getRepositoryToken(UserWorkspace), + userWorkspaceRepository = module.get>( + getRepositoryToken(UserWorkspaceEntity), ); - userRepository = module.get>(getRepositoryToken(User)); - workspaceRepository = module.get>( - getRepositoryToken(Workspace), + userRepository = module.get>( + getRepositoryToken(UserEntity), + ); + workspaceRepository = module.get>( + getRepositoryToken(WorkspaceEntity), ); workspaceCacheStorageService = module.get( WorkspaceCacheStorageService, @@ -197,7 +199,7 @@ describe('WorkspaceService', () => { jest .spyOn(userWorkspaceRepository, 'find') .mockResolvedValue([ - { id: 'remaining-user-workspace-id' } as UserWorkspace, + { id: 'remaining-user-workspace-id' } as UserWorkspaceEntity, ]); await service.handleRemoveWorkspaceMember( @@ -220,7 +222,7 @@ describe('WorkspaceService', () => { const mockWorkspace = { id: 'workspace-id', metadataVersion: 0, - } as Workspace; + } as WorkspaceEntity; jest .spyOn(workspaceRepository, 'findOne') @@ -228,7 +230,7 @@ describe('WorkspaceService', () => { jest.spyOn(userWorkspaceRepository, 'find').mockResolvedValue([]); jest .spyOn(service, 'deleteMetadataSchemaCacheAndUserWorkspace') - .mockResolvedValue({} as Workspace); + .mockResolvedValue({} as WorkspaceEntity); await service.deleteWorkspace(mockWorkspace.id, false); @@ -248,7 +250,7 @@ describe('WorkspaceService', () => { const mockWorkspace = { id: 'workspace-id', metadataVersion: 0, - } as Workspace; + } as WorkspaceEntity; jest .spyOn(workspaceRepository, 'findOne') @@ -271,7 +273,7 @@ describe('WorkspaceService', () => { id: 'workspace-id', metadataVersion: 0, customDomain, - } as Workspace; + } as WorkspaceEntity; jest .spyOn(workspaceRepository, 'findOne') @@ -279,7 +281,7 @@ describe('WorkspaceService', () => { jest.spyOn(userWorkspaceRepository, 'find').mockResolvedValue([]); jest .spyOn(service, 'deleteMetadataSchemaCacheAndUserWorkspace') - .mockResolvedValue({} as Workspace); + .mockResolvedValue({} as WorkspaceEntity); await service.deleteWorkspace(mockWorkspace.id, false); @@ -295,7 +297,7 @@ describe('WorkspaceService', () => { id: 'workspace-id', metadataVersion: 0, customDomain, - } as Workspace; + } as WorkspaceEntity; jest .spyOn(workspaceRepository, 'findOne') diff --git a/packages/twenty-server/src/engine/core-modules/workspace/services/workspace.service.ts b/packages/twenty-server/src/engine/core-modules/workspace/services/workspace.service.ts index ab2df529a0e..6ef245727e4 100644 --- a/packages/twenty-server/src/engine/core-modules/workspace/services/workspace.service.ts +++ b/packages/twenty-server/src/engine/core-modules/workspace/services/workspace.service.ts @@ -25,11 +25,11 @@ import { InjectMessageQueue } from 'src/engine/core-modules/message-queue/decora import { MessageQueue } from 'src/engine/core-modules/message-queue/message-queue.constants'; import { MessageQueueService } from 'src/engine/core-modules/message-queue/services/message-queue.service'; import { TwentyConfigService } from 'src/engine/core-modules/twenty-config/twenty-config.service'; -import { UserWorkspace } from 'src/engine/core-modules/user-workspace/user-workspace.entity'; +import { UserWorkspaceEntity } from 'src/engine/core-modules/user-workspace/user-workspace.entity'; import { UserWorkspaceService } from 'src/engine/core-modules/user-workspace/user-workspace.service'; -import { User } from 'src/engine/core-modules/user/user.entity'; +import { UserEntity } from 'src/engine/core-modules/user/user.entity'; import { type ActivateWorkspaceInput } from 'src/engine/core-modules/workspace/dtos/activate-workspace-input'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { WorkspaceException, WorkspaceExceptionCode, @@ -50,17 +50,17 @@ import { extractVersionMajorMinorPatch } from 'src/utils/version/extract-version @Injectable() // eslint-disable-next-line @nx/workspace-inject-workspace-repository -export class WorkspaceService extends TypeOrmQueryService { +export class WorkspaceService extends TypeOrmQueryService { private readonly featureLookUpKey = BillingEntitlementKey.CUSTOM_DOMAIN; protected readonly logger = new Logger(WorkspaceService.name); constructor( - @InjectRepository(Workspace) - private readonly workspaceRepository: Repository, - @InjectRepository(User) - private readonly userRepository: Repository, - @InjectRepository(UserWorkspace) - private readonly userWorkspaceRepository: Repository, + @InjectRepository(WorkspaceEntity) + private readonly workspaceRepository: Repository, + @InjectRepository(UserEntity) + private readonly userRepository: Repository, + @InjectRepository(UserWorkspaceEntity) + private readonly userWorkspaceRepository: Repository, private readonly workspaceManagerService: WorkspaceManagerService, private readonly featureFlagService: FeatureFlagService, private readonly billingSubscriptionService: BillingSubscriptionService, @@ -85,7 +85,7 @@ export class WorkspaceService extends TypeOrmQueryService { userWorkspaceId, apiKey, }: { - payload: Partial & { id: string }; + payload: Partial & { id: string }; userWorkspaceId?: string; apiKey?: string; }) { @@ -180,8 +180,8 @@ export class WorkspaceService extends TypeOrmQueryService { } async activateWorkspace( - user: User, - workspace: Workspace, + user: UserEntity, + workspace: WorkspaceEntity, data: ActivateWorkspaceInput, ) { if (!data.displayName || !data.displayName.length) { @@ -228,7 +228,7 @@ export class WorkspaceService extends TypeOrmQueryService { }); } - async deleteMetadataSchemaCacheAndUserWorkspace(workspace: Workspace) { + async deleteMetadataSchemaCacheAndUserWorkspace(workspace: WorkspaceEntity) { await this.userWorkspaceRepository.delete({ workspaceId: workspace.id }); if (this.billingService.isBillingEnabled()) { @@ -346,7 +346,7 @@ export class WorkspaceService extends TypeOrmQueryService { workspaceId, apiKey, }: { - payload: Partial; + payload: Partial; userWorkspaceId?: string; workspaceId: string; apiKey?: string; @@ -388,7 +388,7 @@ export class WorkspaceService extends TypeOrmQueryService { apiKey, workspaceActivationStatus, }: { - payload: Partial; + payload: Partial; userWorkspaceId?: string; workspaceId: string; apiKey?: string; diff --git a/packages/twenty-server/src/engine/core-modules/workspace/utils/__tests__/get-auth-providers-by-workspace.util.spec.ts b/packages/twenty-server/src/engine/core-modules/workspace/utils/__tests__/get-auth-providers-by-workspace.util.spec.ts index 48077953f27..fd4014c48dc 100644 --- a/packages/twenty-server/src/engine/core-modules/workspace/utils/__tests__/get-auth-providers-by-workspace.util.spec.ts +++ b/packages/twenty-server/src/engine/core-modules/workspace/utils/__tests__/get-auth-providers-by-workspace.util.spec.ts @@ -1,10 +1,10 @@ -import { getAuthProvidersByWorkspace } from 'src/engine/core-modules/workspace/utils/get-auth-providers-by-workspace.util'; -import { type Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; import { + type WorkspaceSSOIdentityProviderEntity, IdentityProviderType, SSOIdentityProviderStatus, - type WorkspaceSSOIdentityProvider, } from 'src/engine/core-modules/sso/workspace-sso-identity-provider.entity'; +import { getAuthProvidersByWorkspace } from 'src/engine/core-modules/workspace/utils/get-auth-providers-by-workspace.util'; +import { type WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; describe('getAuthProvidersByWorkspace', () => { const mockWorkspace = { @@ -21,7 +21,7 @@ describe('getAuthProvidersByWorkspace', () => { issuer: 'sso1.example.com', }, ], - } as unknown as Workspace; + } as unknown as WorkspaceEntity; it('should return correct auth providers for given workspace', () => { const result = getAuthProvidersByWorkspace({ @@ -84,7 +84,7 @@ describe('getAuthProvidersByWorkspace', () => { type: IdentityProviderType.SAML, status: SSOIdentityProviderStatus.Inactive, issuer: 'sso1.example.com', - } as WorkspaceSSOIdentityProvider, + } as WorkspaceSSOIdentityProviderEntity, ], }, systemEnabledProviders: { diff --git a/packages/twenty-server/src/engine/core-modules/workspace/utils/get-auth-providers-by-workspace.util.ts b/packages/twenty-server/src/engine/core-modules/workspace/utils/get-auth-providers-by-workspace.util.ts index e3984afb0a2..29ceec8cd8a 100644 --- a/packages/twenty-server/src/engine/core-modules/workspace/utils/get-auth-providers-by-workspace.util.ts +++ b/packages/twenty-server/src/engine/core-modules/workspace/utils/get-auth-providers-by-workspace.util.ts @@ -1,15 +1,18 @@ import { isDefined } from 'twenty-shared/utils'; -import { SSOIdentityProviderStatus } from 'src/engine/core-modules/sso/workspace-sso-identity-provider.entity'; +import { + SSOIdentityProviderStatus, + type WorkspaceSSOIdentityProviderEntity, +} from 'src/engine/core-modules/sso/workspace-sso-identity-provider.entity'; import { type AuthProvidersDTO } from 'src/engine/core-modules/workspace/dtos/public-workspace-data-output'; -import { type Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { type WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; export const getAuthProvidersByWorkspace = ({ workspace, systemEnabledProviders, }: { workspace: Pick< - Workspace, + WorkspaceEntity, | 'isGoogleAuthEnabled' | 'isPasswordAuthEnabled' | 'isMicrosoftAuthEnabled' @@ -25,7 +28,7 @@ export const getAuthProvidersByWorkspace = ({ microsoft: workspace.isMicrosoftAuthEnabled && systemEnabledProviders.microsoft, sso: workspace.workspaceSSOIdentityProviders - .map((identityProvider) => + .map((identityProvider: WorkspaceSSOIdentityProviderEntity) => identityProvider.status === SSOIdentityProviderStatus.Active ? { id: identityProvider.id, diff --git a/packages/twenty-server/src/engine/core-modules/workspace/workspace-workspace-member.listener.ts b/packages/twenty-server/src/engine/core-modules/workspace/workspace-workspace-member.listener.ts index df47d0e45c7..4e7f73fccea 100644 --- a/packages/twenty-server/src/engine/core-modules/workspace/workspace-workspace-member.listener.ts +++ b/packages/twenty-server/src/engine/core-modules/workspace/workspace-workspace-member.listener.ts @@ -11,7 +11,7 @@ import { InjectMessageQueue } from 'src/engine/core-modules/message-queue/decora import { MessageQueue } from 'src/engine/core-modules/message-queue/message-queue.constants'; import { MessageQueueService } from 'src/engine/core-modules/message-queue/services/message-queue.service'; import { WorkspaceEventBatch } from 'src/engine/workspace-event-emitter/types/workspace-event-batch.type'; -import { type WorkspaceMemberWorkspaceEntity } from 'src/modules/workspace-member/standard-objects/workspace-member.workspace-entity'; +import { WorkspaceMemberWorkspaceEntity } from 'src/modules/workspace-member/standard-objects/workspace-member.workspace-entity'; import { OnDatabaseBatchEvent } from 'src/engine/api/graphql/graphql-query-runner/decorators/on-database-batch-event.decorator'; import { DatabaseEventAction } from 'src/engine/api/graphql/graphql-query-runner/enums/database-event-action'; diff --git a/packages/twenty-server/src/engine/core-modules/workspace/workspace.auto-resolver-opts.ts b/packages/twenty-server/src/engine/core-modules/workspace/workspace.auto-resolver-opts.ts index 3f212b62b1b..b2002035887 100644 --- a/packages/twenty-server/src/engine/core-modules/workspace/workspace.auto-resolver-opts.ts +++ b/packages/twenty-server/src/engine/core-modules/workspace/workspace.auto-resolver-opts.ts @@ -6,7 +6,7 @@ import { import { UpdateWorkspaceInput } from 'src/engine/core-modules/workspace/dtos/update-workspace-input'; import { WorkspaceAuthGuard } from 'src/engine/guards/workspace-auth.guard'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; export const workspaceAutoResolverOpts: AutoResolverOpts< // eslint-disable-next-line @typescript-eslint/no-explicit-any @@ -20,8 +20,8 @@ export const workspaceAutoResolverOpts: AutoResolverOpts< PagingStrategies >[] = [ { - EntityClass: Workspace, - DTOClass: Workspace, + EntityClass: WorkspaceEntity, + DTOClass: WorkspaceEntity, UpdateDTOClass: UpdateWorkspaceInput, enableTotalCount: true, pagingStrategy: PagingStrategies.CURSOR, diff --git a/packages/twenty-server/src/engine/core-modules/workspace/workspace.entity.ts b/packages/twenty-server/src/engine/core-modules/workspace/workspace.entity.ts index a94f0021211..8e7597b4d6d 100644 --- a/packages/twenty-server/src/engine/core-modules/workspace/workspace.entity.ts +++ b/packages/twenty-server/src/engine/core-modules/workspace/workspace.entity.ts @@ -16,17 +16,17 @@ import { } from 'typeorm'; import { UUIDScalarType } from 'src/engine/api/graphql/workspace-schema-builder/graphql-types/scalars'; -import { ApiKey } from 'src/engine/core-modules/api-key/api-key.entity'; -import { AppToken } from 'src/engine/core-modules/app-token/app-token.entity'; -import { ApprovedAccessDomain } from 'src/engine/core-modules/approved-access-domain/approved-access-domain.entity'; -import { EmailingDomain } from 'src/engine/core-modules/emailing-domain/emailing-domain.entity'; -import { FeatureFlag } from 'src/engine/core-modules/feature-flag/feature-flag.entity'; -import { KeyValuePair } from 'src/engine/core-modules/key-value-pair/key-value-pair.entity'; -import { PostgresCredentials } from 'src/engine/core-modules/postgres-credentials/postgres-credentials.entity'; -import { PublicDomain } from 'src/engine/core-modules/public-domain/public-domain.entity'; -import { WorkspaceSSOIdentityProvider } from 'src/engine/core-modules/sso/workspace-sso-identity-provider.entity'; -import { UserWorkspace } from 'src/engine/core-modules/user-workspace/user-workspace.entity'; -import { Webhook } from 'src/engine/core-modules/webhook/webhook.entity'; +import { ApiKeyEntity } from 'src/engine/core-modules/api-key/api-key.entity'; +import { AppTokenEntity } from 'src/engine/core-modules/app-token/app-token.entity'; +import { ApprovedAccessDomainEntity } from 'src/engine/core-modules/approved-access-domain/approved-access-domain.entity'; +import { EmailingDomainEntity } from 'src/engine/core-modules/emailing-domain/emailing-domain.entity'; +import { FeatureFlagEntity } from 'src/engine/core-modules/feature-flag/feature-flag.entity'; +import { KeyValuePairEntity } from 'src/engine/core-modules/key-value-pair/key-value-pair.entity'; +import { PostgresCredentialsEntity } from 'src/engine/core-modules/postgres-credentials/postgres-credentials.entity'; +import { PublicDomainEntity } from 'src/engine/core-modules/public-domain/public-domain.entity'; +import { WorkspaceSSOIdentityProviderEntity } from 'src/engine/core-modules/sso/workspace-sso-identity-provider.entity'; +import { UserWorkspaceEntity } from 'src/engine/core-modules/user-workspace/user-workspace.entity'; +import { WebhookEntity } from 'src/engine/core-modules/webhook/webhook.entity'; import { AgentHandoffEntity } from 'src/engine/metadata-modules/agent/agent-handoff.entity'; import { AgentEntity } from 'src/engine/metadata-modules/agent/agent.entity'; import { AgentDTO } from 'src/engine/metadata-modules/agent/dtos/agent.dto'; @@ -53,8 +53,8 @@ registerEnumType(WorkspaceActivationStatus, { `"activationStatus" IN ('PENDING_CREATION', 'ONGOING_CREATION') OR "defaultRoleId" IS NOT NULL`, ) @Entity({ name: 'workspace', schema: 'core' }) -@ObjectType() -export class Workspace { +@ObjectType('Workspace') +export class WorkspaceEntity { // Fields @IDField(() => UUIDScalarType) @PrimaryGeneratedColumn('uuid') @@ -97,35 +97,46 @@ export class Workspace { trashRetentionDays: number; // Relations - @OneToMany(() => AppToken, (appToken) => appToken.workspace, { + @OneToMany(() => AppTokenEntity, (appToken) => appToken.workspace, { cascade: true, }) - appTokens: Relation; - - @OneToMany(() => KeyValuePair, (keyValuePair) => keyValuePair.workspace, { - cascade: true, - }) - keyValuePairs: Relation; - - @OneToMany(() => UserWorkspace, (userWorkspace) => userWorkspace.workspace, { - onDelete: 'CASCADE', - }) - workspaceUsers: Relation; - - @OneToMany(() => FeatureFlag, (featureFlag) => featureFlag.workspace) - featureFlags: Relation; + appTokens: Relation; @OneToMany( - () => ApprovedAccessDomain, + () => KeyValuePairEntity, + (keyValuePair) => keyValuePair.workspace, + { + cascade: true, + }, + ) + keyValuePairs: Relation; + + @OneToMany( + () => UserWorkspaceEntity, + (userWorkspace: UserWorkspaceEntity) => userWorkspace.workspace, + { + onDelete: 'CASCADE', + }, + ) + workspaceUsers: Relation; + + @OneToMany(() => FeatureFlagEntity, (featureFlag) => featureFlag.workspace) + featureFlags: Relation; + + @OneToMany( + () => ApprovedAccessDomainEntity, (approvedAccessDomain) => approvedAccessDomain.workspace, ) - approvedAccessDomains: Relation; + approvedAccessDomains: Relation; - @OneToMany(() => EmailingDomain, (emailingDomain) => emailingDomain.workspace) - emailingDomains: Relation; + @OneToMany( + () => EmailingDomainEntity, + (emailingDomain) => emailingDomain.workspace, + ) + emailingDomains: Relation; - @OneToMany(() => PublicDomain, (publicDomain) => publicDomain.workspace) - publicDomains: Relation; + @OneToMany(() => PublicDomainEntity, (publicDomain) => publicDomain.workspace) + publicDomains: Relation; @Field({ nullable: true }) workspaceMembersCount: number; @@ -141,16 +152,16 @@ export class Workspace { activationStatus: WorkspaceActivationStatus; @OneToMany( - () => PostgresCredentials, + () => PostgresCredentialsEntity, (postgresCredentials) => postgresCredentials.workspace, ) - allPostgresCredentials: Relation; + allPostgresCredentials: Relation; @OneToMany( - () => WorkspaceSSOIdentityProvider, + () => WorkspaceSSOIdentityProviderEntity, (workspaceSSOIdentityProviders) => workspaceSSOIdentityProviders.workspace, ) - workspaceSSOIdentityProviders: Relation; + workspaceSSOIdentityProviders: Relation; @OneToMany(() => AgentEntity, (agent) => agent.workspace, { onDelete: 'CASCADE', @@ -162,11 +173,11 @@ export class Workspace { }) agentHandoffs: Relation; - @OneToMany(() => Webhook, (webhook) => webhook.workspace) - webhooks: Relation; + @OneToMany(() => WebhookEntity, (webhook) => webhook.workspace) + webhooks: Relation; - @OneToMany(() => ApiKey, (apiKey) => apiKey.workspace) - apiKeys: Relation; + @OneToMany(() => ApiKeyEntity, (apiKey) => apiKey.workspace) + apiKeys: Relation; @Field(() => [ViewDTO], { nullable: true }) @OneToMany(() => ViewEntity, (view) => view.workspace) diff --git a/packages/twenty-server/src/engine/core-modules/workspace/workspace.module.ts b/packages/twenty-server/src/engine/core-modules/workspace/workspace.module.ts index c16f1a541ba..090f0a537e7 100644 --- a/packages/twenty-server/src/engine/core-modules/workspace/workspace.module.ts +++ b/packages/twenty-server/src/engine/core-modules/workspace/workspace.module.ts @@ -8,7 +8,7 @@ import { TypeORMModule } from 'src/database/typeorm/typeorm.module'; import { AuditModule } from 'src/engine/core-modules/audit/audit.module'; import { TokenModule } from 'src/engine/core-modules/auth/token/token.module'; import { BillingModule } from 'src/engine/core-modules/billing/billing.module'; -import { BillingSubscription } from 'src/engine/core-modules/billing/entities/billing-subscription.entity'; +import { BillingSubscriptionEntity } from 'src/engine/core-modules/billing/entities/billing-subscription.entity'; import { DnsManagerModule } from 'src/engine/core-modules/dns-manager/dns-manager.module'; import { CustomDomainManagerModule } from 'src/engine/core-modules/domain/custom-domain-manager/custom-domain-manager.module'; import { SubdomainManagerModule } from 'src/engine/core-modules/domain/subdomain-manager/subdomain-manager.module'; @@ -17,16 +17,16 @@ import { FeatureFlagModule } from 'src/engine/core-modules/feature-flag/feature- import { FileUploadModule } from 'src/engine/core-modules/file/file-upload/file-upload.module'; import { FileModule } from 'src/engine/core-modules/file/file.module'; import { OnboardingModule } from 'src/engine/core-modules/onboarding/onboarding.module'; -import { PublicDomain } from 'src/engine/core-modules/public-domain/public-domain.entity'; -import { UserWorkspace } from 'src/engine/core-modules/user-workspace/user-workspace.entity'; +import { PublicDomainEntity } from 'src/engine/core-modules/public-domain/public-domain.entity'; +import { UserWorkspaceEntity } from 'src/engine/core-modules/user-workspace/user-workspace.entity'; import { UserWorkspaceModule } from 'src/engine/core-modules/user-workspace/user-workspace.module'; -import { User } from 'src/engine/core-modules/user/user.entity'; +import { UserEntity } from 'src/engine/core-modules/user/user.entity'; import { CheckCustomDomainValidRecordsCronCommand } from 'src/engine/core-modules/workspace/crons/commands/check-custom-domain-valid-records.cron.command'; import { CheckCustomDomainValidRecordsCronJob } from 'src/engine/core-modules/workspace/crons/jobs/check-custom-domain-valid-records.cron.job'; import { WorkspaceService } from 'src/engine/core-modules/workspace/services/workspace.service'; import { WorkspaceWorkspaceMemberListener } from 'src/engine/core-modules/workspace/workspace-workspace-member.listener'; import { workspaceAutoResolverOpts } from 'src/engine/core-modules/workspace/workspace.auto-resolver-opts'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { WorkspaceResolver } from 'src/engine/core-modules/workspace/workspace.resolver'; import { AgentModule } from 'src/engine/metadata-modules/agent/agent.module'; import { DataSourceModule } from 'src/engine/metadata-modules/data-source/data-source.module'; @@ -41,7 +41,7 @@ import { WorkspaceManagerModule } from 'src/engine/workspace-manager/workspace-m @Module({ imports: [ TypeORMModule, - TypeOrmModule.forFeature([BillingSubscription]), + TypeOrmModule.forFeature([BillingSubscriptionEntity]), NestjsQueryGraphQLModule.forFeature({ imports: [ AuditModule, @@ -51,10 +51,10 @@ import { WorkspaceManagerModule } from 'src/engine/workspace-manager/workspace-m FileUploadModule, WorkspaceMetadataCacheModule, NestjsQueryTypeOrmModule.forFeature([ - User, - Workspace, - UserWorkspace, - PublicDomain, + UserEntity, + WorkspaceEntity, + UserWorkspaceEntity, + PublicDomainEntity, ]), UserWorkspaceModule, WorkspaceManagerModule, diff --git a/packages/twenty-server/src/engine/core-modules/workspace/workspace.resolver.ts b/packages/twenty-server/src/engine/core-modules/workspace/workspace.resolver.ts index 9aac926d487..5e1da5f2212 100644 --- a/packages/twenty-server/src/engine/core-modules/workspace/workspace.resolver.ts +++ b/packages/twenty-server/src/engine/core-modules/workspace/workspace.resolver.ts @@ -21,7 +21,7 @@ import { assertIsDefinedOrThrow, isDefined } from 'twenty-shared/utils'; import { FileFolder } from 'src/engine/core-modules/file/interfaces/file-folder.interface'; -import { BillingSubscription } from 'src/engine/core-modules/billing/entities/billing-subscription.entity'; +import { BillingSubscriptionEntity } from 'src/engine/core-modules/billing/entities/billing-subscription.entity'; import { BillingSubscriptionService } from 'src/engine/core-modules/billing/services/billing-subscription.service'; import { DomainValidRecords } from 'src/engine/core-modules/dns-manager/dtos/domain-valid-records'; import { DnsManagerService } from 'src/engine/core-modules/dns-manager/services/dns-manager.service'; @@ -37,7 +37,7 @@ import { PreventNestToAutoLogGraphqlErrorsFilter } from 'src/engine/core-modules import { ResolverValidationPipe } from 'src/engine/core-modules/graphql/pipes/resolver-validation.pipe'; import { TwentyConfigService } from 'src/engine/core-modules/twenty-config/twenty-config.service'; import { UserWorkspaceService } from 'src/engine/core-modules/user-workspace/user-workspace.service'; -import { User } from 'src/engine/core-modules/user/user.entity'; +import { UserEntity } from 'src/engine/core-modules/user/user.entity'; import { ActivateWorkspaceInput } from 'src/engine/core-modules/workspace/dtos/activate-workspace-input'; import { type AuthProvidersDTO, @@ -48,7 +48,7 @@ import { WorkspaceUrlsDTO } from 'src/engine/core-modules/workspace/dtos/workspa import { WorkspaceService } from 'src/engine/core-modules/workspace/services/workspace.service'; import { getAuthProvidersByWorkspace } from 'src/engine/core-modules/workspace/utils/get-auth-providers-by-workspace.util'; import { workspaceGraphqlApiExceptionHandler } from 'src/engine/core-modules/workspace/utils/workspace-graphql-api-exception-handler.util'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { WorkspaceException, WorkspaceExceptionCode, @@ -81,7 +81,7 @@ const OriginHeader = createParamDecorator( }, ); -@Resolver(() => Workspace) +@Resolver(() => WorkspaceEntity) @UsePipes(ResolverValidationPipe) @UseFilters( PreventNestToAutoLogGraphqlErrorsFilter, @@ -104,9 +104,9 @@ export class WorkspaceResolver { private readonly customDomainManagerService: CustomDomainManagerService, ) {} - @Query(() => Workspace) + @Query(() => WorkspaceEntity) @UseGuards(WorkspaceAuthGuard) - async currentWorkspace(@AuthWorkspace() { id }: Workspace) { + async currentWorkspace(@AuthWorkspace() { id }: WorkspaceEntity) { const workspace = await this.workspaceService.findById(id); assert(workspace, 'Workspace not found'); @@ -114,21 +114,21 @@ export class WorkspaceResolver { return workspace; } - @Mutation(() => Workspace) + @Mutation(() => WorkspaceEntity) @UseGuards(UserAuthGuard, WorkspaceAuthGuard) async activateWorkspace( @Args('data') data: ActivateWorkspaceInput, - @AuthUser() user: User, - @AuthWorkspace() workspace: Workspace, + @AuthUser() user: UserEntity, + @AuthWorkspace() workspace: WorkspaceEntity, ) { return await this.workspaceService.activateWorkspace(user, workspace, data); } - @Mutation(() => Workspace) + @Mutation(() => WorkspaceEntity) @UseGuards(WorkspaceAuthGuard) async updateWorkspace( @Args('data') data: UpdateWorkspaceInput, - @AuthWorkspace() workspace: Workspace, + @AuthWorkspace() workspace: WorkspaceEntity, @AuthUserWorkspaceId() userWorkspaceId: string, @AuthApiKey() apiKey?: string, ) { @@ -152,7 +152,7 @@ export class WorkspaceResolver { SettingsPermissionsGuard(PermissionFlagType.WORKSPACE), ) async uploadWorkspaceLogo( - @AuthWorkspace() { id }: Workspace, + @AuthWorkspace() { id }: WorkspaceEntity, @Args({ name: 'file', type: () => GraphQLUpload }) { createReadStream, filename, mimetype }: FileUpload, ): Promise { @@ -181,7 +181,7 @@ export class WorkspaceResolver { @ResolveField(() => [FeatureFlagDTO], { nullable: true }) async featureFlags( - @Parent() workspace: Workspace, + @Parent() workspace: WorkspaceEntity, ): Promise { const featureFlags = await this.featureFlagService.getWorkspaceFeatureFlags( workspace.id, @@ -192,19 +192,19 @@ export class WorkspaceResolver { ); } - @Mutation(() => Workspace) + @Mutation(() => WorkspaceEntity) @UseGuards( WorkspaceAuthGuard, SettingsPermissionsGuard(PermissionFlagType.WORKSPACE), ) - async deleteCurrentWorkspace(@AuthWorkspace() { id }: Workspace) { + async deleteCurrentWorkspace(@AuthWorkspace() { id }: WorkspaceEntity) { return this.workspaceService.deleteWorkspace(id); } - @ResolveField(() => [BillingSubscription]) + @ResolveField(() => [BillingSubscriptionEntity]) async billingSubscriptions( - @Parent() workspace: Workspace, - ): Promise { + @Parent() workspace: WorkspaceEntity, + ): Promise { if (!this.twentyConfigService.get('IS_BILLING_ENABLED')) { return []; } @@ -219,7 +219,9 @@ export class WorkspaceResolver { } @ResolveField(() => RoleDTO, { nullable: true }) - async defaultRole(@Parent() workspace: Workspace): Promise { + async defaultRole( + @Parent() workspace: WorkspaceEntity, + ): Promise { if (!workspace.defaultRoleId) { return null; } @@ -231,7 +233,9 @@ export class WorkspaceResolver { } @ResolveField(() => AgentDTO, { nullable: true }) - async defaultAgent(@Parent() workspace: Workspace): Promise { + async defaultAgent( + @Parent() workspace: WorkspaceEntity, + ): Promise { if (!workspace.defaultAgentId) { return null; } @@ -254,10 +258,10 @@ export class WorkspaceResolver { } } - @ResolveField(() => BillingSubscription, { nullable: true }) + @ResolveField(() => BillingSubscriptionEntity, { nullable: true }) async currentBillingSubscription( - @Parent() workspace: Workspace, - ): Promise { + @Parent() workspace: WorkspaceEntity, + ): Promise { if (!this.twentyConfigService.get('IS_BILLING_ENABLED')) { return; } @@ -269,13 +273,13 @@ export class WorkspaceResolver { @ResolveField(() => Number) async workspaceMembersCount( - @Parent() workspace: Workspace, + @Parent() workspace: WorkspaceEntity, ): Promise { return await this.userWorkspaceService.getUserCount(workspace.id); } @ResolveField(() => String) - async logo(@Parent() workspace: Workspace): Promise { + async logo(@Parent() workspace: WorkspaceEntity): Promise { if (workspace.logo) { try { return this.fileService.signFileUrl({ @@ -296,12 +300,12 @@ export class WorkspaceResolver { } @ResolveField(() => WorkspaceUrlsDTO) - workspaceUrls(@Parent() workspace: Workspace) { + workspaceUrls(@Parent() workspace: WorkspaceEntity) { return this.workspaceDomainsService.getWorkspaceUrls(workspace); } @ResolveField(() => Boolean) - isGoogleAuthEnabled(@Parent() workspace: Workspace) { + isGoogleAuthEnabled(@Parent() workspace: WorkspaceEntity) { return ( workspace.isGoogleAuthEnabled && this.twentyConfigService.get('AUTH_GOOGLE_ENABLED') @@ -309,7 +313,7 @@ export class WorkspaceResolver { } @ResolveField(() => Boolean) - isMicrosoftAuthEnabled(@Parent() workspace: Workspace) { + isMicrosoftAuthEnabled(@Parent() workspace: WorkspaceEntity) { return ( workspace.isMicrosoftAuthEnabled && this.twentyConfigService.get('AUTH_MICROSOFT_ENABLED') @@ -317,7 +321,7 @@ export class WorkspaceResolver { } @ResolveField(() => Boolean) - isPasswordAuthEnabled(@Parent() workspace: Workspace) { + isPasswordAuthEnabled(@Parent() workspace: WorkspaceEntity) { return ( workspace.isPasswordAuthEnabled && this.twentyConfigService.get('AUTH_PASSWORD_ENABLED') @@ -325,7 +329,7 @@ export class WorkspaceResolver { } @ResolveField(() => [ViewDTO]) - async views(@Parent() workspace: Workspace): Promise { + async views(@Parent() workspace: WorkspaceEntity): Promise { return this.viewService.findByWorkspaceId(workspace.id); } @@ -395,7 +399,7 @@ export class WorkspaceResolver { @Mutation(() => DomainValidRecords, { nullable: true }) @UseGuards(WorkspaceAuthGuard) async checkCustomDomainValidRecords( - @AuthWorkspace() workspace: Workspace, + @AuthWorkspace() workspace: WorkspaceEntity, ): Promise { assertIsDefinedOrThrow( workspace.customDomain, diff --git a/packages/twenty-server/src/engine/core-modules/workspace/workspace.validate.ts b/packages/twenty-server/src/engine/core-modules/workspace/workspace.validate.ts index bbf3a904d03..8736c3a5105 100644 --- a/packages/twenty-server/src/engine/core-modules/workspace/workspace.validate.ts +++ b/packages/twenty-server/src/engine/core-modules/workspace/workspace.validate.ts @@ -3,11 +3,11 @@ import { AuthExceptionCode, } from 'src/engine/core-modules/auth/auth.exception'; import { AuthProviderEnum } from 'src/engine/core-modules/workspace/types/workspace.type'; -import { type Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { type WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; const isAuthEnabledOrThrow = ( provider: AuthProviderEnum, - workspace: Workspace, + workspace: WorkspaceEntity, exceptionToThrowCustom: AuthException = new AuthException( `${provider} auth is not enabled for this workspace`, AuthExceptionCode.OAUTH_ACCESS_DENIED, @@ -27,7 +27,10 @@ const isAuthEnabledOrThrow = ( throw exceptionToThrowCustom; }; -const isAuthEnabled = (provider: AuthProviderEnum, workspace: Workspace) => { +const isAuthEnabled = ( + provider: AuthProviderEnum, + workspace: WorkspaceEntity, +) => { if (provider === AuthProviderEnum.Google && workspace.isGoogleAuthEnabled) return true; if ( diff --git a/packages/twenty-server/src/engine/metadata-modules/agent/agent-chat-thread.entity.ts b/packages/twenty-server/src/engine/metadata-modules/agent/agent-chat-thread.entity.ts index 00c2cf47c7d..944b2248a7e 100644 --- a/packages/twenty-server/src/engine/metadata-modules/agent/agent-chat-thread.entity.ts +++ b/packages/twenty-server/src/engine/metadata-modules/agent/agent-chat-thread.entity.ts @@ -12,7 +12,7 @@ import { import { Relation } from 'src/engine/workspace-manager/workspace-sync-metadata/interfaces/relation.interface'; -import { UserWorkspace } from 'src/engine/core-modules/user-workspace/user-workspace.entity'; +import { UserWorkspaceEntity } from 'src/engine/core-modules/user-workspace/user-workspace.entity'; import { AgentChatMessageEntity } from 'src/engine/metadata-modules/agent/agent-chat-message.entity'; import { AgentEntity } from './agent.entity'; @@ -36,11 +36,11 @@ export class AgentChatThreadEntity { @Index() userWorkspaceId: string; - @ManyToOne(() => UserWorkspace, { + @ManyToOne(() => UserWorkspaceEntity, { onDelete: 'CASCADE', }) @JoinColumn({ name: 'userWorkspaceId' }) - userWorkspace: Relation; + userWorkspace: Relation; @Column({ nullable: true, type: 'varchar' }) title: string; diff --git a/packages/twenty-server/src/engine/metadata-modules/agent/agent-chat.controller.ts b/packages/twenty-server/src/engine/metadata-modules/agent/agent-chat.controller.ts index d094ad44c35..3c5d5677c87 100644 --- a/packages/twenty-server/src/engine/metadata-modules/agent/agent-chat.controller.ts +++ b/packages/twenty-server/src/engine/metadata-modules/agent/agent-chat.controller.ts @@ -13,7 +13,7 @@ import { UIDataTypes, UIMessage, UITools } from 'ai'; import { Response } from 'express'; import { RestApiExceptionFilter } from 'src/engine/api/rest/rest-api-exception.filter'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +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 { JwtAuthGuard } from 'src/engine/guards/jwt-auth.guard'; @@ -68,7 +68,7 @@ export class AgentChatController { recordIdsByObjectMetadataNameSingular?: RecordIdsByObjectMetadataNameSingularType; }, @AuthUserWorkspaceId() userWorkspaceId: string, - @AuthWorkspace() workspace: Workspace, + @AuthWorkspace() workspace: WorkspaceEntity, @Res() response: Response, ) { this.agentStreamingService.streamAgentChat({ diff --git a/packages/twenty-server/src/engine/metadata-modules/agent/agent-execution.service.ts b/packages/twenty-server/src/engine/metadata-modules/agent/agent-execution.service.ts index e9c0404929c..becbed8885d 100644 --- a/packages/twenty-server/src/engine/metadata-modules/agent/agent-execution.service.ts +++ b/packages/twenty-server/src/engine/metadata-modules/agent/agent-execution.service.ts @@ -18,7 +18,7 @@ import { getAllSelectableFields } from 'src/engine/api/utils/get-all-selectable- import { AIBillingService } from 'src/engine/core-modules/ai/services/ai-billing.service'; import { AiModelRegistryService } from 'src/engine/core-modules/ai/services/ai-model-registry.service'; import { WorkspaceDomainsService } from 'src/engine/core-modules/domain/workspace-domains/services/workspace-domains.service'; -import { type Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { AgentHandoffToolService } from 'src/engine/metadata-modules/agent/agent-handoff-tool.service'; import { AgentService } from 'src/engine/metadata-modules/agent/agent.service'; import { AGENT_CONFIG } from 'src/engine/metadata-modules/agent/constants/agent-config.const'; @@ -140,7 +140,7 @@ export class AgentExecutionService implements AgentExecutionContext { } private async getContextForSystemPrompt( - workspace: Workspace, + workspace: WorkspaceEntity, recordIdsByObjectMetadataNameSingular: RecordIdsByObjectMetadataNameSingularType, userWorkspaceId: string, ) { @@ -243,7 +243,7 @@ export class AgentExecutionService implements AgentExecutionContext { messages, recordIdsByObjectMetadataNameSingular, }: { - workspace: Workspace; + workspace: WorkspaceEntity; userWorkspaceId: string; agentId: string; messages: UIMessage[]; diff --git a/packages/twenty-server/src/engine/metadata-modules/agent/agent-handoff.entity.ts b/packages/twenty-server/src/engine/metadata-modules/agent/agent-handoff.entity.ts index 57b701394b0..57b6efc1344 100644 --- a/packages/twenty-server/src/engine/metadata-modules/agent/agent-handoff.entity.ts +++ b/packages/twenty-server/src/engine/metadata-modules/agent/agent-handoff.entity.ts @@ -12,7 +12,7 @@ import { import { Relation } from 'src/engine/workspace-manager/workspace-sync-metadata/interfaces/relation.interface'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { AgentEntity } from './agent.entity'; @@ -54,11 +54,11 @@ export class AgentHandoffEntity { @JoinColumn({ name: 'toAgentId' }) toAgent: Relation; - @ManyToOne(() => Workspace, (workspace) => workspace.agentHandoffs, { + @ManyToOne(() => WorkspaceEntity, (workspace) => workspace.agentHandoffs, { onDelete: 'CASCADE', }) @JoinColumn({ name: 'workspaceId' }) - workspace: Relation; + workspace: Relation; @CreateDateColumn({ type: 'timestamptz' }) createdAt: Date; diff --git a/packages/twenty-server/src/engine/metadata-modules/agent/agent-streaming.service.ts b/packages/twenty-server/src/engine/metadata-modules/agent/agent-streaming.service.ts index 100c3aae368..9d59fec6319 100644 --- a/packages/twenty-server/src/engine/metadata-modules/agent/agent-streaming.service.ts +++ b/packages/twenty-server/src/engine/metadata-modules/agent/agent-streaming.service.ts @@ -11,7 +11,7 @@ import { import { type Response } from 'express'; import { Repository } from 'typeorm'; -import { type Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { AgentChatMessageRole } from 'src/engine/metadata-modules/agent/agent-chat-message.entity'; import { AgentChatThreadEntity } from 'src/engine/metadata-modules/agent/agent-chat-thread.entity'; import { AgentChatService } from 'src/engine/metadata-modules/agent/agent-chat.service'; @@ -25,7 +25,7 @@ import { type RecordIdsByObjectMetadataNameSingularType } from 'src/engine/metad export type StreamAgentChatOptions = { threadId: string; userWorkspaceId: string; - workspace: Workspace; + workspace: WorkspaceEntity; recordIdsByObjectMetadataNameSingular: RecordIdsByObjectMetadataNameSingularType; response: Response; messages: UIMessage[]; diff --git a/packages/twenty-server/src/engine/metadata-modules/agent/agent.entity.ts b/packages/twenty-server/src/engine/metadata-modules/agent/agent.entity.ts index 039edacabf8..5175f55e52f 100644 --- a/packages/twenty-server/src/engine/metadata-modules/agent/agent.entity.ts +++ b/packages/twenty-server/src/engine/metadata-modules/agent/agent.entity.ts @@ -15,7 +15,7 @@ import { Relation } from 'src/engine/workspace-manager/workspace-sync-metadata/i import { SyncableEntity } from 'src/engine/workspace-manager/workspace-sync/interfaces/syncable-entity.interface'; import { ModelId } from 'src/engine/core-modules/ai/constants/ai-models.const'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { ModelConfiguration } from 'src/engine/metadata-modules/agent/types/modelConfiguration'; import { AgentChatThreadEntity } from './agent-chat-thread.entity'; @@ -64,11 +64,11 @@ export class AgentEntity @Column({ default: false }) isCustom: boolean; - @ManyToOne(() => Workspace, (workspace) => workspace.agents, { + @ManyToOne(() => WorkspaceEntity, (workspace) => workspace.agents, { onDelete: 'CASCADE', }) @JoinColumn({ name: 'workspaceId' }) - workspace: Relation; + workspace: Relation; @OneToMany(() => AgentChatThreadEntity, (chatThread) => chatThread.agent) chatThreads: Relation; diff --git a/packages/twenty-server/src/engine/metadata-modules/agent/agent.module.ts b/packages/twenty-server/src/engine/metadata-modules/agent/agent.module.ts index 643f88d1d32..6ba463b20a9 100644 --- a/packages/twenty-server/src/engine/metadata-modules/agent/agent.module.ts +++ b/packages/twenty-server/src/engine/metadata-modules/agent/agent.module.ts @@ -1,4 +1,4 @@ -import { Module } from '@nestjs/common'; +import { Module, forwardRef } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; import { AiModule } from 'src/engine/core-modules/ai/ai.module'; @@ -10,7 +10,8 @@ import { FileEntity } from 'src/engine/core-modules/file/entities/file.entity'; import { FileUploadModule } from 'src/engine/core-modules/file/file-upload/file-upload.module'; import { FileModule } from 'src/engine/core-modules/file/file.module'; import { ThrottlerModule } from 'src/engine/core-modules/throttler/throttler.module'; -import { UserWorkspace } from 'src/engine/core-modules/user-workspace/user-workspace.entity'; +import { UserModule } from 'src/engine/core-modules/user/user.module'; +import { UserWorkspaceEntity } from 'src/engine/core-modules/user-workspace/user-workspace.entity'; import { UserWorkspaceModule } from 'src/engine/core-modules/user-workspace/user-workspace.module'; import { AgentRoleModule } from 'src/engine/metadata-modules/agent-role/agent-role.module'; import { AgentChatController } from 'src/engine/metadata-modules/agent/agent-chat.controller'; @@ -54,7 +55,7 @@ import { AgentActorContextService } from './services/agent-actor-context.service AgentChatMessagePartEntity, AgentChatThreadEntity, FileEntity, - UserWorkspace, + UserWorkspaceEntity, ]), AiModule, AgentRoleModule, @@ -70,6 +71,7 @@ import { AgentActorContextService } from './services/agent-actor-context.service TokenModule, WorkspaceDomainsModule, WorkflowToolsModule, + forwardRef(() => UserModule), UserWorkspaceModule, UserRoleModule, ], diff --git a/packages/twenty-server/src/engine/metadata-modules/agent/agent.resolver.ts b/packages/twenty-server/src/engine/metadata-modules/agent/agent.resolver.ts index 1e92189c806..87d23189399 100644 --- a/packages/twenty-server/src/engine/metadata-modules/agent/agent.resolver.ts +++ b/packages/twenty-server/src/engine/metadata-modules/agent/agent.resolver.ts @@ -2,7 +2,7 @@ import { UseGuards } from '@nestjs/common'; import { Args, Mutation, Query, Resolver } from '@nestjs/graphql'; import { FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { AuthWorkspace } from 'src/engine/decorators/auth/auth-workspace.decorator'; import { FeatureFlagGuard, @@ -31,7 +31,7 @@ export class AgentResolver { @Query(() => [AgentDTO]) @RequireFeatureFlag(FeatureFlagKey.IS_AI_ENABLED) - async findManyAgents(@AuthWorkspace() { id: workspaceId }: Workspace) { + async findManyAgents(@AuthWorkspace() { id: workspaceId }: WorkspaceEntity) { return this.agentService.findManyAgents(workspaceId); } @@ -39,7 +39,7 @@ export class AgentResolver { @RequireFeatureFlag(FeatureFlagKey.IS_AI_ENABLED) async findOneAgent( @Args('input') { id }: AgentIdInput, - @AuthWorkspace() { id: workspaceId }: Workspace, + @AuthWorkspace() { id: workspaceId }: WorkspaceEntity, ) { return this.agentService.findOneAgent(id, workspaceId); } @@ -48,7 +48,7 @@ export class AgentResolver { @RequireFeatureFlag(FeatureFlagKey.IS_AI_ENABLED) async findAgentHandoffTargets( @Args('input') { id }: AgentIdInput, - @AuthWorkspace() { id: workspaceId }: Workspace, + @AuthWorkspace() { id: workspaceId }: WorkspaceEntity, ) { return this.agentHandoffService.getHandoffTargets({ fromAgentId: id, @@ -60,7 +60,7 @@ export class AgentResolver { @RequireFeatureFlag(FeatureFlagKey.IS_AI_ENABLED) async findAgentHandoffs( @Args('input') { id }: AgentIdInput, - @AuthWorkspace() { id: workspaceId }: Workspace, + @AuthWorkspace() { id: workspaceId }: WorkspaceEntity, ) { return this.agentHandoffService.getAgentHandoffs({ fromAgentId: id, @@ -72,7 +72,7 @@ export class AgentResolver { @RequireFeatureFlag(FeatureFlagKey.IS_AI_ENABLED) async createOneAgent( @Args('input') input: CreateAgentInput, - @AuthWorkspace() { id: workspaceId }: Workspace, + @AuthWorkspace() { id: workspaceId }: WorkspaceEntity, ) { return this.agentService.createOneAgent( { ...input, isCustom: true }, @@ -84,7 +84,7 @@ export class AgentResolver { @RequireFeatureFlag(FeatureFlagKey.IS_AI_ENABLED) async updateOneAgent( @Args('input') input: UpdateAgentInput, - @AuthWorkspace() { id: workspaceId }: Workspace, + @AuthWorkspace() { id: workspaceId }: WorkspaceEntity, ) { return this.agentService.updateOneAgent(input, workspaceId); } @@ -93,7 +93,7 @@ export class AgentResolver { @RequireFeatureFlag(FeatureFlagKey.IS_AI_ENABLED) async deleteOneAgent( @Args('input') { id }: AgentIdInput, - @AuthWorkspace() { id: workspaceId }: Workspace, + @AuthWorkspace() { id: workspaceId }: WorkspaceEntity, ) { return this.agentService.deleteOneAgent(id, workspaceId); } @@ -102,7 +102,7 @@ export class AgentResolver { @RequireFeatureFlag(FeatureFlagKey.IS_AI_ENABLED) async createAgentHandoff( @Args('input') input: CreateAgentHandoffInput, - @AuthWorkspace() { id: workspaceId }: Workspace, + @AuthWorkspace() { id: workspaceId }: WorkspaceEntity, ) { await this.agentHandoffService.createHandoff({ fromAgentId: input.fromAgentId, @@ -118,7 +118,7 @@ export class AgentResolver { @RequireFeatureFlag(FeatureFlagKey.IS_AI_ENABLED) async removeAgentHandoff( @Args('input') input: RemoveAgentHandoffInput, - @AuthWorkspace() { id: workspaceId }: Workspace, + @AuthWorkspace() { id: workspaceId }: WorkspaceEntity, ) { await this.agentHandoffService.removeHandoff({ fromAgentId: input.fromAgentId, diff --git a/packages/twenty-server/src/engine/metadata-modules/agent/services/agent-actor-context.service.ts b/packages/twenty-server/src/engine/metadata-modules/agent/services/agent-actor-context.service.ts index eae956e76fa..c94a2450325 100644 --- a/packages/twenty-server/src/engine/metadata-modules/agent/services/agent-actor-context.service.ts +++ b/packages/twenty-server/src/engine/metadata-modules/agent/services/agent-actor-context.service.ts @@ -1,7 +1,7 @@ import { Injectable } from '@nestjs/common'; +import { UserService } from 'src/engine/core-modules/user/services/user.service'; import { buildCreatedByFromFullNameMetadata } from 'src/engine/core-modules/actor/utils/build-created-by-from-full-name-metadata.util'; -import { UserWorkspaceService as UserService } from 'src/engine/core-modules/user-workspace/user-workspace.service'; import { AgentException, AgentExceptionCode, @@ -45,7 +45,7 @@ export class AgentActorContextService { const workspaceMember = await workspaceMemberRepository.findOne({ where: { - userId: userWorkspace.userId, + userId: userWorkspace.id, }, }); diff --git a/packages/twenty-server/src/engine/metadata-modules/cron-trigger/cron-trigger.module.ts b/packages/twenty-server/src/engine/metadata-modules/cron-trigger/cron-trigger.module.ts index fae2c29b572..a1ce248a719 100644 --- a/packages/twenty-server/src/engine/metadata-modules/cron-trigger/cron-trigger.module.ts +++ b/packages/twenty-server/src/engine/metadata-modules/cron-trigger/cron-trigger.module.ts @@ -1,10 +1,10 @@ import { Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { CronTriggerCronCommand } from 'src/engine/metadata-modules/cron-trigger/crons/commands/cron-trigger.cron.command'; import { CronTriggerCronJob } from 'src/engine/metadata-modules/cron-trigger/crons/jobs/cron-trigger.cron.job'; -import { CronTrigger } from 'src/engine/metadata-modules/cron-trigger/entities/cron-trigger.entity'; +import { CronTriggerEntity } from 'src/engine/metadata-modules/cron-trigger/entities/cron-trigger.entity'; import { CronTriggerResolver } from 'src/engine/metadata-modules/cron-trigger/resolvers/cron-trigger.resolver'; import { CronTriggerV2Service } from 'src/engine/metadata-modules/cron-trigger/services/cron-trigger-v2.service'; import { WorkspaceFlatCronTriggerMapCacheService } from 'src/engine/metadata-modules/cron-trigger/services/workspace-flat-cron-trigger-map-cache.service'; @@ -13,7 +13,7 @@ import { WorkspaceMigrationV2Module } from 'src/engine/workspace-manager/workspa @Module({ imports: [ - TypeOrmModule.forFeature([Workspace, CronTrigger]), + TypeOrmModule.forFeature([WorkspaceEntity, CronTriggerEntity]), WorkspaceManyOrAllFlatEntityMapsCacheModule, WorkspaceMigrationV2Module, ], diff --git a/packages/twenty-server/src/engine/metadata-modules/cron-trigger/crons/jobs/cron-trigger.cron.job.ts b/packages/twenty-server/src/engine/metadata-modules/cron-trigger/crons/jobs/cron-trigger.cron.job.ts index b45c0d26cbe..153b7ea9c69 100644 --- a/packages/twenty-server/src/engine/metadata-modules/cron-trigger/crons/jobs/cron-trigger.cron.job.ts +++ b/packages/twenty-server/src/engine/metadata-modules/cron-trigger/crons/jobs/cron-trigger.cron.job.ts @@ -10,8 +10,8 @@ import { Process } from 'src/engine/core-modules/message-queue/decorators/proces import { Processor } from 'src/engine/core-modules/message-queue/decorators/processor.decorator'; import { MessageQueue } from 'src/engine/core-modules/message-queue/message-queue.constants'; import { MessageQueueService } from 'src/engine/core-modules/message-queue/services/message-queue.service'; -import { CronTrigger } from 'src/engine/metadata-modules/cron-trigger/entities/cron-trigger.entity'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { CronTriggerEntity } from 'src/engine/metadata-modules/cron-trigger/entities/cron-trigger.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { ServerlessFunctionTriggerJob, ServerlessFunctionTriggerJobData, @@ -25,10 +25,10 @@ export class CronTriggerCronJob { constructor( @InjectMessageQueue(MessageQueue.serverlessFunctionQueue) private readonly messageQueueService: MessageQueueService, - @InjectRepository(Workspace) - private readonly workspaceRepository: Repository, - @InjectRepository(CronTrigger) - private readonly cronTriggerRepository: Repository, + @InjectRepository(WorkspaceEntity) + private readonly workspaceRepository: Repository, + @InjectRepository(CronTriggerEntity) + private readonly cronTriggerRepository: Repository, ) {} @Process(CronTriggerCronJob.name) diff --git a/packages/twenty-server/src/engine/metadata-modules/cron-trigger/entities/cron-trigger.entity.ts b/packages/twenty-server/src/engine/metadata-modules/cron-trigger/entities/cron-trigger.entity.ts index 75e0e26fa26..574e23e759b 100644 --- a/packages/twenty-server/src/engine/metadata-modules/cron-trigger/entities/cron-trigger.entity.ts +++ b/packages/twenty-server/src/engine/metadata-modules/cron-trigger/entities/cron-trigger.entity.ts @@ -25,9 +25,9 @@ export const CRON_TRIGGER_ENTITY_RELATION_PROPERTIES = [ @Entity({ name: 'cronTrigger', schema: 'core' }) @Index('IDX_CRON_TRIGGER_WORKSPACE_ID', ['workspaceId']) -export class CronTrigger +export class CronTriggerEntity extends SyncableEntity - implements Required + implements Required { @PrimaryGeneratedColumn('uuid') id: string; diff --git a/packages/twenty-server/src/engine/metadata-modules/cron-trigger/resolvers/cron-trigger.resolver.ts b/packages/twenty-server/src/engine/metadata-modules/cron-trigger/resolvers/cron-trigger.resolver.ts index 4ab22f16f1a..961534f1b91 100644 --- a/packages/twenty-server/src/engine/metadata-modules/cron-trigger/resolvers/cron-trigger.resolver.ts +++ b/packages/twenty-server/src/engine/metadata-modules/cron-trigger/resolvers/cron-trigger.resolver.ts @@ -6,14 +6,14 @@ import { Repository } from 'typeorm'; import { PreventNestToAutoLogGraphqlErrorsFilter } from 'src/engine/core-modules/graphql/filters/prevent-nest-to-auto-log-graphql-errors.filter'; import { ResolverValidationPipe } from 'src/engine/core-modules/graphql/pipes/resolver-validation.pipe'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { AuthWorkspace } from 'src/engine/decorators/auth/auth-workspace.decorator'; import { WorkspaceAuthGuard } from 'src/engine/guards/workspace-auth.guard'; import { CreateCronTriggerInput } from 'src/engine/metadata-modules/cron-trigger/dtos/create-cron-trigger.input'; import { CronTriggerIdInput } from 'src/engine/metadata-modules/cron-trigger/dtos/cron-trigger-id.input'; import { CronTriggerDTO } from 'src/engine/metadata-modules/cron-trigger/dtos/cron-trigger.dto'; import { UpdateCronTriggerInput } from 'src/engine/metadata-modules/cron-trigger/dtos/update-cron-trigger.input'; -import { CronTrigger } from 'src/engine/metadata-modules/cron-trigger/entities/cron-trigger.entity'; +import { CronTriggerEntity } from 'src/engine/metadata-modules/cron-trigger/entities/cron-trigger.entity'; import { CronTriggerV2Service } from 'src/engine/metadata-modules/cron-trigger/services/cron-trigger-v2.service'; import { cronTriggerGraphQLApiExceptionHandler } from 'src/engine/metadata-modules/cron-trigger/utils/cron-trigger-graphql-api-exception-handler.util'; @@ -24,14 +24,14 @@ import { cronTriggerGraphQLApiExceptionHandler } from 'src/engine/metadata-modul export class CronTriggerResolver { constructor( private readonly cronTriggerV2Service: CronTriggerV2Service, - @InjectRepository(CronTrigger) - private readonly cronTriggerRepository: Repository, + @InjectRepository(CronTriggerEntity) + private readonly cronTriggerRepository: Repository, ) {} @Query(() => CronTriggerDTO) async findOneCronTrigger( @Args('input') { id }: CronTriggerIdInput, - @AuthWorkspace() { id: workspaceId }: Workspace, + @AuthWorkspace() { id: workspaceId }: WorkspaceEntity, ) { try { return await this.cronTriggerRepository.findOneOrFail({ @@ -46,7 +46,9 @@ export class CronTriggerResolver { } @Query(() => [CronTriggerDTO]) - async findManyCronTriggers(@AuthWorkspace() { id: workspaceId }: Workspace) { + async findManyCronTriggers( + @AuthWorkspace() { id: workspaceId }: WorkspaceEntity, + ) { try { return await this.cronTriggerRepository.find({ where: { workspaceId }, @@ -59,7 +61,7 @@ export class CronTriggerResolver { @Mutation(() => CronTriggerDTO) async deleteOneCronTrigger( @Args('input') input: CronTriggerIdInput, - @AuthWorkspace() { id: workspaceId }: Workspace, + @AuthWorkspace() { id: workspaceId }: WorkspaceEntity, ) { try { return await this.cronTriggerV2Service.destroyOne({ @@ -75,7 +77,7 @@ export class CronTriggerResolver { async updateOneCronTrigger( @Args('input') input: UpdateCronTriggerInput, - @AuthWorkspace() { id: workspaceId }: Workspace, + @AuthWorkspace() { id: workspaceId }: WorkspaceEntity, ) { try { return await this.cronTriggerV2Service.updateOne(input, workspaceId); @@ -88,7 +90,7 @@ export class CronTriggerResolver { async createOneCronTrigger( @Args('input') input: CreateCronTriggerInput, - @AuthWorkspace() { id: workspaceId }: Workspace, + @AuthWorkspace() { id: workspaceId }: WorkspaceEntity, ) { try { return await this.cronTriggerV2Service.createOne(input, workspaceId); diff --git a/packages/twenty-server/src/engine/metadata-modules/cron-trigger/services/workspace-flat-cron-trigger-map-cache.service.ts b/packages/twenty-server/src/engine/metadata-modules/cron-trigger/services/workspace-flat-cron-trigger-map-cache.service.ts index 41245cba789..041edc4f8a3 100644 --- a/packages/twenty-server/src/engine/metadata-modules/cron-trigger/services/workspace-flat-cron-trigger-map-cache.service.ts +++ b/packages/twenty-server/src/engine/metadata-modules/cron-trigger/services/workspace-flat-cron-trigger-map-cache.service.ts @@ -9,7 +9,7 @@ import { CacheStorageService } from 'src/engine/core-modules/cache-storage/servi import { CacheStorageNamespace } from 'src/engine/core-modules/cache-storage/types/cache-storage-namespace.enum'; import { CRON_TRIGGER_ENTITY_RELATION_PROPERTIES, - CronTrigger, + CronTriggerEntity, } from 'src/engine/metadata-modules/cron-trigger/entities/cron-trigger.entity'; import { FlatCronTrigger } from 'src/engine/metadata-modules/cron-trigger/types/flat-cron-trigger.type'; import { EMPTY_FLAT_ENTITY_MAPS } from 'src/engine/metadata-modules/flat-entity/constant/empty-flat-entity-maps.constant'; @@ -26,8 +26,8 @@ export class WorkspaceFlatCronTriggerMapCacheService extends WorkspaceFlatMapCac constructor( @InjectCacheStorage(CacheStorageNamespace.EngineWorkspace) cacheStorageService: CacheStorageService, - @InjectRepository(CronTrigger) - private readonly cronTriggerRepository: Repository, + @InjectRepository(CronTriggerEntity) + private readonly cronTriggerRepository: Repository, ) { super(cacheStorageService); } diff --git a/packages/twenty-server/src/engine/metadata-modules/cron-trigger/types/flat-cron-trigger.type.ts b/packages/twenty-server/src/engine/metadata-modules/cron-trigger/types/flat-cron-trigger.type.ts index d5332504b8a..f2d13b31a61 100644 --- a/packages/twenty-server/src/engine/metadata-modules/cron-trigger/types/flat-cron-trigger.type.ts +++ b/packages/twenty-server/src/engine/metadata-modules/cron-trigger/types/flat-cron-trigger.type.ts @@ -1,16 +1,16 @@ -import { type Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; -import { type CronTrigger } from 'src/engine/metadata-modules/cron-trigger/entities/cron-trigger.entity'; +import { type WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; +import { type CronTriggerEntity } from 'src/engine/metadata-modules/cron-trigger/entities/cron-trigger.entity'; import { type FlatEntityFrom } from 'src/engine/metadata-modules/flat-entity/types/flat-entity.type'; import { type ServerlessFunctionEntity } from 'src/engine/metadata-modules/serverless-function/serverless-function.entity'; import { type ExtractRecordTypeOrmRelationProperties } from 'src/engine/workspace-manager/workspace-migration-v2/types/extract-record-typeorm-relation-properties.type'; export type CronTriggerEntityRelationProperties = ExtractRecordTypeOrmRelationProperties< - CronTrigger, - ServerlessFunctionEntity | Workspace + CronTriggerEntity, + ServerlessFunctionEntity | WorkspaceEntity >; export type FlatCronTrigger = FlatEntityFrom< - CronTrigger, + CronTriggerEntity, CronTriggerEntityRelationProperties >; diff --git a/packages/twenty-server/src/engine/metadata-modules/database-event-trigger/database-event-trigger.module.ts b/packages/twenty-server/src/engine/metadata-modules/database-event-trigger/database-event-trigger.module.ts index 8aff484b754..d3f7c36fe69 100644 --- a/packages/twenty-server/src/engine/metadata-modules/database-event-trigger/database-event-trigger.module.ts +++ b/packages/twenty-server/src/engine/metadata-modules/database-event-trigger/database-event-trigger.module.ts @@ -1,8 +1,8 @@ import { Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; -import { DatabaseEventTrigger } from 'src/engine/metadata-modules/database-event-trigger/entities/database-event-trigger.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; +import { DatabaseEventTriggerEntity } from 'src/engine/metadata-modules/database-event-trigger/entities/database-event-trigger.entity'; import { CallDatabaseEventTriggerJobsJob } from 'src/engine/metadata-modules/database-event-trigger/jobs/call-database-event-trigger-jobs.job'; import { DatabaseEventTriggerResolver } from 'src/engine/metadata-modules/database-event-trigger/resolvers/database-event-trigger.resolver'; import { DatabaseEventTriggerV2Service } from 'src/engine/metadata-modules/database-event-trigger/services/database-event-trigger-v2.service'; @@ -12,7 +12,7 @@ import { WorkspaceMigrationV2Module } from 'src/engine/workspace-manager/workspa @Module({ imports: [ - TypeOrmModule.forFeature([Workspace, DatabaseEventTrigger]), + TypeOrmModule.forFeature([WorkspaceEntity, DatabaseEventTriggerEntity]), WorkspaceManyOrAllFlatEntityMapsCacheModule, WorkspaceMigrationV2Module, ], diff --git a/packages/twenty-server/src/engine/metadata-modules/database-event-trigger/entities/database-event-trigger.entity.ts b/packages/twenty-server/src/engine/metadata-modules/database-event-trigger/entities/database-event-trigger.entity.ts index 38401f71046..dca983eb66f 100644 --- a/packages/twenty-server/src/engine/metadata-modules/database-event-trigger/entities/database-event-trigger.entity.ts +++ b/packages/twenty-server/src/engine/metadata-modules/database-event-trigger/entities/database-event-trigger.entity.ts @@ -25,9 +25,9 @@ export const DATABASE_EVENT_TRIGGER_ENTITY_RELATION_PROPERTIES = [ @Entity('databaseEventTrigger') @Index('IDX_DATABASE_EVENT_TRIGGER_WORKSPACE_ID', ['workspaceId']) -export class DatabaseEventTrigger +export class DatabaseEventTriggerEntity extends SyncableEntity - implements Required + implements Required { @PrimaryGeneratedColumn('uuid') id: string; diff --git a/packages/twenty-server/src/engine/metadata-modules/database-event-trigger/jobs/call-database-event-trigger-jobs.job.ts b/packages/twenty-server/src/engine/metadata-modules/database-event-trigger/jobs/call-database-event-trigger-jobs.job.ts index 464b0ffe331..cf08d80b714 100644 --- a/packages/twenty-server/src/engine/metadata-modules/database-event-trigger/jobs/call-database-event-trigger-jobs.job.ts +++ b/packages/twenty-server/src/engine/metadata-modules/database-event-trigger/jobs/call-database-event-trigger-jobs.job.ts @@ -8,7 +8,7 @@ import { Process } from 'src/engine/core-modules/message-queue/decorators/proces import { Processor } from 'src/engine/core-modules/message-queue/decorators/processor.decorator'; import { MessageQueue } from 'src/engine/core-modules/message-queue/message-queue.constants'; import { MessageQueueService } from 'src/engine/core-modules/message-queue/services/message-queue.service'; -import { DatabaseEventTrigger } from 'src/engine/metadata-modules/database-event-trigger/entities/database-event-trigger.entity'; +import { DatabaseEventTriggerEntity } from 'src/engine/metadata-modules/database-event-trigger/entities/database-event-trigger.entity'; import { ServerlessFunctionTriggerJob, ServerlessFunctionTriggerJobData, @@ -20,8 +20,8 @@ export class CallDatabaseEventTriggerJobsJob { constructor( @InjectMessageQueue(MessageQueue.serverlessFunctionQueue) private readonly messageQueueService: MessageQueueService, - @InjectRepository(DatabaseEventTrigger) - private readonly databaseEventTriggerRepository: Repository, + @InjectRepository(DatabaseEventTriggerEntity) + private readonly databaseEventTriggerRepository: Repository, ) {} @Process(CallDatabaseEventTriggerJobsJob.name) diff --git a/packages/twenty-server/src/engine/metadata-modules/database-event-trigger/resolvers/database-event-trigger.resolver.ts b/packages/twenty-server/src/engine/metadata-modules/database-event-trigger/resolvers/database-event-trigger.resolver.ts index acda16875b5..a0f0139db76 100644 --- a/packages/twenty-server/src/engine/metadata-modules/database-event-trigger/resolvers/database-event-trigger.resolver.ts +++ b/packages/twenty-server/src/engine/metadata-modules/database-event-trigger/resolvers/database-event-trigger.resolver.ts @@ -6,14 +6,14 @@ import { Repository } from 'typeorm'; import { PreventNestToAutoLogGraphqlErrorsFilter } from 'src/engine/core-modules/graphql/filters/prevent-nest-to-auto-log-graphql-errors.filter'; import { ResolverValidationPipe } from 'src/engine/core-modules/graphql/pipes/resolver-validation.pipe'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { AuthWorkspace } from 'src/engine/decorators/auth/auth-workspace.decorator'; import { WorkspaceAuthGuard } from 'src/engine/guards/workspace-auth.guard'; import { CreateDatabaseEventTriggerInput } from 'src/engine/metadata-modules/database-event-trigger/dtos/create-database-event-trigger.input'; import { DatabaseEventTriggerIdInput } from 'src/engine/metadata-modules/database-event-trigger/dtos/database-event-trigger-id.input'; import { DatabaseEventTriggerDTO } from 'src/engine/metadata-modules/database-event-trigger/dtos/database-event-trigger.dto'; import { UpdateDatabaseEventTriggerInput } from 'src/engine/metadata-modules/database-event-trigger/dtos/update-database-event-trigger.input'; -import { DatabaseEventTrigger } from 'src/engine/metadata-modules/database-event-trigger/entities/database-event-trigger.entity'; +import { DatabaseEventTriggerEntity } from 'src/engine/metadata-modules/database-event-trigger/entities/database-event-trigger.entity'; import { DatabaseEventTriggerV2Service } from 'src/engine/metadata-modules/database-event-trigger/services/database-event-trigger-v2.service'; import { databaseEventTriggerGraphQLApiExceptionHandler } from 'src/engine/metadata-modules/database-event-trigger/utils/database-event-trigger-graphql-api-exception-handler.utils'; @@ -24,14 +24,14 @@ import { databaseEventTriggerGraphQLApiExceptionHandler } from 'src/engine/metad export class DatabaseEventTriggerResolver { constructor( private readonly databaseEventTriggerV2Service: DatabaseEventTriggerV2Service, - @InjectRepository(DatabaseEventTrigger) - private readonly databaseEventTriggerRepository: Repository, + @InjectRepository(DatabaseEventTriggerEntity) + private readonly databaseEventTriggerRepository: Repository, ) {} @Query(() => DatabaseEventTriggerDTO) async findOneDatabaseEventTrigger( @Args('input') { id }: DatabaseEventTriggerIdInput, - @AuthWorkspace() { id: workspaceId }: Workspace, + @AuthWorkspace() { id: workspaceId }: WorkspaceEntity, ) { try { return await this.databaseEventTriggerRepository.findOneOrFail({ @@ -47,7 +47,7 @@ export class DatabaseEventTriggerResolver { @Query(() => [DatabaseEventTriggerDTO]) async findManyDatabaseEventTriggers( - @AuthWorkspace() { id: workspaceId }: Workspace, + @AuthWorkspace() { id: workspaceId }: WorkspaceEntity, ) { try { return await this.databaseEventTriggerRepository.find({ @@ -61,7 +61,7 @@ export class DatabaseEventTriggerResolver { @Mutation(() => DatabaseEventTriggerDTO) async deleteOneDatabaseEventTrigger( @Args('input') input: DatabaseEventTriggerIdInput, - @AuthWorkspace() { id: workspaceId }: Workspace, + @AuthWorkspace() { id: workspaceId }: WorkspaceEntity, ) { try { return await this.databaseEventTriggerV2Service.destroyOne({ @@ -77,7 +77,7 @@ export class DatabaseEventTriggerResolver { async updateOneDatabaseEventTrigger( @Args('input') input: UpdateDatabaseEventTriggerInput, - @AuthWorkspace() { id: workspaceId }: Workspace, + @AuthWorkspace() { id: workspaceId }: WorkspaceEntity, ) { try { return await this.databaseEventTriggerV2Service.updateOne( @@ -93,7 +93,7 @@ export class DatabaseEventTriggerResolver { async createOneDatabaseEventTrigger( @Args('input') input: CreateDatabaseEventTriggerInput, - @AuthWorkspace() { id: workspaceId }: Workspace, + @AuthWorkspace() { id: workspaceId }: WorkspaceEntity, ) { try { return await this.databaseEventTriggerV2Service.createOne( diff --git a/packages/twenty-server/src/engine/metadata-modules/database-event-trigger/services/workspace-flat-database-event-trigger-map-cache.service.ts b/packages/twenty-server/src/engine/metadata-modules/database-event-trigger/services/workspace-flat-database-event-trigger-map-cache.service.ts index a7990f35404..a1640c09f61 100644 --- a/packages/twenty-server/src/engine/metadata-modules/database-event-trigger/services/workspace-flat-database-event-trigger-map-cache.service.ts +++ b/packages/twenty-server/src/engine/metadata-modules/database-event-trigger/services/workspace-flat-database-event-trigger-map-cache.service.ts @@ -9,7 +9,7 @@ import { CacheStorageService } from 'src/engine/core-modules/cache-storage/servi import { CacheStorageNamespace } from 'src/engine/core-modules/cache-storage/types/cache-storage-namespace.enum'; import { DATABASE_EVENT_TRIGGER_ENTITY_RELATION_PROPERTIES, - DatabaseEventTrigger, + DatabaseEventTriggerEntity, } from 'src/engine/metadata-modules/database-event-trigger/entities/database-event-trigger.entity'; import { FlatDatabaseEventTrigger } from 'src/engine/metadata-modules/database-event-trigger/types/flat-database-event-trigger.type'; import { EMPTY_FLAT_ENTITY_MAPS } from 'src/engine/metadata-modules/flat-entity/constant/empty-flat-entity-maps.constant'; @@ -26,8 +26,8 @@ export class WorkspaceFlatDatabaseEventTriggerMapCacheService extends WorkspaceF constructor( @InjectCacheStorage(CacheStorageNamespace.EngineWorkspace) cacheStorageService: CacheStorageService, - @InjectRepository(DatabaseEventTrigger) - private readonly databaseEventTriggerRepository: Repository, + @InjectRepository(DatabaseEventTriggerEntity) + private readonly databaseEventTriggerRepository: Repository, ) { super(cacheStorageService); } diff --git a/packages/twenty-server/src/engine/metadata-modules/database-event-trigger/types/flat-database-event-trigger.type.ts b/packages/twenty-server/src/engine/metadata-modules/database-event-trigger/types/flat-database-event-trigger.type.ts index 6f2a38a5c47..0f5f35bb20f 100644 --- a/packages/twenty-server/src/engine/metadata-modules/database-event-trigger/types/flat-database-event-trigger.type.ts +++ b/packages/twenty-server/src/engine/metadata-modules/database-event-trigger/types/flat-database-event-trigger.type.ts @@ -1,16 +1,16 @@ -import { type Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; -import { type DatabaseEventTrigger } from 'src/engine/metadata-modules/database-event-trigger/entities/database-event-trigger.entity'; +import { type WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; +import { type DatabaseEventTriggerEntity } from 'src/engine/metadata-modules/database-event-trigger/entities/database-event-trigger.entity'; import { type FlatEntityFrom } from 'src/engine/metadata-modules/flat-entity/types/flat-entity.type'; import { type ServerlessFunctionEntity } from 'src/engine/metadata-modules/serverless-function/serverless-function.entity'; import { type ExtractRecordTypeOrmRelationProperties } from 'src/engine/workspace-manager/workspace-migration-v2/types/extract-record-typeorm-relation-properties.type'; export type DatabaseEventTriggerEntityRelationProperties = ExtractRecordTypeOrmRelationProperties< - DatabaseEventTrigger, - ServerlessFunctionEntity | Workspace + DatabaseEventTriggerEntity, + ServerlessFunctionEntity | WorkspaceEntity >; export type FlatDatabaseEventTrigger = FlatEntityFrom< - DatabaseEventTrigger, + DatabaseEventTriggerEntity, DatabaseEventTriggerEntityRelationProperties >; diff --git a/packages/twenty-server/src/engine/metadata-modules/field-metadata/field-metadata.resolver.ts b/packages/twenty-server/src/engine/metadata-modules/field-metadata/field-metadata.resolver.ts index 76f4a41f8e3..3c5bcc1737c 100644 --- a/packages/twenty-server/src/engine/metadata-modules/field-metadata/field-metadata.resolver.ts +++ b/packages/twenty-server/src/engine/metadata-modules/field-metadata/field-metadata.resolver.ts @@ -20,7 +20,7 @@ import { } from 'src/engine/core-modules/graphql/utils/graphql-errors.util'; import { I18nService } from 'src/engine/core-modules/i18n/i18n.service'; import { I18nContext } from 'src/engine/core-modules/i18n/types/i18n-context.type'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { type IDataloaders } from 'src/engine/dataloaders/dataloader.interface'; import { AuthWorkspace } from 'src/engine/decorators/auth/auth-workspace.decorator'; import { SettingsPermissionsGuard } from 'src/engine/guards/settings-permissions.guard'; @@ -60,7 +60,7 @@ export class FieldMetadataResolver { @Mutation(() => FieldMetadataDTO) async createOneField( @Args('input') input: CreateOneFieldMetadataInput, - @AuthWorkspace() { id: workspaceId }: Workspace, + @AuthWorkspace() { id: workspaceId }: WorkspaceEntity, @Context() context: I18nContext, ) { try { @@ -80,7 +80,7 @@ export class FieldMetadataResolver { @Mutation(() => FieldMetadataDTO) async updateOneField( @Args('input') input: UpdateOneFieldMetadataInput, - @AuthWorkspace() { id: workspaceId }: Workspace, + @AuthWorkspace() { id: workspaceId }: WorkspaceEntity, @Context() context: I18nContext, ) { const isWorkspaceMigrationV2Enabled = @@ -118,7 +118,7 @@ export class FieldMetadataResolver { @Mutation(() => FieldMetadataDTO) async deleteOneField( @Args('input') input: DeleteOneFieldInput, - @AuthWorkspace() { id: workspaceId }: Workspace, + @AuthWorkspace() { id: workspaceId }: WorkspaceEntity, @Context() context: I18nContext, ) { if (!isDefined(workspaceId)) { @@ -176,7 +176,7 @@ export class FieldMetadataResolver { @ResolveField(() => RelationDTO, { nullable: true }) async relation( - @AuthWorkspace() workspace: Workspace, + @AuthWorkspace() workspace: WorkspaceEntity, @Parent() { @@ -201,7 +201,7 @@ export class FieldMetadataResolver { @ResolveField(() => [RelationDTO], { nullable: true }) async morphRelations( - @AuthWorkspace() workspace: Workspace, + @AuthWorkspace() workspace: WorkspaceEntity, @Parent() { id: fieldMetadataId, diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-entity/types/all-flat-entity-types-by-metadata-name.ts b/packages/twenty-server/src/engine/metadata-modules/flat-entity/types/all-flat-entity-types-by-metadata-name.ts index 71194ad8cb0..ca7ae776801 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-entity/types/all-flat-entity-types-by-metadata-name.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-entity/types/all-flat-entity-types-by-metadata-name.ts @@ -1,6 +1,6 @@ -import { type CronTrigger } from 'src/engine/metadata-modules/cron-trigger/entities/cron-trigger.entity'; +import { type CronTriggerEntity } from 'src/engine/metadata-modules/cron-trigger/entities/cron-trigger.entity'; import { type FlatCronTrigger } from 'src/engine/metadata-modules/cron-trigger/types/flat-cron-trigger.type'; -import { type DatabaseEventTrigger } from 'src/engine/metadata-modules/database-event-trigger/entities/database-event-trigger.entity'; +import { type DatabaseEventTriggerEntity } from 'src/engine/metadata-modules/database-event-trigger/entities/database-event-trigger.entity'; import { type FlatDatabaseEventTrigger } from 'src/engine/metadata-modules/database-event-trigger/types/flat-database-event-trigger.type'; import { type FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity'; import { type FlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata.type'; @@ -12,7 +12,7 @@ import { type FlatViewGroup } from 'src/engine/metadata-modules/flat-view-group/ import { type FlatView } from 'src/engine/metadata-modules/flat-view/types/flat-view.type'; import { type IndexMetadataEntity } from 'src/engine/metadata-modules/index-metadata/index-metadata.entity'; import { type ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity'; -import { type RouteTrigger } from 'src/engine/metadata-modules/route-trigger/route-trigger.entity'; +import { type RouteTriggerEntity } from 'src/engine/metadata-modules/route-trigger/route-trigger.entity'; import { type FlatRouteTrigger } from 'src/engine/metadata-modules/route-trigger/types/flat-route-trigger.type'; import { type ServerlessFunctionEntity } from 'src/engine/metadata-modules/serverless-function/serverless-function.entity'; import { type FlatServerlessFunction } from 'src/engine/metadata-modules/serverless-function/types/flat-serverless-function.type'; @@ -146,7 +146,7 @@ export type AllFlatEntityTypesByMetadataName = { deleted: DeleteCronTriggerAction; }; flatEntity: FlatCronTrigger; - entity: CronTrigger; + entity: CronTriggerEntity; }; databaseEventTrigger: { actions: { @@ -155,7 +155,7 @@ export type AllFlatEntityTypesByMetadataName = { deleted: DeleteDatabaseEventTriggerAction; }; flatEntity: FlatDatabaseEventTrigger; - entity: DatabaseEventTrigger; + entity: DatabaseEventTriggerEntity; }; routeTrigger: { actions: { @@ -164,7 +164,7 @@ export type AllFlatEntityTypesByMetadataName = { deleted: DeleteRouteTriggerAction; }; flatEntity: FlatRouteTrigger; - entity: RouteTrigger; + entity: RouteTriggerEntity; }; viewFilter: { actions: { diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-view-field/types/flat-view-field.type.ts b/packages/twenty-server/src/engine/metadata-modules/flat-view-field/types/flat-view-field.type.ts index 5d5ee698366..193a11e1e7e 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-view-field/types/flat-view-field.type.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-view-field/types/flat-view-field.type.ts @@ -1,4 +1,4 @@ -import { type Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { type WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { type FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity'; import { type FlatEntityFrom } from 'src/engine/metadata-modules/flat-entity/types/flat-entity.type'; import { type ViewFieldEntity } from 'src/engine/metadata-modules/view-field/entities/view-field.entity'; @@ -8,7 +8,7 @@ import { type ExtractRecordTypeOrmRelationProperties } from 'src/engine/workspac export type ViewFieldEntityRelationProperties = ExtractRecordTypeOrmRelationProperties< ViewFieldEntity, - FieldMetadataEntity | ViewEntity | Workspace + FieldMetadataEntity | ViewEntity | WorkspaceEntity >; export type FlatViewField = FlatEntityFrom< diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-view-filter/types/flat-view-filter.type.ts b/packages/twenty-server/src/engine/metadata-modules/flat-view-filter/types/flat-view-filter.type.ts index 26c93522b3f..cf92da77aac 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-view-filter/types/flat-view-filter.type.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-view-filter/types/flat-view-filter.type.ts @@ -1,4 +1,4 @@ -import { type Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { type WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { type FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity'; import { type FlatEntityFrom } from 'src/engine/metadata-modules/flat-entity/types/flat-entity.type'; import { type ViewFilterGroupEntity } from 'src/engine/metadata-modules/view-filter-group/entities/view-filter-group.entity'; @@ -9,7 +9,7 @@ import { type ExtractRecordTypeOrmRelationProperties } from 'src/engine/workspac export type ViewFilterEntityRelationProperties = ExtractRecordTypeOrmRelationProperties< ViewFilterEntity, - FieldMetadataEntity | ViewEntity | ViewFilterGroupEntity | Workspace + FieldMetadataEntity | ViewEntity | ViewFilterGroupEntity | WorkspaceEntity >; export type FlatViewFilter = FlatEntityFrom< diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-view-group/types/flat-view-group.type.ts b/packages/twenty-server/src/engine/metadata-modules/flat-view-group/types/flat-view-group.type.ts index 447c53905e5..cf6c39ffa8e 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-view-group/types/flat-view-group.type.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-view-group/types/flat-view-group.type.ts @@ -1,4 +1,4 @@ -import { type Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { type WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { type FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity'; import { type FlatEntityFrom } from 'src/engine/metadata-modules/flat-entity/types/flat-entity.type'; import { type ViewGroupEntity } from 'src/engine/metadata-modules/view-group/entities/view-group.entity'; @@ -8,7 +8,7 @@ import { type ExtractRecordTypeOrmRelationProperties } from 'src/engine/workspac export type ViewGroupEntityRelationProperties = ExtractRecordTypeOrmRelationProperties< ViewGroupEntity, - FieldMetadataEntity | ViewEntity | Workspace + FieldMetadataEntity | ViewEntity | WorkspaceEntity >; export type FlatViewGroup = FlatEntityFrom< diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-view/types/flat-view.type.ts b/packages/twenty-server/src/engine/metadata-modules/flat-view/types/flat-view.type.ts index 2af95d90ff0..b6c70834acb 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-view/types/flat-view.type.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-view/types/flat-view.type.ts @@ -1,4 +1,4 @@ -import { type Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { type WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { type FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity'; import { type FlatEntityFrom } from 'src/engine/metadata-modules/flat-entity/types/flat-entity.type'; import { type ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity'; @@ -19,7 +19,7 @@ export type ViewEntityRelationProperties = | ViewFilterEntity | ViewGroupEntity | ViewFilterGroupEntity - | Workspace + | WorkspaceEntity | FieldMetadataEntity >; diff --git a/packages/twenty-server/src/engine/metadata-modules/index-metadata/index-metadata.resolver.ts b/packages/twenty-server/src/engine/metadata-modules/index-metadata/index-metadata.resolver.ts index b6ffd902a15..73dc4888e9e 100644 --- a/packages/twenty-server/src/engine/metadata-modules/index-metadata/index-metadata.resolver.ts +++ b/packages/twenty-server/src/engine/metadata-modules/index-metadata/index-metadata.resolver.ts @@ -5,7 +5,7 @@ import { PreventNestToAutoLogGraphqlErrorsFilter } from 'src/engine/core-modules import { ResolverValidationPipe } from 'src/engine/core-modules/graphql/pipes/resolver-validation.pipe'; import { I18nService } from 'src/engine/core-modules/i18n/i18n.service'; import { type I18nContext } from 'src/engine/core-modules/i18n/types/i18n-context.type'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { type IDataloaders } from 'src/engine/dataloaders/dataloader.interface'; import { AuthWorkspace } from 'src/engine/decorators/auth/auth-workspace.decorator'; import { WorkspaceAuthGuard } from 'src/engine/guards/workspace-auth.guard'; @@ -26,7 +26,7 @@ export class IndexMetadataResolver { @ResolveField(() => [IndexFieldMetadataDTO], { nullable: false }) async indexFieldMetadataList( - @AuthWorkspace() workspace: Workspace, + @AuthWorkspace() workspace: WorkspaceEntity, @Parent() indexMetadata: IndexMetadataDTO, @Context() context: { loaders: IDataloaders } & I18nContext, ): Promise { diff --git a/packages/twenty-server/src/engine/metadata-modules/object-metadata/object-metadata.module.ts b/packages/twenty-server/src/engine/metadata-modules/object-metadata/object-metadata.module.ts index 436faa9dad5..26be1cc32ac 100644 --- a/packages/twenty-server/src/engine/metadata-modules/object-metadata/object-metadata.module.ts +++ b/packages/twenty-server/src/engine/metadata-modules/object-metadata/object-metadata.module.ts @@ -9,7 +9,7 @@ import { import { NestjsQueryTypeOrmModule } from '@ptc-org/nestjs-query-typeorm'; import { TypeORMModule } from 'src/database/typeorm/typeorm.module'; -import { FeatureFlag } from 'src/engine/core-modules/feature-flag/feature-flag.entity'; +import { FeatureFlagEntity } from 'src/engine/core-modules/feature-flag/feature-flag.entity'; import { FeatureFlagModule } from 'src/engine/core-modules/feature-flag/feature-flag.module'; import { SettingsPermissionsGuard } from 'src/engine/guards/settings-permissions.guard'; import { WorkspaceAuthGuard } from 'src/engine/guards/workspace-auth.guard'; @@ -57,7 +57,7 @@ import { WorkspaceMigrationV2Module } from 'src/engine/workspace-manager/workspa ObjectMetadataEntity, FieldMetadataEntity, ]), - TypeOrmModule.forFeature([FeatureFlag, ViewEntity]), + TypeOrmModule.forFeature([FeatureFlagEntity, ViewEntity]), DataSourceModule, WorkspaceMigrationModule, WorkspaceMigrationRunnerModule, diff --git a/packages/twenty-server/src/engine/metadata-modules/object-metadata/object-metadata.resolver.ts b/packages/twenty-server/src/engine/metadata-modules/object-metadata/object-metadata.resolver.ts index 62db3222213..929fe34edd9 100644 --- a/packages/twenty-server/src/engine/metadata-modules/object-metadata/object-metadata.resolver.ts +++ b/packages/twenty-server/src/engine/metadata-modules/object-metadata/object-metadata.resolver.ts @@ -14,7 +14,7 @@ import { PreventNestToAutoLogGraphqlErrorsFilter } from 'src/engine/core-modules import { ResolverValidationPipe } from 'src/engine/core-modules/graphql/pipes/resolver-validation.pipe'; import { I18nService } from 'src/engine/core-modules/i18n/i18n.service'; import { I18nContext } from 'src/engine/core-modules/i18n/types/i18n-context.type'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { type IDataloaders } from 'src/engine/dataloaders/dataloader.interface'; import { AuthWorkspace } from 'src/engine/decorators/auth/auth-workspace.decorator'; import { SettingsPermissionsGuard } from 'src/engine/guards/settings-permissions.guard'; @@ -116,7 +116,7 @@ export class ObjectMetadataResolver { @Mutation(() => ObjectMetadataDTO) async deleteOneObject( @Args('input') input: DeleteOneObjectInput, - @AuthWorkspace() { id: workspaceId }: Workspace, + @AuthWorkspace() { id: workspaceId }: WorkspaceEntity, @Context() context: I18nContext, ) { try { @@ -136,7 +136,7 @@ export class ObjectMetadataResolver { @Mutation(() => ObjectMetadataDTO) async updateOneObject( @Args('input') updateObjectInput: UpdateOneObjectInput, - @AuthWorkspace() { id: workspaceId }: Workspace, + @AuthWorkspace() { id: workspaceId }: WorkspaceEntity, @Context() context: I18nContext, ) { const isWorkspaceMigrationV2Enabled = @@ -182,7 +182,7 @@ export class ObjectMetadataResolver { @ResolveField(() => [FieldMetadataDTO], { nullable: false }) async fieldsList( - @AuthWorkspace() workspace: Workspace, + @AuthWorkspace() workspace: WorkspaceEntity, @Parent() objectMetadata: ObjectMetadataDTO, @Context() context: { loaders: IDataloaders } & I18nContext, ): Promise { @@ -208,7 +208,7 @@ export class ObjectMetadataResolver { @ResolveField(() => [IndexMetadataDTO], { nullable: false }) async indexMetadataList( - @AuthWorkspace() workspace: Workspace, + @AuthWorkspace() workspace: WorkspaceEntity, @Parent() objectMetadata: ObjectMetadataDTO, @Context() context: { loaders: IDataloaders } & I18nContext, ): Promise { diff --git a/packages/twenty-server/src/engine/metadata-modules/object-permission/field-permission/field-permission.entity.ts b/packages/twenty-server/src/engine/metadata-modules/object-permission/field-permission/field-permission.entity.ts index b72bd332261..10b645e2a1d 100644 --- a/packages/twenty-server/src/engine/metadata-modules/object-permission/field-permission/field-permission.entity.ts +++ b/packages/twenty-server/src/engine/metadata-modules/object-permission/field-permission/field-permission.entity.ts @@ -12,7 +12,7 @@ import { UpdateDateColumn, } from 'typeorm'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity'; import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity'; import { RoleEntity } from 'src/engine/metadata-modules/role/role.entity'; @@ -78,11 +78,9 @@ export class FieldPermissionEntity { @Column({ nullable: false, type: 'uuid' }) workspaceId: string; - @ManyToOne(() => Workspace, { - onDelete: 'CASCADE', - }) + @ManyToOne(() => WorkspaceEntity, { onDelete: 'CASCADE' }) @JoinColumn({ name: 'workspaceId' }) - workspace: Relation; + workspace: Relation; @CreateDateColumn({ type: 'timestamptz' }) createdAt: Date; diff --git a/packages/twenty-server/src/engine/metadata-modules/permissions/permissions.module.ts b/packages/twenty-server/src/engine/metadata-modules/permissions/permissions.module.ts index 7801b532775..f9a0a84ad1d 100644 --- a/packages/twenty-server/src/engine/metadata-modules/permissions/permissions.module.ts +++ b/packages/twenty-server/src/engine/metadata-modules/permissions/permissions.module.ts @@ -2,10 +2,10 @@ import { Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; import { ApiKeyRoleService } from 'src/engine/core-modules/api-key/api-key-role.service'; -import { ApiKey } from 'src/engine/core-modules/api-key/api-key.entity'; +import { ApiKeyEntity } from 'src/engine/core-modules/api-key/api-key.entity'; import { FeatureFlagModule } from 'src/engine/core-modules/feature-flag/feature-flag.module'; -import { UserWorkspace } from 'src/engine/core-modules/user-workspace/user-workspace.entity'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { UserWorkspaceEntity } from 'src/engine/core-modules/user-workspace/user-workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { PermissionsService } from 'src/engine/metadata-modules/permissions/permissions.service'; import { RoleTargetsEntity } from 'src/engine/metadata-modules/role/role-targets.entity'; import { RoleEntity } from 'src/engine/metadata-modules/role/role.entity'; @@ -17,11 +17,11 @@ import { WorkspacePermissionsCacheModule } from 'src/engine/metadata-modules/wor TypeOrmModule.forFeature([ RoleEntity, RoleTargetsEntity, - ApiKey, - Workspace, + ApiKeyEntity, + WorkspaceEntity, ]), FeatureFlagModule, - TypeOrmModule.forFeature([UserWorkspace]), + TypeOrmModule.forFeature([UserWorkspaceEntity]), UserRoleModule, WorkspacePermissionsCacheModule, ], diff --git a/packages/twenty-server/src/engine/metadata-modules/remote-server/remote-server.module.ts b/packages/twenty-server/src/engine/metadata-modules/remote-server/remote-server.module.ts index 11610515ddb..adf569d6dc4 100644 --- a/packages/twenty-server/src/engine/metadata-modules/remote-server/remote-server.module.ts +++ b/packages/twenty-server/src/engine/metadata-modules/remote-server/remote-server.module.ts @@ -2,7 +2,7 @@ import { Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; import { ForeignDataWrapperServerQueryFactory } from 'src/engine/api/graphql/workspace-query-builder/factories/foreign-data-wrapper-server-query.factory'; -import { FeatureFlag } from 'src/engine/core-modules/feature-flag/feature-flag.entity'; +import { FeatureFlagEntity } from 'src/engine/core-modules/feature-flag/feature-flag.entity'; import { JwtModule } from 'src/engine/core-modules/jwt/jwt.module'; import { RemoteServerEntity } from 'src/engine/metadata-modules/remote-server/remote-server.entity'; import { RemoteServerResolver } from 'src/engine/metadata-modules/remote-server/remote-server.resolver'; @@ -16,7 +16,7 @@ import { WorkspaceDataSourceModule } from 'src/engine/workspace-datasource/works TypeOrmModule.forFeature([RemoteServerEntity]), RemoteTableModule, WorkspaceDataSourceModule, - TypeOrmModule.forFeature([FeatureFlag]), + TypeOrmModule.forFeature([FeatureFlagEntity]), ], providers: [ RemoteServerService, diff --git a/packages/twenty-server/src/engine/metadata-modules/remote-server/remote-server.resolver.ts b/packages/twenty-server/src/engine/metadata-modules/remote-server/remote-server.resolver.ts index 603de2581f4..f254f9530d9 100644 --- a/packages/twenty-server/src/engine/metadata-modules/remote-server/remote-server.resolver.ts +++ b/packages/twenty-server/src/engine/metadata-modules/remote-server/remote-server.resolver.ts @@ -3,7 +3,7 @@ import { Args, Mutation, Query, Resolver } from '@nestjs/graphql'; import { PreventNestToAutoLogGraphqlErrorsFilter } from 'src/engine/core-modules/graphql/filters/prevent-nest-to-auto-log-graphql-errors.filter'; import { ResolverValidationPipe } from 'src/engine/core-modules/graphql/pipes/resolver-validation.pipe'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { AuthWorkspace } from 'src/engine/decorators/auth/auth-workspace.decorator'; import { WorkspaceAuthGuard } from 'src/engine/guards/workspace-auth.guard'; import { CreateRemoteServerInput } from 'src/engine/metadata-modules/remote-server/dtos/create-remote-server.input'; @@ -27,7 +27,7 @@ export class RemoteServerResolver { @Mutation(() => RemoteServerDTO) async createOneRemoteServer( @Args('input') input: CreateRemoteServerInput, - @AuthWorkspace() { id: workspaceId }: Workspace, + @AuthWorkspace() { id: workspaceId }: WorkspaceEntity, ) { try { return await this.remoteServerService.createOneRemoteServer( @@ -42,7 +42,7 @@ export class RemoteServerResolver { @Mutation(() => RemoteServerDTO) async updateOneRemoteServer( @Args('input') input: UpdateRemoteServerInput, - @AuthWorkspace() { id: workspaceId }: Workspace, + @AuthWorkspace() { id: workspaceId }: WorkspaceEntity, ) { try { return await this.remoteServerService.updateOneRemoteServer( @@ -57,7 +57,7 @@ export class RemoteServerResolver { @Mutation(() => RemoteServerDTO) async deleteOneRemoteServer( @Args('input') { id }: RemoteServerIdInput, - @AuthWorkspace() { id: workspaceId }: Workspace, + @AuthWorkspace() { id: workspaceId }: WorkspaceEntity, ) { try { return await this.remoteServerService.deleteOneRemoteServer( @@ -72,7 +72,7 @@ export class RemoteServerResolver { @Query(() => RemoteServerDTO) async findOneRemoteServerById( @Args('input') { id }: RemoteServerIdInput, - @AuthWorkspace() { id: workspaceId }: Workspace, + @AuthWorkspace() { id: workspaceId }: WorkspaceEntity, ) { try { return await this.remoteServerService.findOneByIdWithinWorkspace( @@ -88,7 +88,7 @@ export class RemoteServerResolver { async findManyRemoteServersByType( @Args('input') { foreignDataWrapperType }: RemoteServerTypeInput, - @AuthWorkspace() { id: workspaceId }: Workspace, + @AuthWorkspace() { id: workspaceId }: WorkspaceEntity, ) { try { return await this.remoteServerService.findManyByTypeWithinWorkspace( diff --git a/packages/twenty-server/src/engine/metadata-modules/remote-server/remote-server.service.ts b/packages/twenty-server/src/engine/metadata-modules/remote-server/remote-server.service.ts index e620d34573a..462e42ccf9a 100644 --- a/packages/twenty-server/src/engine/metadata-modules/remote-server/remote-server.service.ts +++ b/packages/twenty-server/src/engine/metadata-modules/remote-server/remote-server.service.ts @@ -9,7 +9,7 @@ import { v4 } from 'uuid'; import { ForeignDataWrapperServerQueryFactory } from 'src/engine/api/graphql/workspace-query-builder/factories/foreign-data-wrapper-server-query.factory'; import { encryptText } from 'src/engine/core-modules/auth/auth.util'; import { JwtTokenTypeEnum } from 'src/engine/core-modules/auth/types/auth-context.type'; -import { FeatureFlag } from 'src/engine/core-modules/feature-flag/feature-flag.entity'; +import { FeatureFlagEntity } from 'src/engine/core-modules/feature-flag/feature-flag.entity'; import { JwtWrapperService } from 'src/engine/core-modules/jwt/services/jwt-wrapper.service'; import { type CreateRemoteServerInput } from 'src/engine/metadata-modules/remote-server/dtos/create-remote-server.input'; import { type UpdateRemoteServerInput } from 'src/engine/metadata-modules/remote-server/dtos/update-remote-server.input'; @@ -44,8 +44,8 @@ export class RemoteServerService { private readonly foreignDataWrapperServerQueryFactory: ForeignDataWrapperServerQueryFactory, private readonly remoteTableService: RemoteTableService, private readonly workspaceDataSourceService: WorkspaceDataSourceService, - @InjectRepository(FeatureFlag) - private readonly featureFlagRepository: Repository, + @InjectRepository(FeatureFlagEntity) + private readonly featureFlagRepository: Repository, ) {} public async createOneRemoteServer( diff --git a/packages/twenty-server/src/engine/metadata-modules/remote-server/remote-table/remote-table.resolver.ts b/packages/twenty-server/src/engine/metadata-modules/remote-server/remote-table/remote-table.resolver.ts index 2c638650260..3b3065712fe 100644 --- a/packages/twenty-server/src/engine/metadata-modules/remote-server/remote-table/remote-table.resolver.ts +++ b/packages/twenty-server/src/engine/metadata-modules/remote-server/remote-table/remote-table.resolver.ts @@ -3,7 +3,7 @@ import { Args, Mutation, Query, Resolver } from '@nestjs/graphql'; import { PreventNestToAutoLogGraphqlErrorsFilter } from 'src/engine/core-modules/graphql/filters/prevent-nest-to-auto-log-graphql-errors.filter'; import { ResolverValidationPipe } from 'src/engine/core-modules/graphql/pipes/resolver-validation.pipe'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { AuthWorkspace } from 'src/engine/decorators/auth/auth-workspace.decorator'; import { WorkspaceAuthGuard } from 'src/engine/guards/workspace-auth.guard'; import { FindManyRemoteTablesInput } from 'src/engine/metadata-modules/remote-server/remote-table/dtos/find-many-remote-tables-input'; @@ -22,7 +22,7 @@ export class RemoteTableResolver { @Query(() => [RemoteTableDTO]) async findDistantTablesWithStatus( @Args('input') input: FindManyRemoteTablesInput, - @AuthWorkspace() { id: workspaceId }: Workspace, + @AuthWorkspace() { id: workspaceId }: WorkspaceEntity, ) { try { return await this.remoteTableService.findDistantTablesWithStatus( @@ -38,7 +38,7 @@ export class RemoteTableResolver { @Mutation(() => RemoteTableDTO) async syncRemoteTable( @Args('input') input: RemoteTableInput, - @AuthWorkspace() { id: workspaceId }: Workspace, + @AuthWorkspace() { id: workspaceId }: WorkspaceEntity, ) { try { return await this.remoteTableService.syncRemoteTable(input, workspaceId); @@ -50,7 +50,7 @@ export class RemoteTableResolver { @Mutation(() => RemoteTableDTO) async unsyncRemoteTable( @Args('input') input: RemoteTableInput, - @AuthWorkspace() { id: workspaceId }: Workspace, + @AuthWorkspace() { id: workspaceId }: WorkspaceEntity, ) { try { return await this.remoteTableService.unsyncRemoteTable( @@ -65,7 +65,7 @@ export class RemoteTableResolver { @Mutation(() => RemoteTableDTO) async syncRemoteTableSchemaChanges( @Args('input') input: RemoteTableInput, - @AuthWorkspace() { id: workspaceId }: Workspace, + @AuthWorkspace() { id: workspaceId }: WorkspaceEntity, ) { try { return await this.remoteTableService.syncRemoteTableSchemaChanges( diff --git a/packages/twenty-server/src/engine/metadata-modules/remote-server/utils/validate-remote-server-type.util.ts b/packages/twenty-server/src/engine/metadata-modules/remote-server/utils/validate-remote-server-type.util.ts index 198003999a0..16833e0c25b 100644 --- a/packages/twenty-server/src/engine/metadata-modules/remote-server/utils/validate-remote-server-type.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/remote-server/utils/validate-remote-server-type.util.ts @@ -1,7 +1,7 @@ import { type Repository } from 'typeorm'; import { FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum'; -import { type FeatureFlag } from 'src/engine/core-modules/feature-flag/feature-flag.entity'; +import { type FeatureFlagEntity } from 'src/engine/core-modules/feature-flag/feature-flag.entity'; import { RemoteServerType } from 'src/engine/metadata-modules/remote-server/remote-server.entity'; import { RemoteServerException, @@ -10,7 +10,7 @@ import { export const validateRemoteServerType = async ( remoteServerType: RemoteServerType, - featureFlagRepository: Repository, + featureFlagRepository: Repository, workspaceId: string, ) => { const featureFlagKey = getFeatureFlagKey(remoteServerType); diff --git a/packages/twenty-server/src/engine/metadata-modules/role/dtos/user-workspace-permissions.dto.ts b/packages/twenty-server/src/engine/metadata-modules/role/dtos/user-workspace-permissions.dto.ts index 7eb78a66a6e..a7f693b346d 100644 --- a/packages/twenty-server/src/engine/metadata-modules/role/dtos/user-workspace-permissions.dto.ts +++ b/packages/twenty-server/src/engine/metadata-modules/role/dtos/user-workspace-permissions.dto.ts @@ -1,6 +1,6 @@ -import { type UserWorkspace } from 'src/engine/core-modules/user-workspace/user-workspace.entity'; +import { type UserWorkspaceEntity } from 'src/engine/core-modules/user-workspace/user-workspace.entity'; export type UserWorkspacePermissionsDto = Pick< - UserWorkspace, + UserWorkspaceEntity, 'objectPermissions' | 'permissionFlags' | 'objectsPermissions' >; diff --git a/packages/twenty-server/src/engine/metadata-modules/role/role-targets.entity.ts b/packages/twenty-server/src/engine/metadata-modules/role/role-targets.entity.ts index 4ed8a421abf..0cd1c348e6b 100644 --- a/packages/twenty-server/src/engine/metadata-modules/role/role-targets.entity.ts +++ b/packages/twenty-server/src/engine/metadata-modules/role/role-targets.entity.ts @@ -12,7 +12,7 @@ import { UpdateDateColumn, } from 'typeorm'; -import { ApiKey } from 'src/engine/core-modules/api-key/api-key.entity'; +import { ApiKeyEntity } from 'src/engine/core-modules/api-key/api-key.entity'; import { RoleEntity } from 'src/engine/metadata-modules/role/role.entity'; @Entity('roleTargets') @@ -54,9 +54,9 @@ export class RoleTargetsEntity { @Column({ nullable: true, type: 'uuid' }) apiKeyId: string; - @ManyToOne(() => ApiKey, { onDelete: 'CASCADE' }) + @ManyToOne(() => ApiKeyEntity, { onDelete: 'CASCADE' }) @JoinColumn({ name: 'apiKeyId' }) - apiKey: Relation; + apiKey: Relation; @CreateDateColumn({ type: 'timestamptz' }) createdAt: Date; diff --git a/packages/twenty-server/src/engine/metadata-modules/role/role.module.ts b/packages/twenty-server/src/engine/metadata-modules/role/role.module.ts index d303c7d092e..c55b5c65a56 100644 --- a/packages/twenty-server/src/engine/metadata-modules/role/role.module.ts +++ b/packages/twenty-server/src/engine/metadata-modules/role/role.module.ts @@ -3,9 +3,9 @@ import { TypeOrmModule } from '@nestjs/typeorm'; import { ApiKeyModule } from 'src/engine/core-modules/api-key/api-key.module'; import { FileModule } from 'src/engine/core-modules/file/file.module'; -import { UserWorkspace } from 'src/engine/core-modules/user-workspace/user-workspace.entity'; +import { UserWorkspaceEntity } from 'src/engine/core-modules/user-workspace/user-workspace.entity'; import { UserWorkspaceModule } from 'src/engine/core-modules/user-workspace/user-workspace.module'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { AgentRoleModule } from 'src/engine/metadata-modules/agent-role/agent-role.module'; import { ObjectPermissionModule } from 'src/engine/metadata-modules/object-permission/object-permission.module'; import { PermissionFlagModule } from 'src/engine/metadata-modules/permission-flag/permission-flag.module'; @@ -20,7 +20,7 @@ import { WorkspacePermissionsCacheModule } from 'src/engine/metadata-modules/wor @Module({ imports: [ TypeOrmModule.forFeature([RoleEntity, RoleTargetsEntity]), - TypeOrmModule.forFeature([UserWorkspace, Workspace]), + TypeOrmModule.forFeature([UserWorkspaceEntity, WorkspaceEntity]), UserRoleModule, AgentRoleModule, ApiKeyModule, diff --git a/packages/twenty-server/src/engine/metadata-modules/role/role.resolver.ts b/packages/twenty-server/src/engine/metadata-modules/role/role.resolver.ts index 7d5777ed904..7391dfd596a 100644 --- a/packages/twenty-server/src/engine/metadata-modules/role/role.resolver.ts +++ b/packages/twenty-server/src/engine/metadata-modules/role/role.resolver.ts @@ -17,7 +17,7 @@ import { PreventNestToAutoLogGraphqlErrorsFilter } from 'src/engine/core-modules import { ResolverValidationPipe } from 'src/engine/core-modules/graphql/pipes/resolver-validation.pipe'; import { UserWorkspaceService } from 'src/engine/core-modules/user-workspace/user-workspace.service'; import { WorkspaceMemberDTO } from 'src/engine/core-modules/user/dtos/workspace-member.dto'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { AuthWorkspaceMemberId } from 'src/engine/decorators/auth/auth-workspace-member-id.decorator'; import { AuthWorkspace } from 'src/engine/decorators/auth/auth-workspace.decorator'; import { RequireFeatureFlag } from 'src/engine/guards/feature-flag.guard'; @@ -50,7 +50,7 @@ import { import { UpdateRoleInput } from 'src/engine/metadata-modules/role/dtos/update-role-input.dto'; import { RoleService } from 'src/engine/metadata-modules/role/role.service'; import { UserRoleService } from 'src/engine/metadata-modules/user-role/user-role.service'; -import { type WorkspaceMemberWorkspaceEntity } from 'src/modules/workspace-member/standard-objects/workspace-member.workspace-entity'; +import { WorkspaceMemberWorkspaceEntity } from 'src/modules/workspace-member/standard-objects/workspace-member.workspace-entity'; @Resolver(() => RoleDTO) @UsePipes(ResolverValidationPipe) @@ -75,14 +75,16 @@ export class RoleResolver { ) {} @Query(() => [RoleDTO]) - async getRoles(@AuthWorkspace() workspace: Workspace): Promise { + async getRoles( + @AuthWorkspace() workspace: WorkspaceEntity, + ): Promise { return this.roleService.getWorkspaceRoles(workspace.id); } @Mutation(() => WorkspaceMemberDTO) @UseGuards(UserAuthGuard) async updateWorkspaceMemberRole( - @AuthWorkspace() workspace: Workspace, + @AuthWorkspace() workspace: WorkspaceEntity, @Args('workspaceMemberId', { type: () => UUIDScalarType }) workspaceMemberId: string, @Args('roleId', { type: () => UUIDScalarType }) roleId: string, @@ -136,7 +138,7 @@ export class RoleResolver { @Mutation(() => RoleDTO) async createOneRole( - @AuthWorkspace() workspace: Workspace, + @AuthWorkspace() workspace: WorkspaceEntity, @Args('createRoleInput') createRoleInput: CreateRoleInput, ): Promise { return await this.roleService.createRole({ @@ -147,7 +149,7 @@ export class RoleResolver { @Mutation(() => RoleDTO) async updateOneRole( - @AuthWorkspace() workspace: Workspace, + @AuthWorkspace() workspace: WorkspaceEntity, @Args('updateRoleInput') updateRoleInput: UpdateRoleInput, ): Promise { const role = await this.roleService.updateRole({ @@ -160,7 +162,7 @@ export class RoleResolver { @Mutation(() => String) async deleteOneRole( - @AuthWorkspace() workspace: Workspace, + @AuthWorkspace() workspace: WorkspaceEntity, @Args('roleId', { type: () => UUIDScalarType }) roleId: string, ): Promise { const deletedRoleId = await this.roleService.deleteRole( @@ -173,7 +175,7 @@ export class RoleResolver { @Mutation(() => [ObjectPermissionDTO]) async upsertObjectPermissions( - @AuthWorkspace() workspace: Workspace, + @AuthWorkspace() workspace: WorkspaceEntity, @Args('upsertObjectPermissionsInput') upsertObjectPermissionsInput: UpsertObjectPermissionsInput, ): Promise { @@ -185,7 +187,7 @@ export class RoleResolver { @Mutation(() => [PermissionFlagDTO]) async upsertPermissionFlags( - @AuthWorkspace() workspace: Workspace, + @AuthWorkspace() workspace: WorkspaceEntity, @Args('upsertPermissionFlagsInput') upsertPermissionFlagsInput: UpsertPermissionFlagsInput, ): Promise { @@ -197,7 +199,7 @@ export class RoleResolver { @Mutation(() => [FieldPermissionDTO]) async upsertFieldPermissions( - @AuthWorkspace() workspace: Workspace, + @AuthWorkspace() workspace: WorkspaceEntity, @Args('upsertFieldPermissionsInput') upsertFieldPermissionsInput: UpsertFieldPermissionsInput, ): Promise { @@ -212,7 +214,7 @@ export class RoleResolver { async assignRoleToAgent( @Args('agentId', { type: () => UUIDScalarType }) agentId: string, @Args('roleId', { type: () => UUIDScalarType }) roleId: string, - @AuthWorkspace() { id: workspaceId }: Workspace, + @AuthWorkspace() { id: workspaceId }: WorkspaceEntity, ) { await this.agentRoleService.assignRoleToAgent({ agentId, @@ -227,7 +229,7 @@ export class RoleResolver { @RequireFeatureFlag(FeatureFlagKey.IS_AI_ENABLED) async removeRoleFromAgent( @Args('agentId', { type: () => UUIDScalarType }) agentId: string, - @AuthWorkspace() { id: workspaceId }: Workspace, + @AuthWorkspace() { id: workspaceId }: WorkspaceEntity, ) { await this.agentRoleService.removeRoleFromAgent({ agentId, @@ -240,7 +242,7 @@ export class RoleResolver { @ResolveField('workspaceMembers', () => [WorkspaceMemberDTO]) async getWorkspaceMembersAssignedToRole( @Parent() role: RoleDTO, - @AuthWorkspace() workspace: Workspace, + @AuthWorkspace() workspace: WorkspaceEntity, ): Promise { const workspaceMembers = await this.userRoleService.getWorkspaceMembersAssignedToRole( @@ -254,7 +256,7 @@ export class RoleResolver { @ResolveField('agents', () => [AgentDTO]) async getAgentsAssignedToRole( @Parent() role: RoleDTO, - @AuthWorkspace() workspace: Workspace, + @AuthWorkspace() workspace: WorkspaceEntity, ): Promise { const agents = await this.agentRoleService.getAgentsAssignedToRole( role.id, @@ -270,7 +272,7 @@ export class RoleResolver { @ResolveField('apiKeys', () => [ApiKeyForRoleDTO]) async getApiKeysAssignedToRole( @Parent() role: RoleDTO, - @AuthWorkspace() workspace: Workspace, + @AuthWorkspace() workspace: WorkspaceEntity, ): Promise { const apiKeys = await this.apiKeyRoleService.getApiKeysAssignedToRole( role.id, diff --git a/packages/twenty-server/src/engine/metadata-modules/role/role.service.ts b/packages/twenty-server/src/engine/metadata-modules/role/role.service.ts index 5ecac581209..0059ac80940 100644 --- a/packages/twenty-server/src/engine/metadata-modules/role/role.service.ts +++ b/packages/twenty-server/src/engine/metadata-modules/role/role.service.ts @@ -4,7 +4,7 @@ import { msg } from '@lingui/core/macro'; import { isDefined } from 'twenty-shared/utils'; import { Repository } from 'typeorm'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { MEMBER_ROLE_LABEL } from 'src/engine/metadata-modules/permissions/constants/member-role-label.constants'; import { PermissionsException, @@ -23,8 +23,8 @@ import { WorkspacePermissionsCacheService } from 'src/engine/metadata-modules/wo export class RoleService { constructor( - @InjectRepository(Workspace) - private readonly workspaceRepository: Repository, + @InjectRepository(WorkspaceEntity) + private readonly workspaceRepository: Repository, @InjectRepository(RoleEntity) private readonly roleRepository: Repository, private readonly userRoleService: UserRoleService, diff --git a/packages/twenty-server/src/engine/metadata-modules/route-trigger/resolvers/route-trigger.resolver.ts b/packages/twenty-server/src/engine/metadata-modules/route-trigger/resolvers/route-trigger.resolver.ts index 8d0af2a37fb..053e690eb36 100644 --- a/packages/twenty-server/src/engine/metadata-modules/route-trigger/resolvers/route-trigger.resolver.ts +++ b/packages/twenty-server/src/engine/metadata-modules/route-trigger/resolvers/route-trigger.resolver.ts @@ -6,14 +6,14 @@ import { Repository } from 'typeorm'; import { PreventNestToAutoLogGraphqlErrorsFilter } from 'src/engine/core-modules/graphql/filters/prevent-nest-to-auto-log-graphql-errors.filter'; import { ResolverValidationPipe } from 'src/engine/core-modules/graphql/pipes/resolver-validation.pipe'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { AuthWorkspace } from 'src/engine/decorators/auth/auth-workspace.decorator'; import { WorkspaceAuthGuard } from 'src/engine/guards/workspace-auth.guard'; import { CreateRouteTriggerInput } from 'src/engine/metadata-modules/route-trigger/dtos/create-route-trigger.input'; import { RouteTriggerIdInput } from 'src/engine/metadata-modules/route-trigger/dtos/route-trigger-id.input'; import { RouteTriggerDTO } from 'src/engine/metadata-modules/route-trigger/dtos/route-trigger.dto'; import { UpdateRouteTriggerInput } from 'src/engine/metadata-modules/route-trigger/dtos/update-route-trigger.input'; -import { RouteTrigger } from 'src/engine/metadata-modules/route-trigger/route-trigger.entity'; +import { RouteTriggerEntity } from 'src/engine/metadata-modules/route-trigger/route-trigger.entity'; import { RouteTriggerV2Service } from 'src/engine/metadata-modules/route-trigger/services/route-trigger-v2.service'; import { routeTriggerGraphQLApiExceptionHandler } from 'src/engine/metadata-modules/route-trigger/utils/route-trigger-graphql-api-exception-handler.utils'; @@ -24,14 +24,14 @@ import { routeTriggerGraphQLApiExceptionHandler } from 'src/engine/metadata-modu export class RouteTriggerResolver { constructor( private readonly routeV2Service: RouteTriggerV2Service, - @InjectRepository(RouteTrigger) - private readonly routeTriggerRepository: Repository, + @InjectRepository(RouteTriggerEntity) + private readonly routeTriggerRepository: Repository, ) {} @Query(() => RouteTriggerDTO) async findOneRouteTrigger( @Args('input') { id }: RouteTriggerIdInput, - @AuthWorkspace() { id: workspaceId }: Workspace, + @AuthWorkspace() { id: workspaceId }: WorkspaceEntity, ) { try { return await this.routeTriggerRepository.findOneOrFail({ @@ -46,7 +46,9 @@ export class RouteTriggerResolver { } @Query(() => [RouteTriggerDTO]) - async findManyRouteTriggers(@AuthWorkspace() { id: workspaceId }: Workspace) { + async findManyRouteTriggers( + @AuthWorkspace() { id: workspaceId }: WorkspaceEntity, + ) { try { return await this.routeTriggerRepository.find({ where: { workspaceId }, @@ -59,7 +61,7 @@ export class RouteTriggerResolver { @Mutation(() => RouteTriggerDTO) async deleteOneRouteTrigger( @Args('input') input: RouteTriggerIdInput, - @AuthWorkspace() { id: workspaceId }: Workspace, + @AuthWorkspace() { id: workspaceId }: WorkspaceEntity, ) { try { return await this.routeV2Service.destroyOne({ @@ -75,7 +77,7 @@ export class RouteTriggerResolver { async updateOneRouteTrigger( @Args('input') input: UpdateRouteTriggerInput, - @AuthWorkspace() { id: workspaceId }: Workspace, + @AuthWorkspace() { id: workspaceId }: WorkspaceEntity, ) { try { return await this.routeV2Service.updateOne(input, workspaceId); @@ -88,7 +90,7 @@ export class RouteTriggerResolver { async createOneRouteTrigger( @Args('input') input: CreateRouteTriggerInput, - @AuthWorkspace() { id: workspaceId }: Workspace, + @AuthWorkspace() { id: workspaceId }: WorkspaceEntity, ) { try { return await this.routeV2Service.createOne(input, workspaceId); diff --git a/packages/twenty-server/src/engine/metadata-modules/route-trigger/route-trigger.entity.ts b/packages/twenty-server/src/engine/metadata-modules/route-trigger/route-trigger.entity.ts index 418d4abefc9..df0b7fc273b 100644 --- a/packages/twenty-server/src/engine/metadata-modules/route-trigger/route-trigger.entity.ts +++ b/packages/twenty-server/src/engine/metadata-modules/route-trigger/route-trigger.entity.ts @@ -33,9 +33,9 @@ export const ROUTE_TRIGGER_ENTITY_RELATION_PROPERTIES = [ 'httpMethod', 'workspaceId', ]) -export class RouteTrigger +export class RouteTriggerEntity extends SyncableEntity - implements Required + implements Required { @PrimaryGeneratedColumn('uuid') id: string; diff --git a/packages/twenty-server/src/engine/metadata-modules/route-trigger/route-trigger.module.ts b/packages/twenty-server/src/engine/metadata-modules/route-trigger/route-trigger.module.ts index 02f3e963812..f44db2be8f5 100644 --- a/packages/twenty-server/src/engine/metadata-modules/route-trigger/route-trigger.module.ts +++ b/packages/twenty-server/src/engine/metadata-modules/route-trigger/route-trigger.module.ts @@ -6,7 +6,7 @@ import { WorkspaceDomainsModule } from 'src/engine/core-modules/domain/workspace import { WorkspaceManyOrAllFlatEntityMapsCacheModule } from 'src/engine/metadata-modules/flat-entity/services/workspace-many-or-all-flat-entity-maps-cache.module'; import { RouteTriggerResolver } from 'src/engine/metadata-modules/route-trigger/resolvers/route-trigger.resolver'; import { RouteTriggerController } from 'src/engine/metadata-modules/route-trigger/route-trigger.controller'; -import { RouteTrigger } from 'src/engine/metadata-modules/route-trigger/route-trigger.entity'; +import { RouteTriggerEntity } from 'src/engine/metadata-modules/route-trigger/route-trigger.entity'; import { RouteTriggerService } from 'src/engine/metadata-modules/route-trigger/route-trigger.service'; import { RouteTriggerV2Service } from 'src/engine/metadata-modules/route-trigger/services/route-trigger-v2.service'; import { WorkspaceFlatRouteTriggerMapCacheService } from 'src/engine/metadata-modules/route-trigger/services/workspace-flat-route-trigger-map-cache.service'; @@ -15,7 +15,7 @@ import { WorkspaceMigrationV2Module } from 'src/engine/workspace-manager/workspa @Module({ imports: [ - TypeOrmModule.forFeature([RouteTrigger]), + TypeOrmModule.forFeature([RouteTriggerEntity]), AuthModule, WorkspaceDomainsModule, ServerlessFunctionModule, diff --git a/packages/twenty-server/src/engine/metadata-modules/route-trigger/route-trigger.service.ts b/packages/twenty-server/src/engine/metadata-modules/route-trigger/route-trigger.service.ts index 5c1fb90401d..ffc86744601 100644 --- a/packages/twenty-server/src/engine/metadata-modules/route-trigger/route-trigger.service.ts +++ b/packages/twenty-server/src/engine/metadata-modules/route-trigger/route-trigger.service.ts @@ -14,7 +14,7 @@ import { } from 'src/engine/metadata-modules/route-trigger/exceptions/route-trigger.exception'; import { HTTPMethod, - RouteTrigger, + RouteTriggerEntity, } from 'src/engine/metadata-modules/route-trigger/route-trigger.entity'; import { ServerlessFunctionService } from 'src/engine/metadata-modules/serverless-function/serverless-function.service'; @@ -24,8 +24,8 @@ export class RouteTriggerService { private readonly accessTokenService: AccessTokenService, private readonly serverlessFunctionService: ServerlessFunctionService, private readonly workspaceDomainsService: WorkspaceDomainsService, - @InjectRepository(RouteTrigger) - private readonly routeTriggerRepository: Repository, + @InjectRepository(RouteTriggerEntity) + private readonly routeTriggerRepository: Repository, ) {} private async getOneRouteTriggerWithPathParamsOrFail({ @@ -35,7 +35,7 @@ export class RouteTriggerService { request: Request; httpMethod: HTTPMethod; }): Promise<{ - routeTrigger: RouteTrigger; + routeTrigger: RouteTriggerEntity; pathParams: Partial>; }> { const host = `${request.protocol}://${request.get('host')}`; diff --git a/packages/twenty-server/src/engine/metadata-modules/route-trigger/services/workspace-flat-route-trigger-map-cache.service.ts b/packages/twenty-server/src/engine/metadata-modules/route-trigger/services/workspace-flat-route-trigger-map-cache.service.ts index b22e0d12c37..5793a192896 100644 --- a/packages/twenty-server/src/engine/metadata-modules/route-trigger/services/workspace-flat-route-trigger-map-cache.service.ts +++ b/packages/twenty-server/src/engine/metadata-modules/route-trigger/services/workspace-flat-route-trigger-map-cache.service.ts @@ -12,7 +12,7 @@ import { FlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/fl import { addFlatEntityToFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/add-flat-entity-to-flat-entity-maps-or-throw.util'; import { ROUTE_TRIGGER_ENTITY_RELATION_PROPERTIES, - RouteTrigger, + RouteTriggerEntity, } from 'src/engine/metadata-modules/route-trigger/route-trigger.entity'; import { FlatRouteTrigger } from 'src/engine/metadata-modules/route-trigger/types/flat-route-trigger.type'; import { WorkspaceFlatMapCache } from 'src/engine/workspace-flat-map-cache/decorators/workspace-flat-map-cache.decorator'; @@ -26,8 +26,8 @@ export class WorkspaceFlatRouteTriggerMapCacheService extends WorkspaceFlatMapCa constructor( @InjectCacheStorage(CacheStorageNamespace.EngineWorkspace) cacheStorageService: CacheStorageService, - @InjectRepository(RouteTrigger) - private readonly routeTriggerRepository: Repository, + @InjectRepository(RouteTriggerEntity) + private readonly routeTriggerRepository: Repository, ) { super(cacheStorageService); } diff --git a/packages/twenty-server/src/engine/metadata-modules/route-trigger/types/flat-route-trigger.type.ts b/packages/twenty-server/src/engine/metadata-modules/route-trigger/types/flat-route-trigger.type.ts index 98fbb1ee2a7..855e99b8923 100644 --- a/packages/twenty-server/src/engine/metadata-modules/route-trigger/types/flat-route-trigger.type.ts +++ b/packages/twenty-server/src/engine/metadata-modules/route-trigger/types/flat-route-trigger.type.ts @@ -1,16 +1,16 @@ -import { type Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { type WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { type FlatEntityFrom } from 'src/engine/metadata-modules/flat-entity/types/flat-entity.type'; -import { type RouteTrigger } from 'src/engine/metadata-modules/route-trigger/route-trigger.entity'; +import { type RouteTriggerEntity } from 'src/engine/metadata-modules/route-trigger/route-trigger.entity'; import { type ServerlessFunctionEntity } from 'src/engine/metadata-modules/serverless-function/serverless-function.entity'; import { type ExtractRecordTypeOrmRelationProperties } from 'src/engine/workspace-manager/workspace-migration-v2/types/extract-record-typeorm-relation-properties.type'; export type RouteTriggerEntityRelationProperties = ExtractRecordTypeOrmRelationProperties< - RouteTrigger, - ServerlessFunctionEntity | Workspace + RouteTriggerEntity, + ServerlessFunctionEntity | WorkspaceEntity >; export type FlatRouteTrigger = FlatEntityFrom< - RouteTrigger, + RouteTriggerEntity, RouteTriggerEntityRelationProperties >; diff --git a/packages/twenty-server/src/engine/metadata-modules/search-field-metadata/search-field-metadata.entity.ts b/packages/twenty-server/src/engine/metadata-modules/search-field-metadata/search-field-metadata.entity.ts index 51d4224b844..6a1386d2eb0 100644 --- a/packages/twenty-server/src/engine/metadata-modules/search-field-metadata/search-field-metadata.entity.ts +++ b/packages/twenty-server/src/engine/metadata-modules/search-field-metadata/search-field-metadata.entity.ts @@ -13,7 +13,7 @@ import { import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity'; import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; @Entity('searchFieldMetadata') @Unique('IDX_SEARCH_FIELD_METADATA_OBJECT_FIELD_UNIQUE', [ @@ -49,7 +49,7 @@ export class SearchFieldMetadataEntity { @Column({ nullable: false, type: 'uuid' }) workspaceId: string; - @ManyToOne(() => Workspace, { onDelete: 'CASCADE' }) + @ManyToOne(() => WorkspaceEntity, { onDelete: 'CASCADE' }) @JoinColumn({ name: 'workspaceId' }) - workspace: Relation; + workspace: Relation; } diff --git a/packages/twenty-server/src/engine/metadata-modules/serverless-function-layer/serverless-function-layer.resolver.ts b/packages/twenty-server/src/engine/metadata-modules/serverless-function-layer/serverless-function-layer.resolver.ts index 770d195d639..6e45236cbde 100644 --- a/packages/twenty-server/src/engine/metadata-modules/serverless-function-layer/serverless-function-layer.resolver.ts +++ b/packages/twenty-server/src/engine/metadata-modules/serverless-function-layer/serverless-function-layer.resolver.ts @@ -6,7 +6,7 @@ import { ServerlessFunctionLayerService } from 'src/engine/metadata-modules/serv import { CreateServerlessFunctionLayerInput } from 'src/engine/metadata-modules/serverless-function-layer/dtos/create-serverless-function-layer.input'; import { ServerlessFunctionLayerDTO } from 'src/engine/metadata-modules/serverless-function-layer/dtos/serverless-function-layer.dto'; import { AuthWorkspace } from 'src/engine/decorators/auth/auth-workspace.decorator'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; @UseGuards(WorkspaceAuthGuard) @Resolver() @@ -19,7 +19,7 @@ export class ServerlessFunctionLayerResolver { async createOneServerlessFunctionLayer( @Args() createServerlessFunctionLayerInput: CreateServerlessFunctionLayerInput, - @AuthWorkspace() { id: workspaceId }: Workspace, + @AuthWorkspace() { id: workspaceId }: WorkspaceEntity, ) { return this.serverlessFunctionLayerService.create( createServerlessFunctionLayerInput, diff --git a/packages/twenty-server/src/engine/metadata-modules/serverless-function/serverless-function.entity.ts b/packages/twenty-server/src/engine/metadata-modules/serverless-function/serverless-function.entity.ts index 79828197183..e9b82e9f1aa 100644 --- a/packages/twenty-server/src/engine/metadata-modules/serverless-function/serverless-function.entity.ts +++ b/packages/twenty-server/src/engine/metadata-modules/serverless-function/serverless-function.entity.ts @@ -15,9 +15,9 @@ import { import { SyncableEntity } from 'src/engine/workspace-manager/workspace-sync/interfaces/syncable-entity.interface'; -import { CronTrigger } from 'src/engine/metadata-modules/cron-trigger/entities/cron-trigger.entity'; -import { DatabaseEventTrigger } from 'src/engine/metadata-modules/database-event-trigger/entities/database-event-trigger.entity'; -import { RouteTrigger } from 'src/engine/metadata-modules/route-trigger/route-trigger.entity'; +import { CronTriggerEntity } from 'src/engine/metadata-modules/cron-trigger/entities/cron-trigger.entity'; +import { DatabaseEventTriggerEntity } from 'src/engine/metadata-modules/database-event-trigger/entities/database-event-trigger.entity'; +import { RouteTriggerEntity } from 'src/engine/metadata-modules/route-trigger/route-trigger.entity'; import { ServerlessFunctionLayerEntity } from 'src/engine/metadata-modules/serverless-function-layer/serverless-function-layer.entity'; import { ServerlessFunctionEntityRelationProperties } from 'src/engine/metadata-modules/serverless-function/types/flat-serverless-function.type'; @@ -81,31 +81,31 @@ export class ServerlessFunctionEntity serverlessFunctionLayer: Relation; @OneToMany( - () => CronTrigger, + () => CronTriggerEntity, (cronTrigger) => cronTrigger.serverlessFunction, { cascade: true, }, ) - cronTriggers: CronTrigger[]; + cronTriggers: CronTriggerEntity[]; @OneToMany( - () => DatabaseEventTrigger, + () => DatabaseEventTriggerEntity, (databaseEventTrigger) => databaseEventTrigger.serverlessFunction, { cascade: true, }, ) - databaseEventTriggers: DatabaseEventTrigger[]; + databaseEventTriggers: DatabaseEventTriggerEntity[]; @OneToMany( - () => RouteTrigger, + () => RouteTriggerEntity, (routeTrigger) => routeTrigger.serverlessFunction, { cascade: true, }, ) - routeTriggers: RouteTrigger[]; + routeTriggers: RouteTriggerEntity[]; @CreateDateColumn({ type: 'timestamptz' }) createdAt: Date; diff --git a/packages/twenty-server/src/engine/metadata-modules/serverless-function/serverless-function.module.ts b/packages/twenty-server/src/engine/metadata-modules/serverless-function/serverless-function.module.ts index f834d444e00..1c693fd7254 100644 --- a/packages/twenty-server/src/engine/metadata-modules/serverless-function/serverless-function.module.ts +++ b/packages/twenty-server/src/engine/metadata-modules/serverless-function/serverless-function.module.ts @@ -4,7 +4,7 @@ import { TypeOrmModule } from '@nestjs/typeorm'; import { NestjsQueryTypeOrmModule } from '@ptc-org/nestjs-query-typeorm'; import { AuditModule } from 'src/engine/core-modules/audit/audit.module'; -import { FeatureFlag } from 'src/engine/core-modules/feature-flag/feature-flag.entity'; +import { FeatureFlagEntity } from 'src/engine/core-modules/feature-flag/feature-flag.entity'; import { FeatureFlagModule } from 'src/engine/core-modules/feature-flag/feature-flag.module'; import { FileUploadModule } from 'src/engine/core-modules/file/file-upload/file-upload.module'; import { FileModule } from 'src/engine/core-modules/file/file.module'; @@ -23,7 +23,7 @@ import { WorkspaceMigrationV2Module } from 'src/engine/workspace-manager/workspa imports: [ FileUploadModule, NestjsQueryTypeOrmModule.forFeature([ServerlessFunctionEntity]), - TypeOrmModule.forFeature([FeatureFlag]), + TypeOrmModule.forFeature([FeatureFlagEntity]), FileModule, ThrottlerModule, AuditModule, diff --git a/packages/twenty-server/src/engine/metadata-modules/serverless-function/serverless-function.resolver.ts b/packages/twenty-server/src/engine/metadata-modules/serverless-function/serverless-function.resolver.ts index 58ba425c6ba..2f7de62f912 100644 --- a/packages/twenty-server/src/engine/metadata-modules/serverless-function/serverless-function.resolver.ts +++ b/packages/twenty-server/src/engine/metadata-modules/serverless-function/serverless-function.resolver.ts @@ -7,7 +7,7 @@ import { Repository } from 'typeorm'; import { PreventNestToAutoLogGraphqlErrorsFilter } from 'src/engine/core-modules/graphql/filters/prevent-nest-to-auto-log-graphql-errors.filter'; import { ResolverValidationPipe } from 'src/engine/core-modules/graphql/pipes/resolver-validation.pipe'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { AuthWorkspace } from 'src/engine/decorators/auth/auth-workspace.decorator'; import { FeatureFlagGuard } from 'src/engine/guards/feature-flag.guard'; import { WorkspaceAuthGuard } from 'src/engine/guards/workspace-auth.guard'; @@ -37,7 +37,7 @@ export class ServerlessFunctionResolver { @Query(() => ServerlessFunctionDTO) async findOneServerlessFunction( @Args('input') { id }: ServerlessFunctionIdInput, - @AuthWorkspace() { id: workspaceId }: Workspace, + @AuthWorkspace() { id: workspaceId }: WorkspaceEntity, ) { try { return await this.serverlessFunctionRepository.findOneOrFail({ @@ -54,7 +54,7 @@ export class ServerlessFunctionResolver { @Query(() => [ServerlessFunctionDTO]) async findManyServerlessFunctions( - @AuthWorkspace() { id: workspaceId }: Workspace, + @AuthWorkspace() { id: workspaceId }: WorkspaceEntity, ) { try { return this.serverlessFunctionRepository.find({ @@ -78,7 +78,7 @@ export class ServerlessFunctionResolver { @Query(() => graphqlTypeJson, { nullable: true }) async getServerlessFunctionSourceCode( @Args('input') input: GetServerlessFunctionSourceCodeInput, - @AuthWorkspace() { id: workspaceId }: Workspace, + @AuthWorkspace() { id: workspaceId }: WorkspaceEntity, ) { try { return await this.serverlessFunctionService.getServerlessFunctionSourceCode( @@ -94,7 +94,7 @@ export class ServerlessFunctionResolver { @Mutation(() => ServerlessFunctionDTO) async deleteOneServerlessFunction( @Args('input') input: ServerlessFunctionIdInput, - @AuthWorkspace() { id: workspaceId }: Workspace, + @AuthWorkspace() { id: workspaceId }: WorkspaceEntity, ) { try { return await this.serverlessFunctionService.deleteOneServerlessFunction({ @@ -110,7 +110,7 @@ export class ServerlessFunctionResolver { async updateOneServerlessFunction( @Args('input') input: UpdateServerlessFunctionInput, - @AuthWorkspace() { id: workspaceId }: Workspace, + @AuthWorkspace() { id: workspaceId }: WorkspaceEntity, ) { try { return await this.serverlessFunctionService.updateOneServerlessFunction( @@ -126,7 +126,7 @@ export class ServerlessFunctionResolver { async createOneServerlessFunction( @Args('input') input: CreateServerlessFunctionInput, - @AuthWorkspace() { id: workspaceId }: Workspace, + @AuthWorkspace() { id: workspaceId }: WorkspaceEntity, ) { try { return await this.serverlessFunctionService.createOneServerlessFunction( @@ -141,7 +141,7 @@ export class ServerlessFunctionResolver { @Mutation(() => ServerlessFunctionExecutionResultDTO) async executeOneServerlessFunction( @Args('input') input: ExecuteServerlessFunctionInput, - @AuthWorkspace() { id: workspaceId }: Workspace, + @AuthWorkspace() { id: workspaceId }: WorkspaceEntity, ) { try { const { id, payload, version } = input; @@ -160,7 +160,7 @@ export class ServerlessFunctionResolver { @Mutation(() => ServerlessFunctionDTO) async publishServerlessFunction( @Args('input') input: PublishServerlessFunctionInput, - @AuthWorkspace() { id: workspaceId }: Workspace, + @AuthWorkspace() { id: workspaceId }: WorkspaceEntity, ) { try { const { id } = input; diff --git a/packages/twenty-server/src/engine/metadata-modules/serverless-function/types/flat-serverless-function.type.ts b/packages/twenty-server/src/engine/metadata-modules/serverless-function/types/flat-serverless-function.type.ts index 21c7e73feb9..e672c0203ac 100644 --- a/packages/twenty-server/src/engine/metadata-modules/serverless-function/types/flat-serverless-function.type.ts +++ b/packages/twenty-server/src/engine/metadata-modules/serverless-function/types/flat-serverless-function.type.ts @@ -1,8 +1,8 @@ -import { type Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; -import { type CronTrigger } from 'src/engine/metadata-modules/cron-trigger/entities/cron-trigger.entity'; -import { type DatabaseEventTrigger } from 'src/engine/metadata-modules/database-event-trigger/entities/database-event-trigger.entity'; +import { type WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; +import { type CronTriggerEntity } from 'src/engine/metadata-modules/cron-trigger/entities/cron-trigger.entity'; +import { type DatabaseEventTriggerEntity } from 'src/engine/metadata-modules/database-event-trigger/entities/database-event-trigger.entity'; import { type FlatEntityFrom } from 'src/engine/metadata-modules/flat-entity/types/flat-entity.type'; -import { type RouteTrigger } from 'src/engine/metadata-modules/route-trigger/route-trigger.entity'; +import { type RouteTriggerEntity } from 'src/engine/metadata-modules/route-trigger/route-trigger.entity'; import { type ServerlessFunctionLayerEntity } from 'src/engine/metadata-modules/serverless-function-layer/serverless-function-layer.entity'; import { type ServerlessFunctionEntity } from 'src/engine/metadata-modules/serverless-function/serverless-function.entity'; import { type ServerlessFunctionCode } from 'src/engine/metadata-modules/serverless-function/types/serverless-function-code.type'; @@ -11,10 +11,10 @@ import { type ExtractRecordTypeOrmRelationProperties } from 'src/engine/workspac export type ServerlessFunctionEntityRelationProperties = ExtractRecordTypeOrmRelationProperties< ServerlessFunctionEntity, - | CronTrigger - | DatabaseEventTrigger - | RouteTrigger - | Workspace + | CronTriggerEntity + | DatabaseEventTriggerEntity + | RouteTriggerEntity + | WorkspaceEntity | ServerlessFunctionLayerEntity >; diff --git a/packages/twenty-server/src/engine/metadata-modules/user-role/user-role.module.ts b/packages/twenty-server/src/engine/metadata-modules/user-role/user-role.module.ts index 3e5bc02b115..275302ca743 100644 --- a/packages/twenty-server/src/engine/metadata-modules/user-role/user-role.module.ts +++ b/packages/twenty-server/src/engine/metadata-modules/user-role/user-role.module.ts @@ -1,7 +1,7 @@ import { Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; -import { UserWorkspace } from 'src/engine/core-modules/user-workspace/user-workspace.entity'; +import { UserWorkspaceEntity } from 'src/engine/core-modules/user-workspace/user-workspace.entity'; import { RoleTargetsEntity } from 'src/engine/metadata-modules/role/role-targets.entity'; import { RoleEntity } from 'src/engine/metadata-modules/role/role.entity'; import { UserRoleService } from 'src/engine/metadata-modules/user-role/user-role.service'; @@ -10,7 +10,7 @@ import { WorkspacePermissionsCacheModule } from 'src/engine/metadata-modules/wor @Module({ imports: [ TypeOrmModule.forFeature([RoleEntity, RoleTargetsEntity]), - TypeOrmModule.forFeature([UserWorkspace]), + TypeOrmModule.forFeature([UserWorkspaceEntity]), WorkspacePermissionsCacheModule, ], providers: [UserRoleService], diff --git a/packages/twenty-server/src/engine/metadata-modules/user-role/user-role.service.ts b/packages/twenty-server/src/engine/metadata-modules/user-role/user-role.service.ts index 97cd3b4873b..27cfcb94c32 100644 --- a/packages/twenty-server/src/engine/metadata-modules/user-role/user-role.service.ts +++ b/packages/twenty-server/src/engine/metadata-modules/user-role/user-role.service.ts @@ -4,7 +4,7 @@ import { msg } from '@lingui/core/macro'; import { isDefined } from 'twenty-shared/utils'; import { In, Not, Repository } from 'typeorm'; -import { UserWorkspace } from 'src/engine/core-modules/user-workspace/user-workspace.entity'; +import { UserWorkspaceEntity } from 'src/engine/core-modules/user-workspace/user-workspace.entity'; import { PermissionsException, PermissionsExceptionCode, @@ -15,7 +15,7 @@ import { RoleEntity } from 'src/engine/metadata-modules/role/role.entity'; import { WorkspacePermissionsCacheService } from 'src/engine/metadata-modules/workspace-permissions-cache/workspace-permissions-cache.service'; import { TwentyORMGlobalManager } from 'src/engine/twenty-orm/twenty-orm-global.manager'; import { ADMIN_ROLE } from 'src/engine/workspace-manager/workspace-sync-metadata/standard-roles/roles/admin-role'; -import { type WorkspaceMemberWorkspaceEntity } from 'src/modules/workspace-member/standard-objects/workspace-member.workspace-entity'; +import { WorkspaceMemberWorkspaceEntity } from 'src/modules/workspace-member/standard-objects/workspace-member.workspace-entity'; export class UserRoleService { constructor( @@ -23,8 +23,8 @@ export class UserRoleService { private readonly roleRepository: Repository, @InjectRepository(RoleTargetsEntity) private readonly roleTargetsRepository: Repository, - @InjectRepository(UserWorkspace) - private readonly userWorkspaceRepository: Repository, + @InjectRepository(UserWorkspaceEntity) + private readonly userWorkspaceRepository: Repository, private readonly twentyORMGlobalManager: TwentyORMGlobalManager, private readonly workspacePermissionsCacheService: WorkspacePermissionsCacheService, ) {} diff --git a/packages/twenty-server/src/engine/metadata-modules/view-field/controllers/view-field.controller.ts b/packages/twenty-server/src/engine/metadata-modules/view-field/controllers/view-field.controller.ts index 53ce41982c5..56c1d467b75 100644 --- a/packages/twenty-server/src/engine/metadata-modules/view-field/controllers/view-field.controller.ts +++ b/packages/twenty-server/src/engine/metadata-modules/view-field/controllers/view-field.controller.ts @@ -13,7 +13,7 @@ import { import { isDefined } from 'twenty-shared/utils'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { AuthWorkspace } from 'src/engine/decorators/auth/auth-workspace.decorator'; import { WorkspaceAuthGuard } from 'src/engine/guards/workspace-auth.guard'; import { CreateViewFieldInput } from 'src/engine/metadata-modules/view-field/dtos/inputs/create-view-field.input'; @@ -37,7 +37,7 @@ export class ViewFieldController { @Get() async findMany( - @AuthWorkspace() workspace: Workspace, + @AuthWorkspace() workspace: WorkspaceEntity, @Query('viewId') viewId?: string, ): Promise { if (viewId) { @@ -50,7 +50,7 @@ export class ViewFieldController { @Get(':id') async findOne( @Param('id') id: string, - @AuthWorkspace() workspace: Workspace, + @AuthWorkspace() workspace: WorkspaceEntity, ): Promise { const viewField = await this.viewFieldService.findById(id, workspace.id); @@ -76,7 +76,7 @@ export class ViewFieldController { async update( @Param('id') id: string, @Body() input: UpdateViewFieldInput['update'], - @AuthWorkspace() workspace: Workspace, + @AuthWorkspace() workspace: WorkspaceEntity, ): Promise { const updatedViewField = await this.viewFieldService.update( id, @@ -90,7 +90,7 @@ export class ViewFieldController { @Post() async create( @Body() input: CreateViewFieldInput, - @AuthWorkspace() workspace: Workspace, + @AuthWorkspace() workspace: WorkspaceEntity, ): Promise { return this.viewFieldService.create({ ...input, @@ -101,7 +101,7 @@ export class ViewFieldController { @Delete(':id') async delete( @Param('id') id: string, - @AuthWorkspace() workspace: Workspace, + @AuthWorkspace() workspace: WorkspaceEntity, ): Promise<{ success: boolean }> { const deletedViewField = await this.viewFieldService.delete( id, diff --git a/packages/twenty-server/src/engine/metadata-modules/view-field/entities/view-field.entity.ts b/packages/twenty-server/src/engine/metadata-modules/view-field/entities/view-field.entity.ts index 59725055cee..a938889f03c 100644 --- a/packages/twenty-server/src/engine/metadata-modules/view-field/entities/view-field.entity.ts +++ b/packages/twenty-server/src/engine/metadata-modules/view-field/entities/view-field.entity.ts @@ -14,7 +14,7 @@ import { import { SyncableEntity } from 'src/engine/workspace-manager/workspace-sync/interfaces/syncable-entity.interface'; import { AggregateOperations } from 'src/engine/api/graphql/graphql-query-runner/constants/aggregate-operations.constant'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity'; import { ViewEntity } from 'src/engine/metadata-modules/view/entities/view.entity'; @@ -79,11 +79,9 @@ export class ViewFieldEntity @DeleteDateColumn({ type: 'timestamptz' }) deletedAt: Date | null; - @ManyToOne(() => Workspace, { - onDelete: 'CASCADE', - }) + @ManyToOne(() => WorkspaceEntity, { onDelete: 'CASCADE' }) @JoinColumn({ name: 'workspaceId' }) - workspace: Relation; + workspace: Relation; @ManyToOne(() => ViewEntity, (view) => view.viewFields, { onDelete: 'CASCADE', diff --git a/packages/twenty-server/src/engine/metadata-modules/view-field/resolvers/view-field.resolver.ts b/packages/twenty-server/src/engine/metadata-modules/view-field/resolvers/view-field.resolver.ts index 8aab75099d7..003f4e732d0 100644 --- a/packages/twenty-server/src/engine/metadata-modules/view-field/resolvers/view-field.resolver.ts +++ b/packages/twenty-server/src/engine/metadata-modules/view-field/resolvers/view-field.resolver.ts @@ -3,7 +3,7 @@ import { Args, Mutation, Query, Resolver } from '@nestjs/graphql'; import { FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum'; import { FeatureFlagService } from 'src/engine/core-modules/feature-flag/services/feature-flag.service'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { AuthWorkspace } from 'src/engine/decorators/auth/auth-workspace.decorator'; import { WorkspaceAuthGuard } from 'src/engine/guards/workspace-auth.guard'; import { CreateViewFieldInput } from 'src/engine/metadata-modules/view-field/dtos/inputs/create-view-field.input'; @@ -29,7 +29,7 @@ export class ViewFieldResolver { @Query(() => [ViewFieldDTO]) async getCoreViewFields( @Args('viewId', { type: () => String }) viewId: string, - @AuthWorkspace() workspace: Workspace, + @AuthWorkspace() workspace: WorkspaceEntity, ): Promise { return this.viewFieldService.findByViewId(workspace.id, viewId); } @@ -37,7 +37,7 @@ export class ViewFieldResolver { @Query(() => ViewFieldDTO, { nullable: true }) async getCoreViewField( @Args('id', { type: () => String }) id: string, - @AuthWorkspace() workspace: Workspace, + @AuthWorkspace() workspace: WorkspaceEntity, ): Promise { return this.viewFieldService.findById(id, workspace.id); } @@ -45,7 +45,7 @@ export class ViewFieldResolver { @Mutation(() => ViewFieldDTO) async updateCoreViewField( @Args('input') updateViewFieldInput: UpdateViewFieldInput, - @AuthWorkspace() { id: workspaceId }: Workspace, + @AuthWorkspace() { id: workspaceId }: WorkspaceEntity, ): Promise { const isWorkspaceMigrationV2Enabled = await this.featureFlagService.isFeatureEnabled( @@ -70,7 +70,7 @@ export class ViewFieldResolver { @Mutation(() => ViewFieldDTO) async createCoreViewField( @Args('input') createViewFieldInput: CreateViewFieldInput, - @AuthWorkspace() { id: workspaceId }: Workspace, + @AuthWorkspace() { id: workspaceId }: WorkspaceEntity, ): Promise { const isWorkspaceMigrationV2Enabled = await this.featureFlagService.isFeatureEnabled( @@ -94,7 +94,7 @@ export class ViewFieldResolver { @Mutation(() => ViewFieldDTO) async deleteCoreViewField( @Args('input') deleteViewFieldInput: DeleteViewFieldInput, - @AuthWorkspace() { id: workspaceId }: Workspace, + @AuthWorkspace() { id: workspaceId }: WorkspaceEntity, ): Promise { const isWorkspaceMigrationV2Enabled = await this.featureFlagService.isFeatureEnabled( @@ -119,7 +119,7 @@ export class ViewFieldResolver { @Mutation(() => ViewFieldDTO) async destroyCoreViewField( @Args('input') destroyViewFieldInput: DestroyViewFieldInput, - @AuthWorkspace() { id: workspaceId }: Workspace, + @AuthWorkspace() { id: workspaceId }: WorkspaceEntity, ): Promise { const isWorkspaceMigrationV2Enabled = await this.featureFlagService.isFeatureEnabled( diff --git a/packages/twenty-server/src/engine/metadata-modules/view-filter-group/controllers/view-filter-group.controller.ts b/packages/twenty-server/src/engine/metadata-modules/view-filter-group/controllers/view-filter-group.controller.ts index 6f7644b679c..a4c5ef25b39 100644 --- a/packages/twenty-server/src/engine/metadata-modules/view-filter-group/controllers/view-filter-group.controller.ts +++ b/packages/twenty-server/src/engine/metadata-modules/view-filter-group/controllers/view-filter-group.controller.ts @@ -13,7 +13,7 @@ import { import { isDefined } from 'twenty-shared/utils'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { AuthWorkspace } from 'src/engine/decorators/auth/auth-workspace.decorator'; import { WorkspaceAuthGuard } from 'src/engine/guards/workspace-auth.guard'; import { CreateViewFilterGroupInput } from 'src/engine/metadata-modules/view-filter-group/dtos/inputs/create-view-filter-group.input'; @@ -39,7 +39,7 @@ export class ViewFilterGroupController { @Get() async findMany( - @AuthWorkspace() workspace: Workspace, + @AuthWorkspace() workspace: WorkspaceEntity, @Query('viewId') viewId?: string, ): Promise { if (viewId) { @@ -52,7 +52,7 @@ export class ViewFilterGroupController { @Get(':id') async findOne( @Param('id') id: string, - @AuthWorkspace() workspace: Workspace, + @AuthWorkspace() workspace: WorkspaceEntity, ): Promise { const viewFilterGroup = await this.viewFilterGroupService.findById( id, @@ -81,7 +81,7 @@ export class ViewFilterGroupController { @Post() async create( @Body() input: CreateViewFilterGroupInput, - @AuthWorkspace() workspace: Workspace, + @AuthWorkspace() workspace: WorkspaceEntity, ): Promise { return this.viewFilterGroupService.create({ ...input, @@ -93,7 +93,7 @@ export class ViewFilterGroupController { async update( @Param('id') id: string, @Body() input: UpdateViewFilterGroupInput, - @AuthWorkspace() workspace: Workspace, + @AuthWorkspace() workspace: WorkspaceEntity, ): Promise { const updatedViewFilterGroup = await this.viewFilterGroupService.update( id, @@ -107,7 +107,7 @@ export class ViewFilterGroupController { @Delete(':id') async delete( @Param('id') id: string, - @AuthWorkspace() workspace: Workspace, + @AuthWorkspace() workspace: WorkspaceEntity, ): Promise<{ success: boolean }> { const deletedViewFilterGroup = await this.viewFilterGroupService.delete( id, diff --git a/packages/twenty-server/src/engine/metadata-modules/view-filter-group/entities/view-filter-group.entity.ts b/packages/twenty-server/src/engine/metadata-modules/view-filter-group/entities/view-filter-group.entity.ts index 04bc0776420..4f3a1dfb612 100644 --- a/packages/twenty-server/src/engine/metadata-modules/view-filter-group/entities/view-filter-group.entity.ts +++ b/packages/twenty-server/src/engine/metadata-modules/view-filter-group/entities/view-filter-group.entity.ts @@ -14,7 +14,7 @@ import { import { SyncableEntity } from 'src/engine/workspace-manager/workspace-sync/interfaces/syncable-entity.interface'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { ViewFilterGroupLogicalOperator } from 'src/engine/metadata-modules/view-filter-group/enums/view-filter-group-logical-operator'; import { ViewFilterEntity } from 'src/engine/metadata-modules/view-filter/entities/view-filter.entity'; import { ViewEntity } from 'src/engine/metadata-modules/view/entities/view.entity'; @@ -57,11 +57,9 @@ export class ViewFilterGroupEntity extends SyncableEntity { @DeleteDateColumn({ type: 'timestamptz' }) deletedAt?: Date | null; - @ManyToOne(() => Workspace, { - onDelete: 'CASCADE', - }) + @ManyToOne(() => WorkspaceEntity, { onDelete: 'CASCADE' }) @JoinColumn({ name: 'workspaceId' }) - workspace: Relation; + workspace: Relation; @ManyToOne(() => ViewEntity, (view) => view.viewFilterGroups, { onDelete: 'CASCADE', diff --git a/packages/twenty-server/src/engine/metadata-modules/view-filter-group/resolvers/view-filter-group.resolver.ts b/packages/twenty-server/src/engine/metadata-modules/view-filter-group/resolvers/view-filter-group.resolver.ts index b9460f2b782..e68fea9c904 100644 --- a/packages/twenty-server/src/engine/metadata-modules/view-filter-group/resolvers/view-filter-group.resolver.ts +++ b/packages/twenty-server/src/engine/metadata-modules/view-filter-group/resolvers/view-filter-group.resolver.ts @@ -3,7 +3,7 @@ import { Args, Mutation, Query, Resolver } from '@nestjs/graphql'; import { isDefined } from 'twenty-shared/utils'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { AuthWorkspace } from 'src/engine/decorators/auth/auth-workspace.decorator'; import { WorkspaceAuthGuard } from 'src/engine/guards/workspace-auth.guard'; import { CreateViewFilterGroupInput } from 'src/engine/metadata-modules/view-filter-group/dtos/inputs/create-view-filter-group.input'; @@ -22,7 +22,7 @@ export class ViewFilterGroupResolver { @Query(() => [ViewFilterGroupDTO]) async getCoreViewFilterGroups( - @AuthWorkspace() workspace: Workspace, + @AuthWorkspace() workspace: WorkspaceEntity, @Args('viewId', { type: () => String, nullable: true }) viewId?: string, ): Promise { @@ -36,7 +36,7 @@ export class ViewFilterGroupResolver { @Query(() => ViewFilterGroupDTO, { nullable: true }) async getCoreViewFilterGroup( @Args('id', { type: () => String }) id: string, - @AuthWorkspace() workspace: Workspace, + @AuthWorkspace() workspace: WorkspaceEntity, ): Promise { return this.viewFilterGroupService.findById(id, workspace.id); } @@ -44,7 +44,7 @@ export class ViewFilterGroupResolver { @Mutation(() => ViewFilterGroupDTO) async createCoreViewFilterGroup( @Args('input') input: CreateViewFilterGroupInput, - @AuthWorkspace() workspace: Workspace, + @AuthWorkspace() workspace: WorkspaceEntity, ): Promise { return this.viewFilterGroupService.create({ ...input, @@ -56,7 +56,7 @@ export class ViewFilterGroupResolver { async updateCoreViewFilterGroup( @Args('id', { type: () => String }) id: string, @Args('input') input: UpdateViewFilterGroupInput, - @AuthWorkspace() workspace: Workspace, + @AuthWorkspace() workspace: WorkspaceEntity, ): Promise { return this.viewFilterGroupService.update(id, workspace.id, input); } @@ -64,7 +64,7 @@ export class ViewFilterGroupResolver { @Mutation(() => Boolean) async deleteCoreViewFilterGroup( @Args('id', { type: () => String }) id: string, - @AuthWorkspace() workspace: Workspace, + @AuthWorkspace() workspace: WorkspaceEntity, ): Promise { const deletedViewFilterGroup = await this.viewFilterGroupService.delete( id, @@ -77,7 +77,7 @@ export class ViewFilterGroupResolver { @Mutation(() => Boolean) async destroyCoreViewFilterGroup( @Args('id', { type: () => String }) id: string, - @AuthWorkspace() workspace: Workspace, + @AuthWorkspace() workspace: WorkspaceEntity, ): Promise { const deletedViewFilterGroup = await this.viewFilterGroupService.destroy( id, diff --git a/packages/twenty-server/src/engine/metadata-modules/view-filter/controllers/view-filter.controller.ts b/packages/twenty-server/src/engine/metadata-modules/view-filter/controllers/view-filter.controller.ts index 593a3042956..fca95dffa20 100644 --- a/packages/twenty-server/src/engine/metadata-modules/view-filter/controllers/view-filter.controller.ts +++ b/packages/twenty-server/src/engine/metadata-modules/view-filter/controllers/view-filter.controller.ts @@ -13,7 +13,7 @@ import { import { isDefined } from 'twenty-shared/utils'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { AuthWorkspace } from 'src/engine/decorators/auth/auth-workspace.decorator'; import { WorkspaceAuthGuard } from 'src/engine/guards/workspace-auth.guard'; import { CreateViewFilterInput } from 'src/engine/metadata-modules/view-filter/dtos/inputs/create-view-filter.input'; @@ -37,7 +37,7 @@ export class ViewFilterController { @Get() async findMany( - @AuthWorkspace() workspace: Workspace, + @AuthWorkspace() workspace: WorkspaceEntity, @Query('viewId') viewId?: string, ): Promise { if (viewId) { @@ -50,7 +50,7 @@ export class ViewFilterController { @Get(':id') async findOne( @Param('id') id: string, - @AuthWorkspace() workspace: Workspace, + @AuthWorkspace() workspace: WorkspaceEntity, ): Promise { const viewFilter = await this.viewFilterService.findById(id, workspace.id); @@ -75,7 +75,7 @@ export class ViewFilterController { @Post() async create( @Body() input: CreateViewFilterInput, - @AuthWorkspace() workspace: Workspace, + @AuthWorkspace() workspace: WorkspaceEntity, ): Promise { return this.viewFilterService.create({ ...input, @@ -87,7 +87,7 @@ export class ViewFilterController { async update( @Param('id') id: string, @Body() input: UpdateViewFilterInput, - @AuthWorkspace() workspace: Workspace, + @AuthWorkspace() workspace: WorkspaceEntity, ): Promise { const updateInput: UpdateViewFilterInput = { id, @@ -106,7 +106,7 @@ export class ViewFilterController { @Delete(':id') async delete( @Param('id') id: string, - @AuthWorkspace() workspace: Workspace, + @AuthWorkspace() workspace: WorkspaceEntity, ): Promise<{ success: boolean }> { const deletedViewFilter = await this.viewFilterService.delete( id, diff --git a/packages/twenty-server/src/engine/metadata-modules/view-filter/entities/view-filter.entity.ts b/packages/twenty-server/src/engine/metadata-modules/view-filter/entities/view-filter.entity.ts index adb28a117b4..8e2f5dd5a77 100644 --- a/packages/twenty-server/src/engine/metadata-modules/view-filter/entities/view-filter.entity.ts +++ b/packages/twenty-server/src/engine/metadata-modules/view-filter/entities/view-filter.entity.ts @@ -14,7 +14,7 @@ import { import { SyncableEntity } from 'src/engine/workspace-manager/workspace-sync/interfaces/syncable-entity.interface'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity'; import { ViewFilterGroupEntity } from 'src/engine/metadata-modules/view-filter-group/entities/view-filter-group.entity'; import { ViewFilterValue } from 'src/engine/metadata-modules/view-filter/types/view-filter-value.type'; @@ -77,11 +77,9 @@ export class ViewFilterEntity @DeleteDateColumn({ type: 'timestamptz' }) deletedAt: Date | null; - @ManyToOne(() => Workspace, { - onDelete: 'CASCADE', - }) + @ManyToOne(() => WorkspaceEntity, { onDelete: 'CASCADE' }) @JoinColumn({ name: 'workspaceId' }) - workspace: Relation; + workspace: Relation; @ManyToOne(() => ViewEntity, (view) => view.viewFilters, { onDelete: 'CASCADE', diff --git a/packages/twenty-server/src/engine/metadata-modules/view-filter/resolvers/view-filter.resolver.ts b/packages/twenty-server/src/engine/metadata-modules/view-filter/resolvers/view-filter.resolver.ts index 5750fa36692..d2556812bf4 100644 --- a/packages/twenty-server/src/engine/metadata-modules/view-filter/resolvers/view-filter.resolver.ts +++ b/packages/twenty-server/src/engine/metadata-modules/view-filter/resolvers/view-filter.resolver.ts @@ -3,7 +3,7 @@ import { Args, Mutation, Query, Resolver } from '@nestjs/graphql'; import { FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum'; import { FeatureFlagService } from 'src/engine/core-modules/feature-flag/services/feature-flag.service'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { AuthWorkspace } from 'src/engine/decorators/auth/auth-workspace.decorator'; import { WorkspaceAuthGuard } from 'src/engine/guards/workspace-auth.guard'; import { CreateViewFilterInput } from 'src/engine/metadata-modules/view-filter/dtos/inputs/create-view-filter.input'; @@ -27,7 +27,7 @@ export class ViewFilterResolver { @Query(() => [ViewFilterDTO]) async getCoreViewFilters( - @AuthWorkspace() workspace: Workspace, + @AuthWorkspace() workspace: WorkspaceEntity, @Args('viewId', { type: () => String, nullable: true }) viewId?: string, ): Promise { @@ -41,7 +41,7 @@ export class ViewFilterResolver { @Query(() => ViewFilterDTO, { nullable: true }) async getCoreViewFilter( @Args('id', { type: () => String }) id: string, - @AuthWorkspace() workspace: Workspace, + @AuthWorkspace() workspace: WorkspaceEntity, ): Promise { return this.viewFilterService.findById(id, workspace.id); } @@ -49,7 +49,7 @@ export class ViewFilterResolver { @Mutation(() => ViewFilterDTO) async createCoreViewFilter( @Args('input') createViewFilterInput: CreateViewFilterInput, - @AuthWorkspace() { id: workspaceId }: Workspace, + @AuthWorkspace() { id: workspaceId }: WorkspaceEntity, ): Promise { const isWorkspaceMigrationV2Enabled = await this.featureFlagService.isFeatureEnabled( @@ -73,7 +73,7 @@ export class ViewFilterResolver { @Mutation(() => ViewFilterDTO) async updateCoreViewFilter( @Args('input') updateViewFilterInput: UpdateViewFilterInput, - @AuthWorkspace() { id: workspaceId }: Workspace, + @AuthWorkspace() { id: workspaceId }: WorkspaceEntity, ): Promise { const isWorkspaceMigrationV2Enabled = await this.featureFlagService.isFeatureEnabled( @@ -98,7 +98,7 @@ export class ViewFilterResolver { @Mutation(() => ViewFilterDTO) async deleteCoreViewFilter( @Args('input') deleteViewFilterInput: DeleteViewFilterInput, - @AuthWorkspace() { id: workspaceId }: Workspace, + @AuthWorkspace() { id: workspaceId }: WorkspaceEntity, ): Promise { const isWorkspaceMigrationV2Enabled = await this.featureFlagService.isFeatureEnabled( @@ -124,7 +124,7 @@ export class ViewFilterResolver { @Mutation(() => ViewFilterDTO) async destroyCoreViewFilter( @Args('input') destroyViewFilterInput: DestroyViewFilterInput, - @AuthWorkspace() { id: workspaceId }: Workspace, + @AuthWorkspace() { id: workspaceId }: WorkspaceEntity, ): Promise { const isWorkspaceMigrationV2Enabled = await this.featureFlagService.isFeatureEnabled( diff --git a/packages/twenty-server/src/engine/metadata-modules/view-group/controllers/view-group.controller.ts b/packages/twenty-server/src/engine/metadata-modules/view-group/controllers/view-group.controller.ts index a5c23f250e3..ad796c85e23 100644 --- a/packages/twenty-server/src/engine/metadata-modules/view-group/controllers/view-group.controller.ts +++ b/packages/twenty-server/src/engine/metadata-modules/view-group/controllers/view-group.controller.ts @@ -13,7 +13,7 @@ import { import { isDefined } from 'twenty-shared/utils'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { AuthWorkspace } from 'src/engine/decorators/auth/auth-workspace.decorator'; import { WorkspaceAuthGuard } from 'src/engine/guards/workspace-auth.guard'; import { CreateViewGroupInput } from 'src/engine/metadata-modules/view-group/dtos/inputs/create-view-group.input'; @@ -37,7 +37,7 @@ export class ViewGroupController { @Get() async findMany( - @AuthWorkspace() workspace: Workspace, + @AuthWorkspace() workspace: WorkspaceEntity, @Query('viewId') viewId?: string, ): Promise { if (viewId) { @@ -50,7 +50,7 @@ export class ViewGroupController { @Get(':id') async findOne( @Param('id') id: string, - @AuthWorkspace() workspace: Workspace, + @AuthWorkspace() workspace: WorkspaceEntity, ): Promise { const viewGroup = await this.viewGroupService.findById(id, workspace.id); @@ -75,7 +75,7 @@ export class ViewGroupController { @Post() async create( @Body() input: CreateViewGroupInput, - @AuthWorkspace() workspace: Workspace, + @AuthWorkspace() workspace: WorkspaceEntity, ): Promise { return this.viewGroupService.create({ ...input, @@ -87,7 +87,7 @@ export class ViewGroupController { async update( @Param('id') id: string, @Body() input: UpdateViewGroupInput, - @AuthWorkspace() workspace: Workspace, + @AuthWorkspace() workspace: WorkspaceEntity, ): Promise { const updatedViewGroup = await this.viewGroupService.update( id, @@ -101,7 +101,7 @@ export class ViewGroupController { @Delete(':id') async delete( @Param('id') id: string, - @AuthWorkspace() workspace: Workspace, + @AuthWorkspace() workspace: WorkspaceEntity, ): Promise<{ success: boolean }> { const deletedViewGroup = await this.viewGroupService.delete( id, diff --git a/packages/twenty-server/src/engine/metadata-modules/view-group/entities/view-group.entity.ts b/packages/twenty-server/src/engine/metadata-modules/view-group/entities/view-group.entity.ts index 44d9947c20b..c002df713d3 100644 --- a/packages/twenty-server/src/engine/metadata-modules/view-group/entities/view-group.entity.ts +++ b/packages/twenty-server/src/engine/metadata-modules/view-group/entities/view-group.entity.ts @@ -13,7 +13,7 @@ import { import { SyncableEntity } from 'src/engine/workspace-manager/workspace-sync/interfaces/syncable-entity.interface'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity'; import { ViewEntity } from 'src/engine/metadata-modules/view/entities/view.entity'; @@ -62,11 +62,9 @@ export class ViewGroupEntity @DeleteDateColumn({ type: 'timestamptz' }) deletedAt: Date | null; - @ManyToOne(() => Workspace, { - onDelete: 'CASCADE', - }) + @ManyToOne(() => WorkspaceEntity, { onDelete: 'CASCADE' }) @JoinColumn({ name: 'workspaceId' }) - workspace: Relation; + workspace: Relation; @ManyToOne(() => ViewEntity, (view) => view.viewGroups, { onDelete: 'CASCADE', diff --git a/packages/twenty-server/src/engine/metadata-modules/view-group/resolvers/view-group.resolver.ts b/packages/twenty-server/src/engine/metadata-modules/view-group/resolvers/view-group.resolver.ts index 39ca1cfc1a7..5b7ee80ed92 100644 --- a/packages/twenty-server/src/engine/metadata-modules/view-group/resolvers/view-group.resolver.ts +++ b/packages/twenty-server/src/engine/metadata-modules/view-group/resolvers/view-group.resolver.ts @@ -3,7 +3,7 @@ import { Args, Mutation, Query, Resolver } from '@nestjs/graphql'; import { FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum'; import { FeatureFlagService } from 'src/engine/core-modules/feature-flag/services/feature-flag.service'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { AuthWorkspace } from 'src/engine/decorators/auth/auth-workspace.decorator'; import { WorkspaceAuthGuard } from 'src/engine/guards/workspace-auth.guard'; import { CreateViewGroupInput } from 'src/engine/metadata-modules/view-group/dtos/inputs/create-view-group.input'; @@ -27,7 +27,7 @@ export class ViewGroupResolver { @Query(() => [ViewGroupDTO]) async getCoreViewGroups( - @AuthWorkspace() workspace: Workspace, + @AuthWorkspace() workspace: WorkspaceEntity, @Args('viewId', { type: () => String, nullable: true }) viewId?: string, ): Promise { @@ -41,7 +41,7 @@ export class ViewGroupResolver { @Query(() => ViewGroupDTO, { nullable: true }) async getCoreViewGroup( @Args('id', { type: () => String }) id: string, - @AuthWorkspace() workspace: Workspace, + @AuthWorkspace() workspace: WorkspaceEntity, ): Promise { return this.viewGroupService.findById(id, workspace.id); } @@ -49,7 +49,7 @@ export class ViewGroupResolver { @Mutation(() => ViewGroupDTO) async createCoreViewGroup( @Args('input') createViewGroupInput: CreateViewGroupInput, - @AuthWorkspace() { id: workspaceId }: Workspace, + @AuthWorkspace() { id: workspaceId }: WorkspaceEntity, ): Promise { const isWorkspaceMigrationV2Enabled = await this.featureFlagService.isFeatureEnabled( @@ -73,7 +73,7 @@ export class ViewGroupResolver { @Mutation(() => ViewGroupDTO) async updateCoreViewGroup( @Args('input') updateViewGroupInput: UpdateViewGroupInput, - @AuthWorkspace() { id: workspaceId }: Workspace, + @AuthWorkspace() { id: workspaceId }: WorkspaceEntity, ): Promise { const isWorkspaceMigrationV2Enabled = await this.featureFlagService.isFeatureEnabled( @@ -98,7 +98,7 @@ export class ViewGroupResolver { @Mutation(() => ViewGroupDTO) async deleteCoreViewGroup( @Args('input') deleteViewGroupInput: DeleteViewGroupInput, - @AuthWorkspace() { id: workspaceId }: Workspace, + @AuthWorkspace() { id: workspaceId }: WorkspaceEntity, ): Promise { const isWorkspaceMigrationV2Enabled = await this.featureFlagService.isFeatureEnabled( @@ -124,7 +124,7 @@ export class ViewGroupResolver { @Mutation(() => ViewGroupDTO) async destroyCoreViewGroup( @Args('input') destroyViewGroupInput: DestroyViewGroupInput, - @AuthWorkspace() { id: workspaceId }: Workspace, + @AuthWorkspace() { id: workspaceId }: WorkspaceEntity, ): Promise { const isWorkspaceMigrationV2Enabled = await this.featureFlagService.isFeatureEnabled( diff --git a/packages/twenty-server/src/engine/metadata-modules/view-sort/controllers/view-sort.controller.ts b/packages/twenty-server/src/engine/metadata-modules/view-sort/controllers/view-sort.controller.ts index ca43c46bb24..911900556a8 100644 --- a/packages/twenty-server/src/engine/metadata-modules/view-sort/controllers/view-sort.controller.ts +++ b/packages/twenty-server/src/engine/metadata-modules/view-sort/controllers/view-sort.controller.ts @@ -13,7 +13,7 @@ import { import { isDefined } from 'twenty-shared/utils'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { AuthWorkspace } from 'src/engine/decorators/auth/auth-workspace.decorator'; import { WorkspaceAuthGuard } from 'src/engine/guards/workspace-auth.guard'; import { CreateViewSortInput } from 'src/engine/metadata-modules/view-sort/dtos/inputs/create-view-sort.input'; @@ -37,7 +37,7 @@ export class ViewSortController { @Get() async findMany( - @AuthWorkspace() workspace: Workspace, + @AuthWorkspace() workspace: WorkspaceEntity, @Query('viewId') viewId?: string, ): Promise { if (viewId) { @@ -50,7 +50,7 @@ export class ViewSortController { @Get(':id') async findOne( @Param('id') id: string, - @AuthWorkspace() workspace: Workspace, + @AuthWorkspace() workspace: WorkspaceEntity, ): Promise { const viewSort = await this.viewSortService.findById(id, workspace.id); @@ -75,7 +75,7 @@ export class ViewSortController { @Post() async create( @Body() input: CreateViewSortInput, - @AuthWorkspace() workspace: Workspace, + @AuthWorkspace() workspace: WorkspaceEntity, ): Promise { return this.viewSortService.create({ ...input, @@ -87,7 +87,7 @@ export class ViewSortController { async update( @Param('id') id: string, @Body() input: UpdateViewSortInput, - @AuthWorkspace() workspace: Workspace, + @AuthWorkspace() workspace: WorkspaceEntity, ): Promise { const updatedViewSort = await this.viewSortService.update( id, @@ -101,7 +101,7 @@ export class ViewSortController { @Delete(':id') async delete( @Param('id') id: string, - @AuthWorkspace() workspace: Workspace, + @AuthWorkspace() workspace: WorkspaceEntity, ): Promise<{ success: boolean }> { const deletedViewSort = await this.viewSortService.delete(id, workspace.id); diff --git a/packages/twenty-server/src/engine/metadata-modules/view-sort/entities/view-sort.entity.ts b/packages/twenty-server/src/engine/metadata-modules/view-sort/entities/view-sort.entity.ts index fc50a0101f4..b79ff9f2540 100644 --- a/packages/twenty-server/src/engine/metadata-modules/view-sort/entities/view-sort.entity.ts +++ b/packages/twenty-server/src/engine/metadata-modules/view-sort/entities/view-sort.entity.ts @@ -13,7 +13,7 @@ import { import { SyncableEntity } from 'src/engine/workspace-manager/workspace-sync/interfaces/syncable-entity.interface'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity'; import { ViewSortDirection } from 'src/engine/metadata-modules/view-sort/enums/view-sort-direction'; import { ViewEntity } from 'src/engine/metadata-modules/view/entities/view.entity'; @@ -67,11 +67,9 @@ export class ViewSortEntity extends SyncableEntity { @DeleteDateColumn({ type: 'timestamptz' }) deletedAt?: Date | null; - @ManyToOne(() => Workspace, { - onDelete: 'CASCADE', - }) + @ManyToOne(() => WorkspaceEntity, { onDelete: 'CASCADE' }) @JoinColumn({ name: 'workspaceId' }) - workspace: Relation; + workspace: Relation; @ManyToOne(() => ViewEntity, (view) => view.viewSorts, { onDelete: 'CASCADE', diff --git a/packages/twenty-server/src/engine/metadata-modules/view-sort/resolvers/view-sort.resolver.ts b/packages/twenty-server/src/engine/metadata-modules/view-sort/resolvers/view-sort.resolver.ts index ae7c1fec2f9..c89608fd487 100644 --- a/packages/twenty-server/src/engine/metadata-modules/view-sort/resolvers/view-sort.resolver.ts +++ b/packages/twenty-server/src/engine/metadata-modules/view-sort/resolvers/view-sort.resolver.ts @@ -3,7 +3,7 @@ import { Args, Mutation, Query, Resolver } from '@nestjs/graphql'; import { isDefined } from 'twenty-shared/utils'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { AuthWorkspace } from 'src/engine/decorators/auth/auth-workspace.decorator'; import { WorkspaceAuthGuard } from 'src/engine/guards/workspace-auth.guard'; import { CreateViewSortInput } from 'src/engine/metadata-modules/view-sort/dtos/inputs/create-view-sort.input'; @@ -20,7 +20,7 @@ export class ViewSortResolver { @Query(() => [ViewSortDTO]) async getCoreViewSorts( - @AuthWorkspace() workspace: Workspace, + @AuthWorkspace() workspace: WorkspaceEntity, @Args('viewId', { type: () => String, nullable: true }) viewId?: string, ): Promise { @@ -34,7 +34,7 @@ export class ViewSortResolver { @Query(() => ViewSortDTO, { nullable: true }) async getCoreViewSort( @Args('id', { type: () => String }) id: string, - @AuthWorkspace() workspace: Workspace, + @AuthWorkspace() workspace: WorkspaceEntity, ): Promise { return this.viewSortService.findById(id, workspace.id); } @@ -42,7 +42,7 @@ export class ViewSortResolver { @Mutation(() => ViewSortDTO) async createCoreViewSort( @Args('input') input: CreateViewSortInput, - @AuthWorkspace() workspace: Workspace, + @AuthWorkspace() workspace: WorkspaceEntity, ): Promise { return this.viewSortService.create({ ...input, @@ -54,7 +54,7 @@ export class ViewSortResolver { async updateCoreViewSort( @Args('id', { type: () => String }) id: string, @Args('input') input: UpdateViewSortInput, - @AuthWorkspace() workspace: Workspace, + @AuthWorkspace() workspace: WorkspaceEntity, ): Promise { return this.viewSortService.update(id, workspace.id, input); } @@ -62,7 +62,7 @@ export class ViewSortResolver { @Mutation(() => Boolean) async deleteCoreViewSort( @Args('id', { type: () => String }) id: string, - @AuthWorkspace() workspace: Workspace, + @AuthWorkspace() workspace: WorkspaceEntity, ): Promise { const deletedViewSort = await this.viewSortService.delete(id, workspace.id); @@ -72,7 +72,7 @@ export class ViewSortResolver { @Mutation(() => Boolean) async destroyCoreViewSort( @Args('id', { type: () => String }) id: string, - @AuthWorkspace() workspace: Workspace, + @AuthWorkspace() workspace: WorkspaceEntity, ): Promise { const deletedViewSort = await this.viewSortService.destroy( id, diff --git a/packages/twenty-server/src/engine/metadata-modules/view/controllers/view.controller.ts b/packages/twenty-server/src/engine/metadata-modules/view/controllers/view.controller.ts index edaac1a1adb..0bb196a6a73 100644 --- a/packages/twenty-server/src/engine/metadata-modules/view/controllers/view.controller.ts +++ b/packages/twenty-server/src/engine/metadata-modules/view/controllers/view.controller.ts @@ -15,7 +15,7 @@ import { type APP_LOCALES } from 'twenty-shared/translations'; import { isDefined } from 'twenty-shared/utils'; import { I18nService } from 'src/engine/core-modules/i18n/i18n.service'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { AuthWorkspace } from 'src/engine/decorators/auth/auth-workspace.decorator'; import { RequestLocale } from 'src/engine/decorators/locale/request-locale.decorator'; import { WorkspaceAuthGuard } from 'src/engine/guards/workspace-auth.guard'; @@ -47,7 +47,7 @@ export class ViewController { @Get() async findMany( @RequestLocale() locale: keyof typeof APP_LOCALES | undefined, - @AuthWorkspace() workspace: Workspace, + @AuthWorkspace() workspace: WorkspaceEntity, @Query('objectMetadataId') objectMetadataId?: string, ): Promise { const views = objectMetadataId @@ -64,7 +64,7 @@ export class ViewController { async findOne( @Param('id') id: string, @RequestLocale() locale: keyof typeof APP_LOCALES | undefined, - @AuthWorkspace() workspace: Workspace, + @AuthWorkspace() workspace: WorkspaceEntity, ): Promise { const view = await this.viewService.findById(id, workspace.id); @@ -95,7 +95,7 @@ export class ViewController { @Post() async create( @Body() input: CreateViewInput, - @AuthWorkspace() workspace: Workspace, + @AuthWorkspace() workspace: WorkspaceEntity, @RequestLocale() locale?: keyof typeof APP_LOCALES, ): Promise { const view = await this.viewService.create({ @@ -117,7 +117,7 @@ export class ViewController { @Param('id') id: string, @Body() input: UpdateViewInput, @RequestLocale() locale: keyof typeof APP_LOCALES | undefined, - @AuthWorkspace() workspace: Workspace, + @AuthWorkspace() workspace: WorkspaceEntity, ): Promise { const updatedView = await this.viewService.update(id, workspace.id, input); @@ -133,7 +133,7 @@ export class ViewController { @Delete(':id') async delete( @Param('id') id: string, - @AuthWorkspace() workspace: Workspace, + @AuthWorkspace() workspace: WorkspaceEntity, ): Promise<{ success: boolean }> { const deletedView = await this.viewService.delete(id, workspace.id); diff --git a/packages/twenty-server/src/engine/metadata-modules/view/entities/view.entity.ts b/packages/twenty-server/src/engine/metadata-modules/view/entities/view.entity.ts index 4aa01b253f6..af9538ff802 100644 --- a/packages/twenty-server/src/engine/metadata-modules/view/entities/view.entity.ts +++ b/packages/twenty-server/src/engine/metadata-modules/view/entities/view.entity.ts @@ -16,7 +16,7 @@ import { import { SyncableEntity } from 'src/engine/workspace-manager/workspace-sync/interfaces/syncable-entity.interface'; import { AggregateOperations } from 'src/engine/api/graphql/graphql-query-runner/constants/aggregate-operations.constant'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity'; import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity'; import { ViewFieldEntity } from 'src/engine/metadata-modules/view-field/entities/view-field.entity'; @@ -150,11 +150,11 @@ export class ViewEntity extends SyncableEntity implements Required { @Column({ nullable: true, type: 'text', default: null }) anyFieldFilterValue: string | null; - @ManyToOne(() => Workspace, { + @ManyToOne(() => WorkspaceEntity, { onDelete: 'CASCADE', }) @JoinColumn({ name: 'workspaceId' }) - workspace: Relation; + workspace: Relation; @OneToMany(() => ViewFieldEntity, (viewField) => viewField.view) viewFields: Relation; diff --git a/packages/twenty-server/src/engine/metadata-modules/view/resolvers/view.resolver.ts b/packages/twenty-server/src/engine/metadata-modules/view/resolvers/view.resolver.ts index 4c7ffd33d1a..fe473eda542 100644 --- a/packages/twenty-server/src/engine/metadata-modules/view/resolvers/view.resolver.ts +++ b/packages/twenty-server/src/engine/metadata-modules/view/resolvers/view.resolver.ts @@ -16,7 +16,7 @@ import { FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/featu import { FeatureFlagService } from 'src/engine/core-modules/feature-flag/services/feature-flag.service'; import { I18nService } from 'src/engine/core-modules/i18n/i18n.service'; import { type I18nContext } from 'src/engine/core-modules/i18n/types/i18n-context.type'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { type IDataloaders } from 'src/engine/dataloaders/dataloader.interface'; import { AuthWorkspace } from 'src/engine/decorators/auth/auth-workspace.decorator'; import { WorkspaceAuthGuard } from 'src/engine/guards/workspace-auth.guard'; @@ -58,7 +58,7 @@ export class ViewResolver { async name( @Parent() view: ViewDTO, @Context() context: { loaders: IDataloaders } & I18nContext, - @AuthWorkspace() workspace: Workspace, + @AuthWorkspace() workspace: WorkspaceEntity, ): Promise { if (view.name.includes('{objectLabelPlural}')) { const objectMetadata = await context.loaders.objectMetadataLoader.load({ @@ -101,7 +101,7 @@ export class ViewResolver { @Query(() => [ViewDTO]) async getCoreViews( - @AuthWorkspace() workspace: Workspace, + @AuthWorkspace() workspace: WorkspaceEntity, @Args('objectMetadataId', { type: () => String, nullable: true }) objectMetadataId?: string, ): Promise { @@ -118,7 +118,7 @@ export class ViewResolver { @Query(() => ViewDTO, { nullable: true }) async getCoreView( @Args('id', { type: () => String }) id: string, - @AuthWorkspace() workspace: Workspace, + @AuthWorkspace() workspace: WorkspaceEntity, ): Promise { return this.viewService.findById(id, workspace.id); } @@ -126,7 +126,7 @@ export class ViewResolver { @Mutation(() => ViewDTO) async createCoreView( @Args('input') input: CreateViewInput, - @AuthWorkspace() workspace: Workspace, + @AuthWorkspace() workspace: WorkspaceEntity, ): Promise { const isWorkspaceMigrationV2Enabled = await this.featureFlagService.isFeatureEnabled( @@ -151,7 +151,7 @@ export class ViewResolver { async updateCoreView( @Args('id', { type: () => String }) id: string, @Args('input') input: UpdateViewInput, - @AuthWorkspace() workspace: Workspace, + @AuthWorkspace() workspace: WorkspaceEntity, ): Promise { const isWorkspaceMigrationV2Enabled = await this.featureFlagService.isFeatureEnabled( @@ -172,7 +172,7 @@ export class ViewResolver { @Mutation(() => Boolean) async deleteCoreView( @Args('id', { type: () => String }) id: string, - @AuthWorkspace() workspace: Workspace, + @AuthWorkspace() workspace: WorkspaceEntity, ): Promise { const isWorkspaceMigrationV2Enabled = await this.featureFlagService.isFeatureEnabled( @@ -197,7 +197,7 @@ export class ViewResolver { @Mutation(() => Boolean) async destroyCoreView( @Args('id', { type: () => String }) id: string, - @AuthWorkspace() workspace: Workspace, + @AuthWorkspace() workspace: WorkspaceEntity, ): Promise { const isWorkspaceMigrationV2Enabled = await this.featureFlagService.isFeatureEnabled( @@ -222,7 +222,7 @@ export class ViewResolver { @ResolveField(() => [ViewFieldDTO]) async viewFields( @Parent() view: ViewDTO, - @AuthWorkspace() workspace: Workspace, + @AuthWorkspace() workspace: WorkspaceEntity, ) { if (isArray(view.viewFields)) { return view.viewFields; @@ -234,7 +234,7 @@ export class ViewResolver { @ResolveField(() => [ViewFilterDTO]) async viewFilters( @Parent() view: ViewDTO, - @AuthWorkspace() workspace: Workspace, + @AuthWorkspace() workspace: WorkspaceEntity, ) { if (isArray(view.viewFilters)) { return view.viewFilters; @@ -246,7 +246,7 @@ export class ViewResolver { @ResolveField(() => [ViewFilterGroupDTO]) async viewFilterGroups( @Parent() view: ViewDTO, - @AuthWorkspace() workspace: Workspace, + @AuthWorkspace() workspace: WorkspaceEntity, ) { if (isArray(view.viewFilterGroups)) { return view.viewFilterGroups; @@ -258,7 +258,7 @@ export class ViewResolver { @ResolveField(() => [ViewSortDTO]) async viewSorts( @Parent() view: ViewDTO, - @AuthWorkspace() workspace: Workspace, + @AuthWorkspace() workspace: WorkspaceEntity, ) { if (isArray(view.viewSorts)) { return view.viewSorts; @@ -270,7 +270,7 @@ export class ViewResolver { @ResolveField(() => [ViewGroupDTO]) async viewGroups( @Parent() view: ViewDTO, - @AuthWorkspace() workspace: Workspace, + @AuthWorkspace() workspace: WorkspaceEntity, ) { if (isArray(view.viewGroups)) { return view.viewGroups; diff --git a/packages/twenty-server/src/engine/metadata-modules/workspace-feature-flags-map-cache/workspace-feature-flags-map-cache.module.ts b/packages/twenty-server/src/engine/metadata-modules/workspace-feature-flags-map-cache/workspace-feature-flags-map-cache.module.ts index 42f66ac25e8..d8b51b22c5d 100644 --- a/packages/twenty-server/src/engine/metadata-modules/workspace-feature-flags-map-cache/workspace-feature-flags-map-cache.module.ts +++ b/packages/twenty-server/src/engine/metadata-modules/workspace-feature-flags-map-cache/workspace-feature-flags-map-cache.module.ts @@ -1,14 +1,14 @@ import { Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; -import { FeatureFlag } from 'src/engine/core-modules/feature-flag/feature-flag.entity'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { FeatureFlagEntity } from 'src/engine/core-modules/feature-flag/feature-flag.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { WorkspaceFeatureFlagsMapCacheService } from 'src/engine/metadata-modules/workspace-feature-flags-map-cache/workspace-feature-flags-map-cache.service'; import { WorkspaceCacheStorageModule } from 'src/engine/workspace-cache-storage/workspace-cache-storage.module'; @Module({ imports: [ - TypeOrmModule.forFeature([Workspace, FeatureFlag]), + TypeOrmModule.forFeature([WorkspaceEntity, FeatureFlagEntity]), WorkspaceCacheStorageModule, WorkspaceCacheStorageModule, ], diff --git a/packages/twenty-server/src/engine/metadata-modules/workspace-feature-flags-map-cache/workspace-feature-flags-map-cache.service.ts b/packages/twenty-server/src/engine/metadata-modules/workspace-feature-flags-map-cache/workspace-feature-flags-map-cache.service.ts index f9d27366e71..b1b27bd1368 100644 --- a/packages/twenty-server/src/engine/metadata-modules/workspace-feature-flags-map-cache/workspace-feature-flags-map-cache.service.ts +++ b/packages/twenty-server/src/engine/metadata-modules/workspace-feature-flags-map-cache/workspace-feature-flags-map-cache.service.ts @@ -5,7 +5,7 @@ import { Repository } from 'typeorm'; import { type FeatureFlagMap } from 'src/engine/core-modules/feature-flag/interfaces/feature-flag-map.interface'; -import { FeatureFlag } from 'src/engine/core-modules/feature-flag/feature-flag.entity'; +import { FeatureFlagEntity } from 'src/engine/core-modules/feature-flag/feature-flag.entity'; import { TwentyORMExceptionCode } from 'src/engine/twenty-orm/exceptions/twenty-orm.exception'; import { GetDataFromCacheWithRecomputeService } from 'src/engine/workspace-cache-storage/services/get-data-from-cache-with-recompute.service'; import { WorkspaceCacheStorageService } from 'src/engine/workspace-cache-storage/workspace-cache-storage.service'; @@ -18,8 +18,8 @@ export class WorkspaceFeatureFlagsMapCacheService { constructor( private readonly workspaceCacheStorageService: WorkspaceCacheStorageService, - @InjectRepository(FeatureFlag) - private readonly featureFlagRepository: Repository, + @InjectRepository(FeatureFlagEntity) + private readonly featureFlagRepository: Repository, private readonly getFromCacheWithRecomputeService: GetDataFromCacheWithRecomputeService< string, FeatureFlagMap diff --git a/packages/twenty-server/src/engine/metadata-modules/workspace-metadata-cache/services/workspace-metadata-cache.service.ts b/packages/twenty-server/src/engine/metadata-modules/workspace-metadata-cache/services/workspace-metadata-cache.service.ts index 2e86881369c..a41a24aa7b4 100644 --- a/packages/twenty-server/src/engine/metadata-modules/workspace-metadata-cache/services/workspace-metadata-cache.service.ts +++ b/packages/twenty-server/src/engine/metadata-modules/workspace-metadata-cache/services/workspace-metadata-cache.service.ts @@ -4,7 +4,7 @@ import { InjectRepository } from '@nestjs/typeorm'; import { isDefined } from 'twenty-shared/utils'; import { In, Repository } from 'typeorm'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { IndexMetadataEntity } from 'src/engine/metadata-modules/index-metadata/index-metadata.entity'; import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity'; import { type ObjectMetadataMaps } from 'src/engine/metadata-modules/types/object-metadata-maps'; @@ -25,8 +25,8 @@ export class WorkspaceMetadataCacheService { logger = new Logger(WorkspaceMetadataCacheService.name); constructor( - @InjectRepository(Workspace) - private readonly workspaceRepository: Repository, + @InjectRepository(WorkspaceEntity) + private readonly workspaceRepository: Repository, private readonly workspaceCacheStorageService: WorkspaceCacheStorageService, @InjectRepository(ObjectMetadataEntity) private readonly objectMetadataRepository: Repository, diff --git a/packages/twenty-server/src/engine/metadata-modules/workspace-metadata-cache/workspace-metadata-cache.module.ts b/packages/twenty-server/src/engine/metadata-modules/workspace-metadata-cache/workspace-metadata-cache.module.ts index b167f682a4e..c2d4636fd82 100644 --- a/packages/twenty-server/src/engine/metadata-modules/workspace-metadata-cache/workspace-metadata-cache.module.ts +++ b/packages/twenty-server/src/engine/metadata-modules/workspace-metadata-cache/workspace-metadata-cache.module.ts @@ -1,7 +1,7 @@ import { Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { IndexMetadataEntity } from 'src/engine/metadata-modules/index-metadata/index-metadata.entity'; import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity'; import { WorkspaceMetadataCacheService } from 'src/engine/metadata-modules/workspace-metadata-cache/services/workspace-metadata-cache.service'; @@ -10,7 +10,7 @@ import { WorkspaceCacheStorageModule } from 'src/engine/workspace-cache-storage/ @Module({ imports: [ TypeOrmModule.forFeature([ - Workspace, + WorkspaceEntity, ObjectMetadataEntity, IndexMetadataEntity, ]), diff --git a/packages/twenty-server/src/engine/metadata-modules/workspace-metadata-version/services/workspace-metadata-version.service.ts b/packages/twenty-server/src/engine/metadata-modules/workspace-metadata-version/services/workspace-metadata-version.service.ts index a5c0b0a6503..723f2a43b66 100644 --- a/packages/twenty-server/src/engine/metadata-modules/workspace-metadata-version/services/workspace-metadata-version.service.ts +++ b/packages/twenty-server/src/engine/metadata-modules/workspace-metadata-version/services/workspace-metadata-version.service.ts @@ -4,7 +4,7 @@ import { InjectRepository } from '@nestjs/typeorm'; import { isDefined } from 'twenty-shared/utils'; import { Repository } from 'typeorm'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { WorkspaceMetadataCacheService } from 'src/engine/metadata-modules/workspace-metadata-cache/services/workspace-metadata-cache.service'; import { WorkspaceMetadataVersionException, @@ -16,8 +16,8 @@ export class WorkspaceMetadataVersionService { logger = new Logger(WorkspaceMetadataCacheService.name); constructor( - @InjectRepository(Workspace) - private readonly workspaceRepository: Repository, + @InjectRepository(WorkspaceEntity) + private readonly workspaceRepository: Repository, private readonly workspaceMetadataCacheService: WorkspaceMetadataCacheService, ) {} diff --git a/packages/twenty-server/src/engine/metadata-modules/workspace-metadata-version/workspace-metadata-version.module.ts b/packages/twenty-server/src/engine/metadata-modules/workspace-metadata-version/workspace-metadata-version.module.ts index 1eec23acb0d..ccce4a5a68e 100644 --- a/packages/twenty-server/src/engine/metadata-modules/workspace-metadata-version/workspace-metadata-version.module.ts +++ b/packages/twenty-server/src/engine/metadata-modules/workspace-metadata-version/workspace-metadata-version.module.ts @@ -1,14 +1,14 @@ import { Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { WorkspaceMetadataCacheModule } from 'src/engine/metadata-modules/workspace-metadata-cache/workspace-metadata-cache.module'; import { WorkspaceMetadataVersionService } from 'src/engine/metadata-modules/workspace-metadata-version/services/workspace-metadata-version.service'; import { WorkspaceCacheStorageModule } from 'src/engine/workspace-cache-storage/workspace-cache-storage.module'; @Module({ imports: [ - TypeOrmModule.forFeature([Workspace]), + TypeOrmModule.forFeature([WorkspaceEntity]), WorkspaceCacheStorageModule, WorkspaceMetadataCacheModule, ], diff --git a/packages/twenty-server/src/engine/metadata-modules/workspace-permissions-cache/workspace-permissions-cache.module.ts b/packages/twenty-server/src/engine/metadata-modules/workspace-permissions-cache/workspace-permissions-cache.module.ts index 54f829e794c..01d510141be 100644 --- a/packages/twenty-server/src/engine/metadata-modules/workspace-permissions-cache/workspace-permissions-cache.module.ts +++ b/packages/twenty-server/src/engine/metadata-modules/workspace-permissions-cache/workspace-permissions-cache.module.ts @@ -1,7 +1,7 @@ import { Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity'; import { RoleTargetsEntity } from 'src/engine/metadata-modules/role/role-targets.entity'; import { RoleEntity } from 'src/engine/metadata-modules/role/role.entity'; @@ -13,7 +13,7 @@ import { WorkspacePermissionsCacheService } from './workspace-permissions-cache. @Module({ imports: [ - TypeOrmModule.forFeature([Workspace]), + TypeOrmModule.forFeature([WorkspaceEntity]), TypeOrmModule.forFeature([ ObjectMetadataEntity, RoleEntity, diff --git a/packages/twenty-server/src/engine/trash-cleanup/crons/trash-cleanup.cron.job.ts b/packages/twenty-server/src/engine/trash-cleanup/crons/trash-cleanup.cron.job.ts index 0a840f41532..6a9d026f7d9 100644 --- a/packages/twenty-server/src/engine/trash-cleanup/crons/trash-cleanup.cron.job.ts +++ b/packages/twenty-server/src/engine/trash-cleanup/crons/trash-cleanup.cron.job.ts @@ -11,7 +11,7 @@ import { Process } from 'src/engine/core-modules/message-queue/decorators/proces import { Processor } from 'src/engine/core-modules/message-queue/decorators/processor.decorator'; import { MessageQueue } from 'src/engine/core-modules/message-queue/message-queue.constants'; import { MessageQueueService } from 'src/engine/core-modules/message-queue/services/message-queue.service'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { TRASH_CLEANUP_CRON_PATTERN } from 'src/engine/trash-cleanup/constants/trash-cleanup-cron-pattern.constant'; import { TrashCleanupJob, @@ -24,8 +24,8 @@ export class TrashCleanupCronJob { private readonly logger = new Logger(TrashCleanupCronJob.name); constructor( - @InjectRepository(Workspace) - private readonly workspaceRepository: Repository, + @InjectRepository(WorkspaceEntity) + private readonly workspaceRepository: Repository, @InjectMessageQueue(MessageQueue.workspaceQueue) private readonly messageQueueService: MessageQueueService, private readonly exceptionHandlerService: ExceptionHandlerService, diff --git a/packages/twenty-server/src/engine/trash-cleanup/trash-cleanup.module.ts b/packages/twenty-server/src/engine/trash-cleanup/trash-cleanup.module.ts index 477cdd228b0..b823a90298c 100644 --- a/packages/twenty-server/src/engine/trash-cleanup/trash-cleanup.module.ts +++ b/packages/twenty-server/src/engine/trash-cleanup/trash-cleanup.module.ts @@ -1,7 +1,7 @@ import { Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { WorkspaceManyOrAllFlatEntityMapsCacheModule } from 'src/engine/metadata-modules/flat-entity/services/workspace-many-or-all-flat-entity-maps-cache.module'; import { TrashCleanupCronCommand } from 'src/engine/trash-cleanup/commands/trash-cleanup.cron.command'; import { TrashCleanupCronJob } from 'src/engine/trash-cleanup/crons/trash-cleanup.cron.job'; @@ -10,7 +10,7 @@ import { TrashCleanupService } from 'src/engine/trash-cleanup/services/trash-cle @Module({ imports: [ - TypeOrmModule.forFeature([Workspace]), + TypeOrmModule.forFeature([WorkspaceEntity]), WorkspaceManyOrAllFlatEntityMapsCacheModule, ], providers: [ diff --git a/packages/twenty-server/src/engine/twenty-orm/factories/workspace-datasource.factory.ts b/packages/twenty-server/src/engine/twenty-orm/factories/workspace-datasource.factory.ts index 1dbaae9bf03..de42f166e5c 100644 --- a/packages/twenty-server/src/engine/twenty-orm/factories/workspace-datasource.factory.ts +++ b/packages/twenty-server/src/engine/twenty-orm/factories/workspace-datasource.factory.ts @@ -8,7 +8,7 @@ import { EntitySchema, Repository } from 'typeorm'; import { type FeatureFlagMap } from 'src/engine/core-modules/feature-flag/interfaces/feature-flag-map.interface'; import { TwentyConfigService } from 'src/engine/core-modules/twenty-config/twenty-config.service'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { DataSourceService } from 'src/engine/metadata-modules/data-source/data-source.service'; import { WorkspaceFeatureFlagsMapCacheService } from 'src/engine/metadata-modules/workspace-feature-flags-map-cache/workspace-feature-flags-map-cache.service'; import { WorkspaceMetadataCacheService } from 'src/engine/metadata-modules/workspace-metadata-cache/services/workspace-metadata-cache.service'; @@ -50,8 +50,8 @@ export class WorkspaceDatasourceFactory { private readonly workspacePermissionsCacheService: WorkspacePermissionsCacheService, private readonly workspacePermissionsCacheStorageService: WorkspacePermissionsCacheStorageService, private readonly workspaceFeatureFlagsMapCacheService: WorkspaceFeatureFlagsMapCacheService, - @InjectRepository(Workspace) - private readonly workspaceRepository: Repository, + @InjectRepository(WorkspaceEntity) + private readonly workspaceRepository: Repository, private readonly workspaceEventEmitter: WorkspaceEventEmitter, private readonly getFromCacheWithRecomputeService: GetDataFromCacheWithRecomputeService< string, diff --git a/packages/twenty-server/src/engine/twenty-orm/twenty-orm.module.ts b/packages/twenty-server/src/engine/twenty-orm/twenty-orm.module.ts index 5958145586d..f4a428802b3 100644 --- a/packages/twenty-server/src/engine/twenty-orm/twenty-orm.module.ts +++ b/packages/twenty-server/src/engine/twenty-orm/twenty-orm.module.ts @@ -3,7 +3,7 @@ import { TypeOrmModule } from '@nestjs/typeorm'; import { FeatureFlagModule } from 'src/engine/core-modules/feature-flag/feature-flag.module'; import { TwentyConfigModule } from 'src/engine/core-modules/twenty-config/twenty-config.module'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { DataSourceModule } from 'src/engine/metadata-modules/data-source/data-source.module'; import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity'; import { PermissionsModule } from 'src/engine/metadata-modules/permissions/permissions.module'; @@ -26,7 +26,7 @@ import { PgPoolSharedModule } from './pg-shared-pool/pg-shared-pool.module'; TypeOrmModule.forFeature([ ObjectMetadataEntity, RoleTargetsEntity, - Workspace, + WorkspaceEntity, ]), DataSourceModule, WorkspaceCacheStorageModule, diff --git a/packages/twenty-server/src/engine/workspace-manager/__tests__/workspace-manager.service.spec.ts b/packages/twenty-server/src/engine/workspace-manager/__tests__/workspace-manager.service.spec.ts index c4f10a7b27d..9981c4cd835 100644 --- a/packages/twenty-server/src/engine/workspace-manager/__tests__/workspace-manager.service.spec.ts +++ b/packages/twenty-server/src/engine/workspace-manager/__tests__/workspace-manager.service.spec.ts @@ -4,8 +4,8 @@ import { getDataSourceToken, getRepositoryToken } from '@nestjs/typeorm'; import { type DataSource, type Repository } from 'typeorm'; import { FeatureFlagService } from 'src/engine/core-modules/feature-flag/services/feature-flag.service'; -import { UserWorkspace } from 'src/engine/core-modules/user-workspace/user-workspace.entity'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { UserWorkspaceEntity } from 'src/engine/core-modules/user-workspace/user-workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { AgentService } from 'src/engine/metadata-modules/agent/agent.service'; import { DataSourceEntity } from 'src/engine/metadata-modules/data-source/data-source.entity'; import { DataSourceService } from 'src/engine/metadata-modules/data-source/data-source.service'; @@ -49,11 +49,11 @@ describe('WorkspaceManagerService', () => { useValue: mockDataSource, }, { - provide: getRepositoryToken(Workspace), + provide: getRepositoryToken(WorkspaceEntity), useValue: {}, }, { - provide: getRepositoryToken(UserWorkspace), + provide: getRepositoryToken(UserWorkspaceEntity), useValue: {}, }, { diff --git a/packages/twenty-server/src/engine/workspace-manager/dev-seeder/core/services/dev-seeder-permissions.service.ts b/packages/twenty-server/src/engine/workspace-manager/dev-seeder/core/services/dev-seeder-permissions.service.ts index b88f6dc8eb4..40bca68d88d 100644 --- a/packages/twenty-server/src/engine/workspace-manager/dev-seeder/core/services/dev-seeder-permissions.service.ts +++ b/packages/twenty-server/src/engine/workspace-manager/dev-seeder/core/services/dev-seeder-permissions.service.ts @@ -4,7 +4,7 @@ import { InjectDataSource, InjectRepository } from '@nestjs/typeorm'; import { WorkspaceActivationStatus } from 'twenty-shared/workspace'; import { DataSource, Repository } from 'typeorm'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity'; import { FieldPermissionService } from 'src/engine/metadata-modules/object-permission/field-permission/field-permission.service'; import { ObjectPermissionService } from 'src/engine/metadata-modules/object-permission/object-permission.service'; @@ -137,10 +137,12 @@ export class DevSeederPermissionsService { workspaceId, }); - await this.coreDataSource.getRepository(Workspace).update(workspaceId, { - defaultRoleId: memberRole.id, - activationStatus: WorkspaceActivationStatus.ACTIVE, - }); + await this.coreDataSource + .getRepository(WorkspaceEntity) + .update(workspaceId, { + defaultRoleId: memberRole.id, + activationStatus: WorkspaceActivationStatus.ACTIVE, + }); if (memberUserWorkspaceIds) { for (const memberUserWorkspaceId of memberUserWorkspaceIds) { diff --git a/packages/twenty-server/src/engine/workspace-manager/dev-seeder/core/utils/seed-user-workspaces.util.ts b/packages/twenty-server/src/engine/workspace-manager/dev-seeder/core/utils/seed-user-workspaces.util.ts index 0ab5ff8db28..1732ab26d9d 100644 --- a/packages/twenty-server/src/engine/workspace-manager/dev-seeder/core/utils/seed-user-workspaces.util.ts +++ b/packages/twenty-server/src/engine/workspace-manager/dev-seeder/core/utils/seed-user-workspaces.util.ts @@ -1,6 +1,6 @@ import { type DataSource } from 'typeorm'; -import { type UserWorkspace } from 'src/engine/core-modules/user-workspace/user-workspace.entity'; +import { type UserWorkspaceEntity } from 'src/engine/core-modules/user-workspace/user-workspace.entity'; import { generateRandomUsers } from 'src/engine/workspace-manager/dev-seeder/core/utils/generate-random-users.util'; import { USER_DATA_SEED_IDS } from 'src/engine/workspace-manager/dev-seeder/core/utils/seed-users.util'; import { @@ -33,8 +33,10 @@ export const seedUserWorkspaces = async ( schemaName: string, workspaceId: string, ) => { - let userWorkspaces: Pick[] = - []; + let userWorkspaces: Pick< + UserWorkspaceEntity, + 'id' | 'userId' | 'workspaceId' + >[] = []; if (workspaceId === SEED_APPLE_WORKSPACE_ID) { const originalUserWorkspaces = [ diff --git a/packages/twenty-server/src/engine/workspace-manager/dev-seeder/core/utils/seed-workspaces.util.ts b/packages/twenty-server/src/engine/workspace-manager/dev-seeder/core/utils/seed-workspaces.util.ts index 73313eda48b..e65ec99b381 100644 --- a/packages/twenty-server/src/engine/workspace-manager/dev-seeder/core/utils/seed-workspaces.util.ts +++ b/packages/twenty-server/src/engine/workspace-manager/dev-seeder/core/utils/seed-workspaces.util.ts @@ -1,7 +1,7 @@ import { WorkspaceActivationStatus } from 'twenty-shared/workspace'; import { type DataSource } from 'typeorm'; -import { type Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { type WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { extractVersionMajorMinorPatch } from 'src/utils/version/extract-version-major-minor-patch'; const tableName = 'workspace'; @@ -26,10 +26,10 @@ const workspaceSeederFields = [ 'activationStatus', 'version', 'isTwoFactorAuthenticationEnforced', -] as const satisfies (keyof Workspace)[]; +] as const satisfies (keyof WorkspaceEntity)[]; type WorkspaceSeederFields = Pick< - Workspace, + WorkspaceEntity, (typeof workspaceSeederFields)[number] >; diff --git a/packages/twenty-server/src/engine/workspace-manager/dev-seeder/dev-seeder.module.ts b/packages/twenty-server/src/engine/workspace-manager/dev-seeder/dev-seeder.module.ts index de766560ac2..d59e0175a63 100644 --- a/packages/twenty-server/src/engine/workspace-manager/dev-seeder/dev-seeder.module.ts +++ b/packages/twenty-server/src/engine/workspace-manager/dev-seeder/dev-seeder.module.ts @@ -5,7 +5,7 @@ import { TypeORMModule } from 'src/database/typeorm/typeorm.module'; import { ApiKeyModule } from 'src/engine/core-modules/api-key/api-key.module'; import { FeatureFlagModule } from 'src/engine/core-modules/feature-flag/feature-flag.module'; import { FileStorageModule } from 'src/engine/core-modules/file-storage/file-storage.module'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { DataSourceModule } from 'src/engine/metadata-modules/data-source/data-source.module'; import { FieldMetadataModule } from 'src/engine/metadata-modules/field-metadata/field-metadata.module'; import { WorkspaceManyOrAllFlatEntityMapsCacheModule } from 'src/engine/metadata-modules/flat-entity/services/workspace-many-or-all-flat-entity-maps-cache.module'; @@ -39,7 +39,7 @@ import { WorkspaceSyncMetadataModule } from 'src/engine/workspace-manager/worksp FeatureFlagModule, FileStorageModule, WorkspaceSyncMetadataModule, - TypeOrmModule.forFeature([Workspace, ObjectMetadataEntity]), + TypeOrmModule.forFeature([WorkspaceEntity, ObjectMetadataEntity]), ObjectPermissionModule, WorkspacePermissionsCacheModule, WorkspaceManyOrAllFlatEntityMapsCacheModule, diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-cleaner/commands/clean-onboarding-workspaces.command.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-cleaner/commands/clean-onboarding-workspaces.command.ts index aba88d1c814..9f360fb5c8f 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-cleaner/commands/clean-onboarding-workspaces.command.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-cleaner/commands/clean-onboarding-workspaces.command.ts @@ -8,7 +8,7 @@ import { type MigrationCommandOptions, MigrationCommandRunner, } from 'src/database/commands/command-runners/migration.command-runner'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { CleanerWorkspaceService } from 'src/engine/workspace-manager/workspace-cleaner/services/cleaner.workspace-service'; @Command({ @@ -20,8 +20,8 @@ export class CleanOnboardingWorkspacesCommand extends MigrationCommandRunner { constructor( private readonly cleanerWorkspaceService: CleanerWorkspaceService, - @InjectRepository(Workspace) - private readonly workspaceRepository: Repository, + @InjectRepository(WorkspaceEntity) + private readonly workspaceRepository: Repository, ) { super(); } diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-cleaner/commands/clean-suspended-workspaces.command.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-cleaner/commands/clean-suspended-workspaces.command.ts index d11d0be7cc1..ab736087658 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-cleaner/commands/clean-suspended-workspaces.command.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-cleaner/commands/clean-suspended-workspaces.command.ts @@ -8,7 +8,7 @@ import { type MigrationCommandOptions, MigrationCommandRunner, } from 'src/database/commands/command-runners/migration.command-runner'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { CleanerWorkspaceService } from 'src/engine/workspace-manager/workspace-cleaner/services/cleaner.workspace-service'; @Command({ @@ -20,8 +20,8 @@ export class CleanSuspendedWorkspacesCommand extends MigrationCommandRunner { constructor( private readonly cleanerWorkspaceService: CleanerWorkspaceService, - @InjectRepository(Workspace) - protected readonly workspaceRepository: Repository, + @InjectRepository(WorkspaceEntity) + protected readonly workspaceRepository: Repository, ) { super(); } diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-cleaner/commands/delete-workspaces.command.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-cleaner/commands/delete-workspaces.command.ts index d195bb953c2..39bf8681ad9 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-cleaner/commands/delete-workspaces.command.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-cleaner/commands/delete-workspaces.command.ts @@ -4,7 +4,7 @@ import { InjectRepository } from '@nestjs/typeorm'; import { Command, CommandRunner, Option } from 'nest-commander'; import { In, Repository } from 'typeorm'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { DataSourceService } from 'src/engine/metadata-modules/data-source/data-source.service'; import { getDryRunLogHeader } from 'src/utils/get-dry-run-log-header'; @@ -21,8 +21,8 @@ export class DeleteWorkspacesCommand extends CommandRunner { private readonly logger = new Logger(DeleteWorkspacesCommand.name); constructor( - @InjectRepository(Workspace) - private readonly workspaceRepository: Repository, + @InjectRepository(WorkspaceEntity) + private readonly workspaceRepository: Repository, private readonly dataSourceService: DataSourceService, ) { super(); @@ -61,8 +61,8 @@ export class DeleteWorkspacesCommand extends CommandRunner { (dataSource) => dataSource.workspaceId, ); - const workspacesToDelete = workspaces.filter((Workspace) => - workspaceIdsWithSchema.includes(Workspace.id), + const workspacesToDelete = workspaces.filter((WorkspaceEntity) => + workspaceIdsWithSchema.includes(WorkspaceEntity.id), ); if (workspacesToDelete.length) { diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-cleaner/crons/clean-onboarding-workspaces.job.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-cleaner/crons/clean-onboarding-workspaces.job.ts index 049176884d7..e46bd071bc4 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-cleaner/crons/clean-onboarding-workspaces.job.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-cleaner/crons/clean-onboarding-workspaces.job.ts @@ -7,7 +7,7 @@ import { SentryCronMonitor } from 'src/engine/core-modules/cron/sentry-cron-moni import { Process } from 'src/engine/core-modules/message-queue/decorators/process.decorator'; import { Processor } from 'src/engine/core-modules/message-queue/decorators/processor.decorator'; import { MessageQueue } from 'src/engine/core-modules/message-queue/message-queue.constants'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { cleanOnboardingWorkspacesCronPattern } from 'src/engine/workspace-manager/workspace-cleaner/crons/clean-onboarding-workspaces.cron.pattern'; import { CleanerWorkspaceService } from 'src/engine/workspace-manager/workspace-cleaner/services/cleaner.workspace-service'; @@ -15,8 +15,8 @@ import { CleanerWorkspaceService } from 'src/engine/workspace-manager/workspace- export class CleanOnboardingWorkspacesJob { constructor( private readonly cleanerWorkspaceService: CleanerWorkspaceService, - @InjectRepository(Workspace) - private readonly workspaceRepository: Repository, + @InjectRepository(WorkspaceEntity) + private readonly workspaceRepository: Repository, ) {} @Process(CleanOnboardingWorkspacesJob.name) diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-cleaner/crons/clean-suspended-workspaces.job.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-cleaner/crons/clean-suspended-workspaces.job.ts index 6079dfa7b51..4ba827f7ef4 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-cleaner/crons/clean-suspended-workspaces.job.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-cleaner/crons/clean-suspended-workspaces.job.ts @@ -7,7 +7,7 @@ import { SentryCronMonitor } from 'src/engine/core-modules/cron/sentry-cron-moni import { Process } from 'src/engine/core-modules/message-queue/decorators/process.decorator'; import { Processor } from 'src/engine/core-modules/message-queue/decorators/processor.decorator'; import { MessageQueue } from 'src/engine/core-modules/message-queue/message-queue.constants'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { cleanSuspendedWorkspaceCronPattern } from 'src/engine/workspace-manager/workspace-cleaner/crons/clean-suspended-workspaces.cron.pattern'; import { CleanerWorkspaceService } from 'src/engine/workspace-manager/workspace-cleaner/services/cleaner.workspace-service'; @@ -15,8 +15,8 @@ import { CleanerWorkspaceService } from 'src/engine/workspace-manager/workspace- export class CleanSuspendedWorkspacesJob { constructor( private readonly cleanerWorkspaceService: CleanerWorkspaceService, - @InjectRepository(Workspace) - private readonly workspaceRepository: Repository, + @InjectRepository(WorkspaceEntity) + private readonly workspaceRepository: Repository, ) {} @Process(CleanSuspendedWorkspacesJob.name) diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-cleaner/jobs/clean-workspace-deletion-warning-user-vars.job.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-cleaner/jobs/clean-workspace-deletion-warning-user-vars.job.ts index abb6cce6f98..39f88e9e6da 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-cleaner/jobs/clean-workspace-deletion-warning-user-vars.job.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-cleaner/jobs/clean-workspace-deletion-warning-user-vars.job.ts @@ -9,7 +9,7 @@ import { Processor } from 'src/engine/core-modules/message-queue/decorators/proc import { MessageQueue } from 'src/engine/core-modules/message-queue/message-queue.constants'; import { UserService } from 'src/engine/core-modules/user/services/user.service'; import { UserVarsService } from 'src/engine/core-modules/user/user-vars/services/user-vars.service'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { USER_WORKSPACE_DELETION_WARNING_SENT_KEY } from 'src/engine/workspace-manager/workspace-cleaner/constants/user-workspace-deletion-warning-sent-key.constant'; export type CleanWorkspaceDeletionWarningUserVarsJobData = { @@ -28,8 +28,8 @@ export class CleanWorkspaceDeletionWarningUserVarsJob { constructor( private readonly userService: UserService, private readonly userVarsService: UserVarsService, - @InjectRepository(Workspace) - private readonly workspaceRepository: Repository, + @InjectRepository(WorkspaceEntity) + private readonly workspaceRepository: Repository, ) {} @Process(CleanWorkspaceDeletionWarningUserVarsJob.name) diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-cleaner/services/cleaner.workspace-service.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-cleaner/services/cleaner.workspace-service.ts index f787156e98a..b4323d1c5ba 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-cleaner/services/cleaner.workspace-service.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-cleaner/services/cleaner.workspace-service.ts @@ -12,23 +12,23 @@ import { isDefined } from 'twenty-shared/utils'; import { WorkspaceActivationStatus } from 'twenty-shared/workspace'; import { In, Repository } from 'typeorm'; -import { BillingSubscription } from 'src/engine/core-modules/billing/entities/billing-subscription.entity'; +import { BillingSubscriptionEntity } from 'src/engine/core-modules/billing/entities/billing-subscription.entity'; import { SubscriptionStatus } from 'src/engine/core-modules/billing/enums/billing-subscription-status.enum'; import { EmailService } from 'src/engine/core-modules/email/email.service'; import { I18nService } from 'src/engine/core-modules/i18n/i18n.service'; import { TwentyConfigService } from 'src/engine/core-modules/twenty-config/twenty-config.service'; -import { UserWorkspace } from 'src/engine/core-modules/user-workspace/user-workspace.entity'; +import { UserWorkspaceEntity } from 'src/engine/core-modules/user-workspace/user-workspace.entity'; import { UserService } from 'src/engine/core-modules/user/services/user.service'; import { UserVarsService } from 'src/engine/core-modules/user/user-vars/services/user-vars.service'; import { WorkspaceService } from 'src/engine/core-modules/workspace/services/workspace.service'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { TwentyORMGlobalManager } from 'src/engine/twenty-orm/twenty-orm-global.manager'; import { USER_WORKSPACE_DELETION_WARNING_SENT_KEY } from 'src/engine/workspace-manager/workspace-cleaner/constants/user-workspace-deletion-warning-sent-key.constant'; import { WorkspaceCleanerException, WorkspaceCleanerExceptionCode, } from 'src/engine/workspace-manager/workspace-cleaner/exceptions/workspace-cleaner.exception'; -import { type WorkspaceMemberWorkspaceEntity } from 'src/modules/workspace-member/standard-objects/workspace-member.workspace-entity'; +import { WorkspaceMemberWorkspaceEntity } from 'src/modules/workspace-member/standard-objects/workspace-member.workspace-entity'; @Injectable() export class CleanerWorkspaceService { @@ -43,13 +43,13 @@ export class CleanerWorkspaceService { private readonly userVarsService: UserVarsService, private readonly userService: UserService, private readonly emailService: EmailService, - @InjectRepository(Workspace) - private readonly workspaceRepository: Repository, - @InjectRepository(BillingSubscription) - private readonly billingSubscriptionRepository: Repository, + @InjectRepository(WorkspaceEntity) + private readonly workspaceRepository: Repository, + @InjectRepository(BillingSubscriptionEntity) + private readonly billingSubscriptionRepository: Repository, private readonly twentyORMGlobalManager: TwentyORMGlobalManager, - @InjectRepository(UserWorkspace) - private readonly userWorkspaceRepository: Repository, + @InjectRepository(UserWorkspaceEntity) + private readonly userWorkspaceRepository: Repository, private readonly i18nService: I18nService, ) { this.inactiveDaysBeforeSoftDelete = this.twentyConfigService.get( @@ -68,7 +68,7 @@ export class CleanerWorkspaceService { } async computeWorkspaceBillingInactivity( - workspace: Workspace, + workspace: WorkspaceEntity, ): Promise { try { const lastSubscription = @@ -142,7 +142,7 @@ export class CleanerWorkspaceService { } async warnWorkspaceMembers( - workspace: Workspace, + workspace: WorkspaceEntity, daysSinceInactive: number, dryRun: boolean, ) { @@ -216,7 +216,7 @@ export class CleanerWorkspaceService { } async informWorkspaceMembersAndSoftDeleteWorkspace( - workspace: Workspace, + workspace: WorkspaceEntity, daysSinceInactive: number, dryRun: boolean, ) { diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-cleaner/workspace-cleaner.module.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-cleaner/workspace-cleaner.module.ts index 3dcf7857333..8a8c2ab97dd 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-cleaner/workspace-cleaner.module.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-cleaner/workspace-cleaner.module.ts @@ -2,12 +2,12 @@ import { Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; import { BillingModule } from 'src/engine/core-modules/billing/billing.module'; -import { BillingSubscription } from 'src/engine/core-modules/billing/entities/billing-subscription.entity'; +import { BillingSubscriptionEntity } from 'src/engine/core-modules/billing/entities/billing-subscription.entity'; import { EmailModule } from 'src/engine/core-modules/email/email.module'; -import { UserWorkspace } from 'src/engine/core-modules/user-workspace/user-workspace.entity'; +import { UserWorkspaceEntity } from 'src/engine/core-modules/user-workspace/user-workspace.entity'; import { UserVarsModule } from 'src/engine/core-modules/user/user-vars/user-vars.module'; import { UserModule } from 'src/engine/core-modules/user/user.module'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { WorkspaceModule } from 'src/engine/core-modules/workspace/workspace.module'; import { DataSourceModule } from 'src/engine/metadata-modules/data-source/data-source.module'; import { CleanOnboardingWorkspacesCommand } from 'src/engine/workspace-manager/workspace-cleaner/commands/clean-onboarding-workspaces.command'; @@ -20,7 +20,11 @@ import { CleanerWorkspaceService } from 'src/engine/workspace-manager/workspace- @Module({ imports: [ - TypeOrmModule.forFeature([Workspace, UserWorkspace, BillingSubscription]), + TypeOrmModule.forFeature([ + WorkspaceEntity, + UserWorkspaceEntity, + BillingSubscriptionEntity, + ]), WorkspaceModule, DataSourceModule, UserVarsModule, diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-manager.module.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-manager.module.ts index 95764eb8a98..138961058ba 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-manager.module.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-manager.module.ts @@ -2,8 +2,8 @@ import { Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; import { FeatureFlagModule } from 'src/engine/core-modules/feature-flag/feature-flag.module'; -import { UserWorkspace } from 'src/engine/core-modules/user-workspace/user-workspace.entity'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { UserWorkspaceEntity } from 'src/engine/core-modules/user-workspace/user-workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { AgentModule } from 'src/engine/metadata-modules/agent/agent.module'; import { DataSourceModule } from 'src/engine/metadata-modules/data-source/data-source.module'; import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity'; @@ -35,7 +35,7 @@ import { WorkspaceManagerService } from './workspace-manager.service'; FeatureFlagModule, PermissionsModule, AgentModule, - TypeOrmModule.forFeature([UserWorkspace, Workspace]), + TypeOrmModule.forFeature([UserWorkspaceEntity, WorkspaceEntity]), RoleModule, UserRoleModule, TypeOrmModule.forFeature([ diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-manager.service.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-manager.service.ts index ccac06166de..f7deaf57f07 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-manager.service.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-manager.service.ts @@ -5,8 +5,8 @@ import { DataSource, Repository } from 'typeorm'; import { FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum'; import { FeatureFlagService } from 'src/engine/core-modules/feature-flag/services/feature-flag.service'; -import { UserWorkspace } from 'src/engine/core-modules/user-workspace/user-workspace.entity'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { UserWorkspaceEntity } from 'src/engine/core-modules/user-workspace/user-workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { AgentService } from 'src/engine/metadata-modules/agent/agent.service'; import { type DataSourceEntity } from 'src/engine/metadata-modules/data-source/data-source.entity'; import { DataSourceService } from 'src/engine/metadata-modules/data-source/data-source.service'; @@ -35,13 +35,13 @@ export class WorkspaceManagerService { private readonly objectMetadataService: ObjectMetadataService, private readonly dataSourceService: DataSourceService, private readonly workspaceSyncMetadataService: WorkspaceSyncMetadataService, - @InjectRepository(UserWorkspace) - private readonly userWorkspaceRepository: Repository, + @InjectRepository(UserWorkspaceEntity) + private readonly userWorkspaceRepository: Repository, private readonly roleService: RoleService, private readonly userRoleService: UserRoleService, private readonly featureFlagService: FeatureFlagService, - @InjectRepository(Workspace) - private readonly workspaceRepository: Repository, + @InjectRepository(WorkspaceEntity) + private readonly workspaceRepository: Repository, @InjectRepository(RoleEntity) private readonly roleRepository: Repository, @InjectRepository(RoleTargetsEntity) diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/cron-trigger/services/create-cron-trigger-action-handler.service.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/cron-trigger/services/create-cron-trigger-action-handler.service.ts index 3f10673e299..121d0609cda 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/cron-trigger/services/create-cron-trigger-action-handler.service.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/cron-trigger/services/create-cron-trigger-action-handler.service.ts @@ -2,7 +2,7 @@ import { Injectable } from '@nestjs/common'; import { WorkspaceMigrationRunnerActionHandler } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/interfaces/workspace-migration-runner-action-handler-service.interface'; -import { CronTrigger } from 'src/engine/metadata-modules/cron-trigger/entities/cron-trigger.entity'; +import { CronTriggerEntity } from 'src/engine/metadata-modules/cron-trigger/entities/cron-trigger.entity'; import { CreateCronTriggerAction } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/cron-trigger/types/workspace-migration-cron-trigger-action-v2.type'; import { WorkspaceMigrationActionRunnerArgs } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/types/workspace-migration-action-runner-args.type'; @@ -21,7 +21,7 @@ export class CreateCronTriggerActionHandlerService extends WorkspaceMigrationRun const { cronTrigger } = action; const cronTriggerRepository = - queryRunner.manager.getRepository(CronTrigger); + queryRunner.manager.getRepository(CronTriggerEntity); await cronTriggerRepository.insert({ ...cronTrigger, diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/cron-trigger/services/delete-cron-trigger-action-handler.service.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/cron-trigger/services/delete-cron-trigger-action-handler.service.ts index d1849870ade..1859ee3cb3f 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/cron-trigger/services/delete-cron-trigger-action-handler.service.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/cron-trigger/services/delete-cron-trigger-action-handler.service.ts @@ -2,7 +2,7 @@ import { Injectable } from '@nestjs/common'; import { WorkspaceMigrationRunnerActionHandler } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/interfaces/workspace-migration-runner-action-handler-service.interface'; -import { CronTrigger } from 'src/engine/metadata-modules/cron-trigger/entities/cron-trigger.entity'; +import { CronTriggerEntity } from 'src/engine/metadata-modules/cron-trigger/entities/cron-trigger.entity'; import { DeleteCronTriggerAction } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/cron-trigger/types/workspace-migration-cron-trigger-action-v2.type'; import { WorkspaceMigrationActionRunnerArgs } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/types/workspace-migration-action-runner-args.type'; @@ -21,7 +21,7 @@ export class DeleteCronTriggerActionHandlerService extends WorkspaceMigrationRun const { cronTriggerId } = action; const cronTriggerRepository = - queryRunner.manager.getRepository(CronTrigger); + queryRunner.manager.getRepository(CronTriggerEntity); await cronTriggerRepository.delete({ id: cronTriggerId, diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/cron-trigger/services/update-cron-trigger-action-handler.service.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/cron-trigger/services/update-cron-trigger-action-handler.service.ts index 7a6636316cd..250a3ed696e 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/cron-trigger/services/update-cron-trigger-action-handler.service.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/cron-trigger/services/update-cron-trigger-action-handler.service.ts @@ -2,7 +2,7 @@ import { Injectable } from '@nestjs/common'; import { WorkspaceMigrationRunnerActionHandler } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/interfaces/workspace-migration-runner-action-handler-service.interface'; -import { CronTrigger } from 'src/engine/metadata-modules/cron-trigger/entities/cron-trigger.entity'; +import { CronTriggerEntity } from 'src/engine/metadata-modules/cron-trigger/entities/cron-trigger.entity'; import { UpdateCronTriggerAction } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/cron-trigger/types/workspace-migration-cron-trigger-action-v2.type'; import { WorkspaceMigrationActionRunnerArgs } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/types/workspace-migration-action-runner-args.type'; import { fromFlatEntityPropertiesUpdatesToPartialFlatEntity } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/utils/from-flat-entity-properties-updates-to-partial-flat-entity'; @@ -22,7 +22,7 @@ export class UpdateCronTriggerActionHandlerService extends WorkspaceMigrationRun const { cronTriggerId } = action; const cronTriggerRepository = - queryRunner.manager.getRepository(CronTrigger); + queryRunner.manager.getRepository(CronTriggerEntity); await cronTriggerRepository.update( cronTriggerId, diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/database-event-trigger/services/create-database-event-trigger-action-handler.service.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/database-event-trigger/services/create-database-event-trigger-action-handler.service.ts index a3f4acbdc6d..996e7a31ec6 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/database-event-trigger/services/create-database-event-trigger-action-handler.service.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/database-event-trigger/services/create-database-event-trigger-action-handler.service.ts @@ -2,7 +2,7 @@ import { Injectable } from '@nestjs/common'; import { WorkspaceMigrationRunnerActionHandler } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/interfaces/workspace-migration-runner-action-handler-service.interface'; -import { DatabaseEventTrigger } from 'src/engine/metadata-modules/database-event-trigger/entities/database-event-trigger.entity'; +import { DatabaseEventTriggerEntity } from 'src/engine/metadata-modules/database-event-trigger/entities/database-event-trigger.entity'; import { CreateDatabaseEventTriggerAction } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/database-event-trigger/types/workspace-migration-database-event-trigger-action-v2.type'; import { WorkspaceMigrationActionRunnerArgs } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/types/workspace-migration-action-runner-args.type'; @@ -21,8 +21,8 @@ export class CreateDatabaseEventTriggerActionHandlerService extends WorkspaceMig const { databaseEventTrigger } = action; const databaseEventTriggerRepository = - queryRunner.manager.getRepository( - DatabaseEventTrigger, + queryRunner.manager.getRepository( + DatabaseEventTriggerEntity, ); await databaseEventTriggerRepository.insert({ diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/database-event-trigger/services/delete-database-event-trigger-action-handler.service.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/database-event-trigger/services/delete-database-event-trigger-action-handler.service.ts index 884b56a08f0..6368d0c7775 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/database-event-trigger/services/delete-database-event-trigger-action-handler.service.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/database-event-trigger/services/delete-database-event-trigger-action-handler.service.ts @@ -2,7 +2,7 @@ import { Injectable } from '@nestjs/common'; import { WorkspaceMigrationRunnerActionHandler } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/interfaces/workspace-migration-runner-action-handler-service.interface'; -import { DatabaseEventTrigger } from 'src/engine/metadata-modules/database-event-trigger/entities/database-event-trigger.entity'; +import { DatabaseEventTriggerEntity } from 'src/engine/metadata-modules/database-event-trigger/entities/database-event-trigger.entity'; import { DeleteDatabaseEventTriggerAction } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/database-event-trigger/types/workspace-migration-database-event-trigger-action-v2.type'; import { WorkspaceMigrationActionRunnerArgs } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/types/workspace-migration-action-runner-args.type'; @@ -21,8 +21,8 @@ export class DeleteDatabaseEventTriggerActionHandlerService extends WorkspaceMig const { databaseEventTriggerId } = action; const databaseEventTriggerRepository = - queryRunner.manager.getRepository( - DatabaseEventTrigger, + queryRunner.manager.getRepository( + DatabaseEventTriggerEntity, ); await databaseEventTriggerRepository.delete({ diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/database-event-trigger/services/update-database-event-trigger-action-handler.service.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/database-event-trigger/services/update-database-event-trigger-action-handler.service.ts index cff2827e094..7e3409c663b 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/database-event-trigger/services/update-database-event-trigger-action-handler.service.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/database-event-trigger/services/update-database-event-trigger-action-handler.service.ts @@ -2,7 +2,7 @@ import { Injectable } from '@nestjs/common'; import { WorkspaceMigrationRunnerActionHandler } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/interfaces/workspace-migration-runner-action-handler-service.interface'; -import { DatabaseEventTrigger } from 'src/engine/metadata-modules/database-event-trigger/entities/database-event-trigger.entity'; +import { DatabaseEventTriggerEntity } from 'src/engine/metadata-modules/database-event-trigger/entities/database-event-trigger.entity'; import { UpdateDatabaseEventTriggerAction } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/database-event-trigger/types/workspace-migration-database-event-trigger-action-v2.type'; import { WorkspaceMigrationActionRunnerArgs } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/types/workspace-migration-action-runner-args.type'; import { fromFlatEntityPropertiesUpdatesToPartialFlatEntity } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/utils/from-flat-entity-properties-updates-to-partial-flat-entity'; @@ -22,8 +22,8 @@ export class UpdateDatabaseEventTriggerActionHandlerService extends WorkspaceMig const { databaseEventTriggerId } = action; const databaseEventTriggerRepository = - queryRunner.manager.getRepository( - DatabaseEventTrigger, + queryRunner.manager.getRepository( + DatabaseEventTriggerEntity, ); await databaseEventTriggerRepository.update( diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/route-trigger/services/create-route-trigger-action-handler.service.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/route-trigger/services/create-route-trigger-action-handler.service.ts index a010af54ac9..a7fb70eb3f0 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/route-trigger/services/create-route-trigger-action-handler.service.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/route-trigger/services/create-route-trigger-action-handler.service.ts @@ -2,7 +2,7 @@ import { Injectable } from '@nestjs/common'; import { WorkspaceMigrationRunnerActionHandler } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/interfaces/workspace-migration-runner-action-handler-service.interface'; -import { RouteTrigger } from 'src/engine/metadata-modules/route-trigger/route-trigger.entity'; +import { RouteTriggerEntity } from 'src/engine/metadata-modules/route-trigger/route-trigger.entity'; import { CreateRouteTriggerAction } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/route-trigger/types/workspace-migration-route-trigger-action-v2.type'; import { WorkspaceMigrationActionRunnerArgs } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/types/workspace-migration-action-runner-args.type'; @@ -21,7 +21,7 @@ export class CreateRouteTriggerActionHandlerService extends WorkspaceMigrationRu const { routeTrigger } = action; const routeTriggerRepository = - queryRunner.manager.getRepository(RouteTrigger); + queryRunner.manager.getRepository(RouteTriggerEntity); await routeTriggerRepository.insert({ ...routeTrigger, diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/route-trigger/services/delete-route-trigger-action-handler.service.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/route-trigger/services/delete-route-trigger-action-handler.service.ts index 02975457a7c..6de8c09a43f 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/route-trigger/services/delete-route-trigger-action-handler.service.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/route-trigger/services/delete-route-trigger-action-handler.service.ts @@ -2,7 +2,7 @@ import { Injectable } from '@nestjs/common'; import { WorkspaceMigrationRunnerActionHandler } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/interfaces/workspace-migration-runner-action-handler-service.interface'; -import { RouteTrigger } from 'src/engine/metadata-modules/route-trigger/route-trigger.entity'; +import { RouteTriggerEntity } from 'src/engine/metadata-modules/route-trigger/route-trigger.entity'; import { DeleteRouteTriggerAction } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/route-trigger/types/workspace-migration-route-trigger-action-v2.type'; import { WorkspaceMigrationActionRunnerArgs } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/types/workspace-migration-action-runner-args.type'; @@ -21,7 +21,7 @@ export class DeleteRouteTriggerActionHandlerService extends WorkspaceMigrationRu const { routeTriggerId } = action; const routeTriggerRepository = - queryRunner.manager.getRepository(RouteTrigger); + queryRunner.manager.getRepository(RouteTriggerEntity); await routeTriggerRepository.delete({ id: routeTriggerId, diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/route-trigger/services/update-route-trigger-action-handler.service.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/route-trigger/services/update-route-trigger-action-handler.service.ts index b151da89988..50e32d62239 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/route-trigger/services/update-route-trigger-action-handler.service.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/route-trigger/services/update-route-trigger-action-handler.service.ts @@ -2,7 +2,7 @@ import { Injectable } from '@nestjs/common'; import { WorkspaceMigrationRunnerActionHandler } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/interfaces/workspace-migration-runner-action-handler-service.interface'; -import { RouteTrigger } from 'src/engine/metadata-modules/route-trigger/route-trigger.entity'; +import { RouteTriggerEntity } from 'src/engine/metadata-modules/route-trigger/route-trigger.entity'; import { UpdateRouteTriggerAction } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/route-trigger/types/workspace-migration-route-trigger-action-v2.type'; import { WorkspaceMigrationActionRunnerArgs } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/types/workspace-migration-action-runner-args.type'; import { fromFlatEntityPropertiesUpdatesToPartialFlatEntity } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/utils/from-flat-entity-properties-updates-to-partial-flat-entity'; @@ -22,7 +22,7 @@ export class UpdateRouteTriggerActionHandlerService extends WorkspaceMigrationRu const { routeTriggerId } = action; const routeTriggerRepository = - queryRunner.manager.getRepository(RouteTrigger); + queryRunner.manager.getRepository(RouteTriggerEntity); await routeTriggerRepository.update( routeTriggerId, diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-sync-metadata/commands/sync-workspace-metadata.command.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-sync-metadata/commands/sync-workspace-metadata.command.ts index 7d27d901cad..f1bc176d2cc 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-sync-metadata/commands/sync-workspace-metadata.command.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-sync-metadata/commands/sync-workspace-metadata.command.ts @@ -8,7 +8,7 @@ import { type RunOnWorkspaceArgs, } from 'src/database/commands/command-runners/active-or-suspended-workspaces-migration.command-runner'; import { FeatureFlagService } from 'src/engine/core-modules/feature-flag/services/feature-flag.service'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { DataSourceService } from 'src/engine/metadata-modules/data-source/data-source.service'; import { TwentyORMGlobalManager } from 'src/engine/twenty-orm/twenty-orm-global.manager'; import { WorkspaceSyncMetadataService } from 'src/engine/workspace-manager/workspace-sync-metadata/workspace-sync-metadata.service'; @@ -21,8 +21,8 @@ import { SyncWorkspaceLoggerService } from './services/sync-workspace-logger.ser }) export class SyncWorkspaceMetadataCommand extends ActiveOrSuspendedWorkspacesMigrationCommandRunner { constructor( - @InjectRepository(Workspace) - protected readonly workspaceRepository: Repository, + @InjectRepository(WorkspaceEntity) + protected readonly workspaceRepository: Repository, private readonly workspaceSyncMetadataService: WorkspaceSyncMetadataService, private readonly dataSourceService: DataSourceService, private readonly syncWorkspaceLoggerService: SyncWorkspaceLoggerService, diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-sync-metadata/commands/workspace-sync-metadata-commands.module.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-sync-metadata/commands/workspace-sync-metadata-commands.module.ts index b1a05cdf686..52b1267b10e 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-sync-metadata/commands/workspace-sync-metadata-commands.module.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-sync-metadata/commands/workspace-sync-metadata-commands.module.ts @@ -2,7 +2,7 @@ import { Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; import { FeatureFlagModule } from 'src/engine/core-modules/feature-flag/feature-flag.module'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { WorkspaceModule } from 'src/engine/core-modules/workspace/workspace.module'; import { DataSourceModule } from 'src/engine/metadata-modules/data-source/data-source.module'; import { WorkspaceDataSourceModule } from 'src/engine/workspace-datasource/workspace-datasource.module'; @@ -20,7 +20,7 @@ import { SyncWorkspaceMetadataCommand } from './sync-workspace-metadata.command' DataSourceModule, WorkspaceDataSourceModule, FeatureFlagModule, - TypeOrmModule.forFeature([Workspace]), + TypeOrmModule.forFeature([WorkspaceEntity]), SyncWorkspaceLoggerModule, ], providers: [SyncWorkspaceMetadataCommand], diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-sync-metadata/workspace-sync-metadata.module.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-sync-metadata/workspace-sync-metadata.module.ts index 6a6f14a0ef9..ab52b63e1b8 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-sync-metadata/workspace-sync-metadata.module.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-sync-metadata/workspace-sync-metadata.module.ts @@ -1,9 +1,9 @@ import { Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; -import { FeatureFlag } from 'src/engine/core-modules/feature-flag/feature-flag.entity'; +import { FeatureFlagEntity } from 'src/engine/core-modules/feature-flag/feature-flag.entity'; import { FeatureFlagModule } from 'src/engine/core-modules/feature-flag/feature-flag.module'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { AgentRoleModule } from 'src/engine/metadata-modules/agent-role/agent-role.module'; import { DataSourceModule } from 'src/engine/metadata-modules/data-source/data-source.module'; import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity'; @@ -38,7 +38,7 @@ import { WorkspaceSyncMetadataService } from 'src/engine/workspace-manager/works WorkspaceMigrationEntity, ]), DataSourceModule, - TypeOrmModule.forFeature([Workspace, FeatureFlag]), + TypeOrmModule.forFeature([WorkspaceEntity, FeatureFlagEntity]), WorkspaceMetadataVersionModule, AgentRoleModule, WorkspaceManyOrAllFlatEntityMapsCacheModule, diff --git a/packages/twenty-server/src/modules/calendar/calendar-event-import-manager/calendar-event-import-manager.module.ts b/packages/twenty-server/src/modules/calendar/calendar-event-import-manager/calendar-event-import-manager.module.ts index 888cd2674be..09c7dfbc51f 100644 --- a/packages/twenty-server/src/modules/calendar/calendar-event-import-manager/calendar-event-import-manager.module.ts +++ b/packages/twenty-server/src/modules/calendar/calendar-event-import-manager/calendar-event-import-manager.module.ts @@ -2,9 +2,9 @@ import { Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; import { BillingModule } from 'src/engine/core-modules/billing/billing.module'; -import { FeatureFlag } from 'src/engine/core-modules/feature-flag/feature-flag.entity'; +import { FeatureFlagEntity } from 'src/engine/core-modules/feature-flag/feature-flag.entity'; import { MetricsModule } from 'src/engine/core-modules/metrics/metrics.module'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { DataSourceEntity } from 'src/engine/metadata-modules/data-source/data-source.entity'; import { ObjectMetadataRepositoryModule } from 'src/engine/object-metadata-repository/object-metadata-repository.module'; import { WorkspaceDataSourceModule } from 'src/engine/workspace-datasource/workspace-datasource.module'; @@ -39,7 +39,11 @@ import { RefreshTokensManagerModule } from 'src/modules/connected-account/refres imports: [ ObjectMetadataRepositoryModule.forFeature([BlocklistWorkspaceEntity]), CalendarEventParticipantManagerModule, - TypeOrmModule.forFeature([FeatureFlag, Workspace, DataSourceEntity]), + TypeOrmModule.forFeature([ + FeatureFlagEntity, + WorkspaceEntity, + DataSourceEntity, + ]), WorkspaceDataSourceModule, CalendarEventCleanerModule, GoogleCalendarDriverModule, diff --git a/packages/twenty-server/src/modules/calendar/calendar-event-import-manager/commands/calendar-relaunch-failed-calendar-channels.command.ts b/packages/twenty-server/src/modules/calendar/calendar-event-import-manager/commands/calendar-relaunch-failed-calendar-channels.command.ts index eef366e2c2a..58a1b777fbe 100644 --- a/packages/twenty-server/src/modules/calendar/calendar-event-import-manager/commands/calendar-relaunch-failed-calendar-channels.command.ts +++ b/packages/twenty-server/src/modules/calendar/calendar-event-import-manager/commands/calendar-relaunch-failed-calendar-channels.command.ts @@ -7,7 +7,7 @@ import { ActiveOrSuspendedWorkspacesMigrationCommandRunner, type RunOnWorkspaceArgs, } from 'src/database/commands/command-runners/active-or-suspended-workspaces-migration.command-runner'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { TwentyORMGlobalManager } from 'src/engine/twenty-orm/twenty-orm-global.manager'; import { CalendarChannelSyncStage, @@ -22,8 +22,8 @@ import { AccountsToReconnectService } from 'src/modules/connected-account/servic }) export class CalendarRelaunchFailedCalendarChannelsCommand extends ActiveOrSuspendedWorkspacesMigrationCommandRunner { constructor( - @InjectRepository(Workspace) - protected readonly workspaceRepository: Repository, + @InjectRepository(WorkspaceEntity) + protected readonly workspaceRepository: Repository, protected readonly twentyORMGlobalManager: TwentyORMGlobalManager, protected readonly accountsToReconnectService: AccountsToReconnectService, ) { diff --git a/packages/twenty-server/src/modules/calendar/calendar-event-import-manager/crons/jobs/calendar-event-list-fetch.cron.job.ts b/packages/twenty-server/src/modules/calendar/calendar-event-import-manager/crons/jobs/calendar-event-list-fetch.cron.job.ts index a9e8f2e8855..e445d779128 100644 --- a/packages/twenty-server/src/modules/calendar/calendar-event-import-manager/crons/jobs/calendar-event-list-fetch.cron.job.ts +++ b/packages/twenty-server/src/modules/calendar/calendar-event-import-manager/crons/jobs/calendar-event-list-fetch.cron.job.ts @@ -10,7 +10,7 @@ import { Process } from 'src/engine/core-modules/message-queue/decorators/proces import { Processor } from 'src/engine/core-modules/message-queue/decorators/processor.decorator'; import { MessageQueue } from 'src/engine/core-modules/message-queue/message-queue.constants'; import { MessageQueueService } from 'src/engine/core-modules/message-queue/services/message-queue.service'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { getWorkspaceSchemaName } from 'src/engine/workspace-datasource/utils/get-workspace-schema-name.util'; import { CalendarEventListFetchJob, @@ -25,8 +25,8 @@ export const CALENDAR_EVENT_LIST_FETCH_CRON_PATTERN = '*/5 * * * *'; }) export class CalendarEventListFetchCronJob { constructor( - @InjectRepository(Workspace) - private readonly workspaceRepository: Repository, + @InjectRepository(WorkspaceEntity) + private readonly workspaceRepository: Repository, @InjectMessageQueue(MessageQueue.calendarQueue) private readonly messageQueueService: MessageQueueService, private readonly exceptionHandlerService: ExceptionHandlerService, diff --git a/packages/twenty-server/src/modules/calendar/calendar-event-import-manager/crons/jobs/calendar-events-import.cron.job.ts b/packages/twenty-server/src/modules/calendar/calendar-event-import-manager/crons/jobs/calendar-events-import.cron.job.ts index 2110a0735c9..0e57d675cea 100644 --- a/packages/twenty-server/src/modules/calendar/calendar-event-import-manager/crons/jobs/calendar-events-import.cron.job.ts +++ b/packages/twenty-server/src/modules/calendar/calendar-event-import-manager/crons/jobs/calendar-events-import.cron.job.ts @@ -10,7 +10,7 @@ import { Process } from 'src/engine/core-modules/message-queue/decorators/proces import { Processor } from 'src/engine/core-modules/message-queue/decorators/processor.decorator'; import { MessageQueue } from 'src/engine/core-modules/message-queue/message-queue.constants'; import { MessageQueueService } from 'src/engine/core-modules/message-queue/services/message-queue.service'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { getWorkspaceSchemaName } from 'src/engine/workspace-datasource/utils/get-workspace-schema-name.util'; import { type CalendarEventListFetchJobData } from 'src/modules/calendar/calendar-event-import-manager/jobs/calendar-event-list-fetch.job'; import { CalendarEventsImportJob } from 'src/modules/calendar/calendar-event-import-manager/jobs/calendar-events-import.job'; @@ -23,8 +23,8 @@ export const CALENDAR_EVENTS_IMPORT_CRON_PATTERN = '*/1 * * * *'; }) export class CalendarEventsImportCronJob { constructor( - @InjectRepository(Workspace) - private readonly workspaceRepository: Repository, + @InjectRepository(WorkspaceEntity) + private readonly workspaceRepository: Repository, @InjectMessageQueue(MessageQueue.calendarQueue) private readonly messageQueueService: MessageQueueService, @InjectDataSource() diff --git a/packages/twenty-server/src/modules/calendar/calendar-event-import-manager/crons/jobs/calendar-ongoing-stale.cron.job.ts b/packages/twenty-server/src/modules/calendar/calendar-event-import-manager/crons/jobs/calendar-ongoing-stale.cron.job.ts index 836f3cb4bc2..da3b1515371 100644 --- a/packages/twenty-server/src/modules/calendar/calendar-event-import-manager/crons/jobs/calendar-ongoing-stale.cron.job.ts +++ b/packages/twenty-server/src/modules/calendar/calendar-event-import-manager/crons/jobs/calendar-ongoing-stale.cron.job.ts @@ -10,7 +10,7 @@ import { Process } from 'src/engine/core-modules/message-queue/decorators/proces import { Processor } from 'src/engine/core-modules/message-queue/decorators/processor.decorator'; import { MessageQueue } from 'src/engine/core-modules/message-queue/message-queue.constants'; import { MessageQueueService } from 'src/engine/core-modules/message-queue/services/message-queue.service'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { CalendarOngoingStaleJob, type CalendarOngoingStaleJobData, @@ -21,8 +21,8 @@ export const CALENDAR_ONGOING_STALE_CRON_PATTERN = '0 * * * *'; @Processor(MessageQueue.cronQueue) export class CalendarOngoingStaleCronJob { constructor( - @InjectRepository(Workspace) - private readonly workspaceRepository: Repository, + @InjectRepository(WorkspaceEntity) + private readonly workspaceRepository: Repository, @InjectMessageQueue(MessageQueue.calendarQueue) private readonly messageQueueService: MessageQueueService, private readonly exceptionHandlerService: ExceptionHandlerService, diff --git a/packages/twenty-server/src/modules/calendar/calendar-event-participant-manager/calendar-event-participant-manager.module.ts b/packages/twenty-server/src/modules/calendar/calendar-event-participant-manager/calendar-event-participant-manager.module.ts index 02baa3d77fb..8ae649d1f41 100644 --- a/packages/twenty-server/src/modules/calendar/calendar-event-participant-manager/calendar-event-participant-manager.module.ts +++ b/packages/twenty-server/src/modules/calendar/calendar-event-participant-manager/calendar-event-participant-manager.module.ts @@ -3,7 +3,7 @@ import { TypeOrmModule } from '@nestjs/typeorm'; import { NestjsQueryTypeOrmModule } from '@ptc-org/nestjs-query-typeorm'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { WorkspaceModule } from 'src/engine/core-modules/workspace/workspace.module'; import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity'; import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity'; @@ -22,7 +22,7 @@ import { MatchParticipantModule } from 'src/modules/match-participant/match-part WorkspaceDataSourceModule, WorkspaceModule, TypeOrmModule.forFeature([ObjectMetadataEntity, FieldMetadataEntity]), - NestjsQueryTypeOrmModule.forFeature([Workspace]), + NestjsQueryTypeOrmModule.forFeature([WorkspaceEntity]), ContactCreationManagerModule, MatchParticipantModule, ], diff --git a/packages/twenty-server/src/modules/calendar/calendar-event-participant-manager/jobs/calendar-event-participant-match-participant.job.ts b/packages/twenty-server/src/modules/calendar/calendar-event-participant-manager/jobs/calendar-event-participant-match-participant.job.ts index b3ddf70d329..0887a01fa39 100644 --- a/packages/twenty-server/src/modules/calendar/calendar-event-participant-manager/jobs/calendar-event-participant-match-participant.job.ts +++ b/packages/twenty-server/src/modules/calendar/calendar-event-participant-manager/jobs/calendar-event-participant-match-participant.job.ts @@ -6,7 +6,7 @@ import { Repository } from 'typeorm'; import { Process } from 'src/engine/core-modules/message-queue/decorators/process.decorator'; import { Processor } from 'src/engine/core-modules/message-queue/decorators/processor.decorator'; import { MessageQueue } from 'src/engine/core-modules/message-queue/message-queue.constants'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { type CalendarEventParticipantWorkspaceEntity } from 'src/modules/calendar/common/standard-objects/calendar-event-participant.workspace-entity'; import { MatchParticipantService } from 'src/modules/match-participant/match-participant.service'; @@ -25,8 +25,8 @@ export type CalendarEventParticipantMatchParticipantJobData = { }) export class CalendarEventParticipantMatchParticipantJob { constructor( - @InjectRepository(Workspace) - private readonly workspaceRepository: Repository, + @InjectRepository(WorkspaceEntity) + private readonly workspaceRepository: Repository, private readonly matchParticipantService: MatchParticipantService, ) {} diff --git a/packages/twenty-server/src/modules/calendar/calendar-event-participant-manager/listeners/calendar-event-participant-workspace-member.listener.ts b/packages/twenty-server/src/modules/calendar/calendar-event-participant-manager/listeners/calendar-event-participant-workspace-member.listener.ts index 3d53bea723a..b9313a36225 100644 --- a/packages/twenty-server/src/modules/calendar/calendar-event-participant-manager/listeners/calendar-event-participant-workspace-member.listener.ts +++ b/packages/twenty-server/src/modules/calendar/calendar-event-participant-manager/listeners/calendar-event-participant-workspace-member.listener.ts @@ -13,7 +13,7 @@ import { CalendarEventParticipantMatchParticipantJob, type CalendarEventParticipantMatchParticipantJobData, } from 'src/modules/calendar/calendar-event-participant-manager/jobs/calendar-event-participant-match-participant.job'; -import { type WorkspaceMemberWorkspaceEntity } from 'src/modules/workspace-member/standard-objects/workspace-member.workspace-entity'; +import { WorkspaceMemberWorkspaceEntity } from 'src/modules/workspace-member/standard-objects/workspace-member.workspace-entity'; @Injectable() export class CalendarEventParticipantWorkspaceMemberListener { diff --git a/packages/twenty-server/src/modules/calendar/common/calendar-common.module.ts b/packages/twenty-server/src/modules/calendar/common/calendar-common.module.ts index 242bb1ae2f3..eb69a30aca0 100644 --- a/packages/twenty-server/src/modules/calendar/common/calendar-common.module.ts +++ b/packages/twenty-server/src/modules/calendar/common/calendar-common.module.ts @@ -1,7 +1,7 @@ import { Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; -import { FeatureFlag } from 'src/engine/core-modules/feature-flag/feature-flag.entity'; +import { FeatureFlagEntity } from 'src/engine/core-modules/feature-flag/feature-flag.entity'; import { MetricsModule } from 'src/engine/core-modules/metrics/metrics.module'; import { WorkspaceDataSourceModule } from 'src/engine/workspace-datasource/workspace-datasource.module'; import { CalendarChannelSyncStatusService } from 'src/modules/calendar/common/services/calendar-channel-sync-status.service'; @@ -10,7 +10,7 @@ import { ConnectedAccountModule } from 'src/modules/connected-account/connected- @Module({ imports: [ WorkspaceDataSourceModule, - TypeOrmModule.forFeature([FeatureFlag]), + TypeOrmModule.forFeature([FeatureFlagEntity]), ConnectedAccountModule, MetricsModule, ], diff --git a/packages/twenty-server/src/modules/calendar/common/query-hooks/calendar-event/services/apply-calendar-events-visibility-restrictions.service.ts b/packages/twenty-server/src/modules/calendar/common/query-hooks/calendar-event/services/apply-calendar-events-visibility-restrictions.service.ts index f65ba219257..46a9dfe6970 100644 --- a/packages/twenty-server/src/modules/calendar/common/query-hooks/calendar-event/services/apply-calendar-events-visibility-restrictions.service.ts +++ b/packages/twenty-server/src/modules/calendar/common/query-hooks/calendar-event/services/apply-calendar-events-visibility-restrictions.service.ts @@ -10,7 +10,7 @@ import { type CalendarChannelEventAssociationWorkspaceEntity } from 'src/modules import { CalendarChannelVisibility } from 'src/modules/calendar/common/standard-objects/calendar-channel.workspace-entity'; import { type CalendarEventWorkspaceEntity } from 'src/modules/calendar/common/standard-objects/calendar-event.workspace-entity'; import { type ConnectedAccountWorkspaceEntity } from 'src/modules/connected-account/standard-objects/connected-account.workspace-entity'; -import { type WorkspaceMemberWorkspaceEntity } from 'src/modules/workspace-member/standard-objects/workspace-member.workspace-entity'; +import { WorkspaceMemberWorkspaceEntity } from 'src/modules/workspace-member/standard-objects/workspace-member.workspace-entity'; @Injectable() export class ApplyCalendarEventsVisibilityRestrictionsService { diff --git a/packages/twenty-server/src/modules/connected-account/channel-sync/channel-sync.resolver.ts b/packages/twenty-server/src/modules/connected-account/channel-sync/channel-sync.resolver.ts index 4ebc8b4d8a5..66a4c55407c 100644 --- a/packages/twenty-server/src/modules/connected-account/channel-sync/channel-sync.resolver.ts +++ b/packages/twenty-server/src/modules/connected-account/channel-sync/channel-sync.resolver.ts @@ -4,7 +4,7 @@ import { Args, Mutation, Resolver } from '@nestjs/graphql'; import { UUIDScalarType } from 'src/engine/api/graphql/workspace-schema-builder/graphql-types/scalars'; import { AuthGraphqlApiExceptionFilter } from 'src/engine/core-modules/auth/filters/auth-graphql-api-exception.filter'; import { ResolverValidationPipe } from 'src/engine/core-modules/graphql/pipes/resolver-validation.pipe'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { AuthWorkspace } from 'src/engine/decorators/auth/auth-workspace.decorator'; import { WorkspaceAuthGuard } from 'src/engine/guards/workspace-auth.guard'; import { ChannelSyncSuccessDTO } from 'src/modules/connected-account/channel-sync/dtos/channel-sync-success.dto'; @@ -21,7 +21,7 @@ export class ChannelSyncResolver { async startChannelSync( @Args('connectedAccountId', { type: () => UUIDScalarType }) connectedAccountId: string, - @AuthWorkspace() workspace: Workspace, + @AuthWorkspace() workspace: WorkspaceEntity, ): Promise { await this.channelSyncService.startChannelSync({ connectedAccountId, diff --git a/packages/twenty-server/src/modules/connected-account/listeners/connected-account-workspace-member.listener.ts b/packages/twenty-server/src/modules/connected-account/listeners/connected-account-workspace-member.listener.ts index 15496cbb14a..dc5aaa70c86 100644 --- a/packages/twenty-server/src/modules/connected-account/listeners/connected-account-workspace-member.listener.ts +++ b/packages/twenty-server/src/modules/connected-account/listeners/connected-account-workspace-member.listener.ts @@ -12,7 +12,7 @@ import { DeleteWorkspaceMemberConnectedAccountsCleanupJob, type DeleteWorkspaceMemberConnectedAccountsCleanupJobData, } from 'src/modules/connected-account/jobs/delete-workspace-member-connected-accounts.job'; -import { type WorkspaceMemberWorkspaceEntity } from 'src/modules/workspace-member/standard-objects/workspace-member.workspace-entity'; +import { WorkspaceMemberWorkspaceEntity } from 'src/modules/workspace-member/standard-objects/workspace-member.workspace-entity'; @Injectable() export class ConnectedAccountWorkspaceMemberListener { diff --git a/packages/twenty-server/src/modules/connected-account/listeners/connected-account.listener.ts b/packages/twenty-server/src/modules/connected-account/listeners/connected-account.listener.ts index fbfae0a87a5..4db3e1e28c6 100644 --- a/packages/twenty-server/src/modules/connected-account/listeners/connected-account.listener.ts +++ b/packages/twenty-server/src/modules/connected-account/listeners/connected-account.listener.ts @@ -7,7 +7,7 @@ import { TwentyORMGlobalManager } from 'src/engine/twenty-orm/twenty-orm-global. import { WorkspaceEventBatch } from 'src/engine/workspace-event-emitter/types/workspace-event-batch.type'; import { AccountsToReconnectService } from 'src/modules/connected-account/services/accounts-to-reconnect.service'; import { type ConnectedAccountWorkspaceEntity } from 'src/modules/connected-account/standard-objects/connected-account.workspace-entity'; -import { type WorkspaceMemberWorkspaceEntity } from 'src/modules/workspace-member/standard-objects/workspace-member.workspace-entity'; +import { WorkspaceMemberWorkspaceEntity } from 'src/modules/workspace-member/standard-objects/workspace-member.workspace-entity'; @Injectable() export class ConnectedAccountListener { diff --git a/packages/twenty-server/src/modules/contact-creation-manager/contact-creation-manager.module.ts b/packages/twenty-server/src/modules/contact-creation-manager/contact-creation-manager.module.ts index 4af3b3782c9..0c905cd0683 100644 --- a/packages/twenty-server/src/modules/contact-creation-manager/contact-creation-manager.module.ts +++ b/packages/twenty-server/src/modules/contact-creation-manager/contact-creation-manager.module.ts @@ -1,7 +1,7 @@ import { Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; -import { FeatureFlag } from 'src/engine/core-modules/feature-flag/feature-flag.entity'; +import { FeatureFlagEntity } from 'src/engine/core-modules/feature-flag/feature-flag.entity'; import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity'; import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity'; import { WorkspaceDataSourceModule } from 'src/engine/workspace-datasource/workspace-datasource.module'; @@ -14,7 +14,7 @@ import { CreatePersonService } from 'src/modules/contact-creation-manager/servic @Module({ imports: [ WorkspaceDataSourceModule, - TypeOrmModule.forFeature([FeatureFlag]), + TypeOrmModule.forFeature([FeatureFlagEntity]), TypeOrmModule.forFeature([ObjectMetadataEntity, FieldMetadataEntity]), ], providers: [ diff --git a/packages/twenty-server/src/modules/contact-creation-manager/services/create-company.service.ts b/packages/twenty-server/src/modules/contact-creation-manager/services/create-company.service.ts index 856ca3e68ec..64fb0136253 100644 --- a/packages/twenty-server/src/modules/contact-creation-manager/services/create-company.service.ts +++ b/packages/twenty-server/src/modules/contact-creation-manager/services/create-company.service.ts @@ -16,7 +16,7 @@ import { TwentyORMGlobalManager } from 'src/engine/twenty-orm/twenty-orm-global. import { CompanyWorkspaceEntity } from 'src/modules/company/standard-objects/company.workspace-entity'; import { extractDomainFromLink } from 'src/modules/contact-creation-manager/utils/extract-domain-from-link.util'; import { getCompanyNameFromDomainName } from 'src/modules/contact-creation-manager/utils/get-company-name-from-domain-name.util'; -import { type WorkspaceMemberWorkspaceEntity } from 'src/modules/workspace-member/standard-objects/workspace-member.workspace-entity'; +import { WorkspaceMemberWorkspaceEntity } from 'src/modules/workspace-member/standard-objects/workspace-member.workspace-entity'; import { computeDisplayName } from 'src/utils/compute-display-name'; export type CompanyToCreate = { diff --git a/packages/twenty-server/src/modules/match-participant/match-participant.service.ts b/packages/twenty-server/src/modules/match-participant/match-participant.service.ts index 994a459b916..603a7c31cfb 100644 --- a/packages/twenty-server/src/modules/match-participant/match-participant.service.ts +++ b/packages/twenty-server/src/modules/match-participant/match-participant.service.ts @@ -13,7 +13,7 @@ import { addPersonEmailFiltersToQueryBuilder } from 'src/modules/match-participa import { findPersonByPrimaryOrAdditionalEmail } from 'src/modules/match-participant/utils/find-person-by-primary-or-additional-email'; import { type MessageParticipantWorkspaceEntity } from 'src/modules/messaging/common/standard-objects/message-participant.workspace-entity'; import { type PersonWorkspaceEntity } from 'src/modules/person/standard-objects/person.workspace-entity'; -import { type WorkspaceMemberWorkspaceEntity } from 'src/modules/workspace-member/standard-objects/workspace-member.workspace-entity'; +import { WorkspaceMemberWorkspaceEntity } from 'src/modules/workspace-member/standard-objects/workspace-member.workspace-entity'; type ObjectMetadataName = 'messageParticipant' | 'calendarEventParticipant'; diff --git a/packages/twenty-server/src/modules/messaging/common/messaging-common.module.ts b/packages/twenty-server/src/modules/messaging/common/messaging-common.module.ts index f128ec9fbfa..5e44732ae26 100644 --- a/packages/twenty-server/src/modules/messaging/common/messaging-common.module.ts +++ b/packages/twenty-server/src/modules/messaging/common/messaging-common.module.ts @@ -1,7 +1,7 @@ import { Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; -import { FeatureFlag } from 'src/engine/core-modules/feature-flag/feature-flag.entity'; +import { FeatureFlagEntity } from 'src/engine/core-modules/feature-flag/feature-flag.entity'; import { MetricsModule } from 'src/engine/core-modules/metrics/metrics.module'; import { WorkspaceDataSourceModule } from 'src/engine/workspace-datasource/workspace-datasource.module'; import { ConnectedAccountModule } from 'src/modules/connected-account/connected-account.module'; @@ -10,7 +10,7 @@ import { MessageChannelSyncStatusService } from 'src/modules/messaging/common/se @Module({ imports: [ WorkspaceDataSourceModule, - TypeOrmModule.forFeature([FeatureFlag]), + TypeOrmModule.forFeature([FeatureFlagEntity]), ConnectedAccountModule, MetricsModule, ], diff --git a/packages/twenty-server/src/modules/messaging/common/query-hooks/message/apply-messages-visibility-restrictions.service.ts b/packages/twenty-server/src/modules/messaging/common/query-hooks/message/apply-messages-visibility-restrictions.service.ts index 7cd5779f05b..d6474402312 100644 --- a/packages/twenty-server/src/modules/messaging/common/query-hooks/message/apply-messages-visibility-restrictions.service.ts +++ b/packages/twenty-server/src/modules/messaging/common/query-hooks/message/apply-messages-visibility-restrictions.service.ts @@ -11,7 +11,7 @@ import { type ConnectedAccountWorkspaceEntity } from 'src/modules/connected-acco import { type MessageChannelMessageAssociationWorkspaceEntity } from 'src/modules/messaging/common/standard-objects/message-channel-message-association.workspace-entity'; import { MessageChannelVisibility } from 'src/modules/messaging/common/standard-objects/message-channel.workspace-entity'; import { type MessageWorkspaceEntity } from 'src/modules/messaging/common/standard-objects/message.workspace-entity'; -import { type WorkspaceMemberWorkspaceEntity } from 'src/modules/workspace-member/standard-objects/workspace-member.workspace-entity'; +import { WorkspaceMemberWorkspaceEntity } from 'src/modules/workspace-member/standard-objects/workspace-member.workspace-entity'; @Injectable() export class ApplyMessagesVisibilityRestrictionsService { diff --git a/packages/twenty-server/src/modules/messaging/message-cleaner/commands/messaging-message-clearner-remove-orphans.command.ts b/packages/twenty-server/src/modules/messaging/message-cleaner/commands/messaging-message-clearner-remove-orphans.command.ts index c1a73cdc0e5..c99eeea8924 100644 --- a/packages/twenty-server/src/modules/messaging/message-cleaner/commands/messaging-message-clearner-remove-orphans.command.ts +++ b/packages/twenty-server/src/modules/messaging/message-cleaner/commands/messaging-message-clearner-remove-orphans.command.ts @@ -7,7 +7,7 @@ import { ActiveOrSuspendedWorkspacesMigrationCommandRunner, type RunOnWorkspaceArgs, } from 'src/database/commands/command-runners/active-or-suspended-workspaces-migration.command-runner'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { TwentyORMGlobalManager } from 'src/engine/twenty-orm/twenty-orm-global.manager'; import { MessagingMessageCleanerService } from 'src/modules/messaging/message-cleaner/services/messaging-message-cleaner.service'; @@ -17,8 +17,8 @@ import { MessagingMessageCleanerService } from 'src/modules/messaging/message-cl }) export class MessagingMessageCleanerRemoveOrphansCommand extends ActiveOrSuspendedWorkspacesMigrationCommandRunner { constructor( - @InjectRepository(Workspace) - protected readonly workspaceRepository: Repository, + @InjectRepository(WorkspaceEntity) + protected readonly workspaceRepository: Repository, protected readonly twentyORMGlobalManager: TwentyORMGlobalManager, private readonly messagingMessageCleanerService: MessagingMessageCleanerService, ) { diff --git a/packages/twenty-server/src/modules/messaging/message-cleaner/messaging-message-cleaner.module.ts b/packages/twenty-server/src/modules/messaging/message-cleaner/messaging-message-cleaner.module.ts index fe3254da990..f8de48da066 100644 --- a/packages/twenty-server/src/modules/messaging/message-cleaner/messaging-message-cleaner.module.ts +++ b/packages/twenty-server/src/modules/messaging/message-cleaner/messaging-message-cleaner.module.ts @@ -1,14 +1,14 @@ import { Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { MessagingMessageCleanerRemoveOrphansCommand } from 'src/modules/messaging/message-cleaner/commands/messaging-message-clearner-remove-orphans.command'; import { MessagingConnectedAccountDeletionCleanupJob } from 'src/modules/messaging/message-cleaner/jobs/messaging-connected-account-deletion-cleanup.job'; import { MessagingMessageCleanerConnectedAccountListener } from 'src/modules/messaging/message-cleaner/listeners/messaging-message-cleaner-connected-account.listener'; import { MessagingMessageCleanerService } from 'src/modules/messaging/message-cleaner/services/messaging-message-cleaner.service'; @Module({ - imports: [TypeOrmModule.forFeature([Workspace])], + imports: [TypeOrmModule.forFeature([WorkspaceEntity])], providers: [ MessagingMessageCleanerService, MessagingConnectedAccountDeletionCleanupJob, diff --git a/packages/twenty-server/src/modules/messaging/message-folder-manager/messaging-folder-sync-manager.module.ts b/packages/twenty-server/src/modules/messaging/message-folder-manager/messaging-folder-sync-manager.module.ts index 82dc46b6d52..9afe07f2a91 100644 --- a/packages/twenty-server/src/modules/messaging/message-folder-manager/messaging-folder-sync-manager.module.ts +++ b/packages/twenty-server/src/modules/messaging/message-folder-manager/messaging-folder-sync-manager.module.ts @@ -2,7 +2,7 @@ import { Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; import { FeatureFlagModule } from 'src/engine/core-modules/feature-flag/feature-flag.module'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { DataSourceModule } from 'src/engine/metadata-modules/data-source/data-source.module'; import { WorkspaceDataSourceModule } from 'src/engine/workspace-datasource/workspace-datasource.module'; import { OAuth2ClientManagerModule } from 'src/modules/connected-account/oauth2-client-manager/oauth2-client-manager.module'; @@ -19,7 +19,7 @@ import { MessagingMicrosoftDriverModule } from 'src/modules/messaging/message-im FeatureFlagModule, WorkspaceDataSourceModule, DataSourceModule, - TypeOrmModule.forFeature([Workspace]), + TypeOrmModule.forFeature([WorkspaceEntity]), OAuth2ClientManagerModule, MessagingGmailDriverModule, MessagingMicrosoftDriverModule, diff --git a/packages/twenty-server/src/modules/messaging/message-import-manager/commands/messaging-relaunch-failed-message-channels.command.ts b/packages/twenty-server/src/modules/messaging/message-import-manager/commands/messaging-relaunch-failed-message-channels.command.ts index b58500a5c54..4316b9e66c4 100644 --- a/packages/twenty-server/src/modules/messaging/message-import-manager/commands/messaging-relaunch-failed-message-channels.command.ts +++ b/packages/twenty-server/src/modules/messaging/message-import-manager/commands/messaging-relaunch-failed-message-channels.command.ts @@ -7,7 +7,7 @@ import { ActiveOrSuspendedWorkspacesMigrationCommandRunner, type RunOnWorkspaceArgs, } from 'src/database/commands/command-runners/active-or-suspended-workspaces-migration.command-runner'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { TwentyORMGlobalManager } from 'src/engine/twenty-orm/twenty-orm-global.manager'; import { AccountsToReconnectService } from 'src/modules/connected-account/services/accounts-to-reconnect.service'; import { @@ -22,8 +22,8 @@ import { }) export class MessagingRelaunchFailedMessageChannelsCommand extends ActiveOrSuspendedWorkspacesMigrationCommandRunner { constructor( - @InjectRepository(Workspace) - protected readonly workspaceRepository: Repository, + @InjectRepository(WorkspaceEntity) + protected readonly workspaceRepository: Repository, protected readonly twentyORMGlobalManager: TwentyORMGlobalManager, protected readonly accountsToReconnectService: AccountsToReconnectService, ) { diff --git a/packages/twenty-server/src/modules/messaging/message-import-manager/crons/jobs/messaging-message-list-fetch.cron.job.ts b/packages/twenty-server/src/modules/messaging/message-import-manager/crons/jobs/messaging-message-list-fetch.cron.job.ts index 1127a9894b9..a22bcce6b07 100644 --- a/packages/twenty-server/src/modules/messaging/message-import-manager/crons/jobs/messaging-message-list-fetch.cron.job.ts +++ b/packages/twenty-server/src/modules/messaging/message-import-manager/crons/jobs/messaging-message-list-fetch.cron.job.ts @@ -10,7 +10,7 @@ import { Process } from 'src/engine/core-modules/message-queue/decorators/proces import { Processor } from 'src/engine/core-modules/message-queue/decorators/processor.decorator'; import { MessageQueue } from 'src/engine/core-modules/message-queue/message-queue.constants'; import { MessageQueueService } from 'src/engine/core-modules/message-queue/services/message-queue.service'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { getWorkspaceSchemaName } from 'src/engine/workspace-datasource/utils/get-workspace-schema-name.util'; import { MessageChannelSyncStage } from 'src/modules/messaging/common/standard-objects/message-channel.workspace-entity'; import { @@ -23,8 +23,8 @@ export const MESSAGING_MESSAGE_LIST_FETCH_CRON_PATTERN = '2-59/5 * * * *'; @Processor(MessageQueue.cronQueue) export class MessagingMessageListFetchCronJob { constructor( - @InjectRepository(Workspace) - private readonly workspaceRepository: Repository, + @InjectRepository(WorkspaceEntity) + private readonly workspaceRepository: Repository, @InjectMessageQueue(MessageQueue.messagingQueue) private readonly messageQueueService: MessageQueueService, @InjectDataSource() diff --git a/packages/twenty-server/src/modules/messaging/message-import-manager/crons/jobs/messaging-messages-import.cron.job.ts b/packages/twenty-server/src/modules/messaging/message-import-manager/crons/jobs/messaging-messages-import.cron.job.ts index 3cfef05f3af..54d7c8f5353 100644 --- a/packages/twenty-server/src/modules/messaging/message-import-manager/crons/jobs/messaging-messages-import.cron.job.ts +++ b/packages/twenty-server/src/modules/messaging/message-import-manager/crons/jobs/messaging-messages-import.cron.job.ts @@ -11,7 +11,7 @@ import { Process } from 'src/engine/core-modules/message-queue/decorators/proces import { Processor } from 'src/engine/core-modules/message-queue/decorators/processor.decorator'; import { MessageQueue } from 'src/engine/core-modules/message-queue/message-queue.constants'; import { MessageQueueService } from 'src/engine/core-modules/message-queue/services/message-queue.service'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { DataSourceException, DataSourceExceptionCode, @@ -28,8 +28,8 @@ export const MESSAGING_MESSAGES_IMPORT_CRON_PATTERN = '*/1 * * * *'; @Processor(MessageQueue.cronQueue) export class MessagingMessagesImportCronJob { constructor( - @InjectRepository(Workspace) - private readonly workspaceRepository: Repository, + @InjectRepository(WorkspaceEntity) + private readonly workspaceRepository: Repository, @InjectMessageQueue(MessageQueue.messagingQueue) private readonly messageQueueService: MessageQueueService, private readonly exceptionHandlerService: ExceptionHandlerService, diff --git a/packages/twenty-server/src/modules/messaging/message-import-manager/crons/jobs/messaging-ongoing-stale.cron.job.ts b/packages/twenty-server/src/modules/messaging/message-import-manager/crons/jobs/messaging-ongoing-stale.cron.job.ts index 236f3bccec9..afad88c4dc1 100644 --- a/packages/twenty-server/src/modules/messaging/message-import-manager/crons/jobs/messaging-ongoing-stale.cron.job.ts +++ b/packages/twenty-server/src/modules/messaging/message-import-manager/crons/jobs/messaging-ongoing-stale.cron.job.ts @@ -10,7 +10,7 @@ import { Process } from 'src/engine/core-modules/message-queue/decorators/proces import { Processor } from 'src/engine/core-modules/message-queue/decorators/processor.decorator'; import { MessageQueue } from 'src/engine/core-modules/message-queue/message-queue.constants'; import { MessageQueueService } from 'src/engine/core-modules/message-queue/services/message-queue.service'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { MessagingOngoingStaleJob, type MessagingOngoingStaleJobData, @@ -21,8 +21,8 @@ export const MESSAGING_ONGOING_STALE_CRON_PATTERN = '0 * * * *'; @Processor(MessageQueue.cronQueue) export class MessagingOngoingStaleCronJob { constructor( - @InjectRepository(Workspace) - private readonly workspaceRepository: Repository, + @InjectRepository(WorkspaceEntity) + private readonly workspaceRepository: Repository, @InjectMessageQueue(MessageQueue.messagingQueue) private readonly messageQueueService: MessageQueueService, private readonly exceptionHandlerService: ExceptionHandlerService, diff --git a/packages/twenty-server/src/modules/messaging/message-import-manager/drivers/gmail/messaging-gmail-driver.module.ts b/packages/twenty-server/src/modules/messaging/message-import-manager/drivers/gmail/messaging-gmail-driver.module.ts index c21bb482d49..35ed0548099 100644 --- a/packages/twenty-server/src/modules/messaging/message-import-manager/drivers/gmail/messaging-gmail-driver.module.ts +++ b/packages/twenty-server/src/modules/messaging/message-import-manager/drivers/gmail/messaging-gmail-driver.module.ts @@ -2,7 +2,7 @@ import { HttpModule } from '@nestjs/axios'; import { Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; -import { FeatureFlag } from 'src/engine/core-modules/feature-flag/feature-flag.entity'; +import { FeatureFlagEntity } from 'src/engine/core-modules/feature-flag/feature-flag.entity'; import { FeatureFlagModule } from 'src/engine/core-modules/feature-flag/feature-flag.module'; import { TwentyConfigModule } from 'src/engine/core-modules/twenty-config/twenty-config.module'; import { ObjectMetadataRepositoryModule } from 'src/engine/object-metadata-repository/object-metadata-repository.module'; @@ -26,7 +26,7 @@ import { MessageParticipantManagerModule } from 'src/modules/messaging/message-p TwentyConfigModule, ObjectMetadataRepositoryModule.forFeature([BlocklistWorkspaceEntity]), MessagingCommonModule, - TypeOrmModule.forFeature([FeatureFlag]), + TypeOrmModule.forFeature([FeatureFlagEntity]), OAuth2ClientManagerModule, EmailAliasManagerModule, FeatureFlagModule, diff --git a/packages/twenty-server/src/modules/messaging/message-import-manager/drivers/imap/messaging-imap-driver.module.ts b/packages/twenty-server/src/modules/messaging/message-import-manager/drivers/imap/messaging-imap-driver.module.ts index bbbb1202041..1599df050ec 100644 --- a/packages/twenty-server/src/modules/messaging/message-import-manager/drivers/imap/messaging-imap-driver.module.ts +++ b/packages/twenty-server/src/modules/messaging/message-import-manager/drivers/imap/messaging-imap-driver.module.ts @@ -2,7 +2,7 @@ import { HttpModule } from '@nestjs/axios'; import { Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; -import { FeatureFlag } from 'src/engine/core-modules/feature-flag/feature-flag.entity'; +import { FeatureFlagEntity } from 'src/engine/core-modules/feature-flag/feature-flag.entity'; import { FeatureFlagModule } from 'src/engine/core-modules/feature-flag/feature-flag.module'; import { ObjectMetadataRepositoryModule } from 'src/engine/object-metadata-repository/object-metadata-repository.module'; import { WorkspaceDataSourceModule } from 'src/engine/workspace-datasource/workspace-datasource.module'; @@ -26,7 +26,7 @@ import { MessageParticipantManagerModule } from 'src/modules/messaging/message-p HttpModule, ObjectMetadataRepositoryModule.forFeature([BlocklistWorkspaceEntity]), MessagingCommonModule, - TypeOrmModule.forFeature([FeatureFlag]), + TypeOrmModule.forFeature([FeatureFlagEntity]), EmailAliasManagerModule, FeatureFlagModule, WorkspaceDataSourceModule, diff --git a/packages/twenty-server/src/modules/messaging/message-import-manager/messaging-import-manager.module.ts b/packages/twenty-server/src/modules/messaging/message-import-manager/messaging-import-manager.module.ts index 96fc2cbcea5..b7b846df91b 100644 --- a/packages/twenty-server/src/modules/messaging/message-import-manager/messaging-import-manager.module.ts +++ b/packages/twenty-server/src/modules/messaging/message-import-manager/messaging-import-manager.module.ts @@ -2,7 +2,7 @@ import { Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; import { FeatureFlagModule } from 'src/engine/core-modules/feature-flag/feature-flag.module'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { DataSourceEntity } from 'src/engine/metadata-modules/data-source/data-source.entity'; import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity'; import { WorkspaceDataSourceModule } from 'src/engine/workspace-datasource/workspace-datasource.module'; @@ -55,7 +55,7 @@ import { MessagingMonitoringModule } from 'src/modules/messaging/monitoring/mess MessagingSmtpDriverModule, MessagingCommonModule, TypeOrmModule.forFeature([ - Workspace, + WorkspaceEntity, DataSourceEntity, ObjectMetadataEntity, ]), diff --git a/packages/twenty-server/src/modules/messaging/message-participant-manager/listeners/message-participant-workspace-member.listener.ts b/packages/twenty-server/src/modules/messaging/message-participant-manager/listeners/message-participant-workspace-member.listener.ts index 30745860c4c..296b71b0500 100644 --- a/packages/twenty-server/src/modules/messaging/message-participant-manager/listeners/message-participant-workspace-member.listener.ts +++ b/packages/twenty-server/src/modules/messaging/message-participant-manager/listeners/message-participant-workspace-member.listener.ts @@ -12,21 +12,21 @@ import { objectRecordChangedProperties as objectRecordUpdateEventChangedProperti import { InjectMessageQueue } from 'src/engine/core-modules/message-queue/decorators/message-queue.decorator'; import { MessageQueue } from 'src/engine/core-modules/message-queue/message-queue.constants'; import { MessageQueueService } from 'src/engine/core-modules/message-queue/services/message-queue.service'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { WorkspaceEventBatch } from 'src/engine/workspace-event-emitter/types/workspace-event-batch.type'; import { MessageParticipantMatchParticipantJob, type MessageParticipantMatchParticipantJobData, } from 'src/modules/messaging/message-participant-manager/jobs/message-participant-match-participant.job'; -import { type WorkspaceMemberWorkspaceEntity } from 'src/modules/workspace-member/standard-objects/workspace-member.workspace-entity'; +import { WorkspaceMemberWorkspaceEntity } from 'src/modules/workspace-member/standard-objects/workspace-member.workspace-entity'; @Injectable() export class MessageParticipantWorkspaceMemberListener { constructor( @InjectMessageQueue(MessageQueue.messagingQueue) private readonly messageQueueService: MessageQueueService, - @InjectRepository(Workspace) - private readonly workspaceRepository: Repository, + @InjectRepository(WorkspaceEntity) + private readonly workspaceRepository: Repository, ) {} @OnDatabaseBatchEvent('workspaceMember', DatabaseEventAction.CREATED) diff --git a/packages/twenty-server/src/modules/messaging/message-participant-manager/message-participant-manager.module.ts b/packages/twenty-server/src/modules/messaging/message-participant-manager/message-participant-manager.module.ts index 32615dc560d..628efb9d953 100644 --- a/packages/twenty-server/src/modules/messaging/message-participant-manager/message-participant-manager.module.ts +++ b/packages/twenty-server/src/modules/messaging/message-participant-manager/message-participant-manager.module.ts @@ -2,8 +2,8 @@ import { Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; import { AuditModule } from 'src/engine/core-modules/audit/audit.module'; -import { FeatureFlag } from 'src/engine/core-modules/feature-flag/feature-flag.entity'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { FeatureFlagEntity } from 'src/engine/core-modules/feature-flag/feature-flag.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity'; import { ObjectMetadataRepositoryModule } from 'src/engine/object-metadata-repository/object-metadata-repository.module'; import { WorkspaceDataSourceModule } from 'src/engine/workspace-datasource/workspace-datasource.module'; @@ -20,7 +20,11 @@ import { TimelineActivityWorkspaceEntity } from 'src/modules/timeline/standard-o @Module({ imports: [ - TypeOrmModule.forFeature([FeatureFlag, Workspace, ObjectMetadataEntity]), + TypeOrmModule.forFeature([ + FeatureFlagEntity, + WorkspaceEntity, + ObjectMetadataEntity, + ]), AuditModule, ContactCreationManagerModule, WorkspaceDataSourceModule, diff --git a/packages/twenty-server/src/modules/messaging/monitoring/crons/jobs/messaging-message-channel-sync-status-monitoring.cron.job.ts b/packages/twenty-server/src/modules/messaging/monitoring/crons/jobs/messaging-message-channel-sync-status-monitoring.cron.job.ts index 84da20b4a94..dfe1697d543 100644 --- a/packages/twenty-server/src/modules/messaging/monitoring/crons/jobs/messaging-message-channel-sync-status-monitoring.cron.job.ts +++ b/packages/twenty-server/src/modules/messaging/monitoring/crons/jobs/messaging-message-channel-sync-status-monitoring.cron.job.ts @@ -9,7 +9,7 @@ import { ExceptionHandlerService } from 'src/engine/core-modules/exception-handl import { Process } from 'src/engine/core-modules/message-queue/decorators/process.decorator'; import { Processor } from 'src/engine/core-modules/message-queue/decorators/processor.decorator'; import { MessageQueue } from 'src/engine/core-modules/message-queue/message-queue.constants'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { TwentyORMGlobalManager } from 'src/engine/twenty-orm/twenty-orm-global.manager'; import { type MessageChannelWorkspaceEntity } from 'src/modules/messaging/common/standard-objects/message-channel.workspace-entity'; import { MessagingMonitoringService } from 'src/modules/messaging/monitoring/services/messaging-monitoring.service'; @@ -20,8 +20,8 @@ export const MESSAGING_MESSAGE_CHANNEL_SYNC_STATUS_MONITORING_CRON_PATTERN = @Processor(MessageQueue.cronQueue) export class MessagingMessageChannelSyncStatusMonitoringCronJob { constructor( - @InjectRepository(Workspace) - private readonly workspaceRepository: Repository, + @InjectRepository(WorkspaceEntity) + private readonly workspaceRepository: Repository, private readonly messagingMonitoringService: MessagingMonitoringService, private readonly twentyORMGlobalManager: TwentyORMGlobalManager, private readonly exceptionHandlerService: ExceptionHandlerService, diff --git a/packages/twenty-server/src/modules/messaging/monitoring/messaging-monitoring.module.ts b/packages/twenty-server/src/modules/messaging/monitoring/messaging-monitoring.module.ts index 1effbb2d5ea..f4d7d98f99b 100644 --- a/packages/twenty-server/src/modules/messaging/monitoring/messaging-monitoring.module.ts +++ b/packages/twenty-server/src/modules/messaging/monitoring/messaging-monitoring.module.ts @@ -2,7 +2,7 @@ import { Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; import { AuditModule } from 'src/engine/core-modules/audit/audit.module'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { DataSourceEntity } from 'src/engine/metadata-modules/data-source/data-source.entity'; import { MessagingCommonModule } from 'src/modules/messaging/common/messaging-common.module'; import { MessagingMessageChannelSyncStatusMonitoringCronCommand } from 'src/modules/messaging/monitoring/crons/commands/messaging-message-channel-sync-status-monitoring.cron.command'; @@ -13,7 +13,7 @@ import { MessagingMonitoringService } from 'src/modules/messaging/monitoring/ser imports: [ AuditModule, MessagingCommonModule, - TypeOrmModule.forFeature([Workspace]), + TypeOrmModule.forFeature([WorkspaceEntity]), TypeOrmModule.forFeature([DataSourceEntity]), ], providers: [ diff --git a/packages/twenty-server/src/modules/workflow/workflow-executor/services/workflow-execution-context.service.ts b/packages/twenty-server/src/modules/workflow/workflow-executor/services/workflow-execution-context.service.ts index 32b714da8d9..f9242794fdc 100644 --- a/packages/twenty-server/src/modules/workflow/workflow-executor/services/workflow-execution-context.service.ts +++ b/packages/twenty-server/src/modules/workflow/workflow-executor/services/workflow-execution-context.service.ts @@ -2,17 +2,18 @@ import { Injectable } from '@nestjs/common'; import { isDefined } from 'twenty-shared/utils'; -import { UserWorkspaceService as UserService } from 'src/engine/core-modules/user-workspace/user-workspace.service'; +import { UserWorkspaceService } from 'src/engine/core-modules/user-workspace/user-workspace.service'; import { FieldActorSource } from 'src/engine/metadata-modules/field-metadata/composite-types/actor.composite-type'; import { UserRoleService } from 'src/engine/metadata-modules/user-role/user-role.service'; import { type WorkflowExecutionContext } from 'src/modules/workflow/workflow-executor/types/workflow-execution-context.type'; import { WorkflowRunWorkspaceService as WorkflowRunService } from 'src/modules/workflow/workflow-runner/workflow-run/workflow-run.workspace-service'; @Injectable() +// eslint-disable-next-line @nx/workspace-inject-workspace-repository export class WorkflowExecutionContextService { constructor( private readonly workflowRunService: WorkflowRunService, - private readonly userService: UserService, + private readonly userWorkspaceService: UserWorkspaceService, private readonly userRoleService: UserRoleService, ) {} @@ -32,13 +33,14 @@ export class WorkflowExecutionContextService { let roleId: string | undefined; if (isActingOnBehalfOfUser) { - const workspaceMember = await this.userService.getWorkspaceMemberOrThrow({ - workspaceMemberId: workflowRun.createdBy.workspaceMemberId!, - workspaceId: runInfo.workspaceId, - }); + const workspaceMember = + await this.userWorkspaceService.getWorkspaceMemberOrThrow({ + workspaceMemberId: workflowRun.createdBy.workspaceMemberId!, + workspaceId: runInfo.workspaceId, + }); const userWorkspace = - await this.userService.getUserWorkspaceForUserOrThrow({ + await this.userWorkspaceService.getUserWorkspaceForUserOrThrow({ userId: workspaceMember.userId, workspaceId: runInfo.workspaceId, }); diff --git a/packages/twenty-server/src/modules/workflow/workflow-runner/workflow-run-queue/cron/jobs/workflow-clean-workflow-runs.cron.job.ts b/packages/twenty-server/src/modules/workflow/workflow-runner/workflow-run-queue/cron/jobs/workflow-clean-workflow-runs.cron.job.ts index 75ea90ba346..aebd80ab96a 100644 --- a/packages/twenty-server/src/modules/workflow/workflow-runner/workflow-run-queue/cron/jobs/workflow-clean-workflow-runs.cron.job.ts +++ b/packages/twenty-server/src/modules/workflow/workflow-runner/workflow-run-queue/cron/jobs/workflow-clean-workflow-runs.cron.job.ts @@ -8,7 +8,7 @@ import { SentryCronMonitor } from 'src/engine/core-modules/cron/sentry-cron-moni import { Process } from 'src/engine/core-modules/message-queue/decorators/process.decorator'; import { Processor } from 'src/engine/core-modules/message-queue/decorators/processor.decorator'; import { MessageQueue } from 'src/engine/core-modules/message-queue/message-queue.constants'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { TwentyORMGlobalManager } from 'src/engine/twenty-orm/twenty-orm-global.manager'; import { getWorkspaceSchemaName } from 'src/engine/workspace-datasource/utils/get-workspace-schema-name.util'; import { @@ -25,8 +25,8 @@ export class WorkflowCleanWorkflowRunsJob { private readonly logger = new Logger(WorkflowCleanWorkflowRunsJob.name); constructor( - @InjectRepository(Workspace) - private readonly workspaceRepository: Repository, + @InjectRepository(WorkspaceEntity) + private readonly workspaceRepository: Repository, private readonly twentyORMGlobalManager: TwentyORMGlobalManager, @InjectDataSource() private readonly coreDataSource: DataSource, diff --git a/packages/twenty-server/src/modules/workflow/workflow-runner/workflow-run-queue/cron/jobs/workflow-handle-staled-runs.cron.job.ts b/packages/twenty-server/src/modules/workflow/workflow-runner/workflow-run-queue/cron/jobs/workflow-handle-staled-runs.cron.job.ts index 48a4f506431..3599bb0737c 100644 --- a/packages/twenty-server/src/modules/workflow/workflow-runner/workflow-run-queue/cron/jobs/workflow-handle-staled-runs.cron.job.ts +++ b/packages/twenty-server/src/modules/workflow/workflow-runner/workflow-run-queue/cron/jobs/workflow-handle-staled-runs.cron.job.ts @@ -7,7 +7,7 @@ import { SentryCronMonitor } from 'src/engine/core-modules/cron/sentry-cron-moni import { Process } from 'src/engine/core-modules/message-queue/decorators/process.decorator'; import { Processor } from 'src/engine/core-modules/message-queue/decorators/processor.decorator'; import { MessageQueue } from 'src/engine/core-modules/message-queue/message-queue.constants'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { WorkflowHandleStaledRunsWorkspaceService } from 'src/modules/workflow/workflow-runner/workflow-run-queue/workspace-services/workflow-handle-staled-runs.workspace-service'; export const WORKFLOW_HANDLE_STALED_RUNS_CRON_PATTERN = '0 * * * *'; @@ -15,8 +15,8 @@ export const WORKFLOW_HANDLE_STALED_RUNS_CRON_PATTERN = '0 * * * *'; @Processor(MessageQueue.cronQueue) export class WorkflowHandleStaledRunsJob { constructor( - @InjectRepository(Workspace) - private readonly workspaceRepository: Repository, + @InjectRepository(WorkspaceEntity) + private readonly workspaceRepository: Repository, private readonly workflowHandleStaledRunsWorkspaceService: WorkflowHandleStaledRunsWorkspaceService, ) {} diff --git a/packages/twenty-server/src/modules/workflow/workflow-runner/workflow-run-queue/cron/jobs/workflow-run-enqueue.cron.job.ts b/packages/twenty-server/src/modules/workflow/workflow-runner/workflow-run-queue/cron/jobs/workflow-run-enqueue.cron.job.ts index b95d5caaf09..8cb8965d1c1 100644 --- a/packages/twenty-server/src/modules/workflow/workflow-runner/workflow-run-queue/cron/jobs/workflow-run-enqueue.cron.job.ts +++ b/packages/twenty-server/src/modules/workflow/workflow-runner/workflow-run-queue/cron/jobs/workflow-run-enqueue.cron.job.ts @@ -7,7 +7,7 @@ import { SentryCronMonitor } from 'src/engine/core-modules/cron/sentry-cron-moni import { Process } from 'src/engine/core-modules/message-queue/decorators/process.decorator'; import { Processor } from 'src/engine/core-modules/message-queue/decorators/processor.decorator'; import { MessageQueue } from 'src/engine/core-modules/message-queue/message-queue.constants'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { WorkflowRunEnqueueWorkspaceService } from 'src/modules/workflow/workflow-runner/workflow-run-queue/workspace-services/workflow-run-enqueue.workspace-service'; export const WORKFLOW_RUN_ENQUEUE_CRON_PATTERN = '*/5 * * * *'; @@ -15,8 +15,8 @@ export const WORKFLOW_RUN_ENQUEUE_CRON_PATTERN = '*/5 * * * *'; @Processor(MessageQueue.cronQueue) export class WorkflowRunEnqueueJob { constructor( - @InjectRepository(Workspace) - private readonly workspaceRepository: Repository, + @InjectRepository(WorkspaceEntity) + private readonly workspaceRepository: Repository, private readonly workflowRunEnqueueWorkspaceService: WorkflowRunEnqueueWorkspaceService, ) {} diff --git a/packages/twenty-server/src/modules/workflow/workflow-runner/workflow-run-queue/workflow-run-queue.module.ts b/packages/twenty-server/src/modules/workflow/workflow-runner/workflow-run-queue/workflow-run-queue.module.ts index 44303fd2114..acf7dbfab7a 100644 --- a/packages/twenty-server/src/modules/workflow/workflow-runner/workflow-run-queue/workflow-run-queue.module.ts +++ b/packages/twenty-server/src/modules/workflow/workflow-runner/workflow-run-queue/workflow-run-queue.module.ts @@ -4,7 +4,7 @@ import { TypeOrmModule } from '@nestjs/typeorm'; import { CacheStorageModule } from 'src/engine/core-modules/cache-storage/cache-storage.module'; import { MessageQueueModule } from 'src/engine/core-modules/message-queue/message-queue.module'; import { MetricsModule } from 'src/engine/core-modules/metrics/metrics.module'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { WorkspaceDataSourceModule } from 'src/engine/workspace-datasource/workspace-datasource.module'; import { WorkflowHandleStaledRunsCommand } from 'src/modules/workflow/workflow-runner/workflow-run-queue/command/workflow-handle-staled-runs.command'; import { WorkflowRunEnqueueCommand } from 'src/modules/workflow/workflow-runner/workflow-run-queue/command/workflow-run-enqueue.command'; @@ -21,7 +21,7 @@ import { WorkflowRunQueueWorkspaceService } from 'src/modules/workflow/workflow- @Module({ imports: [ CacheStorageModule, - TypeOrmModule.forFeature([Workspace]), + TypeOrmModule.forFeature([WorkspaceEntity]), MessageQueueModule, WorkspaceDataSourceModule, MetricsModule, diff --git a/packages/twenty-server/src/modules/workflow/workflow-runner/workflow-run/command/delete-workflow-runs.command.ts b/packages/twenty-server/src/modules/workflow/workflow-runner/workflow-run/command/delete-workflow-runs.command.ts index 405a2e3dd83..2c46be2fb2e 100644 --- a/packages/twenty-server/src/modules/workflow/workflow-runner/workflow-run/command/delete-workflow-runs.command.ts +++ b/packages/twenty-server/src/modules/workflow/workflow-runner/workflow-run/command/delete-workflow-runs.command.ts @@ -8,7 +8,7 @@ import { ActiveOrSuspendedWorkspacesMigrationCommandRunner, type RunOnWorkspaceArgs, } from 'src/database/commands/command-runners/active-or-suspended-workspaces-migration.command-runner'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { type WorkflowRunWorkspaceEntity } from 'src/modules/workflow/common/standard-objects/workflow-run.workspace-entity'; @Command({ @@ -19,8 +19,8 @@ export class DeleteWorkflowRunsCommand extends ActiveOrSuspendedWorkspacesMigrat private createdBeforeDate: string | undefined; constructor( - @InjectRepository(Workspace) - protected readonly workspaceRepository: Repository, + @InjectRepository(WorkspaceEntity) + protected readonly workspaceRepository: Repository, protected readonly twentyORMGlobalManager: TwentyORMGlobalManager, ) { super(workspaceRepository, twentyORMGlobalManager); diff --git a/packages/twenty-server/src/modules/workflow/workflow-runner/workflow-run/workflow-run.module.ts b/packages/twenty-server/src/modules/workflow/workflow-runner/workflow-run/workflow-run.module.ts index 59cc910b1d0..51148035bec 100644 --- a/packages/twenty-server/src/modules/workflow/workflow-runner/workflow-run/workflow-run.module.ts +++ b/packages/twenty-server/src/modules/workflow/workflow-runner/workflow-run/workflow-run.module.ts @@ -5,7 +5,7 @@ import { NestjsQueryTypeOrmModule } from '@ptc-org/nestjs-query-typeorm'; import { CacheLockModule } from 'src/engine/core-modules/cache-lock/cache-lock.module'; import { MetricsModule } from 'src/engine/core-modules/metrics/metrics.module'; import { RecordPositionModule } from 'src/engine/core-modules/record-position/record-position.module'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity'; import { ScopedWorkspaceContextFactory } from 'src/engine/twenty-orm/factories/scoped-workspace-context.factory'; import { WorkflowCommonModule } from 'src/modules/workflow/common/workflow-common.module'; @@ -15,7 +15,10 @@ import { WorkflowRunWorkspaceService } from 'src/modules/workflow/workflow-runne @Module({ imports: [ WorkflowCommonModule, - NestjsQueryTypeOrmModule.forFeature([ObjectMetadataEntity, Workspace]), + NestjsQueryTypeOrmModule.forFeature([ + ObjectMetadataEntity, + WorkspaceEntity, + ]), RecordPositionModule, CacheLockModule, MetricsModule, diff --git a/packages/twenty-server/src/modules/workflow/workflow-trigger/automated-trigger/automated-trigger.module.ts b/packages/twenty-server/src/modules/workflow/workflow-trigger/automated-trigger/automated-trigger.module.ts index 71db3fcebd5..12d3fe3fea6 100644 --- a/packages/twenty-server/src/modules/workflow/workflow-trigger/automated-trigger/automated-trigger.module.ts +++ b/packages/twenty-server/src/modules/workflow/workflow-trigger/automated-trigger/automated-trigger.module.ts @@ -1,7 +1,7 @@ import { Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { WorkspaceDataSourceModule } from 'src/engine/workspace-datasource/workspace-datasource.module'; import { WorkflowCommonModule } from 'src/modules/workflow/common/workflow-common.module'; import { AutomatedTriggerWorkspaceService } from 'src/modules/workflow/workflow-trigger/automated-trigger/automated-trigger.workspace-service'; @@ -11,7 +11,7 @@ import { WorkflowDatabaseEventTriggerListener } from 'src/modules/workflow/workf @Module({ imports: [ - TypeOrmModule.forFeature([Workspace]), + TypeOrmModule.forFeature([WorkspaceEntity]), WorkflowCommonModule, WorkspaceDataSourceModule, ], diff --git a/packages/twenty-server/src/modules/workflow/workflow-trigger/automated-trigger/crons/jobs/workflow-cron-trigger-cron.job.ts b/packages/twenty-server/src/modules/workflow/workflow-trigger/automated-trigger/crons/jobs/workflow-cron-trigger-cron.job.ts index 3f102d3ef02..1e920afc155 100644 --- a/packages/twenty-server/src/modules/workflow/workflow-trigger/automated-trigger/crons/jobs/workflow-cron-trigger-cron.job.ts +++ b/packages/twenty-server/src/modules/workflow/workflow-trigger/automated-trigger/crons/jobs/workflow-cron-trigger-cron.job.ts @@ -11,7 +11,7 @@ import { Process } from 'src/engine/core-modules/message-queue/decorators/proces import { Processor } from 'src/engine/core-modules/message-queue/decorators/processor.decorator'; import { MessageQueue } from 'src/engine/core-modules/message-queue/message-queue.constants'; import { MessageQueueService } from 'src/engine/core-modules/message-queue/services/message-queue.service'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; import { getWorkspaceSchemaName } from 'src/engine/workspace-datasource/utils/get-workspace-schema-name.util'; import { AutomatedTriggerType } from 'src/modules/workflow/common/standard-objects/workflow-automated-trigger.workspace-entity'; import { type CronTriggerSettings } from 'src/modules/workflow/workflow-trigger/automated-trigger/constants/automated-trigger-settings'; @@ -28,8 +28,8 @@ export class WorkflowCronTriggerCronJob { constructor( @InjectDataSource() private readonly coreDataSource: DataSource, - @InjectRepository(Workspace) - private readonly workspaceRepository: Repository, + @InjectRepository(WorkspaceEntity) + private readonly workspaceRepository: Repository, @InjectMessageQueue(MessageQueue.workflowQueue) private readonly messageQueueService: MessageQueueService, private readonly exceptionHandlerService: ExceptionHandlerService, diff --git a/packages/twenty-server/src/modules/workspace-member/query-hooks/workspace-member-delete-one.post-query.hook.ts b/packages/twenty-server/src/modules/workspace-member/query-hooks/workspace-member-delete-one.post-query.hook.ts index a4733818ca1..e44e9d2b587 100644 --- a/packages/twenty-server/src/modules/workspace-member/query-hooks/workspace-member-delete-one.post-query.hook.ts +++ b/packages/twenty-server/src/modules/workspace-member/query-hooks/workspace-member-delete-one.post-query.hook.ts @@ -8,7 +8,7 @@ import { type WorkspacePostQueryHookInstance } from 'src/engine/api/graphql/work import { WorkspaceQueryHook } from 'src/engine/api/graphql/workspace-query-runner/workspace-query-hook/decorators/workspace-query-hook.decorator'; import { WorkspaceQueryHookType } from 'src/engine/api/graphql/workspace-query-runner/workspace-query-hook/types/workspace-query-hook.type'; import { type AuthContext } from 'src/engine/core-modules/auth/types/auth-context.type'; -import { UserWorkspace } from 'src/engine/core-modules/user-workspace/user-workspace.entity'; +import { UserWorkspaceEntity } from 'src/engine/core-modules/user-workspace/user-workspace.entity'; import { WorkspaceNotFoundDefaultError } from 'src/engine/core-modules/workspace/workspace.exception'; import { PermissionsException, @@ -16,7 +16,7 @@ import { } from 'src/engine/metadata-modules/permissions/permissions.exception'; import { TwentyORMManager } from 'src/engine/twenty-orm/twenty-orm.manager'; import { WorkspaceMemberPreQueryHookService } from 'src/modules/workspace-member/query-hooks/workspace-member-pre-query-hook.service'; -import { type WorkspaceMemberWorkspaceEntity } from 'src/modules/workspace-member/standard-objects/workspace-member.workspace-entity'; +import { WorkspaceMemberWorkspaceEntity } from 'src/modules/workspace-member/standard-objects/workspace-member.workspace-entity'; @WorkspaceQueryHook({ key: `workspaceMember.deleteOne`, @@ -27,8 +27,8 @@ export class WorkspaceMemberDeleteOnePostQueryHook { constructor( private readonly twentyORMManager: TwentyORMManager, - @InjectRepository(UserWorkspace) - private readonly userWorkspaceRepository: Repository, + @InjectRepository(UserWorkspaceEntity) + private readonly userWorkspaceRepository: Repository, private readonly workspaceMemberPreQueryHookService: WorkspaceMemberPreQueryHookService, ) {} diff --git a/packages/twenty-server/src/modules/workspace-member/query-hooks/workspace-member-pre-query-hook.service.ts b/packages/twenty-server/src/modules/workspace-member/query-hooks/workspace-member-pre-query-hook.service.ts index b2530396ab3..57d918c7597 100644 --- a/packages/twenty-server/src/modules/workspace-member/query-hooks/workspace-member-pre-query-hook.service.ts +++ b/packages/twenty-server/src/modules/workspace-member/query-hooks/workspace-member-pre-query-hook.service.ts @@ -2,7 +2,7 @@ import { Injectable } from '@nestjs/common'; import { isDefined } from 'twenty-shared/utils'; -import { type ApiKey } from 'src/engine/core-modules/api-key/api-key.entity'; +import { type ApiKeyEntity } from 'src/engine/core-modules/api-key/api-key.entity'; import { PermissionFlagType } from 'src/engine/metadata-modules/permissions/constants/permission-flag-type.constants'; import { PermissionsException, @@ -26,7 +26,7 @@ export class WorkspaceMemberPreQueryHookService { workspaceMemberId?: string; targettedWorkspaceMemberId?: string; workspaceId: string; - apiKey?: ApiKey | null; + apiKey?: ApiKeyEntity | null; }) { if (isDefined(apiKey)) { return; diff --git a/packages/twenty-server/src/modules/workspace-member/query-hooks/workspace-member-query-hook.module.ts b/packages/twenty-server/src/modules/workspace-member/query-hooks/workspace-member-query-hook.module.ts index 40a350e4a5d..3cdc44877ff 100644 --- a/packages/twenty-server/src/modules/workspace-member/query-hooks/workspace-member-query-hook.module.ts +++ b/packages/twenty-server/src/modules/workspace-member/query-hooks/workspace-member-query-hook.module.ts @@ -2,7 +2,7 @@ import { Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; import { FeatureFlagModule } from 'src/engine/core-modules/feature-flag/feature-flag.module'; -import { UserWorkspace } from 'src/engine/core-modules/user-workspace/user-workspace.entity'; +import { UserWorkspaceEntity } from 'src/engine/core-modules/user-workspace/user-workspace.entity'; import { PermissionsModule } from 'src/engine/metadata-modules/permissions/permissions.module'; import { WorkspaceMemberCreateManyPreQueryHook } from 'src/modules/workspace-member/query-hooks/workspace-member-create-many.pre-query.hook'; import { WorkspaceMemberCreateOnePreQueryHook } from 'src/modules/workspace-member/query-hooks/workspace-member-create-one.pre-query.hook'; @@ -33,7 +33,7 @@ import { WorkspaceMemberUpdateOnePreQueryHook } from 'src/modules/workspace-memb imports: [ FeatureFlagModule, PermissionsModule, - TypeOrmModule.forFeature([UserWorkspace]), + TypeOrmModule.forFeature([UserWorkspaceEntity]), ], }) export class WorkspaceMemberQueryHookModule {} diff --git a/packages/twenty-server/src/modules/workspace-member/query-hooks/workspace-member-update-one.pre-query.hook.ts b/packages/twenty-server/src/modules/workspace-member/query-hooks/workspace-member-update-one.pre-query.hook.ts index 78f45b557c6..4f5eb542be4 100644 --- a/packages/twenty-server/src/modules/workspace-member/query-hooks/workspace-member-update-one.pre-query.hook.ts +++ b/packages/twenty-server/src/modules/workspace-member/query-hooks/workspace-member-update-one.pre-query.hook.ts @@ -13,7 +13,7 @@ import { AuthExceptionCode, } from 'src/engine/core-modules/auth/auth.exception'; import { type AuthContext } from 'src/engine/core-modules/auth/types/auth-context.type'; -import { UserWorkspace } from 'src/engine/core-modules/user-workspace/user-workspace.entity'; +import { UserWorkspaceEntity } from 'src/engine/core-modules/user-workspace/user-workspace.entity'; import { WorkspaceMemberPreQueryHookService } from 'src/modules/workspace-member/query-hooks/workspace-member-pre-query-hook.service'; import { WorkspaceNotFoundDefaultError } from 'src/engine/core-modules/workspace/workspace.exception'; @@ -23,8 +23,8 @@ export class WorkspaceMemberUpdateOnePreQueryHook { constructor( private readonly workspaceMemberPreQueryHookService: WorkspaceMemberPreQueryHookService, - @InjectRepository(UserWorkspace) - private readonly userWorkspaceRepository: Repository, + @InjectRepository(UserWorkspaceEntity) + private readonly userWorkspaceRepository: Repository, ) {} async execute( diff --git a/packages/twenty-server/test/integration/metadata/suites/developers/api-keys.integration-spec.ts b/packages/twenty-server/test/integration/metadata/suites/developers/api-keys.integration-spec.ts index 02dd4b501db..316f05decdf 100644 --- a/packages/twenty-server/test/integration/metadata/suites/developers/api-keys.integration-spec.ts +++ b/packages/twenty-server/test/integration/metadata/suites/developers/api-keys.integration-spec.ts @@ -75,7 +75,7 @@ describe('apiKeysResolver (e2e)', () => { const response = await makeMetadataAPIRequest({ query: gql` - mutation CreateApiKey($input: CreateApiKeyDTO!) { + mutation CreateApiKey($input: CreateApiKeyInput!) { createApiKey(input: $input) { id name @@ -120,7 +120,7 @@ describe('apiKeysResolver (e2e)', () => { const response = await makeMetadataAPIRequest({ query: gql` - mutation CreateApiKey($input: CreateApiKeyDTO!) { + mutation CreateApiKey($input: CreateApiKeyInput!) { createApiKey(input: $input) { id name @@ -145,7 +145,7 @@ describe('apiKeysResolver (e2e)', () => { it('should update an API key successfully', async () => { const createResponse = await makeMetadataAPIRequest({ query: gql` - mutation CreateApiKey($input: CreateApiKeyDTO!) { + mutation CreateApiKey($input: CreateApiKeyInput!) { createApiKey(input: $input) { id name @@ -179,7 +179,7 @@ describe('apiKeysResolver (e2e)', () => { const updateResponse = await makeMetadataAPIRequest({ query: gql` - mutation UpdateApiKey($input: UpdateApiKeyDTO!) { + mutation UpdateApiKey($input: UpdateApiKeyInput!) { updateApiKey(input: $input) { id name @@ -217,7 +217,7 @@ describe('apiKeysResolver (e2e)', () => { it('should find a specific API key', async () => { const createResponse = await makeMetadataAPIRequest({ query: gql` - mutation CreateApiKey($input: CreateApiKeyDTO!) { + mutation CreateApiKey($input: CreateApiKeyInput!) { createApiKey(input: $input) { id name @@ -245,7 +245,7 @@ describe('apiKeysResolver (e2e)', () => { const apiKeyResponse = await makeMetadataAPIRequest({ query: gql` - query GetApiKey($input: GetApiKeyDTO!) { + query GetApiKey($input: GetApiKeyInput!) { apiKey(input: $input) { id name @@ -281,7 +281,7 @@ describe('apiKeysResolver (e2e)', () => { it('should revoke an API key successfully', async () => { const createResponse = await makeMetadataAPIRequest({ query: gql` - mutation CreateApiKey($input: CreateApiKeyDTO!) { + mutation CreateApiKey($input: CreateApiKeyInput!) { createApiKey(input: $input) { id name @@ -309,7 +309,7 @@ describe('apiKeysResolver (e2e)', () => { const revokeResponse = await makeMetadataAPIRequest({ query: gql` - mutation RevokeApiKey($input: RevokeApiKeyDTO!) { + mutation RevokeApiKey($input: RevokeApiKeyInput!) { revokeApiKey(input: $input) { id name diff --git a/packages/twenty-server/test/integration/metadata/suites/developers/webhooks.integration-spec.ts b/packages/twenty-server/test/integration/metadata/suites/developers/webhooks.integration-spec.ts index 90cf6b525e8..b9fb5151991 100644 --- a/packages/twenty-server/test/integration/metadata/suites/developers/webhooks.integration-spec.ts +++ b/packages/twenty-server/test/integration/metadata/suites/developers/webhooks.integration-spec.ts @@ -8,7 +8,7 @@ describe('webhooksResolver (e2e)', () => { if (createdWebhookId) { await makeMetadataAPIRequest({ query: gql` - mutation DeleteWebhook($input: DeleteWebhookDTO!) { + mutation DeleteWebhook($input: DeleteWebhookInput!) { deleteWebhook(input: $input) } `, @@ -55,7 +55,7 @@ describe('webhooksResolver (e2e)', () => { const response = await makeMetadataAPIRequest({ query: gql` - mutation CreateWebhook($input: CreateWebhookDTO!) { + mutation CreateWebhook($input: CreateWebhookInput!) { createWebhook(input: $input) { id targetUrl @@ -96,7 +96,7 @@ describe('webhooksResolver (e2e)', () => { const response = await makeMetadataAPIRequest({ query: gql` - mutation CreateWebhook($input: CreateWebhookDTO!) { + mutation CreateWebhook($input: CreateWebhookInput!) { createWebhook(input: $input) { id targetUrl @@ -121,7 +121,7 @@ describe('webhooksResolver (e2e)', () => { it('should update a webhook successfully', async () => { const createResponse = await makeMetadataAPIRequest({ query: gql` - mutation CreateWebhook($input: CreateWebhookDTO!) { + mutation CreateWebhook($input: CreateWebhookInput!) { createWebhook(input: $input) { id targetUrl @@ -155,7 +155,7 @@ describe('webhooksResolver (e2e)', () => { const updateResponse = await makeMetadataAPIRequest({ query: gql` - mutation UpdateWebhook($input: UpdateWebhookDTO!) { + mutation UpdateWebhook($input: UpdateWebhookInput!) { updateWebhook(input: $input) { id targetUrl @@ -188,7 +188,7 @@ describe('webhooksResolver (e2e)', () => { it('should find a specific webhook', async () => { const createResponse = await makeMetadataAPIRequest({ query: gql` - mutation CreateWebhook($input: CreateWebhookDTO!) { + mutation CreateWebhook($input: CreateWebhookInput!) { createWebhook(input: $input) { id targetUrl @@ -214,7 +214,7 @@ describe('webhooksResolver (e2e)', () => { const queryResponse = await makeMetadataAPIRequest({ query: gql` - query GetWebhook($input: GetWebhookDTO!) { + query GetWebhook($input: GetWebhookInput!) { webhook(input: $input) { id targetUrl @@ -248,7 +248,7 @@ describe('webhooksResolver (e2e)', () => { it('should delete a webhook successfully', async () => { const createResponse = await makeMetadataAPIRequest({ query: gql` - mutation CreateWebhook($input: CreateWebhookDTO!) { + mutation CreateWebhook($input: CreateWebhookInput!) { createWebhook(input: $input) { id targetUrl @@ -272,7 +272,7 @@ describe('webhooksResolver (e2e)', () => { const deleteResponse = await makeMetadataAPIRequest({ query: gql` - mutation DeleteWebhook($input: DeleteWebhookDTO!) { + mutation DeleteWebhook($input: DeleteWebhookInput!) { deleteWebhook(input: $input) } `, @@ -287,7 +287,7 @@ describe('webhooksResolver (e2e)', () => { const queryResponse = await makeMetadataAPIRequest({ query: gql` - query GetWebhook($input: GetWebhookDTO!) { + query GetWebhook($input: GetWebhookInput!) { webhook(input: $input) { id targetUrl