twentyhq / twenty

Building a modern alternative to Salesforce, powered by the community.
https://twenty.com
GNU Affero General Public License v3.0
15.71k stars 1.71k forks source link

Add exception handler on auto-resolvers #6264

Open thomtrp opened 1 month ago

thomtrp commented 1 month ago
greptile-apps[bot] commented 1 month ago

To add exception handling to auto-resolvers, follow these steps:

  1. Create a Custom Exception Handler:

    • Add a new utility function similar to remoteServerGraphqlApiExceptionHandler in /packages/twenty-server/src/engine/metadata-modules/remote-server/utils/remote-server-graphql-api-exception-handler.util.ts.
      
      import { ConflictError, InternalServerError, NotFoundError, UserInputError } from 'src/engine/core-modules/graphql/utils/graphql-errors.util';
      import { AutoResolverException, AutoResolverExceptionCode } from 'src/engine/metadata-modules/auto-resolver/auto-resolver.exception';

    export const autoResolverGraphqlApiExceptionHandler = (error: any) => { if (error instanceof AutoResolverException) { switch (error.code) { case AutoResolverExceptionCode.AUTO_RESOLVER_NOT_FOUND: throw new NotFoundError(error.message); case AutoResolverExceptionCode.INVALID_AUTO_RESOLVER_INPUT: throw new UserInputError(error.message); case AutoResolverExceptionCode.AUTO_RESOLVER_ALREADY_EXISTS: throw new ConflictError(error.message); default: throw new InternalServerError(error.message); } } throw error; };

  2. Integrate the Exception Handler in Resolvers:

    • Modify the auto-resolver methods in the relevant resolver file (e.g., /packages/twenty-server/src/engine/metadata-modules/auto-resolver/auto-resolver.resolver.ts) to use the new exception handler.
      
      import { autoResolverGraphqlApiExceptionHandler } from 'src/engine/metadata-modules/auto-resolver/utils/auto-resolver-graphql-api-exception-handler.util';

    @Resolver() export class AutoResolver { @Query(() => AutoResolverType) async getAutoResolver(@Args('id') id: string) { try { // Your existing logic } catch (error) { autoResolverGraphqlApiExceptionHandler(error); } } }

  3. Update Exception Handler Service:

    • Ensure the ExceptionHandlerService is configured to capture exceptions from auto-resolvers. This might involve updating /packages/twenty-server/src/integrations/exception-handler/exception-handler.module.ts if necessary.

References

/packages/twenty-server/src/engine/api/rest/errors/RestApiException.ts /packages/twenty-server/src/engine/utils/global-exception-handler.util.ts /packages/twenty-server/src/engine/integrations/exception-handler/hooks/use-exception-handler.hook.ts /packages/twenty-server/src/core/api-rest/api-rest.controller.utils.ts /packages/twenty-server/src/engine/api/graphql/metadata.module-factory.ts /packages/twenty-server/src/engine/metadata-modules/remote-server/remote-table/utils/remote-table-graphql-api-exception-handler.util.ts /packages/twenty-server/src/engine/metadata-modules/remote-server/remote-server.resolver.ts /packages/twenty-server/src/integrations/exception-handler/exception-handler.module.ts /packages/twenty-server/src/engine/metadata-modules/remote-server/utils/remote-server-graphql-api-exception-handler.util.ts /packages/twenty-server/src/filters/utils/global-exception-handler.util.ts

#### About Greptile This response provides a starting point for your research, not a precise solution. Help us improve! Please leave a ๐Ÿ‘ if this is helpful and ๐Ÿ‘Ž if it is irrelevant. [Ask Greptile](https://app.greptile.com/chat/github/twentyhq/twenty/main) ยท [Edit Issue Bot Settings](https://app.greptile.com/apps/github)