Update user friendly errors for translations (#15000)

Force msg typing instead of string for user friendly errors
This commit is contained in:
Félix Malfait
2025-10-09 18:17:32 +02:00
committed by GitHub
parent 660cd38f35
commit e577c2d746
124 changed files with 796 additions and 563 deletions
@@ -1,3 +1,4 @@
import { type I18n } from '@lingui/core';
import { assertUnreachable } from 'twenty-shared/utils';
import {
@@ -31,9 +32,9 @@ import {
import { WorkspaceMigrationBuilderExceptionV2 } from 'src/engine/workspace-manager/workspace-migration-v2/exceptions/workspace-migration-builder-exception-v2';
import { workspaceMigrationBuilderExceptionV2Formatter } from 'src/engine/workspace-manager/workspace-migration-v2/interceptors/workspace-migration-builder-exception-v2-formatter';
export const viewGraphqlApiExceptionHandler = (error: Error) => {
export const viewGraphqlApiExceptionHandler = (error: Error, i18n: I18n) => {
if (error instanceof WorkspaceMigrationBuilderExceptionV2) {
return workspaceMigrationBuilderExceptionV2Formatter(error);
return workspaceMigrationBuilderExceptionV2Formatter(error, i18n);
}
if (error instanceof ViewException) {
@@ -1,5 +1,14 @@
import { Catch, type ExceptionFilter } from '@nestjs/common';
import {
Catch,
type ExecutionContext,
type ExceptionFilter,
Injectable,
} from '@nestjs/common';
import { GqlExecutionContext } from '@nestjs/graphql';
import { SOURCE_LOCALE } from 'twenty-shared/translations';
import { I18nService } from 'src/engine/core-modules/i18n/i18n.service';
import { ViewFieldException } from 'src/engine/metadata-modules/view-field/exceptions/view-field.exception';
import { ViewFilterGroupException } from 'src/engine/metadata-modules/view-filter-group/exceptions/view-filter-group.exception';
import { ViewFilterException } from 'src/engine/metadata-modules/view-filter/exceptions/view-filter.exception';
@@ -18,7 +27,10 @@ import { WorkspaceMigrationBuilderExceptionV2 } from 'src/engine/workspace-manag
ViewSortException,
WorkspaceMigrationBuilderExceptionV2,
)
@Injectable()
export class ViewGraphqlApiExceptionFilter implements ExceptionFilter {
constructor(private readonly i18nService: I18nService) {}
catch(
exception:
| ViewException
@@ -28,7 +40,13 @@ export class ViewGraphqlApiExceptionFilter implements ExceptionFilter {
| ViewGroupException
| ViewSortException
| WorkspaceMigrationBuilderExceptionV2,
host: ExecutionContext,
) {
return viewGraphqlApiExceptionHandler(exception);
const gqlContext = GqlExecutionContext.create(host);
const ctx = gqlContext.getContext();
const userLocale = ctx.req?.locale ?? SOURCE_LOCALE;
const i18n = this.i18nService.getI18nInstance(userLocale);
return viewGraphqlApiExceptionHandler(exception, i18n);
}
}