[Requires "warm" cache flush (no immediate downtime before flush)] Migrate viewGroup.fieldMetadataId -> view.mainGroupByFieldMetadataId (1/3) (#16206)

In this PR (1/3)
- introduce view.mainGroupByFieldMetadataId as the new reference
determining which fieldMetadataId is used in a grouped view, in order to
deprecate viewGroup.fieldMetadataId which creates inconsistencies.
view.mainGroupByFieldMetadataId is now filled at every view creation,
though not in use yet.
- Introduce a command to backfill view.mainGroupByFieldMetadataId for
existing views + delete all viewGroup.fieldMetadataId with a
fieldMetadataId that is not view.mainGroupByFieldMetadataId. (It should
concern 37 active workspaces)
- Temporarily disable the option to change a grouped view's
fieldMetadataId as for now it creates inconsistencies. This feature can
be reintroduced when we have done the full migration.

In a next PR
- (2/3) use view.mainGroupByFieldMetadataId instead of
viewGroup.fieldMetadataId. In FE we may keep viewGroup.fieldMetadataId
as a state (TBD). View groups will now be created / deleted as a side
effect of view's mainGroupByFieldMetadataId update.
- (3/3) remove viewGroup.fieldMetadataId

---------

Co-authored-by: Charles Bochet <charles@twenty.com>
This commit is contained in:
Marie
2025-12-02 16:31:07 +01:00
committed by GitHub
parent aa729a2a0a
commit 77409b6eb2
71 changed files with 484 additions and 99 deletions
@@ -689,6 +689,7 @@ export type CoreView = {
kanbanAggregateOperation?: Maybe<AggregateOperations>;
kanbanAggregateOperationFieldMetadataId?: Maybe<Scalars['UUID']>;
key?: Maybe<ViewKey>;
mainGroupByFieldMetadataId?: Maybe<Scalars['UUID']>;
name: Scalars['String'];
objectMetadataId: Scalars['UUID'];
openRecordIn: ViewOpenRecordIn;
@@ -963,6 +964,7 @@ export type CreateViewInput = {
kanbanAggregateOperation?: InputMaybe<AggregateOperations>;
kanbanAggregateOperationFieldMetadataId?: InputMaybe<Scalars['UUID']>;
key?: InputMaybe<ViewKey>;
mainGroupByFieldMetadataId?: InputMaybe<Scalars['UUID']>;
name: Scalars['String'];
objectMetadataId: Scalars['UUID'];
openRecordIn?: InputMaybe<ViewOpenRecordIn>;
@@ -4258,6 +4260,7 @@ export type UpdateViewInput = {
isCompact?: InputMaybe<Scalars['Boolean']>;
kanbanAggregateOperation?: InputMaybe<AggregateOperations>;
kanbanAggregateOperationFieldMetadataId?: InputMaybe<Scalars['UUID']>;
mainGroupByFieldMetadataId?: InputMaybe<Scalars['UUID']>;
name?: InputMaybe<Scalars['String']>;
openRecordIn?: InputMaybe<ViewOpenRecordIn>;
position?: InputMaybe<Scalars['Float']>;