twenty/packages/twenty-front
Félix Malfait b792d2a4d3
Add unique indexes and indexes for composite types (#7162)
Add support for indexes on composite fields and unicity constraint on
indexes

This pull request includes several changes across multiple files to
improve error handling, enforce unique constraints, and update database
migrations. The most important changes include updating error messages
for snack bars, adding a new command to enforce unique constraints, and
updating database migrations to include new fields and constraints.

### Error Handling Improvements:
*
[`packages/twenty-front/src/modules/error-handler/components/PromiseRejectionEffect.tsx`](diffhunk://#diff-e7dc05ced8e4730430f5c7fcd0c75b3aa723da438c26e0bef8130b614427dd9aL23-R23):
Updated error messages in `enqueueSnackBar` to use `error.message`
directly.
*
[`packages/twenty-front/src/modules/object-metadata/hooks/useFindManyObjectMetadataItems.ts`](diffhunk://#diff-74c126d6bc7a5ed6b63be994d298df6669058034bfbc367b11045f9f31a3abe6L44-R46):
Simplified error messages in `enqueueSnackBar`.
*
[`packages/twenty-front/src/modules/object-record/hooks/useFindDuplicateRecords.ts`](diffhunk://#diff-af23a1d99639a66c251f87473e63e2b7bceaa4ee4f70fedfa0fcffe5c7d79181L56-R58):
Simplified error messages in `enqueueSnackBar`.
*
[`packages/twenty-front/src/modules/object-record/hooks/useHandleFindManyRecordsError.ts`](diffhunk://#diff-da04296cbe280202a1eaf6b1244a30490d4f400411bee139651172c59719088eL22-R24):
Simplified error messages in `enqueueSnackBar`.

### New Command for Unique Constraints:
*
[`packages/twenty-server/src/database/commands/upgrade-version/0-31/0-31-enforce-unique-constraints.command.ts`](diffhunk://#diff-8337096c8c80dd2619a5ba691ae5145101f8ae0368a75192a050047e8c6ab7cbR1-R159):
Added a new command to enforce unique constraints on company domain
names and person emails.
*
[`packages/twenty-server/src/database/commands/upgrade-version/0-31/0-31-upgrade-version.command.ts`](diffhunk://#diff-20215e9981a53c7566e9cbff96715685125878f5bcb84fe461a7440f2e68f6fcR13-R14):
Integrated the new `EnforceUniqueConstraintsCommand` into the upgrade
process.
[[1]](diffhunk://#diff-20215e9981a53c7566e9cbff96715685125878f5bcb84fe461a7440f2e68f6fcR13-R14)
[[2]](diffhunk://#diff-20215e9981a53c7566e9cbff96715685125878f5bcb84fe461a7440f2e68f6fcR31)
[[3]](diffhunk://#diff-20215e9981a53c7566e9cbff96715685125878f5bcb84fe461a7440f2e68f6fcR64-R68)
*
[`packages/twenty-server/src/database/commands/upgrade-version/0-31/0-31-upgrade-version.module.ts`](diffhunk://#diff-da52814efc674c25ed55645f8ee2561013641a407f88423e705dd6c77b405527R7):
Registered the new `EnforceUniqueConstraintsCommand` in the module.
[[1]](diffhunk://#diff-da52814efc674c25ed55645f8ee2561013641a407f88423e705dd6c77b405527R7)
[[2]](diffhunk://#diff-da52814efc674c25ed55645f8ee2561013641a407f88423e705dd6c77b405527R24)

### Database Migrations:
*
[`packages/twenty-server/src/database/typeorm/metadata/migrations/1726757368824-migrationDebt.ts`](diffhunk://#diff-c450aeae7bc0ef4416a0ade2dc613ca3f688629f35d2a32f90a09c3f494febdcR1-R53):
Added a migration to update the `relationMetadata_ondeleteaction_enum`
and set default values.
*
[`packages/twenty-server/src/database/typeorm/metadata/migrations/1726757368825-addIsUniqueToIndexMetadata.ts`](diffhunk://#diff-8f1e14bd7f6835ec2c3bb39bcc51e3c318a3008d576a981e682f4c985e746fbfR1-R19):
Added a migration to include the `isUnique` field in `indexMetadata`.
*
[`packages/twenty-server/src/database/typeorm/metadata/migrations/1726762935841-addCompostiveColumnToIndexFieldMetadata.ts`](diffhunk://#diff-7c96b7276c7722d41ff31de23b2de4d6e09adfdc74815356ba63bc96a2669440R1-R19):
Added a migration to include the `compositeColumn` field in
`indexFieldMetadata`.
*
[`packages/twenty-server/src/database/typeorm/metadata/migrations/1726766871572-addWhereToIndexMetadata.ts`](diffhunk://#diff-26651295a975eb50e672dce0e4e274e861f66feb1b68105eee5a04df32796190R1-R14):
Added a migration to include the `indexWhereClause` field in
`indexMetadata`.

### GraphQL Exception Handling:
*
[`packages/twenty-server/src/engine/api/graphql/workspace-query-runner/utils/workspace-query-runner-graphql-api-exception-handler.util.ts`](diffhunk://#diff-58445eb362dc89e31107777d39b592d7842d2ab09a223012ccd055da325270a8R1-R4):
Enhanced exception handling for `QueryFailedError` to provide more
specific error messages for unique constraint violations.
[[1]](diffhunk://#diff-58445eb362dc89e31107777d39b592d7842d2ab09a223012ccd055da325270a8R1-R4)
[[2]](diffhunk://#diff-58445eb362dc89e31107777d39b592d7842d2ab09a223012ccd055da325270a8R23-R59)
*
[`packages/twenty-server/src/engine/api/graphql/workspace-resolver-builder/factories/create-many-resolver.factory.ts`](diffhunk://#diff-233d58ab2333586dd45e46e33d4f07e04a4b8adde4a11a48e25d86985e5a7943L58-R58):
Updated the `workspaceQueryRunnerGraphqlApiExceptionHandler` call to
include context.
*
[`packages/twenty-server/src/engine/api/graphql/workspace-resolver-builder/factories/create-one-resolver.factory.ts`](diffhunk://#diff-68b803f0762c407f5d2d1f5f8d389655a60654a2dd2394a81318655dcd44dc43L58-R58):
Updated the `workspaceQueryRunnerGraphqlApiExceptionHandler` call to
include context.

---------

Co-authored-by: Charles Bochet <charles@twenty.com>
2024-10-13 10:21:03 +02:00
..
__mocks__ Fix overlay scroll gaps (#4512) 2024-03-31 10:53:37 +02:00
.storybook Fix all broken CIs (#7439) 2024-10-05 00:23:23 +02:00
public Activate/Deactivate workflow and Discard Draft (#7022) 2024-09-25 18:09:31 +02:00
scripts feat: add SENTRY_RELEASE env (#4912) 2024-04-11 16:53:15 +02:00
src Add unique indexes and indexes for composite types (#7162) 2024-10-13 10:21:03 +02:00
.env.example Fix twenty-front performances (#6744) 2024-08-26 16:35:09 +02:00
.eslintrc-ci.cjs chore: enable no-console eslint rule for tests and stories (#4816) 2024-04-04 18:36:39 +02:00
.eslintrc.cjs Activate/Deactivate workflow and Discard Draft (#7022) 2024-09-25 18:09:31 +02:00
.gitignore Feat/put target object identifier on use activities (#4682) 2024-04-01 13:12:37 +02:00
.prettierignore Update twenty-front commands (#4667) 2024-04-17 18:06:02 +02:00
.swcrc Migrate to a monorepo structure (#2909) 2023-12-10 18:10:54 +01:00
codegen-metadata.cjs Serverless function UI (#6388) 2024-07-29 13:03:09 +02:00
codegen.cjs Serverless function UI (#6388) 2024-07-29 13:03:09 +02:00
index.html Migrate to a monorepo structure (#2909) 2023-12-10 18:10:54 +01:00
jest.config.ts Fix all broken CIs (#7439) 2024-10-05 00:23:23 +02:00
nyc.config.cjs Fix all broken CIs (#7439) 2024-10-05 00:23:23 +02:00
package.json Make main the new 0.32 canary 2024-10-12 17:48:20 +02:00
project.json Fix Storybook Build running out of memory (#7520) 2024-10-09 11:08:53 +02:00
README.md Migrate to a monorepo structure (#2909) 2023-12-10 18:10:54 +01:00
setupTests.ts Create new steps in workflow editor (#6764) 2024-08-30 15:51:36 +02:00
tsconfig.build.json added typechecking for all ts files (#6466) 2024-08-20 11:05:13 +02:00
tsconfig.dev.json added typechecking for all ts files (#6466) 2024-08-20 11:05:13 +02:00
tsconfig.json Activate/Deactivate workflow and Discard Draft (#7022) 2024-09-25 18:09:31 +02:00
tsconfig.spec.json fix: fix root start script (#5032) 2024-04-19 18:28:02 +02:00
tsconfig.storybook.json fix: fix root start script (#5032) 2024-04-19 18:28:02 +02:00
tsup.config.ts Fix frontend tests (#6585) 2024-08-09 08:38:01 +02:00
tsup.ui.index.tsx feat: implement new SnackBar design (#5515) 2024-05-23 12:19:50 +02:00
vite.config.ts removed @chakra-ui dependencies (#7004) 2024-09-14 16:55:17 +02:00

Run yarn dev while server running on port 3000