mirror of
https://github.com/lingble/twenty.git
synced 2025-10-30 04:12:28 +00:00
7092 destroy connected account instead of soft deleting it (#7099)
- Create `destroyOne` endpoint - Call `destroyOne` when removing a `connectedAccount`
This commit is contained in:
@@ -6,7 +6,7 @@ import { useObjectMetadataItem } from '@/object-metadata/hooks/useObjectMetadata
|
|||||||
import { useObjectMetadataItems } from '@/object-metadata/hooks/useObjectMetadataItems';
|
import { useObjectMetadataItems } from '@/object-metadata/hooks/useObjectMetadataItems';
|
||||||
import { useGetRecordFromCache } from '@/object-record/cache/hooks/useGetRecordFromCache';
|
import { useGetRecordFromCache } from '@/object-record/cache/hooks/useGetRecordFromCache';
|
||||||
import { DEFAULT_MUTATION_BATCH_SIZE } from '@/object-record/constants/DefaultMutationBatchSize';
|
import { DEFAULT_MUTATION_BATCH_SIZE } from '@/object-record/constants/DefaultMutationBatchSize';
|
||||||
import { useDestroyManyRecordsMutation } from '@/object-record/hooks/useDestroyManyRecordMutation';
|
import { useDestroyManyRecordsMutation } from '@/object-record/hooks/useDestroyManyRecordsMutation';
|
||||||
import { getDestroyManyRecordsMutationResponseField } from '@/object-record/utils/getDestroyManyRecordsMutationResponseField';
|
import { getDestroyManyRecordsMutationResponseField } from '@/object-record/utils/getDestroyManyRecordsMutationResponseField';
|
||||||
import { useRecoilValue } from 'recoil';
|
import { useRecoilValue } from 'recoil';
|
||||||
import { isDefined } from '~/utils/isDefined';
|
import { isDefined } from '~/utils/isDefined';
|
||||||
|
|||||||
@@ -0,0 +1,84 @@
|
|||||||
|
import { useApolloClient } from '@apollo/client';
|
||||||
|
import { useCallback } from 'react';
|
||||||
|
|
||||||
|
import { triggerDeleteRecordsOptimisticEffect } from '@/apollo/optimistic-effect/utils/triggerDeleteRecordsOptimisticEffect';
|
||||||
|
import { useObjectMetadataItem } from '@/object-metadata/hooks/useObjectMetadataItem';
|
||||||
|
import { useObjectMetadataItems } from '@/object-metadata/hooks/useObjectMetadataItems';
|
||||||
|
import { useGetRecordFromCache } from '@/object-record/cache/hooks/useGetRecordFromCache';
|
||||||
|
import { useDestroyOneRecordMutation } from '@/object-record/hooks/useDestroyOneRecordMutation';
|
||||||
|
import { getDestroyOneRecordMutationResponseField } from '@/object-record/utils/getDestroyOneRecordMutationResponseField';
|
||||||
|
import { capitalize } from '~/utils/string/capitalize';
|
||||||
|
|
||||||
|
type useDestroyOneRecordProps = {
|
||||||
|
objectNameSingular: string;
|
||||||
|
refetchFindManyQuery?: boolean;
|
||||||
|
};
|
||||||
|
|
||||||
|
export const useDestroyOneRecord = ({
|
||||||
|
objectNameSingular,
|
||||||
|
}: useDestroyOneRecordProps) => {
|
||||||
|
const apolloClient = useApolloClient();
|
||||||
|
|
||||||
|
const { objectMetadataItem } = useObjectMetadataItem({
|
||||||
|
objectNameSingular,
|
||||||
|
});
|
||||||
|
|
||||||
|
const getRecordFromCache = useGetRecordFromCache({
|
||||||
|
objectNameSingular,
|
||||||
|
});
|
||||||
|
|
||||||
|
const { destroyOneRecordMutation } = useDestroyOneRecordMutation({
|
||||||
|
objectNameSingular,
|
||||||
|
});
|
||||||
|
|
||||||
|
const { objectMetadataItems } = useObjectMetadataItems();
|
||||||
|
|
||||||
|
const mutationResponseField =
|
||||||
|
getDestroyOneRecordMutationResponseField(objectNameSingular);
|
||||||
|
|
||||||
|
const destroyOneRecord = useCallback(
|
||||||
|
async (idToDestroy: string) => {
|
||||||
|
const deletedRecord = await apolloClient.mutate({
|
||||||
|
mutation: destroyOneRecordMutation,
|
||||||
|
variables: { idToDestroy },
|
||||||
|
optimisticResponse: {
|
||||||
|
[mutationResponseField]: {
|
||||||
|
__typename: capitalize(objectNameSingular),
|
||||||
|
id: idToDestroy,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
update: (cache, { data }) => {
|
||||||
|
const record = data?.[mutationResponseField];
|
||||||
|
|
||||||
|
if (!record) return;
|
||||||
|
|
||||||
|
const cachedRecord = getRecordFromCache(record.id, cache);
|
||||||
|
|
||||||
|
if (!cachedRecord) return;
|
||||||
|
|
||||||
|
triggerDeleteRecordsOptimisticEffect({
|
||||||
|
cache,
|
||||||
|
objectMetadataItem,
|
||||||
|
recordsToDelete: [cachedRecord],
|
||||||
|
objectMetadataItems,
|
||||||
|
});
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
return deletedRecord.data?.[mutationResponseField] ?? null;
|
||||||
|
},
|
||||||
|
[
|
||||||
|
apolloClient,
|
||||||
|
destroyOneRecordMutation,
|
||||||
|
getRecordFromCache,
|
||||||
|
mutationResponseField,
|
||||||
|
objectMetadataItem,
|
||||||
|
objectNameSingular,
|
||||||
|
objectMetadataItems,
|
||||||
|
],
|
||||||
|
);
|
||||||
|
|
||||||
|
return {
|
||||||
|
destroyOneRecord,
|
||||||
|
};
|
||||||
|
};
|
||||||
@@ -0,0 +1,39 @@
|
|||||||
|
import gql from 'graphql-tag';
|
||||||
|
|
||||||
|
import { useObjectMetadataItem } from '@/object-metadata/hooks/useObjectMetadataItem';
|
||||||
|
import { EMPTY_MUTATION } from '@/object-record/constants/EmptyMutation';
|
||||||
|
import { getDestroyOneRecordMutationResponseField } from '@/object-record/utils/getDestroyOneRecordMutationResponseField';
|
||||||
|
import { isUndefinedOrNull } from '~/utils/isUndefinedOrNull';
|
||||||
|
import { capitalize } from '~/utils/string/capitalize';
|
||||||
|
|
||||||
|
export const useDestroyOneRecordMutation = ({
|
||||||
|
objectNameSingular,
|
||||||
|
}: {
|
||||||
|
objectNameSingular: string;
|
||||||
|
}) => {
|
||||||
|
const { objectMetadataItem } = useObjectMetadataItem({
|
||||||
|
objectNameSingular,
|
||||||
|
});
|
||||||
|
|
||||||
|
if (isUndefinedOrNull(objectMetadataItem)) {
|
||||||
|
return { destroyOneRecordMutation: EMPTY_MUTATION };
|
||||||
|
}
|
||||||
|
|
||||||
|
const capitalizedObjectName = capitalize(objectMetadataItem.nameSingular);
|
||||||
|
|
||||||
|
const mutationResponseField = getDestroyOneRecordMutationResponseField(
|
||||||
|
objectMetadataItem.nameSingular,
|
||||||
|
);
|
||||||
|
|
||||||
|
const destroyOneRecordMutation = gql`
|
||||||
|
mutation DestroyOne${capitalizedObjectName}($idToDestroy: ID!) {
|
||||||
|
${mutationResponseField}(id: $idToDestroy) {
|
||||||
|
id
|
||||||
|
}
|
||||||
|
}
|
||||||
|
`;
|
||||||
|
|
||||||
|
return {
|
||||||
|
destroyOneRecordMutation,
|
||||||
|
};
|
||||||
|
};
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
import { capitalize } from '~/utils/string/capitalize';
|
||||||
|
|
||||||
|
export const getDestroyOneRecordMutationResponseField = (
|
||||||
|
objectNameSingular: string,
|
||||||
|
) => `destroy${capitalize(objectNameSingular)}`;
|
||||||
@@ -9,7 +9,7 @@ import {
|
|||||||
|
|
||||||
import { ConnectedAccount } from '@/accounts/types/ConnectedAccount';
|
import { ConnectedAccount } from '@/accounts/types/ConnectedAccount';
|
||||||
import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular';
|
import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular';
|
||||||
import { useDeleteOneRecord } from '@/object-record/hooks/useDeleteOneRecord';
|
import { useDestroyOneRecord } from '@/object-record/hooks/useDestroyOneRecord';
|
||||||
import { useTriggerGoogleApisOAuth } from '@/settings/accounts/hooks/useTriggerGoogleApisOAuth';
|
import { useTriggerGoogleApisOAuth } from '@/settings/accounts/hooks/useTriggerGoogleApisOAuth';
|
||||||
import { LightIconButton } from '@/ui/input/button/components/LightIconButton';
|
import { LightIconButton } from '@/ui/input/button/components/LightIconButton';
|
||||||
import { Dropdown } from '@/ui/layout/dropdown/components/Dropdown';
|
import { Dropdown } from '@/ui/layout/dropdown/components/Dropdown';
|
||||||
@@ -32,7 +32,7 @@ export const SettingsAccountsRowDropdownMenu = ({
|
|||||||
const navigate = useNavigate();
|
const navigate = useNavigate();
|
||||||
const { closeDropdown } = useDropdown(dropdownId);
|
const { closeDropdown } = useDropdown(dropdownId);
|
||||||
|
|
||||||
const { deleteOneRecord } = useDeleteOneRecord({
|
const { destroyOneRecord } = useDestroyOneRecord({
|
||||||
objectNameSingular: CoreObjectNameSingular.ConnectedAccount,
|
objectNameSingular: CoreObjectNameSingular.ConnectedAccount,
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -81,7 +81,7 @@ export const SettingsAccountsRowDropdownMenu = ({
|
|||||||
LeftIcon={IconTrash}
|
LeftIcon={IconTrash}
|
||||||
text="Remove account"
|
text="Remove account"
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
deleteOneRecord(account.id);
|
destroyOneRecord(account.id);
|
||||||
closeDropdown();
|
closeDropdown();
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
|
|||||||
@@ -9,11 +9,13 @@ import { IConnection } from 'src/engine/api/graphql/workspace-query-runner/inter
|
|||||||
import { WorkspaceQueryRunnerOptions } from 'src/engine/api/graphql/workspace-query-runner/interfaces/query-runner-option.interface';
|
import { WorkspaceQueryRunnerOptions } from 'src/engine/api/graphql/workspace-query-runner/interfaces/query-runner-option.interface';
|
||||||
import {
|
import {
|
||||||
CreateManyResolverArgs,
|
CreateManyResolverArgs,
|
||||||
|
DestroyOneResolverArgs,
|
||||||
FindManyResolverArgs,
|
FindManyResolverArgs,
|
||||||
FindOneResolverArgs,
|
FindOneResolverArgs,
|
||||||
} from 'src/engine/api/graphql/workspace-resolver-builder/interfaces/workspace-resolvers-builder.interface';
|
} from 'src/engine/api/graphql/workspace-resolver-builder/interfaces/workspace-resolvers-builder.interface';
|
||||||
|
|
||||||
import { GraphqlQueryCreateManyResolverService } from 'src/engine/api/graphql/graphql-query-runner/resolvers/graphql-query-create-many-resolver.service';
|
import { GraphqlQueryCreateManyResolverService } from 'src/engine/api/graphql/graphql-query-runner/resolvers/graphql-query-create-many-resolver.service';
|
||||||
|
import { GraphqlQueryDestroyOneResolverService } from 'src/engine/api/graphql/graphql-query-runner/resolvers/graphql-query-destroy-one-resolver.service';
|
||||||
import { GraphqlQueryFindManyResolverService } from 'src/engine/api/graphql/graphql-query-runner/resolvers/graphql-query-find-many-resolver.service';
|
import { GraphqlQueryFindManyResolverService } from 'src/engine/api/graphql/graphql-query-runner/resolvers/graphql-query-find-many-resolver.service';
|
||||||
import { GraphqlQueryFindOneResolverService } from 'src/engine/api/graphql/graphql-query-runner/resolvers/graphql-query-find-one-resolver.service';
|
import { GraphqlQueryFindOneResolverService } from 'src/engine/api/graphql/graphql-query-runner/resolvers/graphql-query-find-one-resolver.service';
|
||||||
import { LogExecutionTime } from 'src/engine/decorators/observability/log-execution-time.decorator';
|
import { LogExecutionTime } from 'src/engine/decorators/observability/log-execution-time.decorator';
|
||||||
@@ -64,4 +66,15 @@ export class GraphqlQueryRunnerService {
|
|||||||
|
|
||||||
return graphqlQueryCreateManyResolverService.createMany(args, options);
|
return graphqlQueryCreateManyResolverService.createMany(args, options);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@LogExecutionTime()
|
||||||
|
async destroyOne<ObjectRecord extends IRecord = IRecord>(
|
||||||
|
args: DestroyOneResolverArgs,
|
||||||
|
options: WorkspaceQueryRunnerOptions,
|
||||||
|
): Promise<ObjectRecord> {
|
||||||
|
const graphqlQueryDestroyOneResolverService =
|
||||||
|
new GraphqlQueryDestroyOneResolverService(this.twentyORMGlobalManager);
|
||||||
|
|
||||||
|
return graphqlQueryDestroyOneResolverService.destroyOne(args, options);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,33 @@
|
|||||||
|
import { Record as IRecord } from 'src/engine/api/graphql/workspace-query-builder/interfaces/record.interface';
|
||||||
|
import { WorkspaceQueryRunnerOptions } from 'src/engine/api/graphql/workspace-query-runner/interfaces/query-runner-option.interface';
|
||||||
|
import { DestroyOneResolverArgs } from 'src/engine/api/graphql/workspace-resolver-builder/interfaces/workspace-resolvers-builder.interface';
|
||||||
|
|
||||||
|
import { TwentyORMGlobalManager } from 'src/engine/twenty-orm/twenty-orm-global.manager';
|
||||||
|
|
||||||
|
export class GraphqlQueryDestroyOneResolverService {
|
||||||
|
private twentyORMGlobalManager: TwentyORMGlobalManager;
|
||||||
|
|
||||||
|
constructor(twentyORMGlobalManager: TwentyORMGlobalManager) {
|
||||||
|
this.twentyORMGlobalManager = twentyORMGlobalManager;
|
||||||
|
}
|
||||||
|
|
||||||
|
async destroyOne<ObjectRecord extends IRecord = IRecord>(
|
||||||
|
args: DestroyOneResolverArgs,
|
||||||
|
options: WorkspaceQueryRunnerOptions,
|
||||||
|
): Promise<ObjectRecord> {
|
||||||
|
const { authContext, objectMetadataItem } = options;
|
||||||
|
const repository =
|
||||||
|
await this.twentyORMGlobalManager.getRepositoryForWorkspace(
|
||||||
|
authContext.workspace.id,
|
||||||
|
objectMetadataItem.nameSingular,
|
||||||
|
);
|
||||||
|
|
||||||
|
const record = await repository.findOne({
|
||||||
|
where: { id: args.id },
|
||||||
|
});
|
||||||
|
|
||||||
|
await repository.delete(args.id);
|
||||||
|
|
||||||
|
return record as ObjectRecord;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,42 @@
|
|||||||
|
import { Injectable } from '@nestjs/common';
|
||||||
|
|
||||||
|
import { WorkspaceResolverBuilderFactoryInterface } from 'src/engine/api/graphql/workspace-resolver-builder/interfaces/workspace-resolver-builder-factory.interface';
|
||||||
|
import {
|
||||||
|
DestroyOneResolverArgs,
|
||||||
|
Resolver,
|
||||||
|
} from 'src/engine/api/graphql/workspace-resolver-builder/interfaces/workspace-resolvers-builder.interface';
|
||||||
|
import { WorkspaceSchemaBuilderContext } from 'src/engine/api/graphql/workspace-schema-builder/interfaces/workspace-schema-builder-context.interface';
|
||||||
|
|
||||||
|
import { GraphqlQueryRunnerService } from 'src/engine/api/graphql/graphql-query-runner/graphql-query-runner.service';
|
||||||
|
import { workspaceQueryRunnerGraphqlApiExceptionHandler } from 'src/engine/api/graphql/workspace-query-runner/utils/workspace-query-runner-graphql-api-exception-handler.util';
|
||||||
|
|
||||||
|
@Injectable()
|
||||||
|
export class DestroyOneResolverFactory
|
||||||
|
implements WorkspaceResolverBuilderFactoryInterface
|
||||||
|
{
|
||||||
|
public static methodName = 'destroyOne' as const;
|
||||||
|
|
||||||
|
constructor(
|
||||||
|
private readonly graphQLQueryRunnerService: GraphqlQueryRunnerService,
|
||||||
|
) {}
|
||||||
|
|
||||||
|
create(
|
||||||
|
context: WorkspaceSchemaBuilderContext,
|
||||||
|
): Resolver<DestroyOneResolverArgs> {
|
||||||
|
const internalContext = context;
|
||||||
|
|
||||||
|
return async (_source, args, context, info) => {
|
||||||
|
try {
|
||||||
|
return await this.graphQLQueryRunnerService.destroyOne(args, {
|
||||||
|
authContext: internalContext.authContext,
|
||||||
|
objectMetadataItem: internalContext.objectMetadataItem,
|
||||||
|
info,
|
||||||
|
fieldMetadataCollection: internalContext.fieldMetadataCollection,
|
||||||
|
objectMetadataCollection: internalContext.objectMetadataCollection,
|
||||||
|
});
|
||||||
|
} catch (error) {
|
||||||
|
workspaceQueryRunnerGraphqlApiExceptionHandler(error);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,4 +1,5 @@
|
|||||||
import { DestroyManyResolverFactory } from 'src/engine/api/graphql/workspace-resolver-builder/factories/destroy-many-resolver.factory';
|
import { DestroyManyResolverFactory } from 'src/engine/api/graphql/workspace-resolver-builder/factories/destroy-many-resolver.factory';
|
||||||
|
import { DestroyOneResolverFactory } from 'src/engine/api/graphql/workspace-resolver-builder/factories/destroy-one-resolver.factory';
|
||||||
import { RestoreManyResolverFactory } from 'src/engine/api/graphql/workspace-resolver-builder/factories/restore-many-resolver.factory';
|
import { RestoreManyResolverFactory } from 'src/engine/api/graphql/workspace-resolver-builder/factories/restore-many-resolver.factory';
|
||||||
import { UpdateManyResolverFactory } from 'src/engine/api/graphql/workspace-resolver-builder/factories/update-many-resolver.factory';
|
import { UpdateManyResolverFactory } from 'src/engine/api/graphql/workspace-resolver-builder/factories/update-many-resolver.factory';
|
||||||
|
|
||||||
@@ -21,6 +22,7 @@ export const workspaceResolverBuilderFactories = [
|
|||||||
DeleteOneResolverFactory,
|
DeleteOneResolverFactory,
|
||||||
UpdateManyResolverFactory,
|
UpdateManyResolverFactory,
|
||||||
DeleteManyResolverFactory,
|
DeleteManyResolverFactory,
|
||||||
|
DestroyOneResolverFactory,
|
||||||
DestroyManyResolverFactory,
|
DestroyManyResolverFactory,
|
||||||
RestoreManyResolverFactory,
|
RestoreManyResolverFactory,
|
||||||
];
|
];
|
||||||
@@ -38,6 +40,7 @@ export const workspaceResolverBuilderMethodNames = {
|
|||||||
DeleteOneResolverFactory.methodName,
|
DeleteOneResolverFactory.methodName,
|
||||||
UpdateManyResolverFactory.methodName,
|
UpdateManyResolverFactory.methodName,
|
||||||
DeleteManyResolverFactory.methodName,
|
DeleteManyResolverFactory.methodName,
|
||||||
|
DestroyOneResolverFactory.methodName,
|
||||||
DestroyManyResolverFactory.methodName,
|
DestroyManyResolverFactory.methodName,
|
||||||
RestoreManyResolverFactory.methodName,
|
RestoreManyResolverFactory.methodName,
|
||||||
],
|
],
|
||||||
|
|||||||
@@ -88,6 +88,10 @@ export interface RestoreManyResolverArgs<Filter = any> {
|
|||||||
filter: Filter;
|
filter: Filter;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export interface DestroyOneResolverArgs {
|
||||||
|
id: string;
|
||||||
|
}
|
||||||
|
|
||||||
export interface DestroyManyResolverArgs<Filter = any> {
|
export interface DestroyManyResolverArgs<Filter = any> {
|
||||||
filter: Filter;
|
filter: Filter;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
import { Module } from '@nestjs/common';
|
import { Module } from '@nestjs/common';
|
||||||
|
|
||||||
|
import { GraphqlQueryRunnerModule } from 'src/engine/api/graphql/graphql-query-runner/graphql-query-runner.module';
|
||||||
import { WorkspaceQueryRunnerModule } from 'src/engine/api/graphql/workspace-query-runner/workspace-query-runner.module';
|
import { WorkspaceQueryRunnerModule } from 'src/engine/api/graphql/workspace-query-runner/workspace-query-runner.module';
|
||||||
|
|
||||||
import { WorkspaceResolverFactory } from './workspace-resolver.factory';
|
import { WorkspaceResolverFactory } from './workspace-resolver.factory';
|
||||||
@@ -7,7 +8,7 @@ import { WorkspaceResolverFactory } from './workspace-resolver.factory';
|
|||||||
import { workspaceResolverBuilderFactories } from './factories/factories';
|
import { workspaceResolverBuilderFactories } from './factories/factories';
|
||||||
|
|
||||||
@Module({
|
@Module({
|
||||||
imports: [WorkspaceQueryRunnerModule],
|
imports: [WorkspaceQueryRunnerModule, GraphqlQueryRunnerModule],
|
||||||
providers: [...workspaceResolverBuilderFactories, WorkspaceResolverFactory],
|
providers: [...workspaceResolverBuilderFactories, WorkspaceResolverFactory],
|
||||||
exports: [WorkspaceResolverFactory],
|
exports: [WorkspaceResolverFactory],
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import { ObjectMetadataInterface } from 'src/engine/metadata-modules/field-metad
|
|||||||
|
|
||||||
import { DeleteManyResolverFactory } from 'src/engine/api/graphql/workspace-resolver-builder/factories/delete-many-resolver.factory';
|
import { DeleteManyResolverFactory } from 'src/engine/api/graphql/workspace-resolver-builder/factories/delete-many-resolver.factory';
|
||||||
import { DestroyManyResolverFactory } from 'src/engine/api/graphql/workspace-resolver-builder/factories/destroy-many-resolver.factory';
|
import { DestroyManyResolverFactory } from 'src/engine/api/graphql/workspace-resolver-builder/factories/destroy-many-resolver.factory';
|
||||||
|
import { DestroyOneResolverFactory } from 'src/engine/api/graphql/workspace-resolver-builder/factories/destroy-one-resolver.factory';
|
||||||
import { RestoreManyResolverFactory } from 'src/engine/api/graphql/workspace-resolver-builder/factories/restore-many-resolver.factory';
|
import { RestoreManyResolverFactory } from 'src/engine/api/graphql/workspace-resolver-builder/factories/restore-many-resolver.factory';
|
||||||
import { UpdateManyResolverFactory } from 'src/engine/api/graphql/workspace-resolver-builder/factories/update-many-resolver.factory';
|
import { UpdateManyResolverFactory } from 'src/engine/api/graphql/workspace-resolver-builder/factories/update-many-resolver.factory';
|
||||||
import { AuthContext } from 'src/engine/core-modules/auth/types/auth-context.type';
|
import { AuthContext } from 'src/engine/core-modules/auth/types/auth-context.type';
|
||||||
@@ -36,6 +37,7 @@ export class WorkspaceResolverFactory {
|
|||||||
private readonly createOneResolverFactory: CreateOneResolverFactory,
|
private readonly createOneResolverFactory: CreateOneResolverFactory,
|
||||||
private readonly updateOneResolverFactory: UpdateOneResolverFactory,
|
private readonly updateOneResolverFactory: UpdateOneResolverFactory,
|
||||||
private readonly deleteOneResolverFactory: DeleteOneResolverFactory,
|
private readonly deleteOneResolverFactory: DeleteOneResolverFactory,
|
||||||
|
private readonly destroyOneResolverFactory: DestroyOneResolverFactory,
|
||||||
private readonly updateManyResolverFactory: UpdateManyResolverFactory,
|
private readonly updateManyResolverFactory: UpdateManyResolverFactory,
|
||||||
private readonly deleteManyResolverFactory: DeleteManyResolverFactory,
|
private readonly deleteManyResolverFactory: DeleteManyResolverFactory,
|
||||||
private readonly restoreManyResolverFactory: RestoreManyResolverFactory,
|
private readonly restoreManyResolverFactory: RestoreManyResolverFactory,
|
||||||
@@ -58,6 +60,7 @@ export class WorkspaceResolverFactory {
|
|||||||
['createOne', this.createOneResolverFactory],
|
['createOne', this.createOneResolverFactory],
|
||||||
['updateOne', this.updateOneResolverFactory],
|
['updateOne', this.updateOneResolverFactory],
|
||||||
['deleteOne', this.deleteOneResolverFactory],
|
['deleteOne', this.deleteOneResolverFactory],
|
||||||
|
['destroyOne', this.destroyOneResolverFactory],
|
||||||
['updateMany', this.updateManyResolverFactory],
|
['updateMany', this.updateManyResolverFactory],
|
||||||
['deleteMany', this.deleteManyResolverFactory],
|
['deleteMany', this.deleteManyResolverFactory],
|
||||||
['restoreMany', this.restoreManyResolverFactory],
|
['restoreMany', this.restoreManyResolverFactory],
|
||||||
|
|||||||
@@ -105,6 +105,13 @@ export const getResolverArgs = (
|
|||||||
isNullable: false,
|
isNullable: false,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
case 'destroyOne':
|
||||||
|
return {
|
||||||
|
id: {
|
||||||
|
type: GraphQLID,
|
||||||
|
isNullable: false,
|
||||||
|
},
|
||||||
|
};
|
||||||
case 'updateMany':
|
case 'updateMany':
|
||||||
return {
|
return {
|
||||||
data: {
|
data: {
|
||||||
|
|||||||
@@ -23,6 +23,8 @@ export const getResolverName = (
|
|||||||
return `update${pascalCase(objectMetadata.nameSingular)}`;
|
return `update${pascalCase(objectMetadata.nameSingular)}`;
|
||||||
case 'deleteOne':
|
case 'deleteOne':
|
||||||
return `delete${pascalCase(objectMetadata.nameSingular)}`;
|
return `delete${pascalCase(objectMetadata.nameSingular)}`;
|
||||||
|
case 'destroyOne':
|
||||||
|
return `destroy${pascalCase(objectMetadata.nameSingular)}`;
|
||||||
case 'updateMany':
|
case 'updateMany':
|
||||||
return `update${pascalCase(objectMetadata.namePlural)}`;
|
return `update${pascalCase(objectMetadata.namePlural)}`;
|
||||||
case 'restoreMany':
|
case 'restoreMany':
|
||||||
|
|||||||
Reference in New Issue
Block a user