Create resolvers and controllers for core views (#13624)
Created: - Services - Resolvers - Controllers - Tests for services - Integration tests for GraphQL and Rest Updated the Rest API playground Added new feature flag `IS_CORE_VIEW_ENABLED` Updated `viewFilter` `operand` and `view` `type` to be enums rather than strings and generated migration file. Closes https://github.com/twentyhq/core-team-issues/issues/1259 --------- Co-authored-by: Félix Malfait <felix.malfait@gmail.com> Co-authored-by: Charles Bochet <charles@twenty.com>
This commit is contained in:
@@ -5,7 +5,7 @@ import { isDefined } from 'twenty-shared/utils';
|
||||
import { Repository } from 'typeorm';
|
||||
|
||||
import { ObjectRecordDiff } from 'src/engine/core-modules/event-emitter/types/object-record-diff';
|
||||
import { ViewField } from 'src/engine/metadata-modules/view/view-field.entity';
|
||||
import { ViewField } from 'src/engine/core-modules/view/entities/view-field.entity';
|
||||
import { ViewFieldWorkspaceEntity } from 'src/modules/view/standard-objects/view-field.workspace-entity';
|
||||
|
||||
@Injectable()
|
||||
|
||||
@@ -5,8 +5,8 @@ import { isDefined } from 'twenty-shared/utils';
|
||||
import { Repository } from 'typeorm';
|
||||
|
||||
import { ObjectRecordDiff } from 'src/engine/core-modules/event-emitter/types/object-record-diff';
|
||||
import { ViewFilterGroupLogicalOperator } from 'src/engine/metadata-modules/view/enums/view-filter-group-logical-operator';
|
||||
import { ViewFilterGroup } from 'src/engine/metadata-modules/view/view-filter-group.entity';
|
||||
import { ViewFilterGroup } from 'src/engine/core-modules/view/entities/view-filter-group.entity';
|
||||
import { ViewFilterGroupLogicalOperator } from 'src/engine/core-modules/view/enums/view-filter-group-logical-operator';
|
||||
import { ViewFilterGroupWorkspaceEntity } from 'src/modules/view/standard-objects/view-filter-group.workspace-entity';
|
||||
|
||||
@Injectable()
|
||||
|
||||
@@ -1,12 +1,14 @@
|
||||
import { Injectable } from '@nestjs/common';
|
||||
import { InjectRepository } from '@nestjs/typeorm';
|
||||
|
||||
import { ViewFilterOperand as SharedViewFilterOperand } from 'twenty-shared/types';
|
||||
import { isDefined } from 'twenty-shared/utils';
|
||||
import { Repository } from 'typeorm';
|
||||
|
||||
import { ObjectRecordDiff } from 'src/engine/core-modules/event-emitter/types/object-record-diff';
|
||||
import { ViewFilter } from 'src/engine/metadata-modules/view/view-filter.entity';
|
||||
import { ViewFilter } from 'src/engine/core-modules/view/entities/view-filter.entity';
|
||||
import { ViewFilterWorkspaceEntity } from 'src/modules/view/standard-objects/view-filter.workspace-entity';
|
||||
import { convertViewFilterOperandToCoreOperand } from 'src/modules/view/utils/convert-view-filter-operand-to-core-operand.util';
|
||||
import { transformViewFilterWorkspaceValueToCoreValue } from 'src/modules/view/utils/transform-view-filter-workspace-value-to-core-value';
|
||||
|
||||
@Injectable()
|
||||
@@ -33,6 +35,10 @@ export class ViewFilterSyncService {
|
||||
updateData[key] = transformViewFilterWorkspaceValueToCoreValue(
|
||||
diffValue.after,
|
||||
);
|
||||
} else if (key === 'operand' && diffValue.after) {
|
||||
updateData[key] = convertViewFilterOperandToCoreOperand(
|
||||
diffValue.after as SharedViewFilterOperand,
|
||||
);
|
||||
} else {
|
||||
updateData[key] = diffValue.after;
|
||||
}
|
||||
@@ -54,7 +60,9 @@ export class ViewFilterSyncService {
|
||||
id: workspaceViewFilter.id,
|
||||
fieldMetadataId: workspaceViewFilter.fieldMetadataId,
|
||||
viewId: workspaceViewFilter.viewId,
|
||||
operand: workspaceViewFilter.operand,
|
||||
operand: convertViewFilterOperandToCoreOperand(
|
||||
workspaceViewFilter.operand as SharedViewFilterOperand,
|
||||
),
|
||||
value: transformViewFilterWorkspaceValueToCoreValue(
|
||||
workspaceViewFilter.value,
|
||||
),
|
||||
|
||||
@@ -5,7 +5,7 @@ import { isDefined } from 'twenty-shared/utils';
|
||||
import { Repository } from 'typeorm';
|
||||
|
||||
import { ObjectRecordDiff } from 'src/engine/core-modules/event-emitter/types/object-record-diff';
|
||||
import { ViewGroup } from 'src/engine/metadata-modules/view/view-group.entity';
|
||||
import { ViewGroup } from 'src/engine/core-modules/view/entities/view-group.entity';
|
||||
import { ViewGroupWorkspaceEntity } from 'src/modules/view/standard-objects/view-group.workspace-entity';
|
||||
|
||||
@Injectable()
|
||||
|
||||
@@ -5,8 +5,8 @@ import { isDefined } from 'twenty-shared/utils';
|
||||
import { Repository } from 'typeorm';
|
||||
|
||||
import { ObjectRecordDiff } from 'src/engine/core-modules/event-emitter/types/object-record-diff';
|
||||
import { ViewSortDirection } from 'src/engine/metadata-modules/view/enums/view-sort-direction';
|
||||
import { ViewSort } from 'src/engine/metadata-modules/view/view-sort.entity';
|
||||
import { ViewSort } from 'src/engine/core-modules/view/entities/view-sort.entity';
|
||||
import { ViewSortDirection } from 'src/engine/core-modules/view/enums/view-sort-direction';
|
||||
import { ViewSortWorkspaceEntity } from 'src/modules/view/standard-objects/view-sort.workspace-entity';
|
||||
|
||||
@Injectable()
|
||||
|
||||
@@ -5,8 +5,9 @@ import { isDefined } from 'twenty-shared/utils';
|
||||
import { Repository } from 'typeorm';
|
||||
|
||||
import { ObjectRecordDiff } from 'src/engine/core-modules/event-emitter/types/object-record-diff';
|
||||
import { ViewOpenRecordIn } from 'src/engine/metadata-modules/view/enums/view-open-record-in';
|
||||
import { View } from 'src/engine/metadata-modules/view/view.entity';
|
||||
import { View } from 'src/engine/core-modules/view/entities/view.entity';
|
||||
import { ViewOpenRecordIn } from 'src/engine/core-modules/view/enums/view-open-record-in';
|
||||
import { ViewType } from 'src/engine/core-modules/view/enums/view-type.enum';
|
||||
import { ViewWorkspaceEntity } from 'src/modules/view/standard-objects/view.workspace-entity';
|
||||
|
||||
@Injectable()
|
||||
@@ -34,6 +35,9 @@ export class ViewSyncService {
|
||||
diffValue.after === 'SIDE_PANEL'
|
||||
? ViewOpenRecordIn.SIDE_PANEL
|
||||
: ViewOpenRecordIn.RECORD_PAGE;
|
||||
} else if (key === 'type') {
|
||||
updateData[key] =
|
||||
diffValue.after === 'table' ? ViewType.TABLE : ViewType.KANBAN;
|
||||
} else {
|
||||
updateData[key] = diffValue.after;
|
||||
}
|
||||
@@ -51,7 +55,7 @@ export class ViewSyncService {
|
||||
id: workspaceView.id,
|
||||
name: workspaceView.name,
|
||||
objectMetadataId: workspaceView.objectMetadataId,
|
||||
type: workspaceView.type,
|
||||
type: workspaceView.type === 'table' ? ViewType.TABLE : ViewType.KANBAN,
|
||||
key: workspaceView.key,
|
||||
icon: workspaceView.icon,
|
||||
position: workspaceView.position,
|
||||
|
||||
+30
@@ -0,0 +1,30 @@
|
||||
import { ViewFilterOperand as SharedViewFilterOperand } from 'twenty-shared/types';
|
||||
|
||||
import { ViewFilterOperand } from 'src/engine/core-modules/view/enums/view-filter-operand';
|
||||
|
||||
const operandMapping: Record<SharedViewFilterOperand, ViewFilterOperand> = {
|
||||
[SharedViewFilterOperand.Is]: ViewFilterOperand.IS,
|
||||
[SharedViewFilterOperand.IsNotNull]: ViewFilterOperand.IS_NOT_NULL,
|
||||
[SharedViewFilterOperand.IsNot]: ViewFilterOperand.IS_NOT,
|
||||
[SharedViewFilterOperand.LessThanOrEqual]:
|
||||
ViewFilterOperand.LESS_THAN_OR_EQUAL,
|
||||
[SharedViewFilterOperand.GreaterThanOrEqual]:
|
||||
ViewFilterOperand.GREATER_THAN_OR_EQUAL,
|
||||
[SharedViewFilterOperand.IsBefore]: ViewFilterOperand.IS_BEFORE,
|
||||
[SharedViewFilterOperand.IsAfter]: ViewFilterOperand.IS_AFTER,
|
||||
[SharedViewFilterOperand.Contains]: ViewFilterOperand.CONTAINS,
|
||||
[SharedViewFilterOperand.DoesNotContain]: ViewFilterOperand.DOES_NOT_CONTAIN,
|
||||
[SharedViewFilterOperand.IsEmpty]: ViewFilterOperand.IS_EMPTY,
|
||||
[SharedViewFilterOperand.IsNotEmpty]: ViewFilterOperand.IS_NOT_EMPTY,
|
||||
[SharedViewFilterOperand.IsRelative]: ViewFilterOperand.IS_RELATIVE,
|
||||
[SharedViewFilterOperand.IsInPast]: ViewFilterOperand.IS_IN_PAST,
|
||||
[SharedViewFilterOperand.IsInFuture]: ViewFilterOperand.IS_IN_FUTURE,
|
||||
[SharedViewFilterOperand.IsToday]: ViewFilterOperand.IS_TODAY,
|
||||
[SharedViewFilterOperand.VectorSearch]: ViewFilterOperand.VECTOR_SEARCH,
|
||||
};
|
||||
|
||||
export const convertViewFilterOperandToCoreOperand = (
|
||||
sharedOperand: SharedViewFilterOperand,
|
||||
): ViewFilterOperand => {
|
||||
return operandMapping[sharedOperand];
|
||||
};
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
import { ViewFilterValue } from 'src/engine/metadata-modules/view/types/view-filter-value.type';
|
||||
import { ViewFilterValue } from 'src/engine/core-modules/view/types/view-filter-value.type';
|
||||
|
||||
export const transformViewFilterWorkspaceValueToCoreValue = (
|
||||
value: string,
|
||||
|
||||
@@ -2,12 +2,12 @@ import { Module } from '@nestjs/common';
|
||||
import { TypeOrmModule } from '@nestjs/typeorm';
|
||||
|
||||
import { FeatureFlagModule } from 'src/engine/core-modules/feature-flag/feature-flag.module';
|
||||
import { ViewField } from 'src/engine/metadata-modules/view/view-field.entity';
|
||||
import { ViewFilterGroup } from 'src/engine/metadata-modules/view/view-filter-group.entity';
|
||||
import { ViewFilter } from 'src/engine/metadata-modules/view/view-filter.entity';
|
||||
import { ViewGroup } from 'src/engine/metadata-modules/view/view-group.entity';
|
||||
import { ViewSort } from 'src/engine/metadata-modules/view/view-sort.entity';
|
||||
import { View } from 'src/engine/metadata-modules/view/view.entity';
|
||||
import { ViewField } from 'src/engine/core-modules/view/entities/view-field.entity';
|
||||
import { ViewFilterGroup } from 'src/engine/core-modules/view/entities/view-filter-group.entity';
|
||||
import { ViewFilter } from 'src/engine/core-modules/view/entities/view-filter.entity';
|
||||
import { ViewGroup } from 'src/engine/core-modules/view/entities/view-group.entity';
|
||||
import { ViewSort } from 'src/engine/core-modules/view/entities/view-sort.entity';
|
||||
import { View } from 'src/engine/core-modules/view/entities/view.entity';
|
||||
import { ViewFieldListener } from 'src/modules/view/listeners/view-field.listener';
|
||||
import { ViewFilterGroupListener } from 'src/modules/view/listeners/view-filter-group.listener';
|
||||
import { ViewFilterListener } from 'src/modules/view/listeners/view-filter.listener';
|
||||
@@ -31,6 +31,7 @@ import { ViewService } from 'src/modules/view/services/view.service';
|
||||
),
|
||||
FeatureFlagModule,
|
||||
],
|
||||
|
||||
providers: [
|
||||
ViewService,
|
||||
ViewDeleteOnePreQueryHook,
|
||||
|
||||
Reference in New Issue
Block a user